Как определить займы с максимальным и минимальным сроком просрочки с помощью пакетного запроса в 1С?

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

Зачастую перед разработчиком 1С встает задача по анализу просроченной задолженности. Рассмотрим, как эффективно решить задачу поиска топ-5 займов по максимальному и минимальному сроку просрочки, используя инструменты платформы 1С:Предприятие.

Понимание методологии расчета

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

Ключевым инструментом для вычисления количества дней является функция РАЗНОСТЬДАТ. Она позволяет вычесть одну дату из другой с указанием точности (в нашем случае — ДЕНЬ).

Разбор алгоритма решения

Для выполнения задачи одним пакетным запросом нам необходимо реализовать следующую логику:

  1. Отфильтровать данные по регистру ДолгосрочныеЗаймы, чтобы исключить закрытые займы и оставить только записи с просроченными датами (те, где дата платежа меньше текущей).
  2. Сгруппировать данные по сделке, чтобы найти минимальную дату платежа для каждого займа — это и будет точка отсчета просрочки.
  3. Рассчитать количество дней просрочки с помощью РАЗНОСТЬДАТ.
  4. Объединить результаты для поиска 5 максимальных и 5 минимальных значений.

Пример реализации пакетного запроса

Рассмотрим структуру запроса. Для передачи текущей даты мы используем параметр &ТекущаяДата, который инициализируется перед выполнением запроса функцией ТекущаяДата().


ВЫБРАТЬ ПЕРВЫЕ 5
    Т.Сделка,
    Т.Договор,
    РАЗНОСТЬДАТ(Т.МинимальнаяДата, &ТекущаяДата, ДЕНЬ) КАК СрокПросрочки,
    Остатки.СуммаОстаток
ПОМЕСТИТЬ ВТ_Просрочки
ИЗ (
    ВЫБРАТЬ
        Регистр.Сделка КАК Сделка,
        Регистр.Договор КАК Договор,
        МИН(Регистр.ДатаПлатежа) КАК МинимальнаяДата
    ИЗ
        РегистрНакопления.ДолгосрочныеЗаймы.Остатки(&ТекущаяДата, ) КАК Регистр
    ГДЕ
        Регистр.ДатаПлатежа < &ТекущаяДата
    СГРУППИРОВАТЬ ПО
        Регистр.Сделка, Регистр.Договор
) КАК Т
ЛЕВОЕ СОЕДИНЕНИЕ ХозрасчетныйОстатки(&ТекущаяДата, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ЗаймыВыданные), , ) КАК Остатки
ПО Т.Договор = Остатки.Субконто1;

ВЫБРАТЬ ПЕРВЫЕ 5 * ИЗ ВТ_Просрочки УПОРЯДОЧИТЬ ПО СрокПросрочки УБЫВ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ПЕРВЫЕ 5 * ИЗ ВТ_Просрочки УПОРЯДОЧИТЬ ПО СрокПросрочки ВОЗР;

Важные рекомендации по оптимизации

При работе с большими объемами данных важно учитывать несколько аспектов:

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

← На главную