В типовых конфигурациях на обычных формах (таких как «1С:Управление производственным предприятием 1.3» или «1С:Комплексная автоматизация 1.1») часть регламентированных бланков не имеет встроенных механизмов автозаполнения по данным информационной базы. При этом ручной ввод большого объема показателей занимает много времени. Разберем, как устроена подсистема регламентированной отчетности и какими способами можно заполнить такой отчет из внешней обработки.
Для понимания принципа программного заполнения проанализируем, из каких объектов состоит подсистема регламентированных отчетов:
РегламентированныеОтчеты — содержит список доступных видов отчетов, ссылки на метаданные конфигурации или внешние файлы бланков (.erf), а также список периодических форм.Отчет (или внешние файлы .erf) — отвечают за интерфейсную часть, макеты печатных бланков, визуальное отображение ячеек и выгрузку в форматы налоговых и статистических органов.РегламентированныйОтчет — хранит факт формирования отчета за определенный период по конкретной организации. Сами введенные числовые и текстовые показатели сохраняются в реквизите ДанныеОтчета, который имеет тип ХранилищеЗначения.Таким образом, когда пользователь нажимает кнопку «Сохранить» в бланке отчета, платформа упаковывает структуру показателей в ХранилищеЗначения и записывает новый документ РегламентированныйОтчет.
Рассмотрим наиболее производительный вариант, который подходит для фонового, пакетного или регламентного заполнения без участия пользователя.
Разберем по шагам, как сформировать и сохранить данные:
ДокументОбъект.ДанныеОтчета.Получить(). Полученное дерево/структура показателей послужит точным шаблоном.РегламентированныйОтчет и заполняем его ключевые реквизиты: Организация, Период, Дата, ИсточникОтчета и ВыбраннаяФорма.ХранилищеЗначения и записываем документ.Посмотрим на пример кода во внешней обработке:
// 1. Создаем документ регламентированного отчета
НовыйОтчет = Документы.РегламентированныйОтчет.СоздатьДокумент();
НовыйОтчет.Дата = ТекущаяДата();
НовыйОтчет.Организация = ВыбраннаяОрганизация;
НовыйОтчет.Периодичность = Перечисления.Периодичность.Квартал;
НовыйОтчет.ДатаНачала = НачалоКвартала(РабочаяДата);
НовыйОтчет.ДатаОкончания = КонецКвартала(РабочаяДата);
// 2. Указываем ссылку на вид отчета и имя нужной формы бланка
НовыйОтчет.ИсточникОтчета = Справочники.РегламентированныеОтчеты.НайтиПоНаименованию("Форма 1-предприятие");
НовыйОтчет.ВыбраннаяФорма = "ФормаОтчета2024Кв1";
НовыйОтчет.Наименование = НовыйОтчет.ИсточникОтчета.Наименование;
// 3. Формируем структуру показателей отчета
СтруктураПоказателей = Новый Структура;
// Имена показателей берутся из макета формы отчета (например, П00001000101)
СтруктураПоказателей.Вставить("П00001000101", 154200.50);
СтруктураПоказателей.Вставить("П00001000201", 34500.00);
СтруктураПоказателей.Вставить("П00001000301", 188700.50);
// 4. Упаковываем показатели в хранилище и записываем
НовыйОтчет.ДанныеОтчета = Новый ХранилищеЗначения(СтруктураПоказателей, Новый СжатиеДанных(9));
НовыйОтчет.Записать(РежимЗаписиДокумента.Запись);
Если перед сохранением пользователь должен визуально проверить цифры на бланке, рассмотрим вариант открытия формы отчета с программной передачей значений в элементы управления.
Разберем по шагам алгоритм взаимодействия с формой:
Отчеты[ИмяОтчета].Создать() или из внешнего файла.Организация, Период) и передаем рассчитанные суммы в структуру показателей формы (обычно мСтруктураПоказателей или напрямую в ячейки макета).Посмотрим на пример кода:
ИмяОтчета = "РегламентированныйОтчетСтатистикаФорма1Предприятие";
ОтчетОбъект = Отчеты[ИмяОтчета].Создать();
// Получаем форму нужной редакции
ФормаОтчета = ОтчетОбъект.ПолучитьФорму("ФормаОтчета2024Кв1");
ФормаОтчета.мОрганизация = ВыбраннаяОрганизация;
ФормаОтчета.мПериодичность = Перечисления.Периодичность.Квартал;
ФормаОтчета.мДатаНачала = НачалоКвартала(РабочаяДата);
ФормаОтчета.мДатаКонца = КонецКвартала(РабочаяДата);
// Открываем форму
ФормаОтчета.Открыть();
// Заполняем ячейки бланка (после открытия формы для корректной инициализации таблиц)
ФормаОтчета.мСтруктураПоказателей.П00001000101 = 154200.50;
ФормаОтчета.мСтруктураПоказателей.П00001000201 = 34500.00;
// Запускаем пересчет итоговых формул бланка, если процедура экспортная
// ФормаОтчета.Пересчитать();
Рассмотрим альтернативное решение, не требующее снятия конфигурации с поддержки:
.erf.Хозрасчетный или регистров накопления) и привязываем её к стандартной кнопке «Заполнить».РегламентированныеОтчеты для нужной строки меняем признак использования на «Файл» и загружаем доработанный .erf.В этом случае пользователи продолжают работать со штатным журналом регламентированных отчетов, но бланк получает полноценную кнопку автозаполнения.
При реализации заполнения обратим внимание на следующие моменты:
П00001000101, П00002000203 и т.д. Узнать имя конкретной ячейки можно, открыв макет отчета в конфигураторе и посмотрев свойства ячейки (параметр «Имя»).ХранилищеЗначения для этого раздела сериализуются в виде ТаблицыЗначений с строго регламентированным составом колонок.Документы.РегламентированныйОтчет формулы сложения строк автоматически базой данных не пересчитываются. Все итоговые и вычисляемые строки необходимо рассчитывать программно и записывать в соответствующие поля структуры самостоятельно.