Переход на редакцию 1С:Управление Торговлей 11.5 принес значительные изменения в архитектуру взаиморасчетов. Одной из самых частых проблем, с которой мы сталкиваемся при разработке обменов или программном создании документов закупки, является ошибка записи в регистр накопления РасчетыСПоставщиками (или РасчетыСКлиентами). Текст ошибки обычно выглядит так: "Запись не верна! Значение поля 'Объект расчетов' не может быть пустым" (поможет инструмент диагностики и исправления ошибок учета 1С).
В этой статье мы подробно разберем, почему возникает эта ошибка, как работает механизм "Объектов расчетов" в новых версиях конфигурации и как правильно заполнять документы программно, чтобы избежать проблем при проведении.
В старых версиях (до 11.5) аналитикой взаиморасчетов выступали непосредственно документы (Заказ, Накладная) или Договор. В УТ 11.5 (а также в КА 2.5 и ERP 2.5) появился служебный справочник ОбъектыРасчетов.
Теперь регистры взаиморасчетов не ссылаются напрямую на документ-регистратор или договор в качестве измерения. Вместо этого они ссылаются на элемент справочника ОбъектыРасчетов. Этот элемент создается или ищется системой автоматически перед записью движений. Ошибка "Поле не может быть пустым" означает, что алгоритм проведения не смог определить, какой именно объект должен выступать аналитикой учета, и передал в набор записей регистра пустое значение (Null или Неопределено). Понять, какие именно данные сформировались в регистрах, помогает Анализ продаж и оплат по объектам расчётов – УТ 11.5, КА 2.5, ЕРП 2.5.
Самая распространенная причина ошибки кроется в настройках справочника ДоговорыКонтрагентов. Давайте посмотрим на вкладку "Расчеты и оформление", реквизит "Детализация расчетов".
Система ожидает заполнения реквизитов в документе ПриобретениеТоваровУслуг в строгом соответствии с этой настройкой:
Если в договоре выбрана эта опция, система будет искать ссылку на документ ЗаказПоставщику. При программном заполнении многие совершают ошибку, заполняя заказ только в шапке документа (или на вкладке "Дополнительно"). Однако, если приобретение формируется по нескольким заказам (как в случае автора вопроса), ссылка на заказ обязательно должна присутствовать в табличной части Товары в каждой строке.
Если хотя бы в одной строке колонка "Заказ" пустая, система не сможет сформировать запись регистра для этой строки, что приведет к ошибке. Для проверки корректности связей документов полезна Ведомость взаиморасчетов с поставщиками расширенная, позволяющая видеть заказы и оплаты в одном отчете.
В этом случае объектом расчетов является сам договор. Ошибка может возникнуть, если в документе не заполнен договор или выбран договор с неверным типом (например, "С покупателем" вместо "С поставщиком").
Объектом расчетов выступает само Приобретение. Здесь ошибка при программном вводе может возникать, если мы пытаемся провести документ, у которого еще нет ссылки (он не записан в БД), хотя платформа обычно обрабатывает это корректно.
Когда мы создаем документ программно, мы часто копируем только очевидные поля: Контрагент, Организация, Склад, Товары. Однако процедура проведения в УТ 11.5 анализирует гораздо больше данных.
Рассмотрим важные моменты, которые нужно проверить в коде:
1. Заполнение табличной части "Товары"
Как мы выяснили выше, при детализации расчетов "По заказам", ссылка на заказ должна быть в строках. Давайте посмотрим пример корректного заполнения:
// Пример заполнения строки товаров при создании Приобретения на основании Заказа
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
// ... заполнение количества и сумм ...
// ВАЖНО: Если расчеты по заказам, это поле обязательно
НоваяСтрока.Заказ = СсылкаНаЗаказПоставщику;
Если вы собираете одно Приобретение из нескольких Заказов, убедитесь, что все заказы имеют одинаковые ключевые параметры (Валюта, Хозяйственная операция, Организация, Контрагент).
2. Хозяйственная операция
Реквизит ХозяйственнаяОперация определяет логику проведения. Если вы не заполните его или заполните значением по умолчанию (которое может быть пустым), система не поймет, в какой регистр писать данные и как определять объект расчетов. Для закупки классическое значение:
ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика;
3. Использование стандартных методов заполнения
Вместо "ручного" присвоения свойств, мы настоятельно рекомендуем использовать методы менеджера или объекта документа (поможет настройка правил создания документов на основании без программирования). Это гарантирует, что служебные таблицы (например, ЭтапыГрафикаОплаты) заполнятся корректно.
// Создание документа с использованием стандартного механизма ввода на основании
ПараметрыОснования = Новый Структура;
ПараметрыОснования.Вставить("ДокументОснование", СсылкаНаЗаказ);
ДокументОбъект = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();
ДокументОбъект.Заполнить(ПараметрыОснования);
// Далее корректируем данные, если нужно
Иногда ошибка возникает даже при использовании стандартного ввода на основании (о чем упоминалось в обсуждении). Это может указывать на некорректные данные в самом ЗаказеПоставщику.
Регистр РасчетыСПоставщиками тесно связан с графиками платежей. Если в Заказе на вкладке "Основное" (или по ссылке "К оплате") не заполнены правила оплаты, или если суммы в правилах оплаты не соответствуют сумме документа, система "теряет" объект расчетов. В сложных схемах закупок, например, "под заказ клиента", отследить цепочку поможет отчет Портфель контрактов в рамках заказа клиента (оплаты от клиента, заказы поставщику, оплаты поставщику).
Как проверить:
Если вы столкнулись с ошибкой "Поле 'Объект расчетов' не может быть пустым", выполните следующие шаги для решения:
Договор.Заказ в табличной части Товары.ХозяйственнаяОперация.Ошибка с пустым объектом расчетов в УТ 11.5 — это почти всегда сигнал о том, что логическая связь "Заказ -> Накладная" или "Договор -> Накладная" нарушена. Система не может автоматически определить, какую "кучку" долга нужно закрыть или увеличить. Внимательно следите за соответствием настройки детализации расчетов в договоре и фактическим заполнением ссылок на заказы в строках табличной части документа.
Если последствия ошибок уже накопились, для быстрой оценки ситуации используйте отчет Расчеты с поставщиками, а для очистки некорректных долгов и "хвостов" может потребоваться Групповое создание документов Корректировка задолженности.