Как исправить ошибку «Поле объекта не обнаружено» при использовании входящих данных в КД 2.0 и настроить перенос серий в КА 2.4

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Управленческий учет IT и автоматизация бизнеса
← На главную

При переносе данных между старыми редакциями (например, КА 1.1) и современными конфигурациями (КА 2.4, ERP 2.x) с помощью «Конвертации данных 2.0» программисты часто сталкиваются с тем, что стандартные правила ведут себя непредсказуемо. Одной из самых коварных проблем является работа с механизмом «Получить значение из входящих данных» в правилах конвертации свойств (ПКС) и последующая «пропажа» перенесенных серий в документах приемника. Разберем детально, как работают эти механизмы и как заставить серии отображаться корректно.

Анализ ошибки получения свойства из входящих данных

Рассмотрим ситуацию: при выгрузке возникает ошибка Ошибка получения свойства объекта из входящих данных. Это происходит в тот момент, когда в ПКС (например, для свойства ВидНоменклатуры) установлена галочка «Получить значение из входящих данных», но система не находит нужного значения в переданной структуре.

Важно понимать фундаментальный принцип: параметр ВходящиеДанные в ПКО (Правило конвертации объекта) заполняется только тогда, когда в ПКС, которое вызвало это ПКО, был программно инициализирован параметр ИсходящиеДанные. Если вы просто ставите галочку «Получить из входящих данных», но не передаете структуру «сверху», алгоритм КД 2.0 пытается обратиться к полям пустой структуры, что и вызывает ошибку Поле объекта не обнаружено.

Проанализируем типичный сценарий: вы хотите передать ВидНоменклатуры для серии, основываясь на владельце этой серии. Если вы используете входящие данные, ваш код в родительском ПКС должен выглядеть примерно так:


// В ПКС, которое вызывает ПКО СерииНоменклатуры
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("ВидНоменклатуры", Источник.Владелец.ВидНоменклатуры);

Только в этом случае в подчиненном ПКО (в ПКС ВидНоменклатуры с установленной галочкой) система сможет извлечь значение.

Реализация логики в ПКО СерииНоменклатуры

Если вы хотите сделать правила более универсальными, рекомендуется проверять тип источника. Часто бывает, что ПКО вызывается разными способами: либо напрямую (где Источник — это объект), либо через структуру (где Источник — это Неопределено, а данные лежат во ВходящиеДанные).

Посмотрим на пример кода в обработчике ПередВыгрузкой ПКС ВидНоменклатуры:


Если ТипЗнч(Источник) <> Тип("Структура") И Источник <> Неопределено Тогда
    // Если передан объект (например, из КА 1.1), берем владельца
    Значение = Источник.Владелец.ВидНоменклатуры;    
ИначеЕсли ВходящиеДанные <> Неопределено Тогда
    // Если передана структура из вызывающего правила
    Значение = ВходящиеДанные.ВидНоменклатуры;
КонецЕсли;

Однако, даже если ссылка на ВидНоменклатуры передана верно, в КА 2.4 вы можете столкнуться с тем, что серии в документах отображаются «красным» (как не указанные) или вовсе исчезают при записи документа.

Почему серии «исчезают» в КА 2.4 и ERP

В современных конфигурациях (ERP-линейка) учет серий значительно сложнее, чем в КА 1.1. За автоматическое удаление серий отвечает серверный программный код, который проверяет настройки системы. Проанализируем причину удаления:

  1. В процедуре ПередЗаписью документа вызывается метод НоменклатураСервер.ОчиститьНеиспользуемыеСерии.
  2. Если в Виде номенклатуры не настроена Политика учета серий или она не привязана к конкретному складу, система считает серии лишними данными.
  3. Даже если настройки верны, важную роль играет служебный реквизит табличной части — СтатусУказанияСерий.

Если СтатусУказанияСерий равен 0, то при любом интерактивном действии или перепроведении серии будут очищены, так как система считает, что их указывать не требуется.

Работа с реквизитом СтатусУказанияСерий

Для того чтобы система «увидела» серии, перенесенные программно, необходимо заполнить СтатусУказанияСерий в табличной части (например, Товары). Это числовой реквизит, который определяет состояние иконки серии в форме документа.

Рассмотрим основные значения этого статуса:

В правилах конвертации (ПКС) для табличной части документа в обработчике ПередВыгрузкой свойства СтатусУказанияСерий следует прописать логику заполнения:


// Если в источнике (КА 1.1) заполнена серия, устанавливаем статус 14 (учет себестоимости)
Если ЗначениеЗаполнено(ОбъектКоллекции.СерияНоменклатуры) Тогда
    Значение = 14;
Иначе
    Значение = 0;
КонецЕсли;

Особенности настройки Видов номенклатуры в приемнике

Никакой программный перенос не поможет, если в базе-приемнике (КА 2.4) неправильно настроены справочники. Выясним, что нужно проверить в первую очередь:

  1. Использовать серии: этот флаг должен быть включен в карточке Вида номенклатуры.
  2. Политика учета серий: создайте политику (например, «Учет по сериям») и выберите тип политики (например, «Учет себестоимости по сериям» или «Справочное указание»).
  3. Настройки склада: в форме настройки Вида номенклатуры перейдите по гиперссылке «Настройки учета серий» и убедитесь, что для вашего склада (или группы складов) выбрана созданная политика.

Если вы переносите данные через КД 2.0, рекомендуется в ПКО ВидыНоменклатуры также передавать структуру через ИсходящиеДанные, чтобы программно включить флаги ИспользоватьСерии и привязать нужную политику, иначе после загрузки документы придется «дотягивать» вручную.

Решение проблемы с табличной частью «Серии»

В некоторых случаях (зависит от политики) серии хранятся не в основной табличной части Товары, а в подчиненной таблице Серии. В этом случае связь между строкой товара и строками серий осуществляется через поле КлючСвязи.

При переносе данных из КА 1.1, где серия всегда одна на строку, мы можем имитировать заполнение этой таблицы. Однако проще всего настроить политику учета таким образом, чтобы серия указывалась непосредственно в строке товара. Если же бизнес-процесс требует использования отдельной таблицы, вам придется в правилах конвертации документа (в обработчике ПослеЗагрузки или через ПКГС) программно генерировать КлючСвязи (обычное числовое поле, уникальное в рамках документа) для каждой строки Товары и соответствующей ей строки в ТЧ Серии.

Подведем итог: для успешного переноса серий необходимо не только правильно передать ссылки на объекты через ВходящиеДанные, но и обеспечить корректную «видимость» этих данных для бизнес-логики КА 2.4, заполнив технические реквизиты статусов и предварительно настроив учетную политику в базе-приемнике.

← На главную