При работе с типовыми конфигурациями, такими как 1С:Управление торговлей 11, программисты часто сталкиваются с ситуацией, когда добавление нового поля в схему компоновки данных (СКД) не приводит к его появлению в пользовательском режиме. Вы можете добавить поле в запрос, определить его в вычисляемых полях и даже вынести в «Выбранные поля», но при формировании отчета колонка попросту отсутствует. Рассмотрим подробнее, почему это происходит и как решить данную проблему по шагам.
В современных версиях УТ 11 (и других конфигурациях на базе БСП) отчеты строятся не «напрямую» из схемы компоновки, а через универсальные механизмы. Часто итоговый запрос или состав доступных полей жестко контролируется программным кодом в модуле отчета или в общих модулях. Проанализируем ситуацию: когда вы нажимаете кнопку «Сформировать», система может вызывать обработчик ПриКомпоновкеДанных, который переопределяет настройки компоновщика.
Разберем, что нужно проверить в первую очередь:
ВедомостьТоваровНаСкладах.ПриКомпоновкеДанных.Если в этой процедуре или в вызываемых из нее функциях (например, связанных с общим модулем ОтчетыСервер) прописана логика формирования текста запроса «на лету», то ваш измененный в конструкторе запрос будет просто заменен программным текстом. Посмотрим на пример того, как это может выглядеть в коде:
Процедура ПриКомпоновкеДанных(РезультатИзучения, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Система игнорирует стандартный вывод СКД
// Здесь вызывается механизм формирования отчета, который может
// игнорировать ваши правки в макете СКД
ОтчетыСервер.ПриКомпоновкеДанных(ЭтотОбъект, РезультатИзучения, ДанныеРасшифровки, СтандартнаяОбработка);
КонецПроцедуры
Если вы видите подобный код, необходимо убедиться, что ваши новые поля передаются в структуру, которую обрабатывает этот программный механизм. В некоторых случаях придется вносить изменения в логику формирования запроса прямо в коде, чтобы система «увидела» новые поля.
Даже если программный код не подменяет запрос, система 1С сохраняет пользовательские настройки для каждого отчета. Если пользователь ранее открывал этот отчет, структура колонок уже зафиксирована в его настройках (в хранилище настроек). Ваши изменения в конфигураторе не всегда автоматически обновляют эти сохраненные данные.
Выясним, как это исправить в пользовательском режиме:
Часто именно сброс настроек до стандартных является ключом к решению проблемы, так как он заставляет систему перечитать схему компоновки данных из метаданных заново.
Проанализируем настройки самой схемы компоновки данных. На вкладке «Наборы данных» в СКД есть важный флаг — «Автозаполнение». Рассмотрим два варианта развития событий:
ВЫБРАТЬ запроса, оно должно появиться. Однако, если вы используете временные таблицы, убедитесь, что поле передается через всю цепочку временных таблиц до самого последнего запроса в пакете.Также важно проверить ограничения. Напротив каждого поля в СКД есть колонки «Ограничение поля» (условие, компоновка и т.д.). Если там стоят галочки, поле может быть скрыто из списка выбора для пользователя, даже если оно присутствует в запросе.
Отчет «Ведомость товаров на складах» часто имеет структуру «Таблица», где есть строки (Номенклатура, Склад) и колонки (Период или другие измерения). Если вы добавили поле в общие «Выбранные поля» всего отчета, но при этом в настройках выбрана конкретная группировка или таблица, эти настройки могут перекрывать общие.
Разберем по шагам, как проверить иерархию настроек:
Если данные для нового поля берутся из объекта, на который у текущего пользователя нет прав (даже если на сам отчет права есть), система 1С на уровне платформы может исключить это поле из результата. Проанализируем это: если вы программист с полными правами, вы увидите поле, а обычный бухгалтер — нет. Проверьте права доступа к метаданным тех объектов, которые вы добавили в запрос.
Для успешного вывода нового поля в «Ведомости товаров на складах» рекомендуем придерживаться следующего алгоритма: сначала проверьте наличие поля во всех временных таблицах запроса, затем убедитесь в корректности настроек автозаполнения в СКД. После этого обязательно сбросьте настройки отчета в пользовательском режиме. Если поле все еще не появилось — ищите программную подмену запроса в процедуре ПриКомпоновкеДанных модуля отчета.