Как распределить взаиморасчеты с клиентами по датам платежа (графику), если учет ведется по договорам?

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

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

Стандартный механизм ФИФО в 1С привязан к дате возникновения обязательства (дате накладной). Рассмотрим ситуацию: по первой накладной клиенту предоставлена рассрочка с платежами 1.10 и 1.11. Вторая накладная выписана позже, но с датой платежа 5.10. При поступлении оплаты система по умолчанию «закроет» первую накладную целиком, проигнорировав тот факт, что срок оплаты по второй накладной наступает раньше. В результате вторая накладная необоснованно уйдет в просрочку.

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

Механизм «Взаиморасчеты онлайн» и плановые даты

Для начала проанализируем, как работают современные конфигурации (ERP 2.5, КА 2.5, УТ 11.5). В них реализована архитектура «Взаиморасчеты онлайн», которая разделяет фактическую задолженность (кто кому должен по документам) и плановую (график оплат). Это позволяет системе «видеть» сроки оплат, даже если детализация расчетов установлена в значение ПоДоговорам.

Разберем по шагам, как можно использовать стандартный функционал для обхода жесткого ФИФО:

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

Использование «Заказов» как распоряжений при учете по договору

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

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

Разработка собственного алгоритма распределения (математический метод)

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

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

Пример логики распределения на языке 1С:


// Пример логики подбора документов по датам платежа
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПлановыеОплаты.ДокументПланирования КАК ДокументРасчетов,
    |	ПлановыеОплаты.ДатаПлановогоПлатежа КАК ДатаПлатежа,
    |	ПлановыеОплаты.СммаОстаток КАК СуммаКПогашению
    |ИЗ
    |	РегистрНакопления.ПлановыеОплаты.Остатки(&Период, ОбъектРасчетов = &Договор) КАК ПлановыеОплаты
    |УПОРЯДОЧИТЬ ПО
    |	ДатаПлатежа ВОЗРАСТАНИЕ";

Выборка = Запрос.Выполнить().Выбрать();
ОстатокОплаты = Объект.СуммаДокумента;

Пока Выборка.Следующий() И ОстатокОплаты > 0 Цикл
    СуммаВДокумент = Мин(ОстатокОплаты, Выборка.СуммаКПогашению);
    
    // Заполняем расшифровку платежа
    НоваяСтрока = Объект.РасшифровкаПлатежа.Добавить();
    НоваяСтрока.ДокументОбъектРасчетов = Выборка.ДокументРасчетов;
    НоваяСтрока.Сумма = СуммаВДокумент;
    
    ОстатокОплаты = ОстатокОплаты - СуммаВДокумент;
КонецЦикла;

Этот подход гарантирует, что в первую очередь будут закрыты те документы, у которых дата платежа (а не дата документа) является самой ранней. Таким образом, мы имитируем ФИФО, но базируемся на ДатеПлановогоПлатежа.

Нюансы реализации при учете «По договорам»

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

Однако система все равно ведет скрытый учет в разрезе документов для целей налогового учета (НДС, Книга продаж) и для отчетов по срокам задолженности. Проанализируем ключевые моменты:

Выводы

Мы рассмотрели несколько путей решения задачи распределения по датам платежа. Если вы используете актуальные релизы 1С, первым делом попробуйте включить режим «Взаиморасчеты онлайн» и использовать кнопку распределения по плановым датам в платежках. Это самый дешевый и надежный способ.

Если же требуется полная автоматизация «под ключ», используйте предложенный алгоритм перебора остатков по регистру ПлановыеОплаты или РасчетыСКлиентамиПоСрокам с сортировкой по дате платежа. Это позволит сохранить привычный бухгалтерии учет по договорам, обеспечив при этом корректную работу службы контроля дебиторской задолженности.

← На главную