При работе с типовыми отчетами в конфигурации 1С:Управление торговлей 11.4 (УТ 11.4), особенно с таким сложным инструментом, как Ведомость по товарам в ценах номенклатуры, разработчики часто сталкиваются с двумя типами проблем. Первая — это «магическое» удвоение количественных и суммовых показателей при попытке программно выгрузить результат в таблицу значений. Вторая — внезапный отказ отчета работать в новой базе с сообщением о некорректном запросе или пустой результат при наличии остатков. В этой статье мы подробно разберем, как устроены механизмы этого отчета и как победить эти ошибки.
Рассмотрим ситуацию: в пользовательском режиме отчет формируется корректно, показывая, например, 1 единицу товара. Однако, когда мы пытаемся получить эти же данные программно для дальнейшей обработки, используя стандартный механизм КомпоновщикМакета, мы получаем в таблице значений цифру 2. Проанализируем, почему это происходит.
Типовой код, который обычно используется для выгрузки, выглядит так:
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
СхемаКомпоновкиДанных,
КомпоновщикНастроек.ПолучитьНастройки(),
ДанныеРасшифровки
);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТаблицуЗначений;
ТаблицаРезультат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Основная причина «двоения» заключается в том, что КомпоновщикМакета по умолчанию формирует макет, включающий в себя как детальные записи, так и итоги по группировкам. Когда ПроцессорВывода переносит эти данные в плоскую ТаблицаЗначений, он записывает туда каждую строку, которую сгенерировала система компоновки данных (СКД). В итоге в таблицу попадает и сама номенклатура, и итоговая строка по этой номенклатуре (если есть иерархия или группировки), что визуально выглядит как дублирование суммы.
Решение: Чтобы избежать дублирования, необходимо управлять структурой группировок в настройках компоновки. Если нам нужны только итоговые данные без детальных записей (или наоборот), мы должны явно указать это в КомпоновщикНастроек. Также важно обратить внимание на тип макета. Для получения «чистых» данных в ТЗ лучше использовать ТипМакетаКомпоновкиДанных.Данные, что минимизирует включение оформительских и избыточных итоговых строк.
Часто при разворачивании свежей базы УТ 11.4 или при подготовке к экзаменам (например, «1С:Специалист по УТ») отчет отказывается работать, выдавая ошибку запроса. Выясним причину этого поведения, проанализировав логику конфигурации.
Отчет ВедомостьПоТоварамВЦенахНоменклатуры не является простым запросом к регистру. Его текст формируется динамически в зависимости от Функциональных опций системы. Одной из критичных настроек является использование упаковок.
Если эта опция выключена, программный код, формирующий текст запроса внутри СКД, может некорректно обрабатывать поля, связанные с единицами измерения и упаковками. В типовых решениях последних версий запрос часто жестко завязан на левое соединение с таблицами упаковок. Включение этой опции (даже если вы не планируете использовать упаковки в каждом товаре) восстанавливает работоспособность структуры запроса.
Если отчет открывается без ошибок, параметры установлены, но результат — пустой бланк, хотя на складах точно есть товар, дело в настройках оценки запасов. Разберем по шагам, что нужно проверить:
1. Настройка склада. В параметрах отчета часто указано: «Оценка запасов: По учетному виду цен склада». Это означает, что система идет в справочник Склады и ищет там заполненное поле ВидЦеныДляОценкиЗапасов. Если в карточке вашего склада это поле пустое, запрос не сможет сопоставить остатки товара с какой-либо ценой и выдаст NULL. В настройках отчета обычно стоит жесткий фильтр «Только товары с оценкой», который просто отсекает такие строки.
2. Регистрация цен. Даже если склад настроен, проверьте наличие проведенных документов Установка цен номенклатуры. Важно, чтобы дата документа была меньше или равна дате начала периода отчета. Если цены установлены позже, то на момент формирования отчета товар считается «неоцененным».
3. Соответствие характеристик. Если в базе включен учет по характеристикам, а цена установлена в целом на номенклатуру (без уточнения характеристики), отчет может не подхватить цену, если в схеме компоновки настроено строгое соответствие. Проанализируем настройки отбора: попробуйте временно отключить флаг Только товары с оценкой в расширенных настройках на вкладке «Отборы». Если после этого товар появился в отчете с нулевой ценой — значит, проблема именно в отсутствии записи в регистре Цены номенклатуры.
Если вам досталась задача по доработке этого отчета (например, добавление выбора валюты), помните следующие моменты:
Вычисляемые поля для пересчета суммы по курсу валюты.НачалоПериода и КонецПериода в этом отчете часто передаются стандартным периодом СКД, но для расчета цен используется параметр Период. Следите, чтобы при программном вызове все они были заполнены.Выполнить() и посмотрите итоговый текст запроса, который генерирует 1С. Обычно там сразу видно обращение к несуществующим таблицам из-за выключенных функциональных опций.Таким образом, мистика с «двоением» данных решается внимательной работой с группировками компоновщика, а работоспособность самого отчета напрямую зависит от правильной настройки функциональных опций и заполнения видов цен в карточках складов.