Почему не формируется прайс-лист с картинками в 1С:Управление торговлей 11.5 и как это исправить?

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

Многие технические специалисты при обновлении конфигурации 1С:Управление торговлей до релизов 11.5.17.х и выше сталкиваются с неприятной проблемой: отчет «Прайс-лист» внезапно перестает выводить данные, если установлена галочка «С картинками». При этом без картинок отчет работает штатно, а частичные отборы по папкам могут срабатывать выборочно. Давайте разберем эту ситуацию подробно, проанализируем внутренние механизмы системы и найдем способы решения этой задачи.

Проанализируем ситуацию: почему отчет становится пустым?

Когда мы формируем прайс-лист в современных версиях УТ 11.5, система использует сложные механизмы построения запросов через Схему компоновки данных (СКД). Как только пользователь включает опцию вывода изображений, к основному запросу по ценам и остаткам динамически присоединяется таблица из справочника НоменклатураПрисоединенныеФайлы. Если в этой цепочке происходит сбой — будь то ошибка в данных или программный баг в коде формирования запроса — построитель отчета может вернуть пустой результат без вывода каких-либо предупреждений.

Шаг 1. Проверка на наличие «битых» ссылок на изображения

Одной из наиболее вероятных причин того, что прайс формируется по одним папкам и «умирает» на других, является повреждение ссылочной целостности. Рассмотрим ситуацию: в карточке номенклатуры указано, что у нее есть основное изображение, но сам объект Присоединенный файл либо отсутствует, либо его данные в хранилище (в томах на диске или в базе) повреждены.

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


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Товар,
    Номенклатура.ФайлКартинки КАК Файл
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ФайлКартинки <> ЗНАЧЕНИЕ(Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка)
    И Номенклатура.ФайлКартинки.ОбъектВладелец ЕСТЬ NULL

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

Шаг 2. Особенности платформы 8.3.25 и лимиты памяти

Разберем влияние платформы. Начиная с версии 8.3.25, механизмы работы с графикой в фоновых заданиях стали более требовательны к ресурсам. Если в папке, по которой не строится прайс, лежат товары с картинками высокого разрешения (например, фото по 5-10 Мб каждое), процесс формирования может завершаться аварийно.

Выясним причину через мониторинг: попробуйте сформировать прайс по одной конкретной позиции, у которой точно есть «тяжелая» картинка. Если отчет зависает или выдает пустоту — необходимо оптимизировать хранилище файлов. Для прайс-листов рекомендуется использовать изображения, не превышающие 1 Мб, так как при компоновке печатной формы 1С пытается разыменовать эти данные в оперативной памяти сервера.

Шаг 3. Устранение программного бага с типом соединения в СКД

Посмотрим на программный код формирования прайс-листа. В некоторых подверсиях 11.5.17 был замечен баг: при программной модификации текста запроса в модуле менеджера отчета тип соединения с таблицей картинок ошибочно меняется с ЛЕВОЕ СОЕДИНЕНИЕ на ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Inner Join). Своевременный анализ конфигурации на наличие ошибок позволяет обнаружить такие дефекты в коде общих модулей еще на этапе тестирования обновления.

Результат этого бага: если в выборку попадает хотя бы один товар без картинки, или если у товара в принципе не заполнено основное изображение, внутренняя логика запроса отсекает такие строки. Если же в выбранном фильтре (папке) нет ни одного товара с картинкой, весь результат становится пустым.

Чтобы исправить это, нужно проанализировать процедуру ПриКомпоновкеРезультата в модуле объекта отчета ПрайсЛист. Проверьте, как добавляются наборы данных. Если вы имеете навыки программирования, убедитесь, что в динамически конструируемом тексте запроса используется именно ЛЕВОЕ СОЕДИНЕНИЕ:


// Пример правильной логики соединения в запросе
ТекстЗапроса = "ВЫБРАТЬ ... 
               |ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК Цены
               |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураПрисоединенныеФайлы КАК Картинки
               |ПО Цены.Номенклатура = Картинки.ОбъектВладелец";

Шаг 4. Конфликт механизмов ценообразования 2.4 и 2.5

Выясним, как версия ценообразования влияет на результат. Даже если в функциональных опциях вы используете «старое» ценообразование (2.4), современные релизы УТ 11.5 всё равно используют общие модули, заточенные под версию 2.5. Прайс-лист обращается к временным таблицам, которые инициализируются в зависимости от настроек системы.

Иногда проблема кроется в наличии «мусорных» записей в регистре Цены номенклатуры 2.5. Система видит записи в новом регистре и пытается приоритетно извлечь данные оттуда, игнорируя старый регистр Цены номенклатуры. Проверьте содержимое обоих регистров для проблемных позиций. Если вы переходили на новую версию и откатились назад, очистите остаточные записи в таблицах версии 2.5.

Шаг 5. Права доступа и кэш метаданных

Разберем еще одну вероятную причину — права доступа. Для формирования прайса с картинками пользователю недостаточно иметь права на чтение справочника Номенклатура. Необходимы права на чтение справочника НоменклатураПрисоединенныеФайлы и, что немаловажно, права на работу с томами хранения файлов, если картинки хранятся на диске.

Если отчет не формируется даже под полными правами, выполним очистку настроек:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Выберем Очистка настроек.
  3. Найдем настройки отчета «Прайс-лист» для всех пользователей и удалим их. Это заставит систему переинициализировать схему компоновки из метаданных конфигурации, исключая влияние старых, некорректно сохраненных вариантов.

Итоговые рекомендации

Подводя итог, если ваш прайс-лист выдает пустой результат с картинками, действуйте по следующему алгоритму:

  1. Проверьте папку номенклатуры на наличие позиций с установленным флагом «Основное изображение», но отсутствующим физическим файлом. Также можно использовать прайс-лист с картинками, остатками и штрихкодами как альтернативное решение с расширенными полями.
  2. Убедитесь, что размер изображений не является критическим для памяти сервера (рекомендуется до 1 Мб).
  3. Проверьте отчет под пользователем с полными правами, чтобы исключить влияние RLS.
  4. Если ничего не помогает — обратитесь к программисту для проверки типа соединения в динамическом запросе СКД (замена Inner Join на Left Join).

Соблюдение этих шагов позволит вам быстро локализовать ошибку и вернуть работоспособность одного из самых важных инструментов отдела продаж.

← На главную