Модульная разработка
«1С:Исполнитель» поддерживает разбиение кода на отдельные модули, каждый из которых может выполнять определенную функцию.
- разделить сложные скрипты на более простые;
- повторно использовать код в других скриптах;
- обеспечить изоляцию кода;
- упростить отладку и тестирование скриптов;
- повысить скорость разработки за счет параллельной работы над отдельными скриптами.
Создание скрипта
Скрипт — это файл, написанный на языке «1С:Исполнителя» и имеющий
расширение .sbsl
. Он может как использоваться в других скриптах,
так и запускаться автономно. Имя скрипта должно соответствовать следующим
требованиям:
- может содержать только буквы (латиницы или кириллицы), цифры и символ подчеркивания;
- не может начинаться с цифры;
- чувствительно к регистру, однако запрещается одновременное использование
скриптов, имена которых отличаются только регистром (
мойСкрипт
иМойСкрипт
, например).
В скриптах поддерживаются две области видимости: @Локально и @Глобально. Они позволяют разграничить, что будет доступно только локально, а что вне скрипта:
- @Глобально — метод или пользовательский тип доступен в других скриптах.
- @Локально — метод или пользовательский тип доступен только внутри скрипта.
При создании скриптов также следует учитывать следующее ограничение: циклические зависимости между скриптами запрещены. Другими словами, вы не можете создать скрипт А, который требует подключения скрипта B, в свою очередь зависящего от скрипта A.
Фибоначчи.sbsl
, содержащий метод для
расчета последовательности чисел
Фибоначчи:@Глобально
метод ВернутьЧислаФибоначчи(КоличествоЧисел: Число): ЧитаемыйМассив<Число>
если КоличествоЧисел < 2
выбросить новый ИсключениеНедопустимыйАргумент(
"Количество чисел должно быть больше двух!")
;
пер Числа: Массив<Число> = []
Числа.Добавить(0)
Числа.Добавить(1)
для Номер = 2 по КоличествоЧисел
Числа.Добавить(Числа.Получить(Номер - 1) + Числа.Получить(Номер - 2))
;
возврат новый ЧитаемыйМассив<Число>(Числа)
;
Подключение скрипта
#требуется <путь_к_скрипту>
// или
#требуется "<путь_к_скрипту>"
Параметр
<путь_к_скрипту> задает относительный (относительно
каталога с текущим скриптом) или абсолютный путь к подключаемому скрипту.- создать переменную окружения EXECUTOR_MODULES_PATH, в
которой указать каталог, содержащий подключаемые скрипты;Совет: Если во время разработки вам необходимо переопределить каталог, указанный в переменной окружения EXECUTOR_MODULES_PATH, используйте следующую настройку расширения для Visual Studio Code:
1c.executor.modules.path
. - использовать параметр командной строки
--modules-path
для указания пути к каталогу, в котором будет выполняться поиск подключаемых скриптов, например:
Имеет приоритет над переменной среды EXECUTOR_MODULES_PATH.executor --modules-path C:/executor-modules
- в каталоге с текущим скриптом;
- в каталоге переменной среды EXECUTOR_MODULES_PATH.
После подключения скрипта для него будет создан тип-одиночка с таким же именем. Данный тип позволяет получить доступ к содержимому скрипта — его глобальным методам и пользовательским типам.
Фибоначчи.sbsl
:// Импорт скрипта "Фибоначчи.sbsl".
// Скрипт находится в том же каталоге, что и текущий скрипт.
#требуется Фибоначчи.sbsl
метод Скрипт(КоличествоЧисел: Число)
пер ЧислаФибоначчи: ЧитаемыйМассив<Число>?
попытка
ЧислаФибоначчи = Фибоначчи.ВернутьЧислаФибоначчи(КоличествоЧисел)
поймать Исключение: ИсключениеНедопустимыйАргумент
выбросить Исключение
;
Консоль.Записать(ЧислаФибоначчи)
;
Использование индексного скрипта
#Индекс.sbsl
(или #Index.sbsl
) и перечислите в нем все требующие подключения
скрипты,
например:// Импорт скриптов из каталога "КаталогСкриптов"
#требуется СкриптИзКаталога1.sbsl
#требуется СкриптИзКаталога2.sbsl
// ...
// Импорт скриптов из подкаталога "subfolder" основного каталога
#требуется subfolder/СкриптИзПодкаталога1.sbsl
#требуется subfolder/СкриптИзПодкаталога2.sbsl
// ...
- Каталог может содержать только один индексный файл.
- Имя файла чувствительно к регистру.
- В индексном скрипте поддерживается только подключение других скриптов. Объявление пользовательских типов и методов запрещено.
#требуется КаталогСкриптов
метод Скрипт()
СкриптИзКаталога1.ПубличныйМетод()
;