IE 2016

Как устроена регламентированная отчетность в 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. СКДР() - Сальдо конечное дебетовое развернутое. Возвращает развернутое сальдо по Дт по переданному счету
На этом всё, если у кого-то возникли вопросы или предложения - не стесняйтесь и задавайте в комментариях или личных сообщениях.

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

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



См. также

Лучшие комментарии

2. EMelihoff 01.12.2015 18:10
Вот почему Вы в 2010 не написали такую статью )) столько крови они попили у меня, пока вник! Спасибо, людям будет полезно!
# Ответить
7. defender 09.12.2015 16:00
Кому интересно как все внутри, написал статью http://infostart.ru/public/428432/
# Ответить
6. mrXoxot 02.12.2015 10:40
(1) DoctorRoza, (4) vener2004,
Если вкратце то отчет хранится в документе "РегламентированныйОтчет".

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

Можно исправить, но не понятно зачем? Гораздо проще и правильнее исправить в заполнении или разово.
Просто в форме заложена некоторая логика и лучше делать всё на форме или в процессе встроенных механизмов.
Ответили: (11)
# Ответить

Комментарии

1. DoctorRoza 01.12.2015 09:10
До кучи, можно указать, где хранятся данные для этих отчетов.
Ответили: (6)
+ 1 [ adhocprog; ]
# Ответить
2. EMelihoff 01.12.2015 18:10
Вот почему Вы в 2010 не написали такую статью )) столько крови они попили у меня, пока вник! Спасибо, людям будет полезно!
# Ответить
3. iolko 02.12.2015 07:48
Вот прям вот спасибо!! ))
# Ответить
4. vener2004 02.12.2015 10:03
До кучи, можно указать, где хранятся данные для этих отчетов.

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

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

Можно исправить, но не понятно зачем? Гораздо проще и правильнее исправить в заполнении или разово.
Просто в форме заложена некоторая логика и лучше делать всё на форме или в процессе встроенных механизмов.
Ответили: (11)
# Ответить
7. defender 09.12.2015 16:00
Кому интересно как все внутри, написал статью http://infostart.ru/public/428432/
# Ответить
8. klinval 14.12.2015 11:00
Автору плюс за публикацию, но вставлю свои 5 копеек.

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

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

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

Как хранятся данные в регламентированных отчетах и как их можно изменять описано здесь.
# Ответить
13. KliMich 28.04.2016 20:49
Тут 6 НДФЛ раскапывал. Пригодилось. Спавибо.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016