При работе с дебиторской задолженностью часто возникает задача визуально выделить тех клиентов, работа с которыми "замерла". Это может означать, что контрагент давно не платил или перестал делать новые заказы. В этой статье мы подробно разберем, как средствами Системы Компоновки Данных (СКД) в 1С настроить отчет так, чтобы он автоматически подсвечивал проблемные строки, например, если сумма долга не менялась более 4 месяцев.
Мы рассмотрим несколько подходов: от простой настройки пользовательского режима до более сложных технических решений, требующих понимания структуры запросов.
Прежде чем приступать к настройке, нам необходимо четко определить логику. Как справедливо заметили участники обсуждения, фраза "сумма не менялась" может трактоваться двояко. Давайте проанализируем возможные варианты:
Мы будем ориентироваться на Вариант Б, так как он наиболее точно отражает суть "зависшего" контрагента.
Этот способ подходит для пользователей и аналитиков, так как не требует изменения конфигуратора. Мы используем стандартные возможности СКД. Предположим, мы формируем отчет "Ведомость по расчетам с клиентами" за период в 4 месяца.
Разберем по шагам, как настроить подсветку:
ЦветТекста в значение Красный. Можно также изменить шрифт на жирный, чтобы привлечь больше внимания.Мы должны добавить два условия, объединенных логическим "И":
Увеличение долга (или Приход, Сумма отгрузки) Равно 0.Уменьшение долга (или Расход, Сумма оплаты) Равно 0.Конечный остаток Больше 0 (чтобы не красить тех, кто нам ничего не должен).Контрагент или Конечный остаток.После применения этих настроек, если в сформированном отчете за выбранный период (4 месяца) у контрагента не было ни отгрузок, ни оплат, он будет подсвечен красным.
Если нам нужно не просто проверить наличие оборотов в текущем отчете, а вычислить конкретное количество дней "тишины", мы можем воспользоваться механизмом вычисляемых полей. Это решение требует, чтобы в источнике данных была доступна дата последней операции.
Рассмотрим алгоритм действий:
ПериодПростояМесяцев.РАЗНОСТЬДАТ. Нам нужно найти разницу между датой последней операции и текущей датой.Пример выражения для вычисляемого поля:
РАЗНОСТЬДАТ(Период, &ТекущаяДата, "МЕСЯЦ")
Здесь есть нюанс: поле Период доступно в детальных записях (регистраторах). Если отчет сгруппирован по контрагентам, нам нужно агрегировать это значение. В настройках ресурсов для поля ПериодПростояМесяцев мы должны будем указать выражение расчета итога, например:
МАКСИМУМ(РАЗНОСТЬДАТ(Период, &ТекущаяДата, "МЕСЯЦ"))
Однако, более корректно вычислять дату последнего платежа еще на этапе запроса, чтобы не тянуть в СКД лишние детальные записи.
Наиболее производительный и гибкий способ — подготовить данные непосредственно в запросе набора данных СКД. Нам нужно получить дату, когда контрагент последний раз совершал движение (платил или отгружал).
Давайте проанализируем структуру запроса. Нам потребуется:
ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты).МАКСИМУМ для поля Период, чтобы найти дату последнего события.Примерная схема текста запроса может выглядеть так:
ВЫБРАТЬ
Взаиморасчеты.Контрагент КАК Контрагент,
Взаиморасчеты.СуммаОстаток КАК СуммаДолга,
МАКСИМУМ(Взаиморасчеты.Период) КАК ДатаПоследнейОперации
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(,, Запись, , ) КАК Взаиморасчеты
СГРУППИРОВАТЬ ПО
Взаиморасчеты.Контрагент,
Взаиморасчеты.СуммаОстаток
Теперь, имея поле ДатаПоследнейОперации, мы можем настроить условное оформление гораздо точнее.
Настройка условного оформления для запроса:
РАЗНОСТЬДАТ([ДатаПоследнейОперации], &ТекущаяДата, "МЕСЯЦ").При внедрении такого отчета давайте обратим внимание на детали, которые могут исказить картину:
МАКСИМУМ(Период), вы увидите свежую дату по живому договору и пропустите старый долг. Рекомендуем выводить отчет с иерархией "Контрагент -> Договор" и накладывать условное оформление на уровень Договора.Для решения задачи автора наиболее простым и быстрым способом является Решение 1. Оно не требует навыков программирования и реализуется настройкой условий "Приход = 0 И Расход = 0" за анализируемый период.
Если же требуется более глубокий анализ (например, найти "забытых" клиентов в отчете, который формируется на текущую дату, а не за период), следует использовать Решение 3 с модификацией запроса для поиска даты последней активности.