СКД. Шаг 3. Используем макеты для оформления отчета

13.01.20

Разработка - Работа с интерфейсом

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

 

Введение. Описание задачи

Всем привет, всех с наступившим Новым 2020 годом! В данной статье я предлагаю вам разобрать такой интересный функционал как использование собственных макетов в системе СКД.  Отмечу, что за свою достаточно продолжительную практику (порядка 15 лет), я, наверное, всего пару-тройку раз встречал в чужих отчетах (не в типовых) использование данной возможности.

Сообщество приветствует чистоту и оптимизацию исполняемого кода обработок или отчетов, но могу точно сказать по своему опыту,  что в сотнях отчетах, прошедших через меня – я не встречал ни одного, который бы хотелось отности к категории "идеальный, по всем правилам", с которого бы хотелось взять пример. 99 % отчетов сделаны «на отвяжись» по принципу - работает, данные показывает, не важно сколько он там строится по времени. Но и многие пользователи даже не могут объяснить, как получается та или иная цифра в отчетах (особенно производственных). Хотя, система компоновки данных, по-моему мнению, - это даже пользовательский функционал в какой-то степени. Какие-либо «улучшения» отчета с использованием всех возможностей СКД – это что-то из ряда вон выходящее.

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

 

Подготовка отчета в СКД

Воспользуемся типовой конфигурацией Розница 2.2 на платформе предприятия 8.3.15.1700. Подготовим простой отчет для определения количества и суммы продаж по организации/кассе в разрезе дней за выбранный период.

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

В общем виде набор данных запрос выглядит вот так:

 

ВЫБРАТЬ
	ПродажиОбороты.Магазин КАК Магазин,
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.Период КАК Период,
	СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
	СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
	ОтчетОРозничныхПродажах.КассаККМ КАК КассаККМ,
	ПродажиОбороты.Склад КАК Склад,
	ОтчетОРозничныхПродажах.Дата КАК ДатаОтчета,
	ОтчетОРозничныхПродажах.Номер КАК НомерОтчета
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ДокументПродажи ССЫЛКА Документ.ОтчетОРозничныхПродажах) КАК ПродажиОбороты
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ПродажиОбороты.ДокументПродажи = ОтчетОРозничныхПродажах.Ссылка

СГРУППИРОВАТЬ ПО
	ПродажиОбороты.Магазин,
	ПродажиОбороты.Номенклатура,
	ПродажиОбороты.Период,
	ОтчетОРозничныхПродажах.КассаККМ,
	ПродажиОбороты.Склад,
	ОтчетОРозничныхПродажах.Дата,
	ОтчетОРозничныхПродажах.Номер

УПОРЯДОЧИТЬ ПО
	ДатаОтчета,
	НомерОтчета,
	КассаККМ,
	ПродажиОбороты.Номенклатура.Наименование

 

На закладке "Ресурсы" определим какие из полей являются ресурсами и выберем выражение расчета этого поля по другим колонкам.

Рис.1. Определяем ресурсы отчета.

 

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

Рис.2. Создаем параметр "Период" в отчете на основе дат начала и окончания.

 

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

Рис.3. Создаем саму таблицу отчета с выбранными полями.

 

В пользовательских настройках отчета включаем созданный нами параметр "Период":

Рис.4. Включаем в пользовательские настройки параметр "Период".

 

Все, самое основное выполнено - этого достаточно, чтобы отчет выводил информацию. Отчет выглядит вот так:

Рис.5. Сформированный отчет в СКД в "базовом варианте".

 

Обычно, на этом все и заканчивается. Но, я продолжу и перехожу к работе с собственными макетами в следующем разделе.

 

Реализация собственного макета оформления. Подготовка настроек

Начну с того, что создам копированием новый вариант настройки отчета. Пусть он называется "Основной1". В общем виде эта настройка выглядит вот так:

Рис.6. Настройка отчета для собственного макета.

 

Распишу каждую строку данной настройки:

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

Касса, НомерОтчета, Магазин, ДатаОтчета (СводныйЗаголовок) - в разрезе этой группы параметров (своего рода "фильтр") я буду отбирать данные продаж номенклатуры.

Далее, идут строки (в скобках я присваиваю персональное имя (правой кнопкой - "Установить имя...") каждой строке - ШапкаМ, СтрокаТаблицы, ИтогиТаблицы):

ДетальныеЗаписи (ШапкаМ)

ДетальныеЗаписи (СтрокаОтчета)

ДетальныеЗаписи (ИтогиТаблицы)

ДетальныеЗаписи - это "набор реквизитов", который будет использоваться в этом "блоке".

 

Наборы реквизитов для группировок такие:

Для (СводныйЗаголовок) - Касса, НомерОтчета, Магазин, ДатаОтчета,

для  (ШапкаМ) - реквизиты отсутствуют,

для (СтрокаОтчета) - Номенклатура, КоличествоОборот, СтоимостьОборот,

для (ИтогиТаблицы) - КоличествоОборот, СтоимостьОборот.

 

Везде снимаем галку "Авто".

 

Реализация собственного макета оформления. Рисуем новый макет

Переходим на закладку "Макеты" и начнем создавать требуемый макет. В итоговом виде, он выглядит вот так:

Рис.7. Настройка отчета для собственного макета.

 

Опишу процесс создания этого макета.

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

Все, макет нарисован. Он выглядит так как нам нужно.

Следующим шагом, в окне Макет - Область я создаю записи о ранее созданных группировках, попутно указывая значения их параметров. Это выглядит вот так:

Рис.8. Добавлена группировка "СводныйЗаголовок" и заполнены параметры макета для этой группировки.

 

Рис.9. В группировке "ИтогиТаблицы" используем параметры "КоличествоОборот" и "СтоимостьОборот".

 

Рис.10. "СтрокаОтчета" - основная группировка отчета - Номенклатура, СтоимостьОборот, КоличествоОборот.

 

СводныйЗаголовок, ИтогиТаблицы, СтрокаОтчета являются "Макетами группировки". ШапкаМ - это "Макет заголовка группировки", Период - это "Параметр".

Далее, к каждому макету привязываем область (см. рис.10). Область можно "накликать", удерживая кнопку "Ctrl".

К параметру "Период" я привязал целый шаблон.

Так, печатная форма в СКД нарисована, макеты группировок добавлены и их параметры заполнены, области привязаны, протестируем обработку, перейдя к следующему разделу.

 

Тестирование задачи

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

Проверим работоспособной каждой из них:

Запускаем предприятие, выбираем период и формируем отчет в настройке "Основная1" (с макетом), такая картина:

 

Рис.11. Отчет СКД с использованием макета.

 

В разрезе периода 01.08.2019 - 04.08.2019 (с общей выручкой), в разрезе касс (по выручке) и что наторговали и за сколько в разрезе каждой кассы.

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

 

Рис.12. Отчет СКД без использования макетов. Период использует шаблон.

 

Данные совпали, все работает. Переходим к разделу "Выводы".

 

 

Выводы

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

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

 

Рис.13. Выбор варианта настройки отчета.

 

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

Отмечу, что макеты "накликиваются" без написания кода. Отсюда делаю еще один вывод - написанный запрос (переданная таблица) в СКД - это уже 90% решения вашей типовой задачи - будь то отчет или "поток" печатных форм.

За исключением запроса (язык запросов) - в примере нет программирования.

Еще один плюс - это возможно "засунуть" в параметр шаблон-конструкцию, как сделано на примере параметра "период", где я использую шаблон <Дата: [ПЕРИОД] (выручка : [Выручка], руб.)> из макета.

 

Так. Пожалуй, Все. Пример использование макетов в СКД я описал из собственного опыта и постарался сделать данный материал как можно подробнее, надеюсь, что он вам будет полезен.

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

Спасибо, что дочитали статью до конца. Всем привет!

 

Предыдущие материалы

Так же, прошу посмотреть мои предыдущие статьи по использованию системы компоновки данных:

Лайфхак работы с СКД. Собираем отчет

СКД. Лайфхак №2. Собираем отчет еще удобнее

Обсудим планы обмена. Способы регистрации объектов к обмену

1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt

Методика независимой системы "Подписки на события"

 

макет СКД формирование отчета внешние функции компоновка данных

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61712    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

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

5000 руб.

14.01.2016    54320    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16625    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10568    745    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    9488    150    acces969    31    

115

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3582    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12013    1    5    

10
Отзывы
21. aximo 2027 24.04.22 15:06 Сейчас в теме
кому интересны подобные разработки и описание систем БСП - посетите телеграмм канал моего коллеги
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Cерый 25 14.01.20 09:10 Сейчас в теме
Отличная статья! Хотелось бы увидеть Ваши приемы работы с макетами, содержащими объединения нескольких колонок, как правило, добавляются только ограничения на порядок расположения столбцов.
olexi2012; VVi3ard; Жернов Виктор; sogesti; aximo; +5 Ответить
2. Jimbo 9 14.01.20 11:13 Сейчас в теме
Хорошая статья, но ложка дёгтя в бочку мёда :

УПОРЯДОЧИТЬ ПО
    ...
	ПродажиОбороты.Номенклатура.Наименование

когда уже будут бить розгами по рукам за такое
ivan1703; +1 Ответить
3. vic777tor 14.01.20 12:11 Сейчас в теме
(2)В запросе схемы СКД почти никогда не используют, секцию "УПОРЯДОЧИТЬ" - для этого существует закладка "Сортировка" в настройках.
Единственное, на мой взгляд, исключение - это если требуется чтобы при любых пользовательских настройках сохранялось заданное в тексте запроса упорядочивание по этому полю. Но в таком случае, для этого поля нужно снять возможность использования в сортировке.
Но и в этом случае флаг "Автоупорядочивание" в конструкторе запроса никто не отменял :)
4. TMV 14 15.01.20 09:59 Сейчас в теме
Какой вывод можно сделать сразу (я осторожно напишу) - возможный частичный отказ от внешних печатных форм документов.
А вы пробовали разбивать по страницам такой вывод печ.форм?
Ну и не всегда макет в СКД удается нарисовать в нужном виде из-за странного поведения самой СКД.
6. aximo 2027 15.01.20 10:31 Сейчас в теме
(4) разрыв страницы можно сделать, через параметр типа строка, и уже при обработке в ПриКомпоновке... заменять его на выражение ВывестиГоризонтальныйРазделительСтраниц() - как-то так.
7. TMV 14 15.01.20 16:49 Сейчас в теме
(6) конечно, похожти образом и делаем, но речь-то шла только о макете.
5. TMV 14 15.01.20 10:01 Сейчас в теме
Как вариант - это возможно запустить "поток" печатных форм документа или даже нескольких документов разного вида при условии корректного составления запроса или "правильной внешней" таблицы для передачи в СКД.
В ЗУП3 печать кадровых приказов реализована именно таким образом (через отчеты), но макет там нарисован не через СКД - интересно почему.
12. NoRazum 29 20.01.20 12:31 Сейчас в теме
(5) ЗУП3 это отдельная вселенная. Не надо её мешать с остальным миром 1С.
Алексей_mir2mb; +1 Ответить
8. ElenaNafty 15.01.20 17:11 Сейчас в теме
Добрый день! Спасибо за статью.
Не совсем поняла один момент: как СКД понимает, что в области "ИтогиТаблицы" выводятся именно итоговая сумма по "КоличествоОборот" и "СуммаОборот"?
Сумма собирается засчет того, что в детальных записях нет поля "Номенклатура"?
9. aximo 2027 15.01.20 17:42 Сейчас в теме
(8) почему я не написал Сумма(КоличествоОборот) и Сумма(СуммаОборот) в параметрах макета? видите самую первую картинку - там закладка "ресурсы" - там я указал как они рассчитываются (по всем полям)
10. ElenaNafty 15.01.20 21:13 Сейчас в теме
(9) Нет, вопрос был вот в чем. В параметрах макета и в "ИтогиТаблицы" и в "Строка" указаны параметры "КоличествоОборот" и "СуммаОборот". То есть одинаково. Но в одном случае выводится детальная запись, в другом - сумма.
Я уже в общем-то сама поняла почему. Потому что в первом случае ( в "ИтогиТаблицы") у нас в детальных записях отсутствует "Номенклатура". Соответственно, система суммирует данные ресурсов.
11. aximo 2027 16.01.20 04:02 Сейчас в теме
(10) да, вы сами объяснили
20. serg1983 20 13.04.22 09:11 Сейчас в теме
(11) вот что то итоги не получаются
13. Suslik_Johns 21.01.20 10:52 Сейчас в теме
Спасибо большое за труд! Красивый труд)! это именно то, что я искала!
Осталось разобраться со всем этим!
Алексей_mir2mb; aximo; +2 Ответить
14. gesk 03.08.20 16:22 Сейчас в теме
"Везде снимаем галку "Авто"." - автор, где это везде и что за галка?
Бьюсь уже полдня с этими макетами, "макет группировки", "макет заголовка группировки", шаманство. Ничегошеньки не выводится, ни одной буквочки.
Сделайте, пожалуйста, скриншоты диалоговых окон группировок. Тип группировки "Иерархия", "Только иерархия", "Без иерархии" - что указывать? А в детальных записях что указывать?
В макетах группировок типы макетов какие? Заголовок? Заголовок иерархии? Их там ещё 4 типа.
nlvhome; ivv1970; Crazy_Max; +3 Ответить
15. Жернов Виктор 7 22.04.21 13:59 Сейчас в теме
Спасибо Изложено о непростом механизме просто и понятно.
16. iD1n 11 23.06.21 20:15 Сейчас в теме
Спасибо автору! Раньше думал это темный лес, благодаря этой статье начало светлеть в лесу для меня)
17. Crazy_Max 82 14.09.21 10:13 Сейчас в теме
Постарались изложить максимально подробно, но... но не вышло. Совершенно непонятными остались кучи мелких вопросов.
Да и СКД, похоже, крепко глючит с этими макетами. Попытался для своего отчета накидать внешний вид, согласно данной статье, и получился почти нужный отчет, но СКД выводит какие-то лишние строки, или дублирует шапку таблицы, или еще что-нибудь выкидывает, и как понять поведение системы, остается загадкой.
18. SWG 19.10.21 08:07 Сейчас в теме
В Запросе ЛЕВОЕ СОЕДИНЕНИЕ не проверяется на ЕСТЬNULL
Сертификат "Спец по платформе" - НЕ СДАН!!
Двойка, иди домой
22. Altez50 1 13.09.22 17:04 Сейчас в теме
(18) В каком кейсе бахнет?
19. andrey80nik 3 11.11.21 18:08 Сейчас в теме
а как НЕ отображать "Шапку таблицы" если нет ни одной строки таблицы?
KoC_one; shusharu; +2 Ответить
21. aximo 2027 24.04.22 15:06 Сейчас в теме
кому интересны подобные разработки и описание систем БСП - посетите телеграмм канал моего коллеги
23. psa247 17 16.03.23 19:00 Сейчас в теме
Автор перескочил тему отрисовки своего макета, хотя это была основная цель этой статьи
juliacopper; eenik; LomayaZakat; +3 Ответить
24. juliacopper 15 27.02.24 16:43 Сейчас в теме
статья так себе, если бы автор реализовал такой же макет как Основной!
Оставьте свое сообщение