При выполнении обмена данными между конфигурациями «Управление торговлей» (редакция 11) и «Бухгалтерия предприятия» (редакция 3.0) через универсальный формат (EnterpriseData) может возникать критическая ошибка в обработчике ПередКонвертацией. Синхронизация прерывается со следующим текстом в журнале регистрации:
{ОбщийМодуль.МенеджерОбменаЧерезУниверсальныйФормат.Модуль(40987)}: Ошибка при вызове конструктора (ОписаниеТипов) ПолученныеДенежныеДокументы.Колонки.Добавить("ДенежныйДокумент", Новый ОписаниеТипов("СправочникСсылка.ДенежныеДокументы")); по причине: Недопустимое значение параметра (параметр номер '1') (СправочникСсылка.ДенежныеДокументы)
Рассмотрим причины возникновения этой проблемы и разберем практические способы ее решения.
Проанализируем техническую сторону проблемы. Общий модуль МенеджерОбменаЧерезУниверсальныйФормат содержит универсальные правила конвертации и алгоритмы обмена, общие для конфигураций-источников и конфигураций-приемников.
В коде модуля выполняется инициализация таблицы значений для хранения сведений о полученных денежных документах:
// Инициализация таблицы полученных денежных документов
ПолученныеДенежныеДокументы = Новый ТаблицаЗначений;
ПолученныеДенежныеДокументы.Колонки.Добавить("ДенежныйДокумент", Новый ОписаниеТипов("СправочникСсылка.ДенежныеДокументы"));
ПолученныеДенежныеДокументы.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
КомпонентыОбмена.ПараметрыКонвертации.ПолученныеДенежныеДокументы = ПолученныеДенежныеДокументы;
Конструктор Новый ОписаниеТипов(...) на платформе «1С:Предприятие 8.3» обращается к метаданным конфигурации. В конфигурации «Бухгалтерия предприятия» справочник ДенежныеДокументы присутствует, однако в типовой «Управлении торговлей» 11 данный справочник отсутствует. Когда этот участок кода исполняется на стороне УТ, платформа не может найти тип СправочникСсылка.ДенежныеДокументы и генерирует исключение «Недопустимое значение параметра».
Ошибка была официально зарегистрирована фирмой 1С под номером 00-00137544.
Поскольку проблема является ошибкой типовых правил обмена, наиболее правильное решение — обновление конфигураций до актуальных релизов или установка оперативного исправления (патча):
.efd) с портала 1С:ИТС и установите его через раздел «Администрирование» — «Обслуживание» — «Обновление программы» — «Установка обновлений (патчей)».Если обновление откладывается, а обменяться данными требуется срочно, разберем доработку с помощью расширения конфигурации без снятия программы с поддержки.
В расширении можно переопределить логику инициализации таблицы или обернуть создание типов в безопасную проверку существования справочника в метаданных конфигурации:
// Безопасное формирование описания типов с проверкой метаданных
ПолученныеДенежныеДокументы = Новый ТаблицаЗначений;
Если Метаданные.Справочники.Найти("ДенежныеДокументы") <> Неопределено Тогда
ТипДенежныйДокумент = Новый ОписаниеТипов("СправочникСсылка.ДенежныеДокументы");
Иначе
ТипДенежныйДокумент = Новый ОписаниеТипов;
КонецЕсли;
ПолученныеДенежныеДокументы.Колонки.Добавить("ДенежныйДокумент", ТипДенежныйДокумент);
ПолученныеДенежныеДокументы.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
КомпонентыОбмена.ПараметрыКонвертации.ПолученныеДенежныеДокументы = ПолученныеДенежныеДокументы;
Метод Метаданные.Справочники.Найти() позволяет заранее убедиться, что соответствующий объект присутствует в текущей конфигурации, предупреждая падение платформы.
Для конфигураций, уже снятых с поддержки и находящихся на доработке, разработчики часто применяют временный вариант: добавляют пустышку справочника ДенежныеДокументы (а также реквизит Валюта) непосредственно в дерево метаданных УТ.
В этом случае конструктор Новый ОписаниеТипов("СправочникСсылка.ДенежныеДокументы") отрабатывает штатно, не вызывания сбоя. Однако помните, что после проведения официального обновления этот фиктивный объект необходимо аккуратно удалить из метаданных.