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