Как исправить ошибку «Получение элемента по индексу для значения не определено» при конвертации СчетФактураПолученный из УПП 1.3 в БП 2.0?

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

При настройке и кастомизации правил обмена между конфигурациями 1С на платформе «1С:Предприятие 8» разработчики часто сталкиваются с непредвиденными ошибками в процессе выгрузки или загрузки данных. Типичный пример — сбой при переносе документа СчетФактураПолученный из конфигурации «Управление производственным предприятием, редакция 1.3» (УПП) в конфигурацию «Бухгалтерия предприятия, редакция 2.0» (БП 2.0).

Давайте подробно проанализируем логику возникновения этой ошибки, разберем причины ее появления и рассмотрим четыре практических способа ее устранения.


Анализ лога ошибки и выявление первопричины

Для начала внимательно изучим текст сообщения об ошибке, которое выдает обработка «Универсальный обмен данными XML»:


Ошибка получения значения свойства объекта (по имени свойства источника)
    ПКО                 =  Хозрасчетный  (План счетов: План счетов бухгалтерского учета)
    ПКС                 =  1  (ЗапретитьИспользоватьВПроводках --> ЗапретитьИспользоватьВПроводках)
    Объект              =  62.01  (Строка)
    СвойствоПриемника      =  ЗапретитьИспользоватьВПроводках  (Булево)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8283)

Давайте разберем эту запись по ключевым составляющим, чтобы понять, что именно пошло не так:

  1. ПКО (Правило конвертации объектов) = Хозрасчетный. Ошибка возникает в момент обработки данных плана счетов бухгалтерского учета.
  2. ПКС (Правило конвертации свойств) = ЗапретитьИспользоватьВПроводках. Алгоритм пытается перенести значение этого реквизита из базы-источника в базу-приемник.
  3. Объект = 62.01 (Строка). Это самый важный момент! В качестве источника данных выступает не ссылка на элемент плана счетов (ПланСчетовСсылка.Хозрасчетный), а обычное текстовое значение типа Строка.
  4. Описание ошибки = Получение элемента по индексу для значения не определено.

Когда универсальная обработка обмена пытается выгрузить свойство ЗапретитьИспользоватьВПроводках для объекта 62.01, она обращается к нему как к свойству объекта. Но так как в переменную Источник попала обычная строка "62.01", платформа пытается выполнить обращение по индексу или через точку (например, Источник["ЗапретитьИспользоватьВПроводках"]). У типа Строка нет такого свойства, что и приводит к аварийному завершению работы системы.

Дополнительная сложность заключается в том, что в плане счетов УПП 1.3 присутствует реквизит ЗапретитьИспользоватьВПроводках, а в БП 2.0 (особенно если она устарела или снята с поддержки) такого реквизита может не быть вовсе, либо правила обмена некорректно сопоставляют метаданные.


Способ 1. Исправление типа значения в ПКС документа-источника

Если ошибка возникает именно при выгрузке документа СчетФактураПолученный, скорее всего, в правилах конвертации свойств этого документа (или в связанных с ним ПКО) счет учета передается некорректно. Например, в обработчике «Перед выгрузкой» какого-то свойства жестко прописано текстовое значение вида Значение = "62.01";.

Давайте исправим это, заменив строковое значение на реальную ссылку на счет учета. Вместо передачи строки мы найдем счет в плане счетов источника:


// Вместо строки Значение = "62.01"; используем поиск ссылки:
СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
Если ЗначениеЗаполнено(СчетУчета) Тогда
    Значение = СчетУчета;
Иначе
    // Резервный вариант на случай, если счет не найден
    Значение = Неопределено;
КонецЕсли;

После такого изменения в ПКО Хозрасчетный в качестве источника будет передаваться полноценный объект ссылки, у которого платформа сможет прочитать все необходимые свойства, включая ЗапретитьИспользоватьВПроводках.


Способ 2. Защитный код (обработка входящей строки) в ПКО «Хозрасчетный»

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

Выполним следующие шаги в конфигурации «Конвертация данных 2.1»:

  1. Откройте правила обмена и перейдите в Правила конвертации объектов (ПКО).
  2. Найдите ПКО Хозрасчетный.
  3. Откройте обработчик события «Перед выгрузкой» для этого ПКО.
  4. Добавьте код, который проверяет тип входящего источника и при необходимости преобразует его:

Если ТипЗнч(Источник) = Тип("Строка") Тогда
    // Пытаемся найти счет по коду в источнике
    НайденныйСчет = ПланыСчетов.Хозрасчетный.НайтиПоКоду(Источник);
    Если ЗначениеЗаполнено(НайденныйСчет) Тогда
        Источник = НайденныйСчет;
    Иначе
        // Если счет по коду не найден, отменяем выгрузку этого свойства
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;

Этот простой шаг гарантирует, что даже если в ПКО случайно передадут строку "62.01", она автоматически превратится в объектную ссылку до того, как система начнет анализировать ПКС и вызовет критическую ошибку.


Способ 3. Отключение неиспользуемого ПКС в Конвертации данных

Поскольку Бухгалтерия предприятия 2.0 является устаревшей конфигурацией, реквизит ЗапретитьИспользоватьВПроводках вам может быть абсолютно не нужен в приемнике при обмене данными. Если это так, самым быстрым и правильным решением будет полное отключение выгрузки данного свойства.

Проанализируем порядок действий в программе «Конвертация данных 2.1»:

  1. Перейдите во вкладку Правила конвертации объектов и выберите ПКО Хозрасчетный.
  2. В нижней табличной части найдите строку свойства (ПКС) ЗапретитьИспользоватьВПроводках.
  3. Дважды кликните по ней и снимите флаг «Включить в обмен» (или просто удалите эту строку ПКС, если уверены, что свойство не понадобится).
  4. Сохраните измененные правила обмена в XML-файл.
  5. Загрузите обновленные правила в обработку УниверсальныйОбменДаннымиXML в вашей информационной базе УПП и повторите попытку выгрузки.

Поскольку свойство больше не будет обрабатываться при выгрузке, обработчик обмена проигнорирует его наличие, и выгрузка документа СчетФактураПолученный завершится успешно.


Способ 4. Обновление метаданных конфигураций в КД 2.1

Иногда подобные ошибки возникают из-за банального рассинхронизирования структуры метаданных, загруженной в базу «Конвертация данных», с реальным состоянием ваших рабочих баз 1С (особенно если базы дорабатывались программистами или обновлялись).

Для исправления ситуации выполним полную синхронизацию метаданных:

  1. Откройте базу УПП 1.3 в режиме «1С:Предприятие» и запустите обработку MD82Exp.epf (она идет в комплекте с Конвертацией данных). Выгрузите структуру метаданных УПП в файл.
  2. Повторите аналогичную операцию для базы БП 2.0, выгрузив ее структуру метаданных.
  3. Откройте базу «Конвертация данных 2.1», перейдите в меню загрузки метаданных и обновите описания конфигураций-источника и приемника, указав созданные файлы.
  4. После обновления метаданных запустите инструмент «Синхронизация свойств» для ПКО Хозрасчетный. Система автоматически определит, какие реквизиты изменились или перестали существовать, и предложит скорректировать правила обмена.

Использование этого метода позволяет поддерживать правила обмена в актуальном состоянии и избегать ошибок несоответствия типов при последующих доработках обмена.

← На главную