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