Многие технические специалисты при обновлении конфигурации 1С:Управление торговлей до релизов 11.5.17.х и выше сталкиваются с неприятной проблемой: отчет «Прайс-лист» внезапно перестает выводить данные, если установлена галочка «С картинками». При этом без картинок отчет работает штатно, а частичные отборы по папкам могут срабатывать выборочно. Давайте разберем эту ситуацию подробно, проанализируем внутренние механизмы системы и найдем способы решения этой задачи.
Когда мы формируем прайс-лист в современных версиях УТ 11.5, система использует сложные механизмы построения запросов через Схему компоновки данных (СКД). Как только пользователь включает опцию вывода изображений, к основному запросу по ценам и остаткам динамически присоединяется таблица из справочника НоменклатураПрисоединенныеФайлы. Если в этой цепочке происходит сбой — будь то ошибка в данных или программный баг в коде формирования запроса — построитель отчета может вернуть пустой результат без вывода каких-либо предупреждений.
Одной из наиболее вероятных причин того, что прайс формируется по одним папкам и «умирает» на других, является повреждение ссылочной целостности. Рассмотрим ситуацию: в карточке номенклатуры указано, что у нее есть основное изображение, но сам объект Присоединенный файл либо отсутствует, либо его данные в хранилище (в томах на диске или в базе) повреждены.
Рассмотрим, как можно диагностировать такие позиции. Нам необходимо проверить, не пытается ли система обратиться к несуществующим данным. Попробуем выполнить простой запрос в консоли отчетов, чтобы выявить проблемные места:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
Номенклатура.ФайлКартинки КАК Файл
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ФайлКартинки <> ЗНАЧЕНИЕ(Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка)
И Номенклатура.ФайлКартинки.ОбъектВладелец ЕСТЬ NULL
Если запрос возвращает строки, значит, у вас есть «сироты» — ссылки на файлы, которые потеряли связь с владельцем. При попытке компоновщика данных обработать такие записи в контексте формирования прайса с картинками может произойти критическая ошибка выполнения фонового задания.
Разберем влияние платформы. Начиная с версии 8.3.25, механизмы работы с графикой в фоновых заданиях стали более требовательны к ресурсам. Если в папке, по которой не строится прайс, лежат товары с картинками высокого разрешения (например, фото по 5-10 Мб каждое), процесс формирования может завершаться аварийно.
Выясним причину через мониторинг: попробуйте сформировать прайс по одной конкретной позиции, у которой точно есть «тяжелая» картинка. Если отчет зависает или выдает пустоту — необходимо оптимизировать хранилище файлов. Для прайс-листов рекомендуется использовать изображения, не превышающие 1 Мб, так как при компоновке печатной формы 1С пытается разыменовать эти данные в оперативной памяти сервера.
Посмотрим на программный код формирования прайс-листа. В некоторых подверсиях 11.5.17 был замечен баг: при программной модификации текста запроса в модуле менеджера отчета тип соединения с таблицей картинок ошибочно меняется с ЛЕВОЕ СОЕДИНЕНИЕ на ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Inner Join). Своевременный анализ конфигурации на наличие ошибок позволяет обнаружить такие дефекты в коде общих модулей еще на этапе тестирования обновления.
Результат этого бага: если в выборку попадает хотя бы один товар без картинки, или если у товара в принципе не заполнено основное изображение, внутренняя логика запроса отсекает такие строки. Если же в выбранном фильтре (папке) нет ни одного товара с картинкой, весь результат становится пустым.
Чтобы исправить это, нужно проанализировать процедуру ПриКомпоновкеРезультата в модуле объекта отчета ПрайсЛист. Проверьте, как добавляются наборы данных. Если вы имеете навыки программирования, убедитесь, что в динамически конструируемом тексте запроса используется именно ЛЕВОЕ СОЕДИНЕНИЕ:
// Пример правильной логики соединения в запросе
ТекстЗапроса = "ВЫБРАТЬ ...
|ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК Цены
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураПрисоединенныеФайлы КАК Картинки
|ПО Цены.Номенклатура = Картинки.ОбъектВладелец";
Выясним, как версия ценообразования влияет на результат. Даже если в функциональных опциях вы используете «старое» ценообразование (2.4), современные релизы УТ 11.5 всё равно используют общие модули, заточенные под версию 2.5. Прайс-лист обращается к временным таблицам, которые инициализируются в зависимости от настроек системы.
Иногда проблема кроется в наличии «мусорных» записей в регистре Цены номенклатуры 2.5. Система видит записи в новом регистре и пытается приоритетно извлечь данные оттуда, игнорируя старый регистр Цены номенклатуры. Проверьте содержимое обоих регистров для проблемных позиций. Если вы переходили на новую версию и откатились назад, очистите остаточные записи в таблицах версии 2.5.
Разберем еще одну вероятную причину — права доступа. Для формирования прайса с картинками пользователю недостаточно иметь права на чтение справочника Номенклатура. Необходимы права на чтение справочника НоменклатураПрисоединенныеФайлы и, что немаловажно, права на работу с томами хранения файлов, если картинки хранятся на диске.
Если отчет не формируется даже под полными правами, выполним очистку настроек:
Подводя итог, если ваш прайс-лист выдает пустой результат с картинками, действуйте по следующему алгоритму:
Соблюдение этих шагов позволит вам быстро локализовать ошибку и вернуть работоспособность одного из самых важных инструментов отдела продаж.