11. Механизмы построения отчетности
#15

Готовишься к экзамену?

Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.

Перейти в бота

Можно ли в языке выражений системы компоновки данных использовать собственные функции?

Можно, и при интерактивной, и при программной работе с системой компоновки данных. Функции должны быть описаны с ключевым словом "Экспорт" и расположены в любом общем модуле
Правильно: В языке выражений СКД допускается вызов экспортных функций из общих модулей конфигурации, поэтому их можно применять как в обычных (интерактивных) отчетах, так и при формировании отчета из кода. Главное - сделать функцию доступной извне модуля через «Экспорт» и разместить ее в общем модуле.
Можно, но только при программной работе с системой компоновки данных. Функции должны быть описаны с ключевым словом "Экспорт" и обязательно расположены в глобальном общем модуле
Неправильно: Использование собственных функций доступно не только при программном формировании, но и при интерактивном запуске отчета. Также нет требования «обязательно глобальный общий модуль» - важна экспортность функции и доступность модуля в нужном контексте (клиент/сервер).
Нельзя
Неправильно: Язык выражений СКД допускает вызов функций общих модулей при соблюдении условий (экспортность и корректные свойства общего модуля). Это часто используют для вычисляемых полей и нестандартных преобразований данных в отчетах.
Можно, но только при интерактивной работе с системой компоновки данных. Функции должны быть описаны с ключевым словом "Экспорт" и расположены в любом общем модуле
Неправильно: Ограничения «только интерактивно» нет: те же пользовательские функции можно использовать при программной работе с СКД (формирование результата из кода). Поэтому утверждение сужает реальные возможности механизма.
Можно, но только при интерактивной работе с системой компоновки данных. Функции должны быть описаны с ключевым словом "Экспорт" и обязательно расположены в глобальном общем модуле
Неправильно: Во-первых, функции можно применять и программно, не только интерактивно. Во-вторых, требование «обязательно глобальный общий модуль» некорректно: ключевое условие - «Экспорт» и правильные свойства модуля (доступность на сервере/клиенте по месту вычисления).
Можно, но только при программной работе с системой компоновки данных. Функции должны быть описаны с ключевым словом "Экспорт" и расположены в любом общем модуле
Неправильно: Это утверждение ошибочно ограничивает использование собственных функций только программной работой. На практике те же функции доступны и при интерактивном формировании отчета (если функция экспортная и общий модуль доступен в соответствующем контексте выполнения выражения).

Пояснение

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