Как формируются интервалы в отчете «Задолженность клиентов по срокам» в 1С:УТ 11 и почему их нет в запросе СКД?

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

Каждый разработчик или продвинутый аналитик 1С, открыв схему компоновки данных (СКД) типового отчета «Задолженность клиентов по срокам» в конфигурациях «1С:Управление торговлей 11», «1С:Комплексная автоматизация 2» или «1С:ERP», сталкивается с загадкой. В пользовательском режиме отчет выводит красивые колонки с интервалами просрочки (например, «1–29 дней», «свыше 30 дней»), но в самом запросе СКД нет ни единого упоминания этих интервалов, как нет и обращения к справочнику, где они хранятся.

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

В чем суть проблемы: почему запрос СКД «молчит»?

Если мы откроем макет СКД отчета в конфигураторе, то увидим базовый запрос, который выбирает данные о взаиморасчетах, датах отгрузки и плановых датах платежей. Никаких жестко прописанных конструкций ВЫБОР КОГДА... для разбиения по дням просрочки там нет.

Разработчики фирмы «1С» отказались от жесткого кодирования интервалов в тексте запроса. Это сделано для обеспечения гибкости: у каждого предприятия свои требования к оценке дебиторской задолженности. Одному бизнесу достаточно деления на «до месяца» и «более месяца», а другому необходим детальный еженедельный мониторинг (1–7 дней, 8–14 дней и т. д.).

Решение было найдено в виде программной модификации схемы компоновки данных прямо в процессе формирования отчета.

Шаг 1. Исследуем модуль объекта отчета

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

Проанализируем примерную схему работы этого алгоритма:

  1. Программа считывает текущие настройки компоновки данных и находит значение параметра «Классификация». Этот параметр содержит ссылку на элемент справочника ВариантыКлассификацииЗадолженности.
  2. Из выбранного элемента справочника считывается табличная часть, где пользователь задал границы интервалов в днях.
  3. Затем код обращается к объекту схемы компоновки данных в оперативной памяти и начинает динамически дописывать туда новые элементы.

Для каждого интервала из справочника программно создается новое Вычисляемое поле. Выражение этого поля формируется по следующему шаблону:


ВЫБОР 
    КОГДА ПросроченоДней >= [НижняяГраница] И ПросроченоДней <= [ВерхняяГраница] 
        ТОГДА СуммаДолга 
    ИНАЧЕ 0 
КОНЕЦ

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

Шаг 2. Как рассчитываются дни просрочки в запросе

Хотя сами колонки создаются динамически, исходные числовые данные для них подготавливает именно запрос СКД. Давайте выясним, как рассчитывается ключевой показатель — количество дней просрочки (ПросроченоДней).

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

При расчете просрочки система опирается на две важные даты:

  1. Дата возникновения задолженности — фактическая дата проведения первичного документа (например, документа РеализацияТоваровУслуг).
  2. Плановая дата платежа — дата, до которой клиент обязан произвести оплату. Она рассчитывается автоматически на основании условий договора, соглашения или индивидуального графика оплаты, указанного в заказе.

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

Шаг 3. Важнейший нюанс — актуализация расчетов

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

Чтобы пользователь не увидел в отчете ложную информацию о долгах, в процедуре ПриКомпоновкеРезультата перед расчетом СКД программно вызывается метод распределения взаиморасчетов:

ВзаиморасчетыСервер.ВыполнитьПроведениеДокументовПоРасчетамСКлиентами();

Это гарантирует, что все платежи будут сопоставлены с накладными непосредственно перед выводом цифр на экран. Имейте это в виду, если отчет на крупных базах формируется с некоторой задержкой — система выполняет сложные математические расчеты в фоновом режиме для актуализации данных.

Шаг 4. Настройка произвольных интервалов в пользовательском режиме

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

Выполним следующие шаги по настройке системы:

  1. Перейдем в раздел меню «НСИ и администрирование», далее выберем пункт «Настройка НСИ и разделов» и откроем подраздел «Предприятие».
  2. В открывшемся окне развернем группу параметров «Организации».
  3. Установим флаг напротив опции «Несколько вариантов классификации задолженности». Если этот флаг снят, система всегда будет использовать одну предопределенную стандартную классификацию.
  4. Теперь перейдем к справочнику «Варианты классификации задолженности» (его можно найти через «Функции для технического специалиста» или через поиск в разделах настроек продаж/закупок).
  5. Создадим новый элемент справочника. В табличной части мы можем самостоятельно задать сетку интервалов. Например:
    • От 1 до 5 дней (микропросрочка)
    • От 6 до 15 дней (незначительный долг)
    • От 16 до 30 дней (средняя просрочка)
    • Свыше 31 дня (проблемный долг)
  6. Сохраним созданный элемент под понятным названием (например, «Детальный анализ дебиторки»).

После этого откроем отчет «Задолженность клиентов по срокам». В шапке отчета появится активное поле «Классификация». Нам достаточно выбрать созданный нами вариант и нажать кнопку «Сформировать». Отчет мгновенно перестроится под новые интервалы, а программный код СКД автоматически сгенерирует нужные вычисляемые поля под новые границы дней.

Резюме

Мы выяснили, почему в отчете по задолженности клиентов нет жестко заданных интервалов в конфигураторе. Такой подход разработчиков 1С избавляет нас от необходимости переписывать код и запросы при малейшем изменении бизнес-требований. Программная генерация вычисляемых полей СКД на основе справочника ВариантыКлассификацииЗадолженности — это отличный пример гибкой архитектуры, сочетающей высокую производительность платформы и удобство для конечного пользователя.

← На главную