Печать таблицы значений или таблиц запроса через СКД

21.01.25

Разработка - Инструментарий разработчика

Практически каждый разработчик сталкивался в своей практике с потребностью вывести "табличку" на экран. Как правило, это требуется для целей отладки или анализа каких-то временных данных. Думаю, всем знакома такая задача. Предлагается очередное решение.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
авг_УниверсальнаяПечатьТаблиц
.epf 42,75Kb ver:1.8
6
6 Скачать (1 SM) Купить за 1 850 руб.
Универсальная печать таблиц (расширение)
.cfe 53,16Kb ver:1.8
8
8 Скачать (1 SM) Купить за 1 850 руб.

Upd: Версия 1.8 Исправлена синтаксическая ошибка в имени обработки. Исправлена работа с временными таблицами при печати таблиц запроса.

Цель данного решения в том, чтобы, чтобы код формирования таблицы был кратким и лаконичным, но в то же время если нужно, можно было настроить "практически все". 

Основные преимущества:

  • вывод с настройками "по умолчанию" с минимумом кода
  • возможность широкой настройки оформления таблицы 
  • расшифровка "по клику" даже при выводе в простой табличный документ
  • использование СКД как основы для формирования табличного документа
  • СКД формируется программно, т.е. структура данных может быть произвольной
  • возможность сохранения "в файл" без вывода на экран

Зачем

На первый взгляд кажется "зачем? проще сделать отчет СКД и не мучиться!". Отвечаю - здесь речь идет о работе с таблицей, структура данных которой неизвестна заранее. Например, таблица промежуточных результатов какого-то расчета. Под каждую таблицу свой отчет делать?

Самая простая таблица

Вот как выглядит простейший вызов печати таблицы значений с настройками "по умолчанию":

//ТабЗначений - Ваша таблица значений
ТД_Результат = Обработки.авг_УниверсальнаяПечатьТаблиц.ПечатьТаблицыЗначений(ТабЗначений,,"Простая таблица без настроек");

При исполнении такого кода таблица будет выглядеть так:

Вид напечатанной таблицы очень напоминает тот, если бы мы вручную сформировали СКД, создали набор данных "Объект", перечислили все колонки таблицы и сформировали отчет. Здесь все это можно сделать одной строчкой кода.

Чуть больше настроек. Ресурсы

Немного усложним. Пример таблицы, если необходимо выводить итоги по ресурсам.

ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("Ресурсы", "Ресурс1(Сумма),Остаток1(КоличествоРазличные),Оборот1(Количество)");

ТД_Результат = Обработки.авг_УнивельсальнаяПечатьТаблиц.ПечатьТаблицыЗначений(ТабЗначений, ПараметрыПечати, "Таблица с указанием ресурсов");

Код тоже не очень сложный. Просто перечисляем колонки ресурсов, в скобках указываем агрегатную функцию. Если агрегатная функция не указана, то используется "(Сумма)".

Группировки полей

Иногда требуется сгруппировать поля (не путать с группировками структуры СКД). Как правило требуется расположить какую-то группу полей вертикально. Такая возможность тоже реализована: 

ПараметрыПечати = Новый Структура;
	МассивГрупп = Новый Массив;
	МассивГрупп.Добавить("ОсновнаяАналитика1,Реквизит1,Измерение1#Измерения#Горизонтальная");
	МассивГрупп.Добавить("Ресурс1,Остаток1,Оборот1#Ресурсы");
ПараметрыПечати.Вставить("ГруппировкиПолей", МассивГрупп);

ТД_Результат = Обработки.авг_УнивельсальнаяПечатьТаблиц.ПечатьТаблицыЗначений(ТабЗначений, ПараметрыПечати, "Очень важная таблица");

По коду видно, что для описания настроек группировки используется строка вида:
"ИменаПолейЧерезЗапятую#ИмяГруппы#ВариантРасположения"

Если по какой-то причине нет возможности использовать "строчное" описание группировок, то можно описать структуру группировок используя массив структур. Правда в этом случае код получается гораздо более длинным

ПараметрыПечати = Новый Структура;
МассивГрупп = Новый Массив;

мПоля = Новый Массив;
мПоля .Добавить("Аналитика1");
мПоля .Добавить("Аналитика2");
мПоля .Добавить("Реквизит1");
мПоля .Добавить("Измерение1");
стГруппировки = Новый Структура("СоставГруппы, ЗаголовокГруппы, Расположение", мПоля, "Изменения", "Горизонтально"); 
МассивГрупп.Добавить(стГруппировки);

//вместо массива полей можно указать строку значений через зяпятую
МассивГрупп.Добавить(Новый Структура("СоставГруппы, ЗаголовокГруппы", "Ресурс1,Остаток1,Оборот1", "Ресурсы"));
//расположение Вертикально можно не указывать - это вариант группировки по умолчанию

ПараметрыПечати.Вставить("ГруппировкиПолей", МассивГрупп);
ТД_Результат = Обработки.авг_УнивельсальнаяПечатьТаблиц.ПечатьТаблицыЗначений(ТабЗначений, ПараметрыПечати, "Очень важная таблица");

 

Транспонирование

Иногда результирующая таблица имеет 1-2 строки и больше 20 колонок. Читать такую таблицу очень сложно. Приходится все время скролить вправо. Чтобы облегчить жизнь при таких ситуациях реализована возможность транспонирования (переворота) таблицы.

ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("Транспонировать", Истина);
ТД_Результат = Обработки.авг_УнивельсальнаяПечатьТаблиц.ПечатьТаблицыЗначений(ТабЗначений, ПараметрыПечати, "Очень важная таблица");

При перевороте таблицы можно дополнительно настроить имена заголовков строк, включить/выключить нумерацию строк, но делать этого не обязательно.

 

Если оформление не требуется

Реализована возможность выводить таблицу вообще без оформления. Можно скрыть заголовок, шапку, вообще любое оформление.

ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("МакетОформления", "БезОформления");
ПараметрыПечати.Вставить("СкрыватьШапку", Истина);

ТД_Результат = Обработки.авг_УнивельсальнаяПечатьТаблиц.ПечатьТаблицыЗначений(ТабЗначений, ПараметрыПечати, "");

 

"Полный фарш"

Для понимания количества настроек и объема кода при использовании всего набора ниже пример кода "полного фарша".

ТабЗначений = МояОченьВажнаяТаблица;

ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("Заголовок", "Очень важная таблица");
ПараметрыПечати.Вставить("ОписаниеТаблицы", "Пример вывода таблицы с группировками полей.
					|Аналитика, Реквизиты, Измерения - горизонтально
					|Ресурсы - вертикально");
	МассивСтруктур = Новый Массив;
	МассивСтруктур.Добавить("ОсновнаяАналитика1,ОсновнаяАналитика2#Аналитика#Горизонтально");
	МассивСтруктур.Добавить("Измерение1,Измерение2#Измерения#Горизнонтально");
	МассивСтруктур.Добавить("Реквизит1,Реквизит2,Реквизит5#Реквизиты#Горизонтально");
	МассивСтруктур.Добавить("Ресурс1,Остаток1,Оборот1#Ресурсы#Вертикально");
ПараметрыПечати.Вставить("ГруппировкиПолей", МассивСтруктур);
ПараметрыПечати.Вставить("Ресурсы", "Ресурс1(Сумма),Остаток1(Максимум),Оборот1(Минимум),Измерение1(КоличествоРазличные)");
ПараметрыПечати.Вставить("КолонкиРасшифровки", ",Измерение2");
ПараметрыПечати.Вставить("МакетОформления", "Зеленый");
ПараметрыПечати.Вставить("НачинатьАвтоГруппировку", Истина);
ПараметрыПечати.Вставить("УровеньЗаголовка", 1);
ПараметрыПечати.Вставить("УровеньТаблицы", 2);
ПараметрыПечати.Вставить("ЦветЗаголовка", Новый Цвет(165,42,42));
ПараметрыПечати.Вставить("Транспонировать", Истина);
	ПараметрыТранспонирования = Новый Структура;
	ПараметрыТранспонирования.Вставить("ИмяКолонкиИмен", "ИменаКолонок");
	ПараметрыТранспонирования.Вставить("ЗаголовокКолонкиИмен", "Показатели");
	ПараметрыТранспонирования.Вставить("ПрефиксИмениКолонкиСтрок", "Строка");
	ПараметрыТранспонирования.Вставить("ПрефиксЗаголовкаКолонкиСтрок", "Стр.");
	ПараметрыТранспонирования.Вставить("НумероватьЗаголовкиСтрок", Истина);
ПараметрыПечати.Вставить("ПараметрыТранспонирования", ПараметрыТранспонирования);

ТД_Результат = Обработки.авг_УнивельсальнаяПечатьТаблиц.ПечатьТаблицыЗначений(ТабЗначений, ПараметрыПечати,);

 

Слишком сложно. Слишком много настроек. Как это запомнить?

Чтобы было проще разобраться с настройками, в форме обработки добавлено что-то вроде "мастера", где можно выставить галочками нужные параметры и тут же сформировать результат, оценить как будет выглядеть.


 

По кнопке "Получить код" можно сгенерировать код ваших настроек при помощи "мастера". Останется только скопировать полученный в нужное место алгоритма.

 

С таблицей понятно, а как же запрос?

С запросом обстоит почти аналогично. На вход в процедуру печати подается объект "Запрос", в котором все должно быть готово для выполнения запроса. Должен быть заполнен текст запроса и установлены все параметры.

При выполнении печати запрос выполняется, его результат выводится в табличный документ. Для вывода результатов запроса используется функция печати таблиц. 

Пример кода для печати запроса "по умолчанию"

ТД_Результат = Обработки.авг_УниверсальнаяПечатьТаблицыЗначений.НапечататьЗапрос(Запрос,,"Общий заголовок запроса");

 

 

Как видно по рисунку, в запросе имеются две группы таблиц:

  • таблицы основного результата (результатов может быть больше одного)
  • временные таблицы

Настраивается внешний вид и необходимость вывода каждой группы. Заголовки, цвета, стили и т.д.

В форме также присутствует "мастер" настроек таблиц запроса:

 

 

Формирование кода по настройкам запроса также реализовано аналогично таблице.

 

Практика

В своей работе я постоянно использую этот инструмент. Именно исходя из своих потребностей я его и делал. Сначала использовал для возможности "заглянуть под капот" в сложных расчетах.

Но затем стал использовать все шире. Можно например вывести таблицу результатов обработки объектов не в сообщениях пользователю а в виде "кликабельного" табличного документа, который более удобный и наглядный, чем сообщение.

Можно использовать в отладке следующим образом:

  • в отладчике ставим точку останова перед выполнением запроса. Т.е. в том месте, где запрос полностью готов для исполнения
  • Используем конструкцию 
    Обработки.авг_УниверсальнаяПечатьТаблиц.СохранитьТаблицыЗапросаВФайл(Запрос, "C:\TMP\ТаблицыЗапроса.mxl", "ТаблицыЗапроса");
    В ответ придет структура со статусом и описанием ошибки (если она была).
    Если статус = истина, то можно смотреть таб.документ по адресу указанного файла.

Подключение и использование

Предполагается использовать обработку как "встроенную", т.е. включенную в состав Вашей конфигурации. Но если конфигурация находится на поддержке, предлагаю подключить расширение. Работать будет одинаково.

Описывать процесс подключения не вижу смысла, т.к. публикация предназначена прежде всего разработчикам, но модераторы Инфостарт часто требуют это, поэтому опишу тезисно:

Для встраивания в конфигурацию необходимо в режиме конфигуратора открыть окно конфигурации, в дереве метаданных найти "Обработки", правой кнопкой мыши вызвать меню "Вставить внешнюю обработку, отчет", затем указать файл обработки.

Для подключения расширения необходимо открыть окно конфигурации, главное меню Конфигурация / Расширения конфигурации. Добавить новое расширение. Оставить имя, синоним, назначение по умолчанию. Далее встать на новое расширение и в меню расширений: Действия / Конфигурация / Загрузить конфигурацию из файла, затем указать файл расширения

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.10.420, 3.1.7.404
  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.168.19, 3.0.150.33
  • Зарплата и управление персоналом, редакция 3.1, релизы 3.1.31.67, 3.1.28.60

обработка расширение печать универсальная запрос СКД временные таблицы таблица значений табличный документ

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    171545    960    403    

923

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14113    107    46    

107

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27200    96    48    

137

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17224    43    15    

75

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11863    45    27    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191113    1152    0    

920

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1097    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    104101    244    100    

307
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 167 21.01.25 20:22 Сейчас в теме
Скачал расширение, буду смотреть. Исправьте в расширении ошибку в названии.
3. Sam13 356 22.01.25 09:30 Сейчас в теме
(1) Не могу понять. В чем ошибка?
4. leosoft 167 22.01.25 11:10 Сейчас в теме
(3) В названии отчета ошибка
6. Sam13 356 22.01.25 11:40 Сейчас в теме
(4) Спасибо, увидел. Только в названии обработки, а не отчета.
Всю голову сломал пока искал отчет. Сейчас исправлю, еще раз спасибо.
7. leosoft 167 22.01.25 11:42 Сейчас в теме
(6) не только в названии обработки, но и в шапке отчета :)
2. 0x00 22.01.25 08:35 Сейчас в теме
5. leosoft 167 22.01.25 11:12 Сейчас в теме
Вопрос появился - как бы попроще прикрутить Ваш отчет к отладке запросов?
9. Sam13 356 22.01.25 14:41 Сейчас в теме
(5) Можно использовать в отладке следующим образом:

в отладчике ставим точку останова перед выполнением запроса. Т.е. в том месте, где запрос полностью готов для исполнения
Используем конструкцию
Обработки.авг_УниверсальнаяПечатьТаблиц.СохранитьТаблицыЗапросаВФайл(Запрос, "C:\TMP\ТаблицыЗапроса.mxl", "ТаблицыЗапроса");
В ответ придет структура со статусом и описанием ошибки (если она была).
Если статус = истина, то можно смотреть таб.документ по адресу указанного файла.
10. leosoft 167 22.01.25 16:02 Сейчас в теме
(9) А если установлено расширение? Тоже сработает?
11. Sam13 356 22.01.25 16:36 Сейчас в теме
(10) Ситуация: у Вас стандартная конфигурация и все доработки Вы выполняете в расширениях. У Вас уже установлены расширения "Расширение1", "Расширение2" и т.д.
Вы добавляете новое расширение "УниверсальнаяПечатьТаблиц". Затем в своем расширении "Расширение1" пробуете вызвать код: Обработки.авг_УниверсальнаяПечатьТаблицыЗначений.НапечататьЗапрос(.....)
И все будет нормально работать. Т.е. использовать одно расширение внутри другого вполне можно.
По крайней мере в моих тестах все прекрасно отрабатывало. Работало что внутри предприятия, что в отладке.
12. leosoft 167 22.01.25 16:41 Сейчас в теме
8. Sam13 356 22.01.25 14:22 Сейчас в теме
Исправил обработку и расширение. Все кто успел скачать - пишите в личку, вышлю обновленную версию
13. sultbec 10 25.01.25 16:32 Сейчас в теме
Зачем-то изобрели консоль запросов.
14. Sam13 356 26.01.25 00:28 Сейчас в теме
(13) Я не заявлял, что это замена или аналог консоли запросов. Консоль ИМБА, ее ничто не заменит. Но она нужна преимущественно для разработки/отладки своего запроса, а здесь больше про анализ уже каких-то готовых данных.
Допустим в коде выполняется большой сложный запрос, состоящий из кучи таблиц, который еще может собираться частями через менеджер. В консоль его запихнуть может быть очень сложно из-за временных таблиц, которые создались ранее не в этом запросе или могут быть внешние данные типа таблица значений. В общем собирать это все в консоли то еще приключение. Да, есть infostart toolkit, который умеет "собирать" такие запросы в консоль, но там все завязано на консоль. Получить просто табличный документ будет сложно.
Но если нет понимания зачем это нужно, значит в Вашей работе просто не встречались ситуации. Вот и все.
Ну и просто иногда нужно "быстренько" вывести какую-то несложную табличку в удобоваримом виде, не знаю, таблицу проведенных/обработанных объектов или таблицу пользователей с группами, да мало ли что.
15. sultbec 10 26.01.25 08:49 Сейчас в теме
(14) в моей консоли я так же вижу состав и содержимое таблиц.
16. Sam13 356 28.01.25 10:36 Сейчас в теме
(15) Ситуация: Вы не понимаете как сформировались движения документа, которые есть. Для того, чтобы понять как получен конечный результат можно посмотреть путь его формирования. Для большинства конфигураций на БСП нужно посмотреть запрос, который собирает данные и формирует таблицы для движений. Вы нашли место, где запрос формируется. Дальше Вы встаете в отладке в точке после выполнения отчета. Вам доступна переменная "Результат", содержащая кучу таблиц, как временных так и обычных результатов. Если таблиц 1-2, то их можно посмотреть в режиме отладки через просмотр значений. Но если их много, то это очень быстро надоедает. Мое решение позволяет облегчить задачу. Вы просто выполняете печать результата запроса в файл и анализируете все таблицы в одном таб.документе, причем будут выведены даже значения параметров при желании. Прежде чем что-то создавать я искал существующие работы - ничего такого нет. Да, можно вытащить запрос в консоль и попытаться там его выполнить. Но проблема с установкой параметров. Их может быть очень много. И они могут быть сложных типов.
17. sultbec 10 28.01.25 20:34 Сейчас в теме
(16) Наверное мы о разных версиях говорим. скачанная у меня работает так.
Прикрепленные файлы:
19. Sam13 356 29.01.25 21:51 Сейчас в теме
(17) Я понимаю, что почти любая версия консоли запросов дает возможность просмотра временных таблиц. В том числе та, которую используете Вы. Я в курсе этой возможности. Дело не в этом. Цель моей работы - в возможности напечатать таблицы прямо из кода. Не перенося его в консоль. Поставить точку останова, вызвать процедуру, получить результат в файле. Далее продолжить выполнение кода. Это нужно в целях отладки, но не в целях разработки. Кроме того я использую СКД и возможность оформления таблиц. Возможность оформления может пригодиться, если Вы будете показывать это пользователю или каким-то образом пользователь сам будет участвовать в формировании данных.
В любом случае, спасибо за интерес к моей работе, даже если она Вам не нравится. Я ценю любое мнение. На самом деле критические отзывы полезны, т.к. позволяют приоткрыть "шоры", которые возникают при разработке.
21. sultbec 10 30.01.25 04:47 Сейчас в теме
(19) Вот оно что.... по тексту описания этого не понятно.
У меня используется так:
в общем модуле есть функции, которые выводят временную таблицу из менеджера в таблицу значений. при остановке на точке останова, через окошко "вычислить выражение" можно как просмотреть таблицу, так и вывести ее в список.
22. Sam13 356 30.01.25 09:53 Сейчас в теме
(21) Да, все верно. В БСП такие возможности есть. И я ими тоже часто пользуюсь. Проблема возникает, когда запрос сложный, таблиц много и открывать их по одной через таблицу значений становится очень неудобно и неэффективно. Мой инструмент позволяет сделать почти то же самое, только получить комплексную картину - все таблицы в одном месте, идут одна за другой по порядку, к тому же выводятся все параметры запроса. Такие данные гораздо легче анализировать.
18. DEG156 28 29.01.25 17:48 Сейчас в теме
Плюсую. Скачал. Совет куда развивать - сортировка таблиц. Бывают большие таблицы с ТМЦ или Сотрудниками...
20. Sam13 356 29.01.25 21:52 Сейчас в теме
(18) Да, сортировку добавить не сложно. Сделаю, спасибо за совет.
Оставьте свое сообщение