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