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

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Анализ типичных ошибок в запросах к регистру бухгалтерии

Рассмотрим исходный вариант запроса, который часто пытаются использовать для вычисления просрочки:


ВЫБРАТЬ
    ВЫБОР
        КОГДА ХозрасчетныйОстатки.СуммаОстаток - ХозрасчетныйОбороты.СуммаОборотКт > 0
            ТОГДА ХозрасчетныйОстатки.СуммаОстаток - ХозрасчетныйОбороты.СуммаОборотКт
        ИНАЧЕ 0
    КОНЕЦ КАК ПросроченнаяЗадолженность
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&СЧ), , Субконто2 = &Договор) КАК ХозрасчетныйОстатки,
    РегистрБухгалтерии.Хозрасчетный.Обороты(&Дата, , , Счет В ИЕРАРХИИ (&СЧ), , Субконто2 = &Договор, , ) КАК ХозрасчетныйОбороты

Проанализируем ключевые методологические и синтаксические проблемы этой конструкции:

  1. Декартово произведение и отсутствие соединений. Указание двух виртуальных таблиц через запятую без секций ЛЕВОЕ СОЕДИНЕНИЕ или ПОЛНОЕ СОЕДИНЕНИЕ приводит к декартову произведению. Если на указанную дату остаток есть, а оборотов за период не было, виртуальная таблица оборотов вернет пустоту, а весь запрос не вернет ни одной строки.
  2. Некорректная работа со значениями NULL. Если одна из таблиц не содержит записей по договору, при соединении образуются поля со значением NULL. Выражение СуммаОстаток - NULL возвращает NULL, а проверка NULL > 0 дает результат Ложь. Обязательно требуется оборачивать числовые поля в функцию ЕСТЬNULL().
  3. Особенности отражения документов «Возврат товаров от покупателя». В типовых конфигурациях 1С документ возврата формирует не кредитовый оборот по счету 62 (СуммаОборотКт), а сторнировочную проводку с отрицательным значением по дебету счета расчетов (СуммаОборотДт < 0). В результате поле СуммаОборотКт остается равным нулю, а операция уменьшения долга через кредит счета просто не фиксируется.
  4. Логическая несостоятельность формулы «Остаток минус Оборот». Вычитание кредитового оборота из остатка на одну и ту же контрольную дату не отражает реальную глубину долга и просрочку. Задолженность погашается по принципу ФИФО с учетом условий конкретного договора (срока отсрочки платежа).

Способ 1. Использование специализированных регистров накопления взаиморасчетов

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

Рассмотрим преимущества работы с регистрами накопления взаиморасчетов:

  1. Использование регистра ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов позволяет видеть остаток долга в разрезе конкретных документов возникновения задолженности (накладных, актов).
  2. Наличие реквизитов и измерений, хранящих дату оплаты или дату возникновения обязательства, избавляет от необходимости писать сложные формулы вычитания оборотов.
  3. Автоматический учет сторно-движений и возвратов в рамках закрытия конкретных документов партии расчетов.

Способ 2. Корректное получение остатков по документам расчетов через регистр бухгалтерии

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

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


ВЫБРАТЬ
    ОстаткиПоДокументам.Субконто1 КАК Контрагент,
    ОстаткиПоДокументам.Субконто2 КАК Договор,
    ОстаткиПоДокументам.Субконто3 КАК ДокументРасчетов,
    ЕСТЬNULL(ОстаткиПоДокументам.СуммаОстатокДт, 0) КАК СуммаДолга
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
        &ГраницаПросрочки,
        Счет В ИЕРАРХИИ (&СчетРасчетов),
        &МассивВидовСубконто,
        Субконто1 = &Контрагент И Субконто2 = &Договор
    ) КАК ОстаткиПоДокументам
ГДЕ
    ЕСТЬNULL(ОстаткиПоДокументам.СуммаОстатокДт, 0) > 0

Выясним причину, почему данный подход надежнее:

  1. Параметр &ГраницаПросрочки рассчитывается заранее в коде (например, ТекущаяДата() - ДнейОтсрочки * 86400). Все документы, по которым остался дебетовый остаток на эту дату, автоматически считаются просроченными.
  2. Возвраты и оплаты, проведенные датами ранее контрольной точки, уменьшают дебетовый остаток по документу расчетов независимо от того, были ли они проведены как сторно по дебету или как стандартный оборот по кредиту.
  3. Исключаются любые попытки математических манипуляций вроде умножения оборотов на -1, которые приводят к логическим ошибкам в условиях ветвления ВЫБОР КОГДА ....

Рекомендации по контролю корректности данных

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

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