Как настроить автоматическое заполнение договора как объекта расчетов при загрузке выписок в 1С:ERP 2.4?

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

При работе в 1С:ERP Управление предприятием 2.4 бухгалтеры часто сталкиваются с ситуацией, когда при загрузке банковских выписок через клиент-банк система автоматически подставляет в поле «Объект расчетов» конкретный заказ или документ поступления вместо основного договора. Это происходит даже в тех случаях, когда в договоре явно указана детализация расчетов «По договорам». В результате в оборотно-сальдовой ведомости (ОСВ) авансы могут не закрываться автоматически, так как оплата «висит» на заказе, а накладная — на договоре.

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

Анализ алгоритмов подбора объектов расчетов

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

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

Рассмотрим пример кода, который отвечает за поиск договора по банковским счетам:


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

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

Приоритеты распределения сумм в выписке

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


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

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

Как заставить систему выбирать договор: практические шаги

Чтобы минимизировать подстановку заказов и накладных, мы рекомендуем выполнить следующие настройки:

  1. Проверьте детализацию расчетов в договоре. Зайдите в карточку договора, вкладка «Расчеты и оформление». Убедитесь, что установлено значение «Детализация расчетов: По договорам». Если выбрано «По заказам» или «По расчетным документам», система всегда будет игнорировать договор в качестве объекта расчетов.
  2. Привяжите банковские счета к договору. Это самый эффективный способ «подсказать» программе правильный выбор. В карточке договора укажите расчетный счет контрагента. При загрузке выписки система увидит этот счет в файле и автоматически выберет связанный с ним договор.
  3. Настройка параметров казначейства. Перейдите в раздел НСИ и администрирование — Казначейство. Обратите внимание на настройки автоматического подбора. В ряде релизов ERP можно ограничить глубину поиска документов расчетов.
  4. Анализ «Назначения платежа». Алгоритм загрузки анализирует текст назначения платежа. Если в тексте указано «Оплата по заказу №...», система с высокой вероятностью попытается найти этот заказ. Формализация текстов платежей со стороны контрагентов также помогает стабилизировать загрузку.

Особенности отображения в проводках и ОСВ

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

Ситуация: В документе Поступление безналичных денежных средств в поле объект расчетов указан «Заказ», но в самом заказе стоит расчет «По договору».

В этом случае в проводках (Дт 51 — Кт 62) может не отображаться заказ, так как 1С:ERP сворачивает аналитику до договора при проведении, но только после выполнения регламентного задания по расчету взаиморасчетов. Если у вас включен режим «Оффлайн-расчетов», то реальную картину в ОСВ вы увидите только после запуска обработки «Задания к расчету взаиморасчетов» или закрытия месяца.

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

Резюме

Выясним причину «безобразия», как выразился автор вопроса: это не ошибка программы, а работа встроенной системы приоритетов. Чтобы договор подставлялся автоматически:

← На главную