Как добавить новый счет в регламентированную бухгалтерскую отчетность (Баланс) в 1С и избежать ошибок при расчете итогов

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

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

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

Анализ проблемы: почему добавленный счет возвращает нули?

Рассмотрим классическую ситуацию. Нам необходимо добавить активный счет 62.Р («Расчеты с розничными покупателями») в Бухгалтерский баланс. Он должен отражаться в составе дебиторской задолженности (строка 1230) и кредиторской задолженности (строка 1520), полностью дублируя поведение стандартного счета 62.01.

Разработчик выполняет глобальный поиск по коду формы регламентированного отчета (например, ФормаОтчета2011Кв4) и дублирует строки для счета 62.01, подставляя свой счет 62.Р. Однако при формировании баланса показатели по новому счету остаются нулевыми, а в процессе отладки метод Выбрать() или НайтиСледующий() в выборке бухгалтерских итогов возвращает Неопределено.

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


СКДР_62_Р = мБухИтогиРС.ПолучитьИтог("СуммаКонечныйРазвернутыйОстатокДт", "Счет", мСчет["62.Р"]);

Показатель СуммаКонечныйРазвернутыйОстатокДт (развернутое сальдо) требует обязательного наличия субконто, по которым система будет «разворачивать» итоги. Для счета 62.01 такими субконто выступают «Контрагенты» и «Договоры». Если у созданного вами счета 62.Р в плане счетов отсутствуют данные субконто (например, учет ведется без детализации по договорам или вообще по другим аналитикам, таким как «Склады»), то запрос к регистру бухгалтерии по расчету развернутого итога вернет пустой результат. Платформа просто не сможет построить выборку по отсутствующим измерениям.

Пошаговое решение по внедрению счета в алгоритм Баланса

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

Шаг 1. Глобальный поиск упоминаний базового счета

Для начала нам необходимо определить все места в модуле формы отчета (например, ФормаОтчета2011Кв4 или соответствующем общем модуле заполнения), где используется базовый счет (в нашем случае 62.01). Используем сочетание клавиш Ctrl + F для поиска строк "62.01" и 62_01.

Везде, где объявляется и рассчитывается базовый счет, добавляем аналогичные строки для нашего нового счета 62.Р.

Шаг 2. Заполнение соответствия счетов

В процедуре ЗаполнитьСоответствиеСчетов (или аналогичной, инициализирующей список счетов) необходимо связать строковое представление счета с объектом метаданных плана счетов:


СоответствиеСчетов.Вставить("62.01", ПС.РасчетыСПокупателями);
СоответствиеСчетов.Вставить("62.Р",  ПС.РасчетыСРозничнымиПокупателями); // Наш новый счет

Шаг 3. Корректный расчет остатков (свернуто или развернуто)

Проанализируем структуру субконто нашего нового счета 62.Р. Если на этом счете действительно нет аналитики по контрагентам и договорам, то использовать получение развернутого сальдо СуммаКонечныйРазвернутыйОстатокДт категорически нельзя. Вместо этого мы должны рассчитывать обычное (свернутое) конечное дебетовое сальдо.

В коде расчета показателей разделов баланса (Процедуры ЗаполнитьАвтоБалансРаздел2 для дебиторской задолженности и ЗаполнитьАвтоБалансРаздел5 для кредиторской) пишем следующий алгоритм:


// 1. Получаем развернутый итог по стандартному счету 62.01 (где есть субконто)
СКДР_62_01_КонтрагентыДоговоры = мБухИтогиРС.ПолучитьИтог("СуммаКонечныйРазвернутыйОстатокДт", "Счет", мСчет["62.01"]);
СКДР_62_01_КонтрагентыДоговоры = ?(СКДР_62_01_КонтрагентыДоговоры = Неопределено, 0, СКДР_62_01_КонтрагентыДоговоры);

// 2. Получаем ОБЫЧНЫЙ (свернутый) итог по нашему счету 62.Р (где нет субконто расчетов)
СКД_62_Р = мБухИтогиРС.ПолучитьИтог("СуммаКонечныйОстатокДт", "Счет", мСчет["62.Р"]);
СКД_62_Р = ?(СКД_62_Р = Неопределено, 0, СКД_62_Р);

Важное примечание: Обратите внимание на использование тернарного оператора ?(). Метод ПолучитьИтог возвращает значение Неопределено, если по счету нет движений и остатков за отчетный период. Попытка сложить числовое значение с типом Неопределено приведет к критической ошибке выполнения программы (вылету с ошибкой несоответствия типов). Приведение полученного результата к нулю при помощи проверки — обязательное условие стабильной работы отчета.

Шаг 4. Интеграция в итоговый показатель строки баланса

После того как мы получили безопасные числовые переменные остатков по счетам, мы можем сложить их для вычисления значения конкретной строки (например, строки 1230 дебиторской задолженности):


ЗначениеПоказателя = СКД_60_02 
                     + СКДР_60_01_КонтрагентыДоговоры 
                     + СКД_62_03 
                     + СКДР_62_01_КонтрагентыДоговоры 
                     + СКД_62_Р; // Наша новая переменная с обычным дебетовым остатком

Аналогично поступаем и для пассивной части (кредиторской задолженности в строке 1520), используя при необходимости кредитовый остаток по счету 62.Р (СуммаКонечныйОстатокКт), если специфика ведения учета на вашем субсчете допускает появление кредитового сальдо.

Как избежать ручной правки кода при обновлениях?

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

В современных редакциях программных продуктов 1С (таких как 1С:Бухгалтерия 3.0, 1С:ERP 2.5, 1С:Комплексная автоматизация 2.5) эта проблема решена разработчиками на уровне платформы. Внедрен механизм Настраиваемой бухгалтерской отчетности.

Если вы работаете в актуальной конфигурации, вам не нужно открывать конфигуратор. Достаточно выполнить следующие действия прямо в режиме «1С:Предприятие»:

  1. Перейдите в раздел настроек учетной политики вашей организации.
  2. Найдите настройки заполнения бухгалтерской финансовой отчетности.
  3. Откройте макет настройки отчета (Баланса), выберите интересующую вас строку (например, 1230 или 1520).
  4. В появившемся окне настройки правил заполнения добавьте ваш новый счет 62.Р в список счетов-источников, указав направление остатка (Дебет/Кредит) и признак разворачивания по субконто (если применимо).
  5. Сохраните настройку. При нажатии кнопки «Заполнить» система автоматически учтет ваш счет при формировании показателей.

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

← На главную