Как отключить динамические колонки в типовом отчете по срокам задолженности в 1С

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

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

Почему стандартные настройки СКД не отключают колонки интервалов

Проанализируем архитектуру типовых отчетов по анализу задолженности по интервалам. В отличие от простых отчетов на схеме компоновки данных (СКД), в данных отчетах состав колонок не является статическим:

  1. Динамическое формирование схемы: При нажатии кнопки «Сформировать» управление передается в модуль менеджера или модуль объекта отчета. В коде вызываются процедуры, которые программно модифицируют схему компоновки данных перед компоновкой результата.
  2. Перезапись выбранных полей: Процедура считывает заданные пользователем интервалы (например, «до 7 дней», «8-15 дней» и т.д.) и в цикле программно добавляет вычисляемые поля, ресурсы и выбранные поля в компоновщик настроек.
  3. Обязательность интервалов: Если попытаться просто очистить таблицу интервалов в пользовательских настройках, типовая проверка выдаст ошибку о том, что границы интервалов не заполнены, так как алгоритм запроса жестко рассчитывает на наличие интервальной шкалы.

Способ 1. Программная корректировка процедуры формирования полей

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

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

  1. Откроем модуль менеджера отчета и найдем процедуру ЗаполнитьПоляВСоответствииСоСпискомИнтервалов.
  2. Найдем блок добавления общего остатка долга и закомментируем его формирование в ресурсах и выбранных полях:

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

Для Каждого Интервал Из ПараметрыОтчета.Интервалы Цикл
    // Внутри этого цикла происходит программное добавление полей интервалов
    // в коллекцию выбранных полей компоновщика.
    // Закомментируйте добавление конкретного поля, чтобы исключить его из отчета.
КонецЦикла;

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

Способ 2. Использование альтернативных типовых отчетов

Если цель доработки заключается исключительно в получении кредиторской задолженности по счетам 60 и 76 без интервального анализа просрочки, доработка сложного отчета по срокам долга может быть избыточной. Рассмотрим стандартные альтернативы:

  1. Оборотно-сальдовая ведомость по счету: Для счетов 60 и 76 можно сформировать ОСВ с детализацией по субконто Контрагенты, Договоры и Документы расчетов с контрагентом. Это даст полную картину задолженности с развернутым сальдо.
  2. Отчет «Анализ субконто»: Позволяет объединить несколько счетов (например, 60.01, 60.02, 76.05, 76.09) по видам субконто Контрагенты и Договоры в единую сводную таблицу.
  3. Отчет «Задолженность поставщикам»: Базовый управленческий отчет, не использующий динамическую генерацию интервальных колонок, который легко настраивается через пользовательский режим.

Расчет плановой даты оплаты (Дата документа + Срок в днях)

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

Вариант без изменения кода (в пользовательском режиме через СКД)

Разберем, как добавить расчет даты через пользовательские поля схемы компоновки данных:

  1. В форме отчета откроем «Настройки» $\rightarrow$ «Расширенный» $\rightarrow$ «Изменить вариант...».
  2. Перейдем на вкладку «Пользовательские поля» и нажмем «Добавить» $\rightarrow$ «Новое поле-выражение».
  3. В поле выражения укажем стандартную функцию языка выражений СКД ДобавитьКДате:

ДобавитьКДате(Документ.Дата, "ДЕНЬ", ЕстьNULL(Документ.Договор.СрокОплаты, 0))

  1. Зададим понятный заголовок поля (например, ПлановаяДатаОплаты) и добавим его на вкладку «Выбранные поля».

Вариант через запрос в схеме компоновки данных

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


ВЫБРАТЬ
    Взаиморасчеты.Документ КАК Документ,
    Взаиморасчеты.Документ.Дата КАК ДатаДокумента,
    ДОБАВИТЬКДАТЕ(Взаиморасчеты.Документ.Дата, ДЕНЬ, ЕСТЬNULL(Взаиморасчеты.Документ.Договор.СрокОплаты, 0)) КАК ДатаОплатыПоДоговору
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты КАК Взаиморасчеты

Использование функции ЕСТЬNULL обязательно: если в договоре не задан срок оплаты, значение поля будет равно NULL, что при сложении с датой без проверки приведет к получению пустой даты.

← На главную