Модульная разработка
«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 C:/executor-modules
Имеет приоритет над переменной среды EXECUTOR_MODULES_PATH.
Если не указан абсолютный путь к файлу скрипта, «1С:Исполнитель» выполняет его поиск в следующем порядке:
- в каталоге с текущим скриптом;
- в каталоге переменной среды EXECUTOR_MODULES_PATH.
После подключения скрипта для него будет создан тип-одиночка с таким же именем. Данный тип позволяет получить доступ к содержимому скрипта — его глобальным методам и пользовательским типам.
Пример ниже показывает, как вызвать метод ВернутьЧислаФибоначчи()
, определенный в скрипте Фибоначчи.sbsl
:
// Импорт скрипта "Фибоначчи.sbsl".
// Скрипт находится в том же каталоге, что и текущий скрипт.
#требуется Фибоначчи.sbsl
метод Скрипт(КоличествоЧисел: Число)
пер ЧислаФибоначчи: ЧитаемыйМассив<Число>?
попытка
ЧислаФибоначчи = Фибоначчи.ВернутьЧислаФибоначчи(КоличествоЧисел)
поймать Исключение: ИсключениеНедопустимыйАргумент
выбросить Исключение
;
Консоль.Записать(ЧислаФибоначчи)
;
Использование индексного скрипта
Если ваш код требует подключения большого количества скриптов и вы не хотите подключать каждый скрипт отдельно, вы можете указать каталог, содержащий нужные скрипты. Для этого создайте в каталоге файл с именем #Индекс.sbsl
(или #Index.sbsl
) и перечислите в нем все требующие подключения скрипты, например:
// Импорт скриптов из каталога "КаталогСкриптов"
#требуется СкриптИзКаталога1.sbsl
#требуется СкриптИзКаталога2.sbsl
// ...
// Импорт скриптов из подкаталога "subfolder" основного каталога
#требуется subfolder/СкриптИзПодкаталога1.sbsl
#требуется subfolder/СкриптИзПодкаталога2.sbsl
// ...
Для индексных скриптов предусмотрены следующие ограничения:
- Каталог может содержать только один индексный файл.
- Имя файла чувствительно к регистру.
- В индексном скрипте поддерживается только подключение других скриптов. Объявление пользовательских типов и методов запрещено.
Чтобы использовать скрипты из каталога в другом скрипте, подключите к нему данный каталог с помощью директивы препроцессора #требуется
. После указания каталога в нем будет выполнен поиск индексного файла со списком доступных скриптов.
#требуется КаталогСкриптов
метод Скрипт()
СкриптИзКаталога1.ПубличныйМетод()
;