Как вызвать функцию из общего модуля расширения в СКД?

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

При доработке типовых отчетов через расширения часто возникает необходимость вывода дополнительных данных, получаемых с помощью алгоритмических вычислений. Если данные невозможно получить простым запросом, мы прибегаем к созданию вычисляемых полей, которые обращаются к экспортным функциям общих модулей. Рассмотрим пошагово, как правильно реализовать этот механизм и избежать типичных ошибок при работе в расширении.

Подготовка общего модуля в расширении

Для того чтобы система 1С могла «видеть» ваш код из СКД, необходимо правильно настроить сам общий модуль:

  1. Создайте общий модуль в расширении конфигурации.
  2. Убедитесь, что функция, которую вы планируете вызывать, имеет ключевое слово Экспорт.
  3. Установите необходимые флаги в свойствах модуля: обычно достаточно флага Сервер.
  4. Если функция будет использоваться многократно при формировании большого отчета, крайне рекомендуется включить флаг Повторное использование возвращаемых значений (со значением На сеанс). Это значительно ускорит работу отчета, так как результат функции будет кэшироваться.

Вызов функции из вычисляемого поля СКД

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

ИмяВашегоМодуля.ИмяФункции(Параметр1, Параметр2)

Важный нюанс: если ваш модуль находится в расширении, платформа обычно распознает его по имени. Если же возникают ошибки, убедитесь, что расширение находится в активном состоянии и конфигурация обновлена.

Типичные ошибки при передаче параметров

Одной из наиболее частых причин неработоспособности вызова является некорректный тип данных, передаваемый в параметры. Помните, что СКД часто выполняется в контексте фонового задания. Рассмотрим правила передачи данных:

Отладка кода, вызываемого из СКД

Если вы установили точку останова в функции, но она не срабатывает, не спешите паниковать. Чаще всего причина кроется в том, что отчет формируется в отдельном процессе. Чтобы поймать исполнение кода, выполните следующие действия:

  1. Убедитесь, что в конфигураторе включена отладка фоновых заданий (меню Отладка -> Подключение -> Настройка отладки).
  2. Проверьте, что в настройках отладки установлен флаг Автоматически подключаться к фоновым заданиям.
  3. Установите точку останова непосредственно в методе ПриКомпоновкеРезультата модуля отчета или в самом общем модуле расширения.
  4. Очистите кэш или перезапустите сеанс, если вносились критические изменения в структуру метаданных расширения.

Пример правильной реализации

Рассмотрим пример вызова функции, которая получает данные о сотруднике:


// В модуле расширения:
Функция ДанныеОсновногоСотрудника(ФизЛицо, Организация, ДатаАктуальности) Экспорт
    // Логика получения данных из РС
    Возврат Результат;
КонецФункции

// В выражении вычисляемого поля СКД:
СКД_ПовтИсп.ДанныеОсновногоСотрудника(ФизическоеЛицо, Организация, &Период.ДатаОкончания)

Как мы видим, в качестве параметров передаются Ссылка (ФизическоеЛицо) и Параметр СКД (Период), что является абсолютно корректным подходом. Если вы столкнулись с ошибкой исполнения, всегда начинайте проверку с передачи параметров — убедитесь, что они не являются значениями неопределенного типа или сложными объектами в неподходящий момент жизненного цикла отчета.

Таким образом, работа с функциями расширения в СКД — это надежный инструмент, при условии соблюдения правил сериализации данных и корректной настройки отладочного окружения.

← На главную