Почему возникает ошибка недопустимого значения параметра при добавлении узла в Получатели обмена данными в 1С?

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

При работе с механизмами обмена данными в конфигурации «1С:Бухгалтерия предприятия 3.0» (и других решениях на базе платформы «1С:Предприятие 8.3») разработчики могут столкнуться с исключением при попытке записи в регистр сведений СоответствияОбъектовИнформационныхБаз. Ошибка происходит в обработчике ПередЗаписью модуля набора записей регистра при выполнении строки кода:

ОбменДанными.Получатели.Добавить(Отбор.УзелИнформационнойБазы.Значение);

Текст ошибки выглядит следующим образом:

Ошибка при вызове метода контекста (Добавить): Недопустимое значение параметра (параметр номер '1')

Рассмотрим подробно причины возникновения данной проблемы и разберем практические способы ее решения.

Причины возникновения ошибки

Коллекция ОбменДанными.Получатели предназначена для регистрации изменений объектов с целью их последующей выгрузки в другие информационные базы. Метод Добавить() этой коллекции принимает в качестве единственного параметра ссылку на узел плана обмена. Однако платформой 1С накладываются жесткие ограничения на передаваемое значение:

  1. Регистр не включен в состав плана обмена: Регистр сведений СоответствияОбъектовИнформационныхБаз должен быть включен в состав того плана обмена, к узлу которого относится ссылка из отбора. Если объект метаданных не входит в состав выбранного плана обмена, платформа выбрасывает исключение «Недопустимое значение параметра».
  2. Изменения конфигурации не применены к базе данных: Если регистр был добавлен в состав плана обмена в Конфигураторе, но обновление конфигурации базы данных (F7) еще не было выполнено, платформа на уровне СУБД продолжает считать, что объект не входит в состав данного плана обмена.
  3. Некорректная или пустая ссылка на узел: Значение Отбор.УзелИнформационнойБазы.Значение может содержать незаполненную ссылку, недействительную ссылку («Объект не найден»), либо ссылку на предопределенный узел ЭтотУзел (для которого регистрация изменений не производится).
  4. Отключено использование отбора: Если у элемента отбора Отбор.УзелИнформационнойБазы свойство Использование равно Ложь, обращение к свойству Значение возвращает неинициализированные данные.

Способы решения ошибки

Проанализируем основные варианты устранения проблемы в зависимости от исходной задачи.

1. Проверка состава плана обмена и обновление конфигурации БД

Проверим настройки метаданных в Конфигураторе:

  1. Откроем ветку Планы обмена и перейдем к плану обмена, узел которого используется при записи.
  2. Перейдем на вкладку Состав и убедимся, что для регистра сведений СоответствияОбъектовИнформационныхБаз установлен флаг участия в составе обмена.
  3. Выполним обновление конфигурации базы данных (клавиша F7 или меню Конфигурация -> Обновить конфигурацию базы данных).

2. Установка флага Загрузка перед записью

Если запись в регистр выполняется программно в рамках загрузки данных или создания технических записей, когда регистрация изменений для узлов не требуется, необходимо отключить выполнение обработчиков модуля набора записей:


НаборЗаписей = РегистрыСведений.СоответствияОбъектовИнформационныхБаз.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.УзелИнформационнойБазы.Установить(СсылкаНаУзел);

// Отключаем выполнение обработчиков модуля набора записей
НаборЗаписей.ОбменДанными.Загрузка = Истина;

// Заполнение записей и запись набора
...
НаборЗаписей.Записать();

Флаг Загрузка = Истина предотвращает вызов кода в событии ПередЗаписью, избегая вызова метода ОбменДанными.Получатели.Добавить().

3. Безопасная проверка отбора в коде

Перед передачей значения в метод Добавить() выполним проверку доступности отбора и некорректных узлов:


Если Отбор.УзелИнформационнойБазы.Использование 
   И ЗначениеЗаполнено(Отбор.УзелИнформационнойБазы.Значение) 
   И Отбор.УзелИнформационнойБазы.Значение <> Отбор.УзелИнформационнойБазы.Значение.Метаданные().ЭтотУзел() Тогда
    
    ОбменДанными.Получатели.Добавить(Отбор.УзелИнформационнойБазы.Значение);
КонецЕсли;

4. Использование API Библиотеки Стандартных Подсистем (БСП)

В типовых конфигурациях 1С не рекомендуется изменять регистр СоответствияОбъектовИнформационныхБаз напрямую через наборы записей. Для создания и обновления сопоставлений объектов следует применять методы общего модуля БСП ОбменДаннымиСервер (например, ОбменДаннымиСервер.ЗафиксироватьСоответствие()), которые самостоятельно обрабатывают отборы, права доступа и параметры обмена.

← На главную