Как программно сформировать отчет в 1С СКД (8.3 и 8.2)
Как известно, с помощью Системы Компоновки Данных (СКД) в 1С 8.3 и 8.2 можно быстро построить отчет практически любой сложности. Простота и скорость создания отчета достигается удобным визуальным конструктором, который обеспечивает необходимый результат без написания кода. Но все же бывает необходимость «вмешаться» в работу конструктора и программно сформировать отчет.
Когда может потребоваться программный вывод отчета в 1С на СКД:
- программная установка параметров СКД;
- использование внешних данных в отчете;
- специфика табличного документа при выводе на печать;
- прочие нестандартные ситуации.
Предлагаю на примере рассмотреть, как можно сформировать отчет на СКД и заполнить его параметры программно.
Создадим новый внешний отчет. Напишем простейший запрос на примере 1С Бухгалтерия, который выводит начальный и конечный остатки и обороты по счету:
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Счет,
ХозрасчетныйОстаткиИОбороты.Субконто1,
ХозрасчетныйОстаткиИОбороты.Субконто2,
ХозрасчетныйОстаткиИОбороты.Субконто3,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаОборот
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , Счет = &Счет, , ) КАК ХозрасчетныйОстаткиИОбороты
Вот, как выглядит отчет в стандартном виде:
Теперь сформируем его программно. Для этого нам нужно добавить Основную Форму:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Добавим команду и кнопку на форме:
В действиях команды пропишем следующий код (читать код на сайте достаточно трудно, поэтому рекомендуем скачать уже готовый пример отчета и посмотреть код в нем):
Источник
Расшифровка СКД. Управляемые формы
Платформа 1С предоставляет возможность расшифровки из коробки, но только в том случае, если мы используем объект “Отчет” и его форму. Если мы выводим отчет на форме обработки – нам придется добавить немного кода.
Для начала создадим обработку, форму обработки и создадим реквизиты формы:
- Результат (ТабличныйДокумент)
- АдресРасшифровки (Строка(0))
- АдресХранилищаСКД (Строка(0))
На форме сделаем два элемента:
- Поле табличного документа “Результат” (ПутьКДанным – “Результат”)
- Кнопка “Обновить”
Пойдем от очень простого к простому.
Код кнопки “Обновить” будет таким:
И добавим процедуру:
Это минимум кода, который нам необходим, чтобы вывести отчет.
Тут-то и появляется вопрос “Куда делась расшифровка?”.
Для того, чтобы появилась расшифровка нам надо изменить нашу процедуру ОбновитьОтчетНаСервере:
Теперь мы добавили данные расшифровки в наш отчет.
Но и это еще не все. Если мы сформируем отчет у нас будет расшифровка. но вместо нее мы будем видеть цифры, как на скриншоте
Эту проблему я встречал достаточно часто на различных форумах. Но и это не проблема.
Достаточно создать событие “ОбработкаРасшифровки” для поля табличного документа со следующим кодом:
И передать данные расшифровки с сервера на клиент. Кстати именно для этого мы сделали два реквизита “АдресРасшифровки” и “АдресХранилищаСКД”.
Для этого опять изменим процедуру ОбновитьОтчетНаСервере и приведем ее вот к такому виду:
Теперь добавим процедуру для обработки вышеуказанного оповещения:
Видим, что мы уже почти все сделали. Отчет работает, выводит меню расшифровки и даже открывает ссылки справочников и документов. Осталось два вопроса:
- Как добавить стандартные функции (расшифровку, оформление, фильтрацию) в контекстное меню расшифровки?
- Как добавить нестандартные функции?
В отличии от открытия значений расшифровка и фильтрация требует повторного формирования отчета с заданными настройками.
Эти настройки нам нужно получить и вывести отчет уже с новыми настройками.
Конечный результат модуля формы
Для этого приведем процедуру ОбновитьОтчетНаСервере к такому виду:
А процедуру РезультатОбработкаРасшифровки_Продолжение к такому:
Подставляем параметры в отчет СКД
Если выводимый отчет имеет параметры – нам надо об этом тоже позаботиться.
Впрочем ничего сложно тут нет.
Предположим, что нам нужно установить параметр “Период” для отчета.
Перед тем как скомпановать результат нужно добавить одну строку:
Таким образом наша процедура примет следующий вид:
Все что я хотел рассказать и чем поделиться – подробно изложено в этой статье. Если у вас остались вопросы – добро пожаловать в комментарии.
Во вложении готовая обработка, в которой нужно указать имя отчета и нажать кнопку «Обновить». В результате будет выведен указанный отчет в поле табличного документа.
ВНИМАНИЕ. Если отчет требует установку параметров — воспользуйтесь инструкцией, которую я описал выше.
Обработка тестировалась на версии платформы 8.3.10.2466
Источник
Вывод вариантов СКД в таблицы на управляемой форме
Забегая вперед: если бы подобный запрос с компоновщиком был всего один, то задача бы существенно упростилась:
- Создаем новый внешний отчет
- В нем формируем нужную основную СКД
- Далее на форме используем стандартный компоновщик, который уже имеет свой набор вариантов отчета, и самое главное: стандартную интерактивную «рулилку вариантов»: когда можно добавить/удалить/сохранить вариант.
- Создаем отчет с СКД
- Создаем новую форму, либо пользуемся конструктором и выкидываем ненужные элементы
- На форме выкладываем то, что нужно для отбора СКД: это могут быть «параметры данных» и «отбор» СКД:
- Для управления вариантами отчета можно сделать подменю и перетянуть в него стандартные команды:
- В режиме 1С-предприятия результат будет примерно таким:
- Создаем ТЗ в конфигураторе на форме: предположим, что это простая таблица с 1-ой стандартной колонкой «Пометка» (на форме будет таблица с галочкой)
- Для вывода в ТЗ Используется «нехитрый» код, исполняющий результат СКД в объект ТЗ, а затем выводящий полученное ТЗ на форму отчета
Далее можно сохранять/создавать варианты отчета и на основании этих настроек заполнять данные в ТЗ на форме.
Как говорится: это была присказка, а теперь сказка 😉
Отбор СКД на форме для нескольких запросов
Создаем новую обработку, назовем например «ВариантыТест»; предположим что 2 нужных запроса ранее были составлены в консоли запросов и помещены в СКД. Названия СКД «МакетСКДдляДДС», «МакетСКДдляНачисления»
- Для начала определимся с переменными обработки
- ДатаРасчета: дата сбора остатков в запросах. Чтобы не загромождать форму, параметры данных решено на нее не «вывешивать», достаточно 1-ой даты: реквизита обработки. В дополнение донастроим СКД, добавив в нее 1 параметр «ДатаРасчета», дабы не мучаться с установкой дат вида «31.12.2018 23:59:59», а устанавливать начало/конец дня без времени. В данном случае остатки берутся на начало месяца (01.01.2019):
- Таблицы значений на форме по СКД. называться могут произвольным образом, нужны только чтобы по окончанию установки всех отборов по специальной кнопке вида «Сформировать» «залить» в них результат СКД. Допустим что мы хотим каждую строку отметить флагом: добавляем 1 колонку «Пометка», остальные колонки создадутся динамически из запроса:
- Набор реквизитов на каждую СКД. При этом каждый реквизит состоит из префикса и наименования СКД, название реквизита строго соотвествует шаблону » _ »
- a) Компоновщики настроек — префикс «Компоновщик»
- b)Таблицы с ранее сохраненными вариантами настроек — префикс «Варианты»
- c) Описание состояния настроек СКД — префикс «Изменения»: -ничего не делать, «Изменено» — отбор изменен (нужно сохранить), «Сохранить» — признак сохранения варианта перед закрытием.
- «СКДСписок»: вспомогательный списочек макетов СКД по обработке для программных дейсвий на стороне клиента или сервера и исключения дублей кода.
Общий наглядный вид созданных реквизитов приведен на рисунке:
2. Действия при открытии формы обработки. При открытии сначала заполняются вспомогательные данные, после чего идет инициализация ранее сохраненных настроек компоновщиков. Если это 1-ый запуск обработки, то по сути ничего не сохранено, только считываются настройки из конфигуратора.
Общий принцип: в стандартное хранилище настроек пользователя по имени обработки и имени СКД сохраняется некая ТЗ, которая содержит список вариантов настроек, 1 из них «активный».
ПРИМЕЧАНИЕ: Полный программный код будет приведен в конце статьи.
3. Отбор СКД на форме. С целью удобства на форме использована отдельная закладка для отбора. Как ранее было упомянуто, параметры данных на форме не размещаем, параметр всего 1: дата Расчета. А отбор компоновки — это главный элемент, размещен на форме путем перетягивания из компоновщика-реквизита формы. Пример:
Далее на форме в режиме предприятия можно «крутить» отбор как угодно, насколько позволяет созданная СКД. При изменении настроек в форме будет отмечено, что настройки менялись — и при закрытии формы система спросит «Сохранить ли вариант», при этом откроется форма редактирования вариантов.
В текстовом поле по умолчанию ставится текущий активный вариант, но при желании можно изменить название (например «Основной1»), тогда с новыми настройками будет создан еще 1 вариант, а старый останется без изменений.
Если нажать «Продолжить редактирование«, то форма основная закрыта не будет, редактирование будет продолжено.
4. Выбор вариантов. Также по каждому отбору предусмотрен выбор ранее сохраненных вариантов, для этого создана специальная кнопка «Варианты. — Открыть», которая открывает форму просмотра, выбора, удаления сохраненных вариантов настроек.
По умолчанию на форме активен последний сохраненный/выбранный вариант, но если нужно выбрать другой вариант настроек — достаточно указать его в списке и нажать «Выбрать«. После этого в компоновщике установятся настройки выбранного варианта.
5. Удаление вариантов. Если выясняется, что какие-то варианты отбор были черновые, или просто по ошибке созданы: можно аналогично выбрать в меню «Варианты. — Открыть», затем выбрать «ненужный» вариант в списке и нажать «Удалить«. После этого из оставшихся вариантов выбрать любой, который станет активным. ПРИМЕЧАНИЕ: удалить можно только пользовательские варианты, стандартные, заданные в конфигураторе механизм удалить не позволяет.
6. Сохранение вариантов. Для сохранения варианта, который «только что отредактировали» сделано специальное меню «Варианты. — Сохранение», по которому открывается та же форма, которая появляется по кнопке «Открыть» или при закрытии формы.
При этом можно указать новое имя варианта, можно выбрать существующий — тогда он будет перезаписан.
7. Механизм управления вариантами. При кодировании/конфигурировании действий по работе с вариантами настроек, лучше по возможности избегать дублирования кода, так как функционал для всех СКД единый: команды, функции использовать также единые для всех, параметры определять исходя из названий элементов управления/команд.
В частности для управления выбором/сохранением/изменением настроек СКД на форме использованы всего 4 команды, простое подменю «Варианты. » на форме. А действия по сохранению/изменению осуществляют всего 2 команды, которые получают имя используемой СКД из названия команды:
Форма для управления настройками содержит 2 элемента управления «Список вариантов», «текущий вариант», 2 команды «Выбрать», «Продолжить редактирование».
Источник