Зачастую перед разработчиком 1С встает задача по анализу просроченной задолженности. Рассмотрим, как эффективно решить задачу поиска топ-5 займов по максимальному и минимальному сроку просрочки, используя инструменты платформы 1С:Предприятие.
Прежде чем приступать к написанию кода, важно правильно определить параметры задачи. Под сроком просрочки мы понимаем разницу в днях между ТекущейДатой и датой первого просроченного платежа. Для того чтобы запрос работал быстро и корректно, мы будем использовать возможности виртуальных таблиц регистров.
Ключевым инструментом для вычисления количества дней является функция РАЗНОСТЬДАТ. Она позволяет вычесть одну дату из другой с указанием точности (в нашем случае — ДЕНЬ).
Для выполнения задачи одним пакетным запросом нам необходимо реализовать следующую логику:
ДолгосрочныеЗаймы, чтобы исключить закрытые займы и оставить только записи с просроченными датами (те, где дата платежа меньше текущей).РАЗНОСТЬДАТ.Рассмотрим структуру запроса. Для передачи текущей даты мы используем параметр &ТекущаяДата, который инициализируется перед выполнением запроса функцией ТекущаяДата().
ВЫБРАТЬ ПЕРВЫЕ 5
Т.Сделка,
Т.Договор,
РАЗНОСТЬДАТ(Т.МинимальнаяДата, &ТекущаяДата, ДЕНЬ) КАК СрокПросрочки,
Остатки.СуммаОстаток
ПОМЕСТИТЬ ВТ_Просрочки
ИЗ (
ВЫБРАТЬ
Регистр.Сделка КАК Сделка,
Регистр.Договор КАК Договор,
МИН(Регистр.ДатаПлатежа) КАК МинимальнаяДата
ИЗ
РегистрНакопления.ДолгосрочныеЗаймы.Остатки(&ТекущаяДата, ) КАК Регистр
ГДЕ
Регистр.ДатаПлатежа < &ТекущаяДата
СГРУППИРОВАТЬ ПО
Регистр.Сделка, Регистр.Договор
) КАК Т
ЛЕВОЕ СОЕДИНЕНИЕ ХозрасчетныйОстатки(&ТекущаяДата, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ЗаймыВыданные), , ) КАК Остатки
ПО Т.Договор = Остатки.Субконто1;
ВЫБРАТЬ ПЕРВЫЕ 5 * ИЗ ВТ_Просрочки УПОРЯДОЧИТЬ ПО СрокПросрочки УБЫВ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ПЕРВЫЕ 5 * ИЗ ВТ_Просрочки УПОРЯДОЧИТЬ ПО СрокПросрочки ВОЗР;
При работе с большими объемами данных важно учитывать несколько аспектов:
Остатки. Платформа самостоятельно выполнит агрегацию, что значительно быстрее, чем самостоятельный перебор всех движений документа.ТекущаяДата() непосредственно внутри текста запроса. Передавайте её как параметр, чтобы оптимизатор запросов мог эффективно построить план выполнения.ДатаПлатежа), проиндексированы в конфигураторе. Это критично для производительности при поиске просроченных платежей.Договор или Субконто.Следуя этим шагам, вы сможете не только решить поставленную задачу, но и создать надежный инструмент для регулярного мониторинга задолженности по займам в вашей учетной системе.