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