Как изменить типовой отчет «Задолженность покупателей по срокам долга» в 1С:Бухгалтерия 3.0?

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

При работе с конфигурацией 1С:Бухгалтерия предприятия 3.0 разработчики часто сталкиваются с ситуацией, когда обычное добавление полей или изменение макета в системе компоновки данных (СКД) не приносит желаемого результата в пользовательском режиме. Особенно остро этот вопрос стоит для отчетов по анализу задолженности. Разберем подробно, почему так происходит и как правильно внести изменения в такие отчеты.

Почему изменения в макете СКД не отображаются?

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

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

Шаг 1: Работа с программным кодом в модуле менеджера

Как отмечают участники обсуждения, ключевым местом для внесения правок является модуль менеджера отчета. Именно там сосредоточена логика формирования структуры колонок. Нам необходимо найти процедуру, отвечающую за заполнение полей. В типовых решениях она часто называется ЗаполнитьПоляВСоответствииСоСпискомИнтервалов или вызывается из ПриКомпоновкеРезультата.

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


// Пример модификации структуры полей
КоличествоПолейПериодов = Схема.НаборыДанных.ОсновнойНабор.Поля.Количество - 5; 
Для Индекс = 1 По КоличествоПолейПериодов Цикл 
    ПолеДляУдаления = Схема.НаборыДанных.ОсновнойНабор.Поля.Найти("ОстатокПериода" + Индекс); 
    Если ПолеДляУдаления <> Неопределено Тогда 
        Схема.НаборыДанных.ОсновнойНабор.Поля.Удалить(ПолеДляУдаления); 
    КонецЕсли; 
КонецЦикла; 

Схема.ПоляИтога.Очистить(); 

// Добавляем стандартные ресурсы
ПолеИтога = Схема.ПоляИтога.Добавить(); 
ПолеИтога.ПутьКДанным = "ОстатокДолга"; 
ПолеИтога.Выражение = "Сумма(ОстатокДолга)"; 

ПолеИтога = Схема.ПоляИтога.Добавить(); 
ПолеИтога.ПутьКДанным = "ПросроченнаяЗадолженность"; 
ПолеИтога.Выражение = "Сумма(ПросроченнаяЗадолженность)"; 

// ДОБАВЛЯЕМ НОВОЕ ПОЛЕ РЕСУРСА
ПолеИтога = Схема.ПоляИтога.Добавить(); 
ПолеИтога.ПутьКДанным = "КредиторскаяЗадолженность"; 
ПолеИтога.Выражение = "Сумма(КредиторскаяЗадолженность)";

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

Шаг 2: Принудительное добавление полей в компоновщик настроек

Даже если поле появилось в схеме и в ресурсах, оно может не отобразиться, если программно очищается список выбранных полей в КомпоновщикНастроек. Посмотрим, как принудительно добавить поле в выбранные элементы через программный код:


// Очистка и заполнение выбранных полей программно
КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить(); 

БухгалтерскиеОтчетыКлиентСервер.ДобавитьВыбранноеПоле(КомпоновщикНастроек, "ОстатокДолга"); 
БухгалтерскиеОтчетыКлиентСервер.ДобавитьВыбранноеПоле(КомпоновщикНастроек, "ПросроченнаяЗадолженность"); 

// Добавляем наше новое поле
БухгалтерскиеОтчетыКлиентСервер.ДобавитьВыбранноеПоле(КомпоновщикНастроек, "КредиторскаяЗадолженность");

Функция БухгалтерскиеОтчетыКлиентСервер.ДобавитьВыбранноеПоле является стандартной для БП 3.0 и позволяет корректно зарегистрировать новое поле в структуре отчета, чтобы оно стало доступно для вывода в печатную форму.

Шаг 3: Сброс настроек и очистка хранилища

Проанализируем ситуацию, когда код написан верно, но отчет все равно выводится в старом виде. Это происходит из-за того, что 1С сохраняет настройки вариантов отчетов для каждого пользователя индивидуально. Хранилище настроек может содержать структуру «старого» варианта, где вашей новой колонки еще не существовало.

Для решения этой проблемы попробуем следующие действия:

  1. Очистка кэша: Стандартная процедура, которая помогает исключить влияние локальных временных файлов на отображение объектов.
  2. Сброс настроек в пользовательском режиме: Зайдите в меню «Еще» — «Установить стандартные настройки» прямо в форме отчета. Это заставит систему перечитать настройки из конфигурации (или расширения), игнорируя сохраненные данные пользователя.
  3. Обновление справочника «Варианты отчетов»: Иногда требуется запустить процедуру ВариантыОтчетов.Обновить() в консоли кода, чтобы система перерегистрировала изменения в метаданных отчета.
  4. Очистка системного хранилища: В крайних случаях можно программно очистить настройки для конкретного отчета, используя ХранилищеСистемныхНастроек.Удалить().

Рекомендации по работе с данными

Если вы добавляете поле «Кредиторская задолженность» (как в нашем примере), убедитесь, что основной запрос отчета действительно выбирает эти данные. В отчете по задолженности покупателей расчет ведется по счетам 62.01, 62.21 и др. Кредиторская задолженность в данном контексте обычно подразумевает авансы (счет 62.02). Если в запросе модуля менеджера нет соединения с данными по авансам, ваша новая колонка останется пустой, даже если она успешно добавлена в структуру.

Проверить это можно, выгрузив итоговую схему в XML файл прямо в процессе отладки. Для этого в процедуре ПриКомпоновкеРезультата посмотрите на объект СхемаКомпоновкиДанных. Если в итоговом тексте запроса нет упоминания вашего поля или источника данных для него — ищите проблему в формировании текста запроса внутри модуля менеджера.

Таким образом, для успешного изменения типового отчета в 1С 8.3 необходимо сочетать правку макета СКД с обязательной корректировкой логики в модуле менеджера и последующим сбросом пользовательских настроек.

← На главную