gifts2017

Как устроена регламентированная отчетность в 1С

Опубликовал Яковлевич Никита (mrXoxot) в раздел Печать - Регламентированная отчетность

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

Содержание статьи:

Краткое описание

Формы отчета

Макеты

Бланки отчетности

Служебные макеты

Связанные с отчетом

Общие макеты

Механизм автозаполнения

Заполнение граф

Заполнение разделов

Заполнение строк

Расшифровка

Как хранится регламентированная отчетность

Служебные процедуры

Благодарность

Комментарии

 

 

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

Итак, начнем.

В устроении регламентированного отчета можно выделить три основные части:

  1. Формы отчета – Формы отчета используются для каждого варианта (редакции) отчета. Например, "ФормаОтчета2009Кв4" и "ФормаОтчета2015Кв1". Сами формы по внешнему виду не сильно отличаются друг от друга. Но в модуле формы содержатся процедуры, описывающие поведение формы и ее взаимодействие с другими составляющими регламентированного отчета. Также именно в форме описываются процедуры, обрабатывающие расчет авторасчитываемых и взаимосвязанных ячеек. Здесь же описывается обработка проверки контрольных соотношений. Формы одинаковые для всех конфигураций.
  2. Макеты – Это основная и самая важная часть регламентированного отчета. В макетах хранится всё, начиная от бланка отчета до схемы выгрузки. Макеты также разделяются по редакциям отчета, то есть для каждого нового варианта отчета будет использован свой комплект макетов. Например, "ФормаОтчета2009Кв4_Титульный" и "ФормаОтчета2015Кв1_Титульный". Макеты также одинаковые для всех конфигураций.
  3. Механизм автозаполнения – Сам принцип заполнения регламентированных отчетов един, но данные в каждой конфигурации могут браться из разных источников.

Рассмотрим подробнее каждую часть на примере отчета “Бухгалтерский баланс” в конфигурации "Бухгалтерия предприятия 3.0.42" (Отчеты.РегламентированныйОтчетБухОтчетность)

Формы отчета:

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

  • ФормаОтчета2011Кв1, ФормаОтчета2011Кв3, ФормаОтчета2011Кв4 – это формы, соответствующие редакциям отчетов, утвержденных Минфином России. В них отображаются бланки отчетности и содержатся описания алгоритмов заполнения показателей
    • Описание и применение этих форм можно посмотреть в модуле менеджера отчета в функции ТаблицаФормОтчета()
    • Для каждой формы используется свой механизм автозаполнения. Описывается он в общем модуле "РегламентированнаяОтчетностьПереопределяемый" в процедурах "ПолучитьСведенияОПоказателяхОтчета()" и “ЗаполнитьОтчет()” 

    "ВыборПечатнойФормы", "КонтрольныеСоотношения", "НастройкиОтчета" - это служебные формы. В принципе, названия форм говорит об их сути, поэтому не будем останавливаться на них подробнее. 

Макеты регламентированной отчетности.

Это самая важная часть отчета. Каждый отчет имеется множество макетов. Например, в бухгалтерском балансе их 56, а в Декларации по НДС - 77

 

Все макеты можно условно разбить на две группы:

  1. Макеты бланков отчетности. Эти макеты содержат в себе бланки регламентированной отчетности. Именно то, что видит пользователь, когда открывает тот или иной отчет. Каждый макет соответствует варианту отчета и конкретному разделу. К этим макетам также можно отнести и макеты, которые используются для отображения печатных форм регламентированной отчетности.
  2. Служебные макеты для описания структуры отчета и правил выгрузки. Эти макеты пользователь никогда не увидит, в них описываются составы показателей, схемы выгрузки и прочее.

Разберем подробнее макеты бланков отчетности.

Имена макетов и имена форм отчетов связаны, и связь эта осуществляется по имени формы.

Например, для формы “ФормаОтчета2011Кв4” связанные макеты будут следующие:

"ФормаОтчета2011Кв4_Баланс_2012Кв4_3", "ФормаОтчета2011Кв4_БалансНКО_2012Кв4_3" и так далее.

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

 

Рассмотрим устроение и описание ячеек такого макета на примере "ФормаОтчета2011Кв4Баланс"


В самом макете находится непосредственно бланк отчета, который выводится пользователю в форме отчета. Именно здесь в новых версиях регламентированной отчетности добавляются элементы управления в виде команд “Добавить строку”, “Настройка состава строк” и прочее. Каждая строка имеет своё уникальное имя области. Это нужно для того, чтобы отображать дополнительные строки, выбранные пользователем. В целом принцип вывода этого отчета не отличается от вывода обычной печатной формы.

Особое внимание стоит обратить на имена ячеек (имена областей показателей). Они используются при заполнении отчетности, а также описываются в служебных макетах.

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

Разберем алгоритм формирования имени ячейки:

Имя первой ячейки - П000100111004, его можно условно разбить на три составляющие П00010 | 01110 | 04.

В процедурах заполнения отчетности используется следующий алгоритм:

       ИмяОбластиПоказателя = "П00010" + НомерСтроки + Графа;

Где:

  • Первая группа - это общий идентификатор (он используется во всех макетах регламентированной отчетности).
  • Вторая группа - это номер строки (у нас это 1110 и плюс добавлен лидирующий ноль).
  • Третья группа - это номер графы (колонка макета по порядку, то есть если мы посмотрим на шапку таблицы, то увидим, что "Пояснения" - это первая колонка, "Наименование показателя" – вторая и “Код” - третья) Следующие графы соответствуют различным периодам (04 – текущий период, 05 – аналогичный период за прошлый год, 06 – аналогичный период два года назад).
Соответственно имя второй ячейки расшифровывается следующим образом - П00010 + код строки 11102 + Графа 05, соответствующая аналогичному периоду отчета за прошлый год. Также стоит отметить, что код подчиненной строки определяется исходя из кода родительской строки (у нас код родительской строки 1110, и соответственно код подчиненной строки 1110 2).
 

Дальше разберем служебные макеты:

Оставшиеся макеты можно условно разбить на две группы: связанные конкретно с данным вариантом отчета и общие для всех вариантов.

  • Связанные с данным отчетом:
 

Эти макеты объявляются в модуле формы в событии "ПриСозданииНаСервере": 

   // Имена вспомогательных макетов и форм.
    НастройкиФормы = Новый Структура;
    НастройкиФормы.Вставить("МакетСоставаПоказателей",           "СоставПоказателей2011Кв4");
    НастройкиФормы.Вставить("МакетНастройкиСоставаПоказателей",  "НастройкаСоставаПоказателей2011Кв4");
    НастройкиФормы.Вставить("МакетСтруктурыМногострочныхЧастей", "СтруктураМногострочныхЧастей2011Кв4");

Рассмотрим каждый макет подробнее:

 1) СоставПоказателей2011Кв4


 

В макете перечислены все показатели, которые используются в основных макетах регламентированной отчетности. В колонке "Код показателя по составу" указаны имена областей из основного макета Баланса. Причем указаны колонки не только числовые, но и строковые. Как отмечалось ранее, графы 04, 05, 06 используются непосредственно для вывода показателей и имеют числовой тип данных (Тип данных - Е), а графы 01, 02, 03 - это графы со строковым типом данных (Тип данных - С).

Колонка "Вариант заполнения" отвечает за то, как будет заполняться конкретная ячейка и как она будет окрашена. Желтые ячейки (0) – только ручное заполнение, Зеленые (4) – автоматически рассчитываемые ячейки, исходя из данных формы (авторасчет запускается автоматически при изменении связанных ячеек), Болотные (3) – ручное и автоматическое заполнение по данным ИБ (автозаполнение таких ячеек запускается по кнопке "Заполнить").

2) НастройкаСоставаПоказателей2011Кв4

Макет отвечает за дополнительные строки в отчетности. На основании него заполняется форма отчета "НастройкаРасшифровкиОтдельныхПоказателей", где мы указываем, какие дополнительные строки мы хотим видеть в нашем бланке отчетности. Важным в этом отчете является колонка “Имя области дополнительной строки”, так как именно по этим именам ищется области в основном макете.

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

3) СтруктураМногострочныхЧастей2011Кв4

Макет непосредственно связан с макетом СоставПоказателей2011Кв4, где указываются какие строки являются многострочными. В этом макете описываются показатели подчиненных строк.

  • Макеты, используемые для настройки выгрузки

 


Эти макеты используются для выгрузки отчета в электронном варианте. Макеты описывают схему XMLдокумента, который отправляется в налоговую и в Росстат. Группировка в макете соответствует узлу XML. Одинаковые узлы просто дублируются, а не ссылаются друг на друга.

Механизм автозаполнения

Заполнение регламентированного отчета вызывается с помощью команды “Заполнить” – “Все отчеты / Текущий отчет”.

В форме отчета готовятся служебные структуры с периодом, организацией, описанием дополнительных строк и информацией, которая соответствует именно этому отчету. Заполненные структуры передаются в общий модуль “ЗаполнениеБухгалтерскойОтчетности”, в котором происходит заполнение значений показателей.

Сам процесс заполнения можно разделить на несколько уровней:

1. Верхний уровень - Заполнение конкретной графы.

Бухгалтерский баланс имеет три графы (колонки) со значениями.

Эти графы отличаются только периодом, алгоритм заполнения и источники данных в них одинаковые. Поэтому в процедуру заполнения мы передаем структуру, в которой храним “Графу”, “Период” и “Заголовок”:

        КонтекстИсполнения.Вставить("СоставДополнительныхСтрокБаланс", ПараметрыОтчета.СоставДополнительныхСтрокБаланс);
        КонтекстИсполнения.Вставить("Графа", "04");
        КонтекстИсполнения.Вставить("ЗаголовокГрафы", "На " + Формат(ДатаКонцаПериодаОтчета, "ДФ = 'дд ММММ гггг'")+ " г.");
        КонтекстИсполнения.Вставить("НачалоПериодаОтчета", ДатаНачалаПериодаОтчета);
        КонтекстИсполнения.Вставить("КонецПериодаОтчета", ДатаКонцаПериодаОтчета);
            
        ЗаполнитьФормаОтчета2011Кв4_БалансПоГрафе(КонтекстИсполнения);
            
        Если ЗаполнятьПредыдущиеПериоды Тогда
           КонтекстИсполнения.Вставить("Графа", "05");
           КонтекстИсполнения.Вставить("ЗаголовокГрафы", "На " + Формат(ДатаКонцаПредыдущегоГода, "ДФ = 'дд ММММ гггг'")+ " г.");
           КонтекстИсполнения.Вставить("НачалоПериодаОтчета", ДатаНачалаПредыдущегоГода);
           КонтекстИсполнения.Вставить("КонецПериодаОтчета", ДатаКонцаПредыдущегоГода);
           ЗаполнитьФормаОтчета2011Кв4_БалансПоГрафе(КонтекстИсполнения);
                
           КонтекстИсполнения.Вставить("Графа", "06");
           КонтекстИсполнения.Вставить("ЗаголовокГрафы", "На " + Формат(ДатаКонцаГодаПредшествующегоПредыдущему, "ДФ = 'дд ММММ гггг'")+ " г.");
           КонтекстИсполнения.Вставить("НачалоПериодаОтчета", ДатаНачалаГодаПредшествующегоПредыдущему);
           КонтекстИсполнения.Вставить("КонецПериодаОтчета", ДатаКонцаГодаПредшествующегоПредыдущему);
               
           ЗаполнитьФормаОтчета2011Кв4_БалансПоГрафе(КонтекстИсполнения);
        КонецЕсли;

2. Средний уровень - Заполнение разделов бухгалтерского учета:

К разделам относятся непосредственно части бухгалтерского баланса “Внеоборотные активы”, “Оборотные активы”, “Капиталы и резервы” и так далее.

Для каждого раздела вызывается своя процедура:

Упрощенно это выглядит так:

        Если ИдентификаторАвтозаполнения = "Баланс_2011Кв4" Тогда
           ЗаполнитьФормаОтчета2011Кв4_БалансПоГрафеРаздел1_2011Кв4(КонтекстИсполнения);
           ЗаполнитьФормаОтчета2011Кв4_БалансПоГрафеРаздел2(КонтекстИсполнения);
           ЗаполнитьФормаОтчета2011Кв4_БалансПоГрафеРаздел3(КонтекстИсполнения);
        КонецЕсли;

3. Нижний уровень - Заполнение строк раздела.

Рассмотрим на примере строки 1110 Нематериальные активы. Код заполнения:     

	НомерСтроки = "1110";
	НаименованиеСтроки = "Нематериальные активы";
	ИмяОбластиПоказателя = "П000100" + НомерСтроки + Графа;
	НаименованиеРасшифровки = "Строка " + НомерСтроки + " """ + НаименованиеСтроки + """, графа """ + ЗаголовокГрафы + """";
	
	СКД_04_01 = ЗаполнениеБухгалтерскойОтчетностиИтоги.СКД("04.01", СальдоИОборотыПоСчетам);
	СКК_05    = ЗаполнениеБухгалтерскойОтчетностиИтоги.СКК("05", СальдоИОборотыПоСчетам);
	СКД_08_05 = ЗаполнениеБухгалтерскойОтчетностиИтоги.СКД("08.05", СальдоИОборотыПоСчетам);
	
	ЗначениеПоказателя = СКД_04_01 - СКК_05 + СКД_08_05;
	Контейнер.Баланс[ИмяОбластиПоказателя] = ЗначениеПоказателя;
Алгоритм этого кода следующий:
  1. Описывается строка, которую будем заполнять.

  2. Рассчитываем значения бухгалтерских итогов и помещаем их в переменные СКД_04_01, СКК_05, СКД_08_05. (Процедуры получения бухгалтерских итогов и их имена рассмотрим чуть ниже).
  3. Получаем общее значение показателя и устанавливаем его в табличный документ.
  4. Заполняем расшифровку:
	ДобавитьСтрокуРасшифровки(ТаблицаРасшифровки, ИмяОбластиПоказателя, НаименованиеРасшифровки, "+","!СКД " + Счет("04.01").Код, СКД_04_01, ИмяРаздела, НастройкиОСВПоСчету(ОбщиеПараметрыРасшифровки, Счет("04.01")));
	ДобавитьСтрокуРасшифровки(ТаблицаРасшифровки, ИмяОбластиПоказателя, "", "-", "!СКК " + Счет("05").Код, -СКК_05 ,ИмяРаздела, НастройкиОСВПоСчету(ОбщиеПараметрыРасшифровки, Счет("05")));
	ДобавитьСтрокуРасшифровки(ТаблицаРасшифровки, ИмяОбластиПоказателя, "", "+", "!СКД " + Счет("08.05").Код, СКД_08_05, ИмяРаздела, НастройкиОСВПоСчету(ОбщиеПараметрыРасшифровки, Счет("08.05")));

Результат выполнения данного кода представлен на картинке:

 

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

Таким образом заполняется каждая строка каждого раздела каждого отчета.

Как хранится регламентированная отчетность.

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

Служебные процедуры

Считаю нужным описать служебные процедуры, которые используются во всех регламентированных отчетах. Они находятся в общем модуле “ЗаполнениеБухгалтерскойОтчетностиИтоги”.

Рассмотрим некоторые из них:

  1. Счет() - функция возвращает ссылку на счет по переданному коду. Для поиска используется конструкция "Если Иначе":
      Если УсловныйКодСчета = "01" Тогда
         Результат = ПС.ОсновныеСредства;
      ИначеЕсли УсловныйКодСчета = "01.01" Тогда
         Результат = ПС.ОСвОрганизации;
      ИначеЕсли УсловныйКодСчета = "01.03" Тогда
         Результат = ПС.АрендованноеИмущество;
      ИначеЕсли УсловныйКодСчета = "01.08" Тогда
         Результат = ПС.ОСБезГосРегистрации;
      ИначеЕсли УсловныйКодСчета = "01.09" Тогда
         Результат = ПС.ВыбытиеОС;
      ИначеЕсли УсловныйКодСчета = "02" Тогда
         Результат = ПС.АмортизацияОсновныхСредств;
      ИначеЕсли УсловныйКодСчета = "02.01" Тогда
         Результат = ПС.АмортизацияОС_01;
      ИначеЕсли УсловныйКодСчета = "02.02" Тогда
         Результат = ПС.АмортизацияОС_03;
      ИначеЕсли УсловныйКодСчета = "02.03" Тогда
         Результат = ПС.АмортизацияАрендованногоИмущества;
      ИначеЕсли УсловныйКодСчета = "03" Тогда
         Результат = ПС.ДоходныеВложенияВ_МЦ;
      ИначеЕсли УсловныйКодСчета = "03.01" Тогда
         Результат = ПС.МЦвОрганизации;
      КонецЕсли
  2. СКК() - Сальдо конечное кредитовое. Возвращает итог по Кт по переданному счету
  3. СКД() - Сальдо конечное дебетовое. Возвращает итог по Дт по переданному счету.
  4. СККР() - Сальдо конечное кредитовое развернутое. Возвращает развернутое сальдо по Кт по переданному счету
  5. СКДР() - Сальдо конечное дебетовое развернутое. Возвращает развернутое сальдо по Дт по переданному счету
На этом всё, если у кого-то возникли вопросы или предложения - не стесняйтесь и задавайте в комментариях или личных сообщениях.

Благодарность.

Если Вам понравилась статья, то можете скинуться автору на пиво.
Буду рад любой сумме!
 



См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Роза (DoctorRoza) 01.12.15 09:10
До кучи, можно указать, где хранятся данные для этих отчетов.
2. Евгений МелхОФФ (EMelihoff) 01.12.15 18:10
Вот почему Вы в 2010 не написали такую статью )) столько крови они попили у меня, пока вник! Спасибо, людям будет полезно!
coollerinc; shalimski; Vova1900; adhocprog; trickster; mrXoxot; +6 Ответить
3. Алексей _ (iolko) 02.12.15 07:48
4. Венер Давлетгареев (vener2004) 02.12.15 10:03
До кучи, можно указать, где хранятся данные для этих отчетов.

+вопрос: Можно ли после сохранения подправить программно некоторые цифры отчета? Если можно то как?
5. Alex Aks (voneska7) 02.12.15 10:12
Полезная статья, спасибо.
6. Яковлевич Никита (mrXoxot) 02.12.15 10:40
(1) DoctorRoza, (4) vener2004,
Если вкратце то отчет хранится в документе "РегламентированныйОтчет".

Можно ли после сохранения подправить программно некоторые цифры отчета? Если можно то как?

Можно исправить, но не понятно зачем? Гораздо проще и правильнее исправить в заполнении или разово.
Просто в форме заложена некоторая логика и лучше делать всё на форме или в процессе встроенных механизмов.
molodoi1sneg; Vova1900; +2 Ответить 1
7. Sergey (defender) 09.12.15 16:00
Кому интересно как все внутри, написал статью http://infostart.ru/public/428432/
VladimirL; klinval; mrXoxot; +3 Ответить
8. Валерий К (klinval) 14.12.15 11:00
Автору плюс за публикацию, но вставлю свои 5 копеек.

Если бы всё так было радостно. В первом квартале задались мыслью обеспечить редактируемость новых разделов декларации по НДС. Посмотрел офф сайт 1С и увидел, что у них заявлено, что все отчеты можно редактировать (пускай неудобно, но можно). Я им написал, мол почему в декларации по НДС 8,9,10 и 11 разделы нельзя редактировать. Мотив их ответа был: ведите правильно учёт тогда вам не надо будет редактировать. Я им назвал часть нюансов законодательства, которые никак не предусмотрены в их базе. Часть ошибок они приняли к исправлению (и вроде исправили только через пол года) и заявили, что мол редактируемость новых разделов они делать не будут!

Решил проследить где хранятся данные и в каком виде. На примере 8 раздела вычислил, что данные хранятся в "ДополнительныеФайлыРегламентированныхОтчетов":1. ИтогиРаздел8,(структура) 2. ДанныеРаздел8.1 (таблица значений), 3. ТабличныйДокументРаздел8.1 (Табличный документ). Пользователю декларация отображается в виде Табличного документа, а в xml данные выгружается из ТЗ. Т.е. все 3 сущности ТЗ, ТД и Итоги существуют отдельно и никак не связаны. ТЗ в ТД штатными средствами перевести нельзя никак.
Т.е. их реализация того как хранится отчет я бы сказал спорная... И то что они что-то хранят в РС "ДополнительныеФайлыРегламентированныхОтчетов" - это больше похоже на костыли.
/////
Прочитал статью указанную в (7), оказывается о РС "ДополнительныеФайлыРегламентированныхОтчетов" там уже сказано.
9. Den Corablove (Corablove) 19.12.15 12:11
Отличная статья, спасибо.
Пользуясь случаем, задам свой дилетантский вопрос компетентному специалисту.
В функции "Счет", которую Вы привели в пример "Служебных процедур" - в чём тайный смысл 600 строк через ИначеЕсли?
Почему нельзя написать только полторы строки на тему "Возврат ПланыСчетов.Хозрасчетный.НайтиПоКоду(УсловныйКодСчета);"?
10. Яковлевич Никита (mrXoxot) 19.12.15 18:28
(9) Corablove,
Кто бы знал...
Но такой код я видел еще в БП 2.0, поэтому скорее всего так исторически сложилось.
11. Венер Давлетгареев (vener2004) 30.12.15 12:26
Можно исправить, но не понятно зачем? Гораздо проще и правильнее исправить в заполнении или разово.
Просто в форме заложена некоторая логика и лучше делать всё на форме или в процессе встроенных механизмов.

(6) mrXoxot, допустим нужно перекинуть часть доходов и расходов вспомогательно производства в соответствующие ячейки, можно поменять типовую логику заполнения, но это нужно будет делать каждый раз при изменении формы, а можно было бы сделать внешнюю обработку которая в сохраненном отчете меняла бы данные.
Вы не ответили на вопрос: КАК?
12. Яковлевич Никита (mrXoxot) 31.12.15 08:02
(11) vener2004,
Всё равно не до конца понимаю выгоду от внешней обработки, но это Ваше дело. Просто в неё тоже придется вносить изменения каждый раз при изменении формы, потому что если изменился состав показателей, то вместе с формой изменится и формат хранения данных.

Как хранятся данные в регламентированных отчетах и как их можно изменять описано здесь.
13. Владимир Клименко (KliMich) 28.04.16 20:49
Тут 6 НДФЛ раскапывал. Пригодилось. Спавибо.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа