Как в отчете на СКД выделить контрагентов, у которых сумма долга не менялась более 4 месяцев?

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

При работе с дебиторской задолженностью часто возникает задача визуально выделить тех клиентов, работа с которыми "замерла". Это может означать, что контрагент давно не платил или перестал делать новые заказы. В этой статье мы подробно разберем, как средствами Системы Компоновки Данных (СКД) в 1С настроить отчет так, чтобы он автоматически подсвечивал проблемные строки, например, если сумма долга не менялась более 4 месяцев.

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

Определение критерия "Сумма не менялась"

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

  1. Вариант А: Сальдо на начало равно Сальдо на конец. Это ненадежный метод. Представим ситуацию: клиент был должен 100 000 рублей. За 4 месяца он отгрузил товара еще на 50 000 и оплатил 50 000. Конечное сальдо осталось прежним — 100 000 рублей. Но работа идет, долг не "мертвый". Если мы выделим такого клиента красным, это введет менеджера в заблуждение.
  2. Вариант Б: Отсутствие движений (оборотов). Это правильный подход для нашей задачи. Если за 4 месяца не было ни увеличения долга (отгрузок), ни уменьшения долга (оплат), значит, взаимоотношения действительно "застыли".

Мы будем ориентироваться на Вариант Б, так как он наиболее точно отражает суть "зависшего" контрагента.

Решение 1: Настройка Условного оформления (Без программирования)

Этот способ подходит для пользователей и аналитиков, так как не требует изменения конфигуратора. Мы используем стандартные возможности СКД. Предположим, мы формируем отчет "Ведомость по расчетам с клиентами" за период в 4 месяца.

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

  1. Откроем отчет и перейдем в настройки (обычно кнопка "Настройки" или "Все настройки").
  2. Перейдем на вкладку Условное оформление.
  3. Нажмем кнопку "Добавить" для создания нового элемента оформления.
  4. Вкладка "Оформление": Здесь мы выбираем визуальный стиль. Например, установим параметр ЦветТекста в значение Красный. Можно также изменить шрифт на жирный, чтобы привлечь больше внимания.
  5. Вкладка "Условие": Это самый важный этап. Нам нужно задать условие отсутствия движений.

    Мы должны добавить два условия, объединенных логическим "И":

    • Поле Увеличение долга (или Приход, Сумма отгрузки) Равно 0.
    • Поле Уменьшение долга (или Расход, Сумма оплаты) Равно 0.
    • Дополнительно можно добавить условие: Конечный остаток Больше 0 (чтобы не красить тех, кто нам ничего не должен).
  6. Вкладка "Оформляемые поля": Выберем поля, которые нужно покрасить. Обычно это поле Контрагент или Конечный остаток.

После применения этих настроек, если в сформированном отчете за выбранный период (4 месяца) у контрагента не было ни отгрузок, ни оплат, он будет подсвечен красным.

Решение 2: Использование Вычисляемых полей СКД

Если нам нужно не просто проверить наличие оборотов в текущем отчете, а вычислить конкретное количество дней "тишины", мы можем воспользоваться механизмом вычисляемых полей. Это решение требует, чтобы в источнике данных была доступна дата последней операции.

Рассмотрим алгоритм действий:

  1. В схеме компоновки данных перейдем на вкладку Вычисляемые поля.
  2. Добавим новое поле, назовем его, например, ПериодПростояМесяцев.
  3. В колонке "Выражение" используем функцию языка выражений СКД РАЗНОСТЬДАТ. Нам нужно найти разницу между датой последней операции и текущей датой.

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

РАЗНОСТЬДАТ(Период, &ТекущаяДата, "МЕСЯЦ")

Здесь есть нюанс: поле Период доступно в детальных записях (регистраторах). Если отчет сгруппирован по контрагентам, нам нужно агрегировать это значение. В настройках ресурсов для поля ПериодПростояМесяцев мы должны будем указать выражение расчета итога, например:

МАКСИМУМ(РАЗНОСТЬДАТ(Период, &ТекущаяДата, "МЕСЯЦ"))

Однако, более корректно вычислять дату последнего платежа еще на этапе запроса, чтобы не тянуть в СКД лишние детальные записи.

Решение 3: Оптимальное решение через Запрос (Для разработчиков)

Наиболее производительный и гибкий способ — подготовить данные непосредственно в запросе набора данных СКД. Нам нужно получить дату, когда контрагент последний раз совершал движение (платил или отгружал).

Давайте проанализируем структуру запроса. Нам потребуется:

  1. Выбрать данные из таблицы остатков и оборотов (например, ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты).
  2. Сгруппировать данные по Контрагенту.
  3. Использовать агрегатную функцию МАКСИМУМ для поля Период, чтобы найти дату последнего события.

Примерная схема текста запроса может выглядеть так:


ВЫБРАТЬ
    Взаиморасчеты.Контрагент КАК Контрагент,
    Взаиморасчеты.СуммаОстаток КАК СуммаДолга,
    МАКСИМУМ(Взаиморасчеты.Период) КАК ДатаПоследнейОперации
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(,, Запись, , ) КАК Взаиморасчеты
СГРУППИРОВАТЬ ПО
    Взаиморасчеты.Контрагент,
    Взаиморасчеты.СуммаОстаток

Теперь, имея поле ДатаПоследнейОперации, мы можем настроить условное оформление гораздо точнее.

Настройка условного оформления для запроса:

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

Важные нюансы при работе с задолженностью

При внедрении такого отчета давайте обратим внимание на детали, которые могут исказить картину:

Заключение

Для решения задачи автора наиболее простым и быстрым способом является Решение 1. Оно не требует навыков программирования и реализуется настройкой условий "Приход = 0 И Расход = 0" за анализируемый период.

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

← На главную