Внутренности регламентированной отчетности

09.12.15

Разработка - Механизмы типовых конфигураций

Публикация по мотивам статьи http://infostart.ru/public/418967/. В комментариях задавали вопросы о внутренней структуре, что, собственно, и сподвигло оформить наработки в виде отдельной статьи.

Сразу напомню, что внутренние данные лучше не трогать без особой необходимости и понимания, что именно делаешь. База не упадет, но конкретный отчет может перестать открываться, и его придется создавать заново. У меня особая необходимость состоит в том, что много данных экспортируется из внешних систем. В бухгалтерии их просто нет, а вносить вручную достаточно затратно по времени. Плюс сама отчетность на управляемых формах плохо реализована, постоянно происходит передача данных с клиента на сервер. И если в маленькой форме это не проблема, то на форме с множеством дополнительных листов и строк даже переход с одного поля на другое занимает порой несколько десятков секунд.

Я всегда создаю новый регламентированный отчет вручную, чтобы корректно создались и заполнились все внутренние структуры, и только затем лезу в него с ножом своей обработкой, чтобы углубить, расширить и дополнить.

Рассмотрим внутреннюю структуру данных на примере декларации по налогу на прибыль, Лист 3А. С января 2015 года Лист 3А представляет из себя совмещенные два листа, собственно 3А и 3В. Лист 3В это лист с дополнительными строками.

 

Как выяснили из статьи, нам нужен документ «Регламентированный отчет». Пройдемся по его реквизитам, которые нас могут заинтересовать:

ИсточникОтчета – тип строка. Хранит наименование отчета, в том виде как он задан в конфигураторе. Для нашего примера: «РегламентированныйОтчетПрибыль».

ВыбраннаяФорма – с типом строка. Форма отчетности, для которой заполнены структуры. Как пример: «ФормаОтчета2015Кв1».

 

В реквизите ДанныеОтчета – хранилище значений, тут непосредственно хранится вся внутренняя информация по регламентированному отчету.

 

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

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

Получаем структуру с данными:

ДанныеОтчета = ДокументСсылка.ДанныеОтчета.Получить();

 

Особенно нас интересует раздел «ДанныеМногостраничныхразделов». Как видно на рисунке, ДанныеМногостраничныхразделов это структура, в которой ключ – строки, соответствующие листам в отчете и имеющие вид «Лист02», «Раздел1_1» и т.д., а значения – это таблица значений.

ДанныеОтчета

Получаем и опционально очищаем данные интересующего листа

ТаблицаСтраницРаздела = ДанныеОтчета.ДанныеМногостраничныхразделов.Лист03А;
ТаблицаСтраницРаздела.Очистить();

Таблица значений имеет следующие колонки:

Представление – строка с номером и наименованием листа.

Данные – структура, в ней хранится вся информация по листу.

ДанныеДопСтрок – таблица значений с данными по дополнительным строкам

Список листов на форме отчета

Список листов во внутренней структуре

 Лист03А Листы в отчете ДанныеМногостраничныхразделов Лист03А

 

 

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

 

ДанныеМногостраничныхРазделов

 

Добавляем новую страницу и заполняем

НоваяСтраница = ТаблицаСтраницРаздела.Добавить();
НоваяСтраница.Представление = "Лист " + Н + " (" + ВыборкаЭмитент.Эмитент + ")";
НоваяСтраница.АктивнаяСтраница = Ложь;
НоваяСтраница.АвтоматическоеПредставление = Истина;
ПоляРаздела = Новый Структура;
ПоляРаздела.Вставить("П000310000100", "2");   // Категория налогового агента
ПоляРаздела.Вставить("П000310000200", ВыборкаЭмитент.ЭмитентИНН);  // ИНН организации - эмитента ценных бумаг
ПоляРаздела.Вставить("П000310000300", ВыборкаЭмитент.ВидДивидендов); // Вид дивидендов

 

Данные дополнительных строк

С дополнительными строками все несколько запутанней. Они хранятся сразу в двух местах: в таблице значений ДанныеДопСтрок и структуре Данные.

Таблица состоит из колонок, имена которых, соответствуют именам ячеек в макете, но без символов «_1». Каждая строчка таблицы это отдельная дополнительная строка в отчете.

 ДанныеДопСтрок 

Создаем таблицу значений, обязательно типизированную. Типы значений нужно брать так же из макета.

ДанныеДопСтрок = Новый ТаблицаЗначений;
ДанныеДопСтрок.Колонки.Добавить("П000330000503", Новый ОписаниеТипов("Строка",,,, New StringQualifiers(10)));   //  ИНН получателя
ДанныеДопСтрок.Колонки.Добавить("П000330000504", Новый ОписаниеТипов("Строка",,,, New StringQualifiers(9)));    //  КПП
ДанныеДопСтрок.Колонки.Добавить("П000330000505", Новый ОписаниеТипов("Строка",,,, New StringQualifiers(2)));    // Тип 00 - первичная

Заполняем

сДопСтрока = ДанныеДопСтрок.Добавить();
сДопСтрока.П000330000503 = ВыборкаДетали.ИНН; //  ИНН получателя
сДопСтрока.П000330000504 = ВыборкаДетали.КПП;  //  КПП
сДопСтрока.П000330000505 = "00";      // Тип 00 - первичная

 Данные дополнительных строк также дублируются в структуре Данные. В формате: П000330000503_1 – первая строка, П000330000503_2 – вторая и т.д.

сНом = "_"+Формат(Ном, "ЧДЦ=; ЧГ=0");
ПоляРаздела.Вставить("П000330000503"+сНом, ВыборкаДетали.ИНН);  //  ИНН получателя
ПоляРаздела.Вставить("П000330000504"+сНом, ВыборкаДетали.КПП);  //  КПП
ПоляРаздела.Вставить("П000330000505"+сНом, "00");               // Тип 00 - первичная

 

После заполнения записываем получившиеся структуры данных в документ, а сам документ в базу:

НоваяСтраница.Данные = ПоляРаздела;
Попыка НоваяСтраница.ДанныеДопСтрок = ДанныеДопСтрок;
Исключение
КонецПопытки;

ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
ДокументОбъект.ДанныеОтчета = Новый ХранилищеЗначения(ДанныеОтчета);
Попытка
	ДокументОбъект.Записать();
Исключение
	Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
 

Печатные формы в регламентированной отчетности

Есть небольшой нюанс, в хранении отчетности. Некоторые отчеты хранят не форму для редактирования, а сразу готовую печатную форму в формате mxl. Например, «Регламентированный отчет НДС» именно так хранит формы книги покупок и продаж в базе данных. Как это реализовано?

Для хранения печатных форм используется регистр сведений  «Дополнительные файлы регламентированных отчетов». Выглядит он вот так:

ДополнительныеФайлыРегламентированныхОтчетов

Каким образом его правильно готовить?

Измерения:

РегламентированныйОтчет – ссылка на документ.

ВидДополнительногоФайла – текстовая строка. Как правило тут хранится наименование печатной формы. Для отчета «Регламентированный отчет НДС» имеет значения «ДанныеХХХ» и «ТабличныйДокументХХХ», где ХХХ – имя раздела, например: «Раздел8». Вид дополнительного файла зависит от отчета, так что

Единственный ресурс – СодержимоеФайла, с типом – хранилище значения. Здесь непосредственно хранится сам файл.

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

 

Пример записи:

Процедура СохранитьСведенияНДС(ИмяРаздела, ДокСсылка, АдресДанных, АдресТабличногоДокумента=Неопределено)
                ЗаписьРегистраСведений = РегистрыСведений.ДополнительныеФайлыРегламентированныхОтчетов.СоздатьМенеджерЗаписи();
                ЗаписьРегистраСведений.РегламентированныйОтчет = ДокСсылка;
                ЗаписьРегистраСведений.ВидДополнительногоФайла = "ТабличныйДокумент" + ИмяРаздела;
                ЗаписьРегистраСведений.СодержимоеФайла = Новый ХранилищеЗначения(АдресТабличногоДокумента);
                ЗаписьРегистраСведений.ИмяФайла = ИмяРаздела + ".mxl";
                ЗаписьРегистраСведений.Размер = 1;
                ЗаписьРегистраСведений.ДатаДобавления = ТекущаяДатаСеанса();
                ЗаписьРегистраСведений.Записать();
КонецПроцедуры

Заключение

Естесственно, к каждому отчету нужно подходить индивидуально, но общий принцип у всех один. И наработки по одному отчету можно по аналогии перенести на любой другой.

регламентированный отчет

См. также

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

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

20.08.2024    1738    PROSTO-1C    0    

18

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    1747    Vidz    0    

11

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    1106    olja-ljaaa    0    

3

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    4891    Serg2000mr    32    

108

Механизмы типовых конфигураций Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    1058    tango    5    

3
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. klinval 343 15.12.15 10:22 Сейчас в теме
Судя по вашей публикации вы уже грузили данные с внешних источников в отчёты. Мне сейчас это тоже предстоит. Оказывается новые отчеты "РегламентированныйОтчетРеестрНДСПриложение<Число от 1 до 14>" также как и "Декларация по НДС" держит отдельно данные (в виде структуры, где основное место занимает дерево значений) и табличный документ (в РС «ДополнительныеФайлыРегламентированныхОтчетов»).

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

Мне интересно: в других отчётах, как я понимаю, не используется РС «ДополнительныеФайлыРегламентированныхОтчетов», значит там всё сохраняется в структуру (точнее в ДанныеОтчета – хранилище значений, не суть) и при открытии отчёта из структуры данные идут в ТД?
shalupov61; +1 Ответить
2. defender 360 15.12.15 13:22 Сейчас в теме
(1) klinval, да регистр ДополнительныеФайлыРегламентированныхОтчетов используется в трех-четырех регламентированных отчетах. А остальные хранят только данные, и при открытии рег. отчета заполняют ими форму (табличный документ).
3. klinval 343 15.12.15 16:03 Сейчас в теме
(2)
А остальные хранят только данные, и при открытии рег. отчета заполняют ими форму (табличный документ).

Эх, мне похоже неповезло, т.к. в моём отчёте при открытии восстанавливается ранее сохраненный ТД, а не заполняется из данных... Хорошо хоть из ТД данные переходят в "ДанныеОтчета", а то в "декларации по НДС": ТД и данные, откуда потом берётся выгрузка в xml, вообще никак не связаны.
4. fomix 33 25.01.16 12:03 Сейчас в теме
При переходе с БП 2.0 на БП 3.0 программа ругалась на не уникальность записей в указаном в статье регистре сведений «Дополнительные файлы регламентированных отчетов». Пришлось зайти в необновленную базу БП 2.0, удалить все записи в данном регистре (благо их там было не так уж и много!), после чего обновился на БП 3.0.
Вопрос: в таком случае что-то нарушилось в "стройной" схеме 1С-ки и можно ли жить до следующего отчетного периода спокойно?
5. klinval 343 25.01.16 13:22 Сейчас в теме
(4) fomix, в РС указано к каким документам (регламентированным отчетам) относятся эти файлы. Если зайдёте в эти отчёты в БП 3.0 скорее что-то работать не будет: либо выгрузка в Xml, либо вообще отчёт не откроется (если табличный документ загружался из этих файлов).
Если опираться на то что я знаю: на новые отчёты скорее всего не повлияет... Хотя там схема такая, что я не удивлюсь если повлияет и на новые!
6. dnikolaev 179 17.05.16 16:56 Сейчас в теме
Спасибо огромное. у меня тоже все получилось с Вашей помощью
7. Synoecium 785 12.11.17 19:37 Сейчас в теме
Хорошее дополнение к статье про регл. очтетность. Пригодилось, спасибо :)
8. gucci76 366 23.10.19 13:38 Сейчас в теме
А почему рег отчеты нельзя сохранить как?
9. gucci76 366 24.10.19 13:48 Сейчас в теме
(8) Не знаю почему, но сделал расширение, которое разрешает сохранять ))))
10. graphbuh 259 25.10.19 09:47 Сейчас в теме
Всем привет!
А кто знает, в какое процедуре показатели выводятся в ячейки макета...
Например в ЗУП для РСВ есть показатель
П011110003001 он выводится в ячейки П011110003001_1 до П011110003001_9 и еще две на знаки после запятой....
Прикрепленные файлы:
12. graphbuh 259 25.10.19 12:31 Сейчас в теме +5 $m
(10) кто знает, в какое процедуре показатели выводятся в ячейки макета...
Например в ЗУП для РСВ есть показатель
П011110003001 он выводится в ячейки П011110003001_1 до П011110003001_9 и еще две на знаки после запятой
Прикрепленные файлы:
13. graphbuh 259 01.11.19 14:38 Сейчас в теме
14. Urmas 01.10.20 04:50 Сейчас в теме
(13)Будьте добры, напишите как Вы решили проблему
11. пользователь 25.10.19 09:48
Сообщение было скрыто модератором.
...
15. vse4590 11.02.21 05:25 Сейчас в теме
а теперь не листы добавлять надо, а ДанныеМногострочныхЧастей
и ИНН, например, теперь П0003ВМ100503 или П0003ВМ100503_1, все названия колонок надо менять? (или я не там смотрю)
и как не добавляя новый лист, добавить ДанныеМногострочныхЧастей
16. hasan-rusel 11 20.12.22 11:09 Сейчас в теме
А как после
ДокументОбъект.Записать();
Перечитать данные в РегОтчете ? Приходится закрывать форму и заного открывать.)
17. defender 360 20.12.22 11:37 Сейчас в теме
(16) Я всегда делал заполнение отдельной обработкой, соответственно такой вопрос не стоял. Но в меню "еще" есть Обновить. можно попробовать нажать
18. hasan-rusel 11 20.12.22 12:11 Сейчас в теме
19. defender 360 20.12.22 12:15 Сейчас в теме
(18) Серенькая такая, выше "Настройка.."
20. hasan-rusel 11 20.12.22 12:16 Сейчас в теме
(19) Серенькая, собака такая)
21. hasan-rusel 11 20.12.22 13:18 Сейчас в теме
22. hasan-rusel 11 20.12.22 15:26 Сейчас в теме
(16) Может кому пригодится. Надо было добавить экспортную процедуру Инициализация

ДокументОбъект.Записать();

Инициализация();
23. user1990613 28.03.24 13:19 Сейчас в теме
Добрый день. Можете подсказать, откуда берутся данные для заполнения 7 раздела декларации по ндс
Оставьте свое сообщение