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