При переходе с редакции конфигурации «1С:Управление торговлей 11.1» на версию 11.2 (а также при аналогичных переходах в «1С:ERP 2» и «1С:Комплексная автоматизация 2») пользователи могут столкнуться с критической ошибкой при создании документа Установка цен номенклатуры (как вручную, так и на основании документов поступления товаров и услуг):
{ОбщийМодуль.УстановкаЦенСервер.Модуль(631)}: Ошибка при вызове конструктора (ИсточникДоступныхНастроекКомпоновкиДанных)
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
по причине: Ошибка в запросе набора данных
{(191, 11)}: Неверные параметры "Справочник.УпаковкиНоменклатуры.ПустаяСсылка"
ЗНАЧЕНИЕ(<<?>>Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
Разберем детально, почему возникает данное исключение, где хранятся некорректные настройки и как исправить ситуацию в базе данных.
Проанализируем изменения в структуре метаданных. Начиная с редакции 11.2 разработчики платформенных решений 1С провели унификацию работы с единицами измерения и упаковками. В результате справочник Справочник.УпаковкиНоменклатуры был упразднен и заменен на единый объект Справочник.УпаковкиЕдиницыИзмерения.
Если в базе до обновления использовались элементы справочника Виды цен со способом задания «Произвольный запрос к данным ИБ», их схемы компоновки данных (СКД) сохранились в базе данных в виде бинарных данных или XML-описаний со старыми текстами запросов. В момент формирования документа установки цен платформа считывает СКД конкретного вида цены и выполняет синтаксическую проверку через ИсточникДоступныхНастроекКомпоновкиДанных. Поскольку старого объекта метаданных в конфигурации больше нет, инициализация компоновщика настроек завершается аварийно.
Рассмотрим по шагам, как исправить схемы компоновки непосредственно через пользовательский интерфейс программы:
Вместо конструкции:
ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
укажем актуальную структуру метаданных:
ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
Упаковка тип значения установлен как СправочникСсылка.УпаковкиЕдиницыИзмерения.Если в информационной базе настроено большое количество видов цен с произвольными запросами, ручная правка займет много времени. Проанализируем пример программной обработки, которая выполняет поиск устаревших метаданных в хранилище значений СКД и заменяет текст запроса:
Выборка = Справочники.ВидыЦен.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектВидаЦены = Выборка.ПолучитьОбъект();
// Проверяем наличие сохраненной схемы компоновки
Если ОбъектВидаЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗапросКБазеДанных Тогда
СхемаКомпоновки = ОбъектВидаЦены.СхемаКомпоновкиДанных.Получить();
Если СхемаКомпоновки <> Неопределено Тогда
Изменено = Ложь;
Для Каждого НаборДанных Из СхемаКомпоновки.НаборыДанных Цикл
Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
Если СтрНайти(НаборДанных.Запрос, "Справочник.УпаковкиНоменклатуры") > 0 Тогда
НаборДанных.Запрос = СтрЗаменить(
НаборДанных.Запрос,
"Справочник.УпаковкиНоменклатуры",
"Справочник.УпаковкиЕдиницыИзмерения"
);
Изменено = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Изменено Тогда
ОбъектВидаЦены.СхемаКомпоновкиДанных = Новый ХранилищеЗначения(
СхемаКомпоновки,
Новый СжатиеДанных(9)
);
ОбъектВидаЦены.Записать();
Сообщить("Успешно обновлена схема для вида цены: " + ОбъектВидаЦены.Наименование);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Обратим внимание, что переименование справочника УпаковкиНоменклатуры может вызвать похожие ошибки и в других подсистемах базы данных:
Справочник.УпаковкиНоменклатуры, потребуют адаптации кода под метаданные УТ 11.2.