При настройке и сопровождении обменов данными между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 разработчики нередко сталкиваются с необходимостью принудительно зарегистрировать изменения по определенным документам или справочникам. Однако при выполнении стандартного платформенного метода ПланыОбмена.ЗарегистрироватьИзменения() может возникнуть исключение: «Недопустимое значение параметра (параметр номер 1)». Разберем по шагам причины такого поведения платформы, проанализируем частые ошибки и рассмотрим корректные способы управления очередью выгрузки.
Посмотрим на пример типового фрагмента кода, который приводит к возникновению ошибки:
УзелПланаОбмена = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30.НайтиПоКоду("ЦБ");
ПланыОбмена.ЗарегистрироватьИзменения(УзелПланаОбмена, Ссылка);
Проанализируем ситуацию и выясним, почему платформа 1С:Предприятие считает переданный узел некорректным. Существуют две основные причины:
ЭтотУзел). Если код "ЦБ" назначен собственному узлу текущей базы, вызов метода вызовет исключение параметра № 1.Для того чтобы зарегистрировать изменения средствами платформы, необходимо передавать ссылку на узел базы-корреспондента (той базы, в которую должны уйти данные). Рассмотрим пример корректного кода с обязательной проверкой на заполненность и исключение собственного узла:
УзелКорреспондент = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30.НайтиПоКоду("БП");
Если ЗначениеЗаполнено(УзелКорреспондент)
И УзелКорреспондент <> ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30.ЭтотУзел() Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелКорреспондент, Ссылка);
КонецЕсли;
Если требуется зарегистрировать массив или список объектов для всех внешних узлов плана обмена одновременно, можно передать массив узлов или обойти выборку:
ВыборкаУзлов = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30.Выбрать();
Пока ВыборкаУзлов.Следующий() Цикл
Если ВыборкаУзлов.Ссылка = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30.ЭтотУзел() Тогда
Продолжить;
КонецЕсли;
ПланыОбмена.ЗарегистрироватьИзменения(ВыборкаУзлов.Ссылка, Ссылка);
КонецЦикла;
В современных конфигурациях (таких как 1С:Управление торговлей 11, 1С:ERP, 1С:КА) механизмы синхронизации построены на базе БСП. В них действуют правила регистрации объектов (ПРО), отборы по организациям, складам и датам запрета. Если зарегистрировать объект низкоуровневым методом платформы, при очередной синхронизации система может автоматически снять его с регистрации, если он не соответствует фильтрам узла.
Чтобы регистрация происходила по всем правилам подсистемы обмена, рекомендуется использовать функции общего модуля ОбменДаннымиСервер:
// Регистрация конкретного объекта или массива объектов для узла
ОбменДаннымиСервер.ЗарегистрироватьИзмененияДляУзла(УзелКорреспондент, Ссылка);
Данный метод проверяет активность узла, корректность переданных типов и гарантирует корректную постановку в очередь синхронизации.
Если разовая регистрация документов потребовалась администратору или разработчику без написания программного кода, наиболее безопасный способ — воспользоваться встроенной обработкой «Регистрация изменений для обмена данными»:
Иногда при возникновении трудностей с планами обмена прибегают к обходному пути: программному получению объекта и его перезаписи (Ссылка.ПолучитьОбъект().Записать()), чтобы сработала стандартная подписка на событие регистрации. Разберем, почему такой подход на рабочей базе является крайне нежелательным:
Использование штатных процедур регистрации БСП или правильной передачи узла-корреспондента в ПланыОбмена.ЗарегистрироватьИзменения() позволяет безопасно и быстро добавить данные в очередь отправки без перезаписи самих объектов.