Как исправить ошибку с параметром Справочник.УпаковкиНоменклатуры при установке цен в 1С:УТ 11.2?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При переходе с редакции конфигурации «1С:Управление торговлей 11.1» на версию 11.2 (а также при аналогичных переходах в «1С:ERP 2» и «1С:Комплексная автоматизация 2») пользователи могут столкнуться с критической ошибкой при создании документа Установка цен номенклатуры (как вручную, так и на основании документов поступления товаров и услуг):

{ОбщийМодуль.УстановкаЦенСервер.Модуль(631)}: Ошибка при вызове конструктора (ИсточникДоступныхНастроекКомпоновкиДанных)
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
по причине: Ошибка в запросе набора данных
{(191, 11)}: Неверные параметры "Справочник.УпаковкиНоменклатуры.ПустаяСсылка"
ЗНАЧЕНИЕ(<<?>>Справочник.УпаковкиНоменклатуры.ПустаяСсылка)

Разберем детально, почему возникает данное исключение, где хранятся некорректные настройки и как исправить ситуацию в базе данных.

Причина возникновения ошибки

Проанализируем изменения в структуре метаданных. Начиная с редакции 11.2 разработчики платформенных решений 1С провели унификацию работы с единицами измерения и упаковками. В результате справочник Справочник.УпаковкиНоменклатуры был упразднен и заменен на единый объект Справочник.УпаковкиЕдиницыИзмерения.

Если в базе до обновления использовались элементы справочника Виды цен со способом задания «Произвольный запрос к данным ИБ», их схемы компоновки данных (СКД) сохранились в базе данных в виде бинарных данных или XML-описаний со старыми текстами запросов. В момент формирования документа установки цен платформа считывает СКД конкретного вида цены и выполняет синтаксическую проверку через ИсточникДоступныхНастроекКомпоновкиДанных. Поскольку старого объекта метаданных в конфигурации больше нет, инициализация компоновщика настроек завершается аварийно.

Способ 1. Ручное исправление схемы в пользовательском режиме

Рассмотрим по шагам, как исправить схемы компоновки непосредственно через пользовательский интерфейс программы:

  1. Перейдем в раздел CRM и маркетинг (или Маркетинг и планирование) → Настройки и справочники → Виды цен.
  2. Найдем все виды цен, у которых в реквизите Способ задания цены установлено значение Произвольный запрос к данным ИБ.
  3. Откроем карточку такого вида цены и нажмем кнопку редактирования схемы компоновки данных.
  4. В открывшемся окне редактора СКД перейдем на вкладку Наборы данных и откроем текст запроса набора данных.
  5. Найдем все вхождения устаревшего справочника и заменим их:

    Вместо конструкции:

    ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)

    укажем актуальную структуру метаданных:

    ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)

  6. Перейдем на вкладку Поля набора данных и убедимся, что для поля Упаковка тип значения установлен как СправочникСсылка.УпаковкиЕдиницыИзмерения.
  7. Если вид цены использовал стандартную типовую схему (например, «Цены поступления»), можно просто заново выбрать предопределенный шаблон схемы из списка, чтобы конфигурация автоматически подставила актуальный типовой запрос.
  8. Сохраним схему компоновки и запишем элемент справочника Виды цен.

Способ 2. Программное обновление схем компоновки данных

Если в информационной базе настроено большое количество видов цен с произвольными запросами, ручная правка займет много времени. Проанализируем пример программной обработки, которая выполняет поиск устаревших метаданных в хранилище значений СКД и заменяет текст запроса:


Выборка = Справочники.ВидыЦен.Выбрать();
Пока Выборка.Следующий() Цикл
    
    ОбъектВидаЦены = Выборка.ПолучитьОбъект();
    
    // Проверяем наличие сохраненной схемы компоновки
    Если ОбъектВидаЦены.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.ЗапросКБазеДанных Тогда
        
        СхемаКомпоновки = ОбъектВидаЦены.СхемаКомпоновкиДанных.Получить();
        
        Если СхемаКомпоновки <> Неопределено Тогда
            
            Изменено = Ложь;
            
            Для Каждого НаборДанных Из СхемаКомпоновки.НаборыДанных Цикл
                Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
                    
                    Если СтрНайти(НаборДанных.Запрос, "Справочник.УпаковкиНоменклатуры") > 0 Тогда
                        
                        НаборДанных.Запрос = СтрЗаменить(
                            НаборДанных.Запрос, 
                            "Справочник.УпаковкиНоменклатуры", 
                            "Справочник.УпаковкиЕдиницыИзмерения"
                        );
                        
                        Изменено = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            КонецЦикла;
            
            Если Изменено Тогда
                ОбъектВидаЦены.СхемаКомпоновкиДанных = Новый ХранилищеЗначения(
                    СхемаКомпоновки, 
                    Новый СжатиеДанных(9)
                );
                ОбъектВидаЦены.Записать();
                Сообщить("Успешно обновлена схема для вида цены: " + ОбъектВидаЦены.Наименование);
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецЦикла;

Другие зоны риска после обновления

Обратим внимание, что переименование справочника УпаковкиНоменклатуры может вызвать похожие ошибки и в других подсистемах базы данных:

  1. Сегменты номенклатуры и партнеров: если сегментация формируется динамически по произвольному запросу СКД, необходимо проверить сохраненные правила формирования сегментов.
  2. Внешние печатные формы, отчеты и обработки: внешние модули, разработанные для УТ 11.1, содержащие прямые обращения к Справочник.УпаковкиНоменклатуры, потребуют адаптации кода под метаданные УТ 11.2.
  3. Пользовательские варианты отчетов: настройки отчетов, сохраненные пользователями до перехода на новую редакцию, могут содержать ссылки на старые поля группировок и отборов. В таком случае достаточно сбросить настройки отчета на стандартные.
← На главную