При работе в крупных торговых или производственных системах на базе 1С:ERP, КА или УТ 11, часто возникает классический конфликт между требованиями бухгалтерии и нуждами отдела продаж. Бухгалтерия настаивает на ведении взаиморасчетов «По договорам», чтобы не загромождать учет лишней аналитикой, в то время как менеджеры хотят видеть корректную картину просрочки в разрезе конкретных дат платежа (графиков оплат).
Стандартный механизм ФИФО в 1С привязан к дате возникновения обязательства (дате накладной). Рассмотрим ситуацию: по первой накладной клиенту предоставлена рассрочка с платежами 1.10 и 1.11. Вторая накладная выписана позже, но с датой платежа 5.10. При поступлении оплаты система по умолчанию «закроет» первую накладную целиком, проигнорировав тот факт, что срок оплаты по второй накладной наступает раньше. В результате вторая накладная необоснованно уйдет в просрочку.
В этой статье мы разберем, как решить эту проблему, используя современные возможности платформы и кастомные алгоритмы распределения.
Для начала проанализируем, как работают современные конфигурации (ERP 2.5, КА 2.5, УТ 11.5). В них реализована архитектура «Взаиморасчеты онлайн», которая разделяет фактическую задолженность (кто кому должен по документам) и плановую (график оплат). Это позволяет системе «видеть» сроки оплат, даже если детализация расчетов установлена в значение ПоДоговорам.
Разберем по шагам, как можно использовать стандартный функционал для обхода жесткого ФИФО:
ПоступлениеБезналичныхДенежныхСредств) при выборе объекта расчетов Договор появляется возможность использовать команду распределения. Система анализирует регистр ПлановыеОплаты и подбирает документы не по дате их создания, а по ближайшей дате наступления платежа.Часто бухгалтерия боится учета «По заказам» из-за сложности распределения авансов. Однако можно применить компромиссный вариант: вести учет ПоДоговорам, но активно использовать ЗаказКлиента как распоряжение для формирования графика.
Проанализируем ситуацию: если в договоре указано, что детализация расчетов идет по договорам, но в накладных указаны заказы-основания с заполненными графиками оплат, система сохранит общую сумму долга по договору, но в отчетах по дебиторской задолженности сможет выводить данные по срокам. Стандартный отчет «Задолженность клиентов по срокам» при правильной настройке Календаря оплат будет считать долг просроченным именно исходя из дат графика, а не даты документа отгрузки.
Если типовые механизмы не подходят и требуется полностью автоматизировать процесс без участия пользователя, придется дорабатывать обработку проведения платежа. Рассмотрим математический алгоритм, который позволяет «размазать» задолженность по графику оплат в обход стандартного ФИФО.
Суть метода заключается в расчете остатков «на лету». Мы берем общую дебиторскую задолженность контрагента по договору и распределяем её по всем ожидаемым платежам (этапам оплат) в обратной хронологической последовательности или по приоритету дат.
Пример логики распределения на языке 1С:
// Пример логики подбора документов по датам платежа
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПлановыеОплаты.ДокументПланирования КАК ДокументРасчетов,
| ПлановыеОплаты.ДатаПлановогоПлатежа КАК ДатаПлатежа,
| ПлановыеОплаты.СммаОстаток КАК СуммаКПогашению
|ИЗ
| РегистрНакопления.ПлановыеОплаты.Остатки(&Период, ОбъектРасчетов = &Договор) КАК ПлановыеОплаты
|УПОРЯДОЧИТЬ ПО
| ДатаПлатежа ВОЗРАСТАНИЕ";
Выборка = Запрос.Выполнить().Выбрать();
ОстатокОплаты = Объект.СуммаДокумента;
Пока Выборка.Следующий() И ОстатокОплаты > 0 Цикл
СуммаВДокумент = Мин(ОстатокОплаты, Выборка.СуммаКПогашению);
// Заполняем расшифровку платежа
НоваяСтрока = Объект.РасшифровкаПлатежа.Добавить();
НоваяСтрока.ДокументОбъектРасчетов = Выборка.ДокументРасчетов;
НоваяСтрока.Сумма = СуммаВДокумент;
ОстатокОплаты = ОстатокОплаты - СуммаВДокумент;
КонецЦикла;
Этот подход гарантирует, что в первую очередь будут закрыты те документы, у которых дата платежа (а не дата документа) является самой ранней. Таким образом, мы имитируем ФИФО, но базируемся на ДатеПлановогоПлатежа.
Выясним причину, почему программисты часто сталкиваются с трудностями при такой реализации. В 1С:ERP, если в договоре выбрана детализация ПоДоговорам, регистр РасчетыСКлиентами может не содержать аналитику по документам-основаниям в явном виде (как ОбъектРасчетов).
Однако система все равно ведет скрытый учет в разрезе документов для целей налогового учета (НДС, Книга продаж) и для отчетов по срокам задолженности. Проанализируем ключевые моменты:
РасчетыСКлиентамиПоСрокам. Это основной источник информации о том, какая накладная и на какую дату должна быть оплачена.РасшифровкиПлатежа, убедитесь, что бухгалтерия понимает: итоговое сальдо по договору не изменится, но изменится привязка конкретных сумм к документам в регистрах накопления.Мы рассмотрели несколько путей решения задачи распределения по датам платежа. Если вы используете актуальные релизы 1С, первым делом попробуйте включить режим «Взаиморасчеты онлайн» и использовать кнопку распределения по плановым датам в платежках. Это самый дешевый и надежный способ.
Если же требуется полная автоматизация «под ключ», используйте предложенный алгоритм перебора остатков по регистру ПлановыеОплаты или РасчетыСКлиентамиПоСрокам с сортировкой по дате платежа. Это позволит сохранить привычный бухгалтерии учет по договорам, обеспечив при этом корректную работу службы контроля дебиторской задолженности.