Как программно заполнить регламентированный отчет из внешней обработки в 1С:УПП?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В типовых конфигурациях на обычных формах (таких как «1С:Управление производственным предприятием 1.3» или «1С:Комплексная автоматизация 1.1») часть регламентированных бланков не имеет встроенных механизмов автозаполнения по данным информационной базы. При этом ручной ввод большого объема показателей занимает много времени. Разберем, как устроена подсистема регламентированной отчетности и какими способами можно заполнить такой отчет из внешней обработки.

Архитектура регламентированной отчетности на обычных формах

Для понимания принципа программного заполнения проанализируем, из каких объектов состоит подсистема регламентированных отчетов:

  1. Справочник РегламентированныеОтчеты — содержит список доступных видов отчетов, ссылки на метаданные конфигурации или внешние файлы бланков (.erf), а также список периодических форм.
  2. Объекты метаданных Отчет (или внешние файлы .erf) — отвечают за интерфейсную часть, макеты печатных бланков, визуальное отображение ячеек и выгрузку в форматы налоговых и статистических органов.
  3. Документ РегламентированныйОтчет — хранит факт формирования отчета за определенный период по конкретной организации. Сами введенные числовые и текстовые показатели сохраняются в реквизите ДанныеОтчета, который имеет тип ХранилищеЗначения.

Таким образом, когда пользователь нажимает кнопку «Сохранить» в бланке отчета, платформа упаковывает структуру показателей в ХранилищеЗначения и записывает новый документ РегламентированныйОтчет.

Способ 1. Прямое программное создание и запись документа «РегламентированныйОтчет»

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

Разберем по шагам, как сформировать и сохранить данные:

  1. Определяем точную структуру данных бланка. Для этого вручную создадим регламентированный отчет нужного вида, заполним несколько полей тестовыми цифрами и сохраним. Затем в отладчике извлечем структуру: ДокументОбъект.ДанныеОтчета.Получить(). Полученное дерево/структура показателей послужит точным шаблоном.
  2. Создаем новый документ РегламентированныйОтчет и заполняем его ключевые реквизиты: Организация, Период, Дата, ИсточникОтчета и ВыбраннаяФорма.
  3. Упаковываем структуру с новыми показателями в ХранилищеЗначения и записываем документ.

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


// 1. Создаем документ регламентированного отчета
НовыйОтчет = Документы.РегламентированныйОтчет.СоздатьДокумент();
НовыйОтчет.Дата = ТекущаяДата();
НовыйОтчет.Организация = ВыбраннаяОрганизация;
НовыйОтчет.Периодичность = Перечисления.Периодичность.Квартал;
НовыйОтчет.ДатаНачала = НачалоКвартала(РабочаяДата);
НовыйОтчет.ДатаОкончания = КонецКвартала(РабочаяДата);

// 2. Указываем ссылку на вид отчета и имя нужной формы бланка
НовыйОтчет.ИсточникОтчета = Справочники.РегламентированныеОтчеты.НайтиПоНаименованию("Форма 1-предприятие");
НовыйОтчет.ВыбраннаяФорма = "ФормаОтчета2024Кв1";
НовыйОтчет.Наименование = НовыйОтчет.ИсточникОтчета.Наименование;

// 3. Формируем структуру показателей отчета
СтруктураПоказателей = Новый Структура;
// Имена показателей берутся из макета формы отчета (например, П00001000101)
СтруктураПоказателей.Вставить("П00001000101", 154200.50);
СтруктураПоказателей.Вставить("П00001000201", 34500.00);
СтруктураПоказателей.Вставить("П00001000301", 188700.50);

// 4. Упаковываем показатели в хранилище и записываем
НовыйОтчет.ДанныеОтчета = Новый ХранилищеЗначения(СтруктураПоказателей, Новый СжатиеДанных(9));
НовыйОтчет.Записать(РежимЗаписиДокумента.Запись);

Способ 2. Заполнение формы отчета и открытие пользователю

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

Разберем по шагам алгоритм взаимодействия с формой:

  1. Получаем объект отчета через Отчеты[ИмяОтчета].Создать() или из внешнего файла.
  2. Получаем основную рабочую форму нужной редакции бланка.
  3. Инициализируем реквизиты формы (Организация, Период) и передаем рассчитанные суммы в структуру показателей формы (обычно мСтруктураПоказателей или напрямую в ячейки макета).
  4. Открываем готовую форму для пользователя.

Посмотрим на пример кода:


ИмяОтчета = "РегламентированныйОтчетСтатистикаФорма1Предприятие";
ОтчетОбъект = Отчеты[ИмяОтчета].Создать();

// Получаем форму нужной редакции
ФормаОтчета = ОтчетОбъект.ПолучитьФорму("ФормаОтчета2024Кв1");
ФормаОтчета.мОрганизация = ВыбраннаяОрганизация;
ФормаОтчета.мПериодичность = Перечисления.Периодичность.Квартал;
ФормаОтчета.мДатаНачала = НачалоКвартала(РабочаяДата);
ФормаОтчета.мДатаКонца = КонецКвартала(РабочаяДата);

// Открываем форму
ФормаОтчета.Открыть();

// Заполняем ячейки бланка (после открытия формы для корректной инициализации таблиц)
ФормаОтчета.мСтруктураПоказателей.П00001000101 = 154200.50;
ФормаОтчета.мСтруктураПоказателей.П00001000201 = 34500.00;

// Запускаем пересчет итоговых формул бланка, если процедура экспортная
// ФормаОтчета.Пересчитать();

Способ 3. Подключение доработанного отчета через справочник регламентированных отчетов

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

  1. Выгружаем требуемый отчет из конфигуратора во внешний файл .erf.
  2. В модуль формы отчета добавляем собственную процедуру автозаполнения (например, алгоритм сбора сумм из регистра бухгалтерии Хозрасчетный или регистров накопления) и привязываем её к стандартной кнопке «Заполнить».
  3. В справочнике РегламентированныеОтчеты для нужной строки меняем признак использования на «Файл» и загружаем доработанный .erf.

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

Важные технические особенности и нюансы

При реализации заполнения обратим внимание на следующие моменты:

  1. Именование показателей: В регламентированных отчетах ячейки имеют строгие имена формата П00001000101, П00002000203 и т.д. Узнать имя конкретной ячейки можно, открыв макет отчета в конфигураторе и посмотрев свойства ячейки (параметр «Имя»).
  2. Многострочные (динамические) разделы: Если раздел бланка позволяет пользователю добавлять произвольное число строк кнопкой «Добавить строку», данные в ХранилищеЗначения для этого раздела сериализуются в виде ТаблицыЗначений с строго регламентированным составом колонок.
  3. Расчет итогов при прямой записи в документ: При прямом заполнении через Документы.РегламентированныйОтчет формулы сложения строк автоматически базой данных не пересчитываются. Все итоговые и вычисляемые строки необходимо рассчитывать программно и записывать в соответствующие поля структуры самостоятельно.
← На главную