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