При настройке обмена данными между старыми конфигурациями (например, «Управление торговлей 10.3») и современными версиями «1С:Бухгалтерия 3.0» часто возникают ошибки, связанные с обновлением методов во встроенном языке конфигурации-приемника. Одна из таких ошибок — несоответствие количества параметров в процедурах заполнения документов. В этой статье мы подробно разберем, почему возникает эта ошибка, почему простая правка правил конвертации и повторная выгрузка файла не помогают, и как корректно применить исправления.
Рассмотрим типичную ситуацию. Имеется настроенный обмен между УТ 10.3 и БП 3.0. После очередного обновления Бухгалтерии при загрузке данных возникает ошибка в обработчике события ПослеЗагрузкиОбъекта.
Текст ошибки выглядит следующим образом:
Ошибка в обработчике события ПослеЗагрузкиОбъекта
ИмяПКО = ГТДИмпорт
ТипОбъекта = Таможенная декларация (импорт)
Обработчик = ПослеЗагрузкиОбъекта
ОписаниеОшибки = Недостаточно фактических параметров
ПозицияМодуля = {(7)}:Документы.ГТДИмпорт.ЗаполнитьСчетаУчетаВТабличнойЧасти(Объект, "Товары");
Ошибка «Недостаточно фактических параметров» однозначно указывает на то, что вызываемый метод конфигурации требует больше аргументов, чем ему передается в коде правил обмена.
Разработчики типовых конфигураций периодически меняют сигнатуры (список параметров) экспортных процедур и функций. В данном случае в последних релизах БП 3.0 изменилась процедура ЗаполнитьСчетаУчетаВТабличнойЧасти.
Раньше вызов выглядел так:
// Старый вариант (2 параметра)
Документы.ГТДИмпорт.ЗаполнитьСчетаУчетаВТабличнойЧасти(Объект, "Товары");
В новых релизах был добавлен третий параметр (обычно булево, отвечающее за очистку или перезаполнение), и вызов должен выглядеть так:
// Новый вариант (3 параметра)
Документы.ГТДИмпорт.ЗаполнитьСчетаУчетаВТабличнойЧасти(Объект, "Товары", Ложь);
Правила конвертации (ПКО), которые используются для обмена, содержат код обработчиков, написанный под старую версию БП. Именно этот устаревший код вызывает ошибку.
Многие специалисты сталкиваются с логическим тупиком: они исправляют правила конвертации в «Конвертации данных 2.0» или непосредственно в модуле обмена источника, выгружают новый файл данных (XML), но при загрузке в БП ошибка повторяется. Казалось бы, код исправлен, почему 1С продолжает использовать старый вариант?
Здесь важно понимать различие между двумя механизмами обмена:
УниверсальныйОбменДаннымиXML прочитает новый код из файла и выполнит его.ПравилаДляОбменаДанными).Следовательно, когда мы нажимаем кнопку «Синхронизировать» в БП 3.0, система берет старый макет правил из своего кеша (или регистра), где код вызова функции все еще содержит два параметра. Правка файла выгрузки в УТ никак не влияет на то, какой алгоритм будет выполняться в БП при типовой синхронизации.
Чтобы устранить ошибку, нам необходимо принудительно обновить правила конвертации, хранящиеся в настройках синхронизации базы-приемника (Бухгалтерии). Разберем этот процесс по шагам.
Сначала необходимо получить файл правил (ZIP-архив), который содержит исправленный код.
ГТДИмпорт (или другой объект, вызывающий ошибку).ПослеЗагрузки найдите строку вызова ЗаполнитьСчетаУчетаВТабличнойЧасти.Ложь (или Истина, в зависимости от логики, но чаще всего для сохранения перенесенных данных используется Ложь).ExchangeRules.xml).Теперь загрузим подготовленный архив в базу-приемник. Действия выполняем в 1С:Бухгалтерия 3.0 в пользовательском режиме:
После этого действия регистр сведений ПравилаДляОбменаДанными обновится. При следующем запуске синхронизации БП 3.0 распакует новый макет, скомпилирует модуль обработки с тремя параметрами, и ошибка исчезнет.
Если вам нужно быстро проверить, работает ли файл выгрузки с исправленными правилами, но вы не хотите пока менять настройки типового обмена, можно воспользоваться внешней обработкой УниверсальныйОбменДаннымиXML.epf.
В этом режиме 1С будет использовать код обработчиков, записанный внутри XML-файла. Если загрузка пройдет успешно, значит ваши правки кода верны, и можно смело загружать правила в типовую настройку синхронизации, как описано в Шаге 2.
Ошибка «Недостаточно фактических параметров» при обмене лечится добавлением недостающего аргумента в код правил конвертации. Однако ключевой момент успеха — понимание того, что при использовании подсистемы БСП (типовая синхронизация) правила необходимо загружать не в файл обмена, а непосредственно в настройки синхронизации базы-приемника.