Почему изменения в запросе СКД не отображаются в отчете ЗУП 3.1 и как это исправить

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

При разработке или модификации отчетов в конфигурации 1С:Зарплата и управление персоналом 3.1 программисты часто сталкиваются с ситуацией: в конструкторе СКД запрос изменен (например, добавлено ОБЪЕДИНИТЬ), в консоли запросов данные выводятся корректно, но в самом отчете результат остается прежним или новые данные отсутствуют. Рассмотрим подробнее, почему это происходит и как заставить систему «увидеть» ваши изменения.

Причина 1: Программная модификация запроса и использование шаблонов

В ЗУП 3.1 большинство типовых отчетов построены не на «статичных» запросах, а на базе механизмов БСП и специализированных модулей (например, ЗарплатаКадрыОтчеты). Рассмотрим ситуацию: текст запроса в схеме компоновки данных является лишь «заготовкой» или шаблоном.

Когда пользователь нажимает кнопку Сформировать, программный код системы анализирует схему, текущие настройки и функциональные опции. Проанализируем этот процесс: система ищет в тексте специальные расширения (конструкции в фигурных скобках {}) и может полностью перестроить текст запроса перед его отправкой на сервер. Если вы добавили ОБЪЕДИНИТЬ, но не учли, как система обрабатывает поля в каждой части объединения, одна из частей может быть просто проигнорирована или обрезана построителем запроса.

Причина 2: Влияние сохраненных пользовательских настроек

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

Разберем, как это работает: СКД сопоставляет поля из новой схемы с теми, что были сохранены в настройках пользователя. Если соответствие нарушено или настройки жестко фиксируют старый состав полей, ваши изменения в ОБЪЕДИНИТЬ просто не попадут в итоговую выборку.

Решение 1: Отладка через процедуру ПриКомпоновкеРезультата

Чтобы понять, какой именно запрос выполняется на самом деле, воспользуемся отладчиком. Посмотрим на алгоритм действий:

  1. Откроем модуль объекта отчета.
  2. Найдем или создадим предопределенную процедуру ПриКомпоновкеРезультата.
  3. Установим точку останова и проанализируем объект КомпоновщикМакета.

Для того чтобы увидеть реальный текст запроса, который уходит в СУБД, можно использовать следующий фрагмент кода:


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	// Настройки компоновки
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	// Формируем макет компоновки
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	
	// Здесь в МакетКомпоновки.НаборыДанных можно увидеть итоговый текст запроса
	Для Каждого НаборДанных Из МакетКомпоновки.НаборыДанных Цикл
		ТекстЗапросаДляАнализа = НаборДанных.Запрос;
	КонецЦикла;
	
	// Продолжаем выполнение...
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(Результат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

Проанализировав переменную ТекстЗапросаДляАнализа, вы увидите, что именно система сделала с вашим объединением. Часто оказывается, что условия ГДЕ или ВЫБРАТЬ накладываются только на первую часть ОБЪЕДИНИТЬ, если расширения СКД настроены неверно.

Решение 2: Сброс настроек и очистка кэша

Если запрос в отладчике выглядит верным, но данные всё равно не те, выполним следующие шаги:

  1. Сброс настроек: В режиме «1С:Предприятие» в форме отчета зайдите в Еще — Установить стандартные настройки. Это заставит систему перечитать структуру схемы из конфигурации, а не из хранилища настроек.
  2. Изменение идентификатора: Если работаете с внешним отчетом, попробуйте изменить его наименование и Имя в свойствах объекта. Это создаст «чистую» запись в системе, исключая влияние старого кэша.
  3. Обновление вспомогательных данных: Для типовых отчетов ЗУП иногда требуется запустить обработку «Обновление вспомогательных данных» или обновить версию конфигурации (в модуле ОбновлениеИнформационнойБазы), чтобы система заново зарегистрировала доступные поля отчета.

Решение 3: Специфика использования UNION в СКД

Рассмотрим технические нюансы самого объединения. При использовании ОБЪЕДИНИТЬ в СКД важно убедиться в следующем:

Итоги

Работа с отчетами в ЗУП 3.1 требует понимания того, что СКД — это не просто редактор запросов, а мощный генератор кода. Если изменения не видны, всегда начинайте с проверки реального запроса через ПриКомпоновкеРезультата и сброса пользовательских настроек. Это в 90% случаев позволяет найти причину «невидимости» добавленных данных.

← На главную