При работе с регламентированной отчетностью в конфигурациях 1С (таких как «Бухгалтерия предприятия», «ERP» или «Комплексная автоматизация») часто возникает необходимость понять, по какой именно формуле рассчитывается конкретное значение в ячейке баланса или отчета о финансовых результатах. Если в режиме «1С:Предприятие» расшифровка наглядно показывает арифметику (например, «Сальдо по счету 04 минус Сальдо по счету 05»), то в Конфигураторе найти этот «текст» бывает непросто. Разберем детально, как устроена эта система и где искать заветные формулы.
Для начала проанализируем ситуацию: почему обычный глобальный поиск по тексту расшифровки или номеру ячейки часто не дает результатов. Дело в том, что регламентированная отчетность в 1С — это сложная подсистема, где данные разделены на три уровня:
РегламентированныйОтчет в сериализованном (закодированном) виде.Рассмотрим подробнее, как система формирует расшифровку. Когда мы видим в отчете строку «!СКД 04.01», это специальный технический код. Система интерпретирует его так: ! — служебный префикс, СКД — Сальдо Конечное Дебетовое, а далее следует номер счета. Текст, который видит пользователь («Сальдо на конец периода...»), собирается динамически специальной функцией из этих служебных тегов.
Чтобы найти алгоритм расчета конкретной ячейки, например, П000100111004 (Нематериальные активы), нам нужно проследовать по цепочке вызовов. Выясним причину, по которой прямой поиск по этому имени часто бесполезен: имя ячейки собирается «конструктором».
В большинстве современных конфигураций логика вынесена в общие модули. Рассмотрим примерную цепочку поиска:
РегламентированныйОтчетБухОтчетность).ЗаполнениеБухгалтерскойОтчетности.ЗаполнениеБухгалтерскойОтчетностиОсновная.ЗаполнитьОтчетБухОтчетностьФормаОтчета2019Кв1_БалансПоГрафе.Проанализируем ситуацию с поиском имени ячейки. В коде 1С вы вряд ли встретите строку "П000100111004" целиком. Разработчики используют шаблоны. Посмотрим на пример типичного кода формирования имени:
НомерСтроки = "1110"; // Код строки в балансе
НаименованиеСтроки = "Нематериальные активы";
ИмяОбластиПоказателя = "П000100" + НомерСтроки + Графа;
Именно поэтому искать нужно по номеру строки ("1110") или по фрагментам названия показателя. Как только вы найдете место в коде, где упоминается нужный код строки, вы увидите и саму формулу расчета.
Рассмотрим, как выглядит реальный расчет показателя баланса внутри общего модуля. В этом фрагменте кода происходит одновременно и вычисление суммы, и подготовка данных для того самого окна расшифровки:
// Получаем сальдо по счетам из заранее подготовленной структуры
СКД_04_01 = СКД("04.01", СальдоИОборотыПоСчетам);
СКК_05 = СКК("05", СальдоИОборотыПоСчетам);
СКД_08_05 = СКД("08.05", СальдоИОборотыПоСчетам);
// Основная формула расчета значения в ячейке
ЗначениеПоказателя = СКД_04_01 - СКК_05 + СКД_08_05;
// Установка значения в структуру отчета
УстановитьЗначениеПоказателя(РассчитанныеПоказатели, ИмяРаздела, ИмяОбластиПоказателя, ЗначениеПоказателя);
// Добавление строк в таблицу расшифровки
// Здесь "!" - служебный символ, указывающий системе, как расшифровать код в текст
ДобавитьСтрокуРасшифровки(ТаблицаРасшифровки, ИмяОбластиПоказателя, ЗаголовокРасшифровки, "+", "!СКД " + Счет("04.01").Код, СКД_04_01, ...);
ДобавитьСтрокуРасшифровки(ТаблицаРасшифровки, ИмяОбластиПоказателя, "", "-", "!СКК " + Счет("05").Код, -СКК_05 , ...);
ДобавитьСтрокуРасшифровки(ТаблицаРасшифровки, ИмяОбластиПоказателя, "", "+", "!СКД " + Счет("08.05").Код, СКД_08_05, ...);
В данном примере функция СКД возвращает сальдо конечное дебетовое. Обратите внимание на метод ДобавитьСтрокуРасшифровки: именно он «привязывает» к ячейке на форме те данные, которые мы видим при нажатии кнопки «Расшифровать».
Иногда формула расчета отсутствует в явном виде (через счета учета), но ячейка все равно заполняется. Это происходит, если показатель является расчетным (агрегатным). Проанализируем структуру СтруктураЗависимыхЯчеекДляАвторасчета.
В модулях формы отчета часто встречается заполнение соответствий, где указывается, из каких ячеек собирается итог. Например:
СтруктураЗависимыхЯчеекДляАвторасчета.Вставить("П000100110004",
"П000100111004;П000100112004;П000100113004;П000100114004");
Это означает, что ячейка с кодом 1100 (Итого по разделу I) автоматически суммирует значения ячеек 1110, 1120 и так далее. Если вы ищете формулу для итоговой строки, ищите ее в таблице зависимостей или в процедурах ПриИзмененииПоказателя.
Если ваша задача — выгрузить данные отчетности через COM-соединение или внешнюю обработку, не пытайтесь вызвать функции заполнения напрямую. Они слишком сильно завязаны на контекст формы и параметры сеанса. Вместо этого используйте один из двух путей:
РегламентированныйОтчет, прочитайте его реквизит ДанныеОтчета (это ХранилищеЗначений). После извлечения вы получите структуру, содержащую все рассчитанные показатели и дерево расшифровки.РегистрБухгалтерии.Хозрасчетный.Остатки).Подведем итог: расшифровка в 1С не является «статичным текстом». Это результат работы программного кода, который преобразует технические теги (!СКД, !ОК) в читаемые фразы. Для поиска формул используйте поиск по номеру строки в общих модулях с префиксом ЗаполнениеБухгалтерскойОтчетности.