При переходе с версии 1С:Управление торговлей 11.4 на 11.5 многие разработчики сталкиваются с ситуацией, когда внешние отчеты, успешно работавшие годами, перестают выводить данные или выдают ошибки. Особенно часто это проявляется при переносе отчета с демо-базы на рабочую. Рассмотрим причины этого явления и разберем по шагам, как адаптировать отчет под новые требования платформы.
Основная причина, по которой отчеты "ломаются" в УТ 11.5, заключается в масштабном изменении архитектуры подсистемы ценообразования. В версии 11.5 был совершен переход с версии 2.0 на 2.5. Проанализируем, почему это создает проблемы:
ЦеныНоменклатуры не отображаются в запросах к новому регистру ЦеныНоменклатуры25 автоматически без завершения процедуры перехода.Если в вашем отчете используются прямые запросы к регистрам сведений, первым делом необходимо заменить источники данных. Разберем типичный пример трансформации кода запроса. Вместо старого регистра теперь следует использовать новый.
Старый вариант (версия 2.0):
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
Новый вариант (версия 2.5):
ВЫБРАТЬ
ЦеныНоменклатуры25СрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры25СрезПоследних.ХарактеристикаЦО КАК Характеристика,
ЦеныНоменклатуры25СрезПоследних.Цена КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры25.СрезПоследних(&Период, ) КАК ЦеныНоменклатуры25СрезПоследних
Обратите внимание, что измерение Характеристика в новом регистре получило суффикс — ХарактеристикаЦО (Ценообразования). Это критически важно для корректной работы запроса.
Проанализируем ситуацию, когда отчет формируется, но цены "не подтягиваются" к остаткам. В версии 2.5 механизм работы с характеристиками стал более гибким. Теперь поле ХарактеристикаЦО может содержать не только конкретную характеристику, но и ценовую группу характеристик.
Посмотрим на типичную ошибку при соединении таблиц цен и остатков. Попытка использовать условие ИЛИ в соединении LEFT JOIN является грубой ошибкой, которая приводит к некорректным данным или резкому замедлению отчета.
Неправильное соединение:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК СвободныеОстатки
ПО ЦеныНоменклатуры25СрезПоследних.Номенклатура = СвободныеОстатки.Номенклатура
ИЛИ ЦеныНоменклатуры25СрезПоследних.ХарактеристикаЦО = СвободныеОстатки.Характеристика
Правильный подход заключается в использовании функции ЕСТЬNULL и четкой привязке по обоим измерениям. Если товар ведется в разрезе характеристик, соединение должно идти и по номенклатуре, и по характеристике одновременно.
В ценообразовании 2.5 появилась возможность устанавливать цену за конкретную упаковку (измерение УпаковкаЦО). Рассмотрим, как это влияет на расчет остатков. Если в запросе вы видите параметр &ТекстЗапросаКоэффициентУпаковки, это означает, что отчет пытается привести цену к базовой единице измерения.
Выясним причину отсутствия данных: если цена установлена за "Коробку", а остатки хранятся в "Штуках", простой выбор цены без учета коэффициента упаковки из регистра цен даст неверный результат. Проанализируем конструкцию ВЫБОР в запросе:
ВЫБОР
КОГДА ЦеныНоменклатуры25СрезПоследних.УпаковкаЦО = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ТОГДА СвободныеОстатки.ВНаличииОстаток
ИНАЧЕ СвободныеОстатки.ВНаличииОстаток / &ТекстЗапросаКоэффициентУпаковки
КОНЕЦ КАК ВНаличииОстаток
Здесь крайне важно проверить, как в программном модуле отчета вычисляется значение &ТекстЗапросаКоэффициентУпаковки. В УТ 11.5 алгоритм получения этого коэффициента должен обращаться к метаданным упаковки, указанной именно в регистре ЦеныНоменклатуры25.
Если после исправления запроса отчет все равно не работает на рабочей базе, проанализируем настройки самой системы. В 1С:УТ 11.5 многие поля в виртуальных таблицах физически недоступны для запроса, если отключены соответствующие функциональные опции.
ХарактеристикаЦО может возвращать пустой результат.Для окончательного решения проблемы рекомендуем выполнить следующие действия:
Во-первых, используйте Консоль запросов непосредственно в рабочей базе. Скопируйте туда текст запроса из отчета и посмотрите, на каком этапе пропадают данные (после соединения с ценами или после фильтра по остаткам).
Во-вторых, обратите внимание на тип пустых значений. В УТ 11.5 часто встречается ситуация, когда в одном регистре пустая характеристика — это NULL, а в другом — Значение(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка). Всегда используйте приведение типов в условиях соединения ПО.
В-третьих, если отчет использует СКД, проверьте вкладку "Параметры". Часто там жестко прописаны ссылки на конкретные "Виды цен", которые существуют в демо-базе, но отсутствуют (имеют другой ГУИД) в рабочей базе. В этом случае отчет будет пытаться найти цены по несуществующему идентификатору.