Как вывести дебиторскую задолженность с детализацией по месяцам возникновения в 1С?

Программист 1C:Бухгалтерия Бухгалтерский учет Финансы и профессиональные услуги
← На главную

Задача вывода дебиторской задолженности по месяцам (так называемый отчет по «старению» задолженности) является классической для бухгалтерского и управленческого учета. Основная сложность заключается в том, что стандартная виртуальная таблица ОстаткиИОбороты регистра Хозрасчетный при выборе периодичности «Месяц» выдает остатки на конец каждого месяца. Это не позволяет напрямую увидеть, какая часть сегодняшнего долга возникла в текущем месяце, какая — в прошлом, а какая тянется уже полгода.

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

Анализ типового решения

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

Основные принципы работы типового алгоритма:

  1. Метод ФИФО «наоборот»: Программа берет остаток долга на текущую дату и начинает «покрывать» его оборотами (продажами) за последние периоды, двигаясь из настоящего в прошлое.
  2. Использование регистра бухгалтерии: Все расчеты строятся на аналитике регистра Хозрасчетный (Контрагенты, Договоры, Счета).
  3. Распределение по интервалам: Полученные суммы распределяются по колонкам в зависимости от количества дней или месяцев, прошедших с даты возникновения долга.

Методика расчета через запрос с нарастающими итогами

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

Шаг 1. Получение текущего остатка

Сначала мы получаем общий остаток задолженности по дебету счета (например, 62.01) в разрезе контрагентов и договоров на актуальную дату. Для этого используем виртуальную таблицу Остатки.

Шаг 2. Получение оборотов по месяцам

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

Шаг 3. Сопоставление и нарастающий итог

Проанализируем ситуацию: если текущий долг контрагента составляет 100 рублей, а в текущем месяце была отгрузка на 80 рублей, значит, 80 рублей долга относятся к текущему месяцу, а оставшиеся 20 рублей — к предыдущим. Чтобы автоматизировать этот расчет в запросе, используются нарастающие итоги оборотов, взятые в обратном хронологическом порядке (от новых к старым).

Пример логики условия в запросе:


ВЫБРАТЬ
    ТЗ_Остатки.Контрагент,
    ТЗ_Обороты.ПериодМесяц,
    ВЫБОР
        КОГДА ТЗ_Остатки.СуммаОстаток > ТЗ_Обороты.НарастающийОборот
        ТОГДА ТЗ_Обороты.СуммаОборот
        ИНАЧЕ ТЗ_Остатки.СуммаОстаток - (ТЗ_Обороты.НарастающийОборот - ТЗ_Обороты.СуммаОборот)
    КОНЕЦ КАК СуммаЗадолженностиВПериоде
ИЗ
    ТЗ_Остатки КАК ТЗ_Остатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ_Обороты КАК ТЗ_Обороты
    ПО ТЗ_Остатки.Контрагент = ТЗ_Обороты.Контрагент

Важные технические нюансы реализации

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

Учет авансов и зачетов

Если по договору есть и задолженность, и авансы (развернутое сальдо), необходимо убедиться, что вы анализируете чистую задолженность. Рекомендуется предварительно производить взаимозачет в рамках запроса или использовать аналитику ДокументРасчетов, если в договоре включен признак «Вести расчеты по документам». В этом случае задача упрощается, так как остаток по каждой накладной уже имеет дату возникновения.

Оптимизация производительности

Обращение к виртуальной таблице ОстаткиИОбороты с периодичностью «Месяц» за большой период — ресурсоемкая операция. Выясним причину: СУБД приходится выполнять сложные вложенные соединения для вычисления итогов на каждую контрольную точку. Чтобы отчет работал быстро, придерживайтесь следующих правил:

Валютный учет и курсовые разницы

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

Альтернативные способы

Если вы работаете в комплексных конфигурациях, таких как 1С:Управление торговлей 11, КА или ERP, задачу можно решить гораздо проще. В этих системах существуют специализированные регистры накопления (например, РасчетыСКлиентамиПоСрокам), в которых информация о датах возникновения и планового погашения долга хранится в явном виде. В этом случае достаточно построить простой отчет по остаткам данного регистра без сложных вычислений нарастающих итогов.

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

← На главную