Введение. Описание задачи
Всем привет, всех с наступившим Новым 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. Собираем отчет еще удобнее
Обсудим планы обмена. Способы регистрации объектов к обмену
Методика независимой системы "Подписки на события"