Перейти к основному содержимому

Модульная разработка

«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.ПубличныйМетод()
;