При разработке и доработке отчетов на базе системы компоновки данных (СКД) разработчики нередко сталкиваются с ситуацией, когда механизм расшифровки безупречно функционирует в файловой информационной базе, но перестает работать после переноса конфигурации в клиент-серверный режим (SQL). В этом случае форма отчета-расшифровки открывается, однако отборы не применяются, а параметры и группировки оказываются пустыми.
Разберем подробнее причины такого поведения платформы 1С:Предприятие и выясним, как правильно вызывать серверные процедуры обработки расшифровки.
Проанализируем ключевые архитектурные различия, которые влияют на механизм расшифровки при переходе от файловой базы к SQL:
ДанныеРасшифровкиКомпоновкиДанных не существует на стороне тонкого клиента напрямую — с ним можно работать только на сервере или через временное хранилище.УникальныйИдентификатор формы объект расшифровки может быть удален сборщиком мусора сразу после завершения текущего серверного вызова.Рассмотрим пример кода, в котором была допущена ошибка. В типовых конфигурациях (например, в 1C:Бухгалтерия) для обработки клика по ячейке отчета используется вызов функции общего модуля:
// Ошибочный вызов: третий параметр (КомпоновщикНастроек) пропущен
МассивПолей = БухгалтерскиеОтчетыВызовСервера.ПолучитьМассивПолейРасшифровки(
Расшифровка,
ДанныеРасшифровкиТек,
,
Истина
);
В файловой базе такой вызов мог частично отрабатывать за счет кэшированных данных в общей памяти процесса. Однако в клиент-серверном варианте функция БухгалтерскиеОтчетыВызовСервера.ПолучитьМассивПолейРасшифровки без настроек не может определить структуру полей и возвращает пустой массив. В результате открываемый отчет-расшифровка не получает необходимых отборов.
Посмотрим на корректный вариант вызова. Для того чтобы функция на сервере смогла извлечь все поля группировок, ресурсов и отборов, необходимо явно передать КомпоновщикНастроек текущего отчета третьим параметром:
// Корректный вызов с явной передачей компоновщика настроек
МассивПолей = БухгалтерскиеОтчетыВызовСервера.ПолучитьМассивПолейРасшифровки(
Расшифровка,
ДанныеРасшифровкиТек,
Отчет.КомпоновщикНастроек,
Истина
);
Разберем назначение параметров этого метода:
Расшифровка — идентификатор ячейки или элемента расшифровки, полученный в событии таблицы.ДанныеРасшифровкиТек — адрес объекта ДанныеРасшифровкиКомпоновкиДанных во временном хранилище.Отчет.КомпоновщикНастроек — компоновщик настроек отчета, содержащий текущие пользовательские настройки, выбранные поля и структуру отчета.Истина — признак необходимости включения дополнительных системных полей и родителей группировок.Если в клиент-серверном режиме поведение отчета отличается от файлового, выполним следующие диагностические шаги:
-debug. В конфигураторе перейдем в меню Отладка — Подключение и настроим автоматическое подключение к фоновым заданиям и клиент-серверным вызовам.ОбработкаРасшифровкиКомпоновкиДанных, который выполняет сбор настроек и передачу параметров в подчиненный отчет стандартными средствами платформы.