Эффективное взаимодействие между сценариями проекта. Внедрение глобальных переменных и расширенная передача параметров.
При создании проекта включающего несколько сценариев можно подключить их все сразу применив директиву #Использовать
. И если будет необходим доступ к переменным между сценариями
это нужно будет дописывать, делая переменные экспортными и присваивая им значения.
В другом случае можно методом ЗагрузитьСценарий
загрузить сценарий и внедрить глобальную переменную в область видимости загружаемого сценария.
В этой работе сделана попытка совместить оба подхода. Создадим объект библиотеки ИнтеграторОдноСкрипта
и вызовем метод ЗагрузитьСценарии
.
ИОС = Новый ИнтеграторОдноСкрипта();
ОбщаяСтуктура = ИОС.ОбщаяСтруктура;
ОбщаяСтуктура.Вставить("ИОС", ИОС);
Сценарии = ИОС.ЗагрузитьСценарии(ЭтотОбъект, ".\");
В примере переменная ОбщаяСтуктура
получает значение предопределенного в библиотеке объекта Структура
и она будет доступна во всех загруженных таким способом сценариях напрямую, без объявлений. Её можно будет изменять и изменения отразятся во всех сценариях.
Переменная Сценарии
это тоже структура. После просмотра заданного каталога она будет содержать ключами названия сценариев, значениями сами сценарии. Доступ получается красивый: Сценарии.Главный
или Сценарии["Главный"]
.
Это что касается автоматики.
Но также в библиотеке есть возможность добавить глобальную переменную поддерживаемого односкриптом типа в область видимости подключаемых сценариев в ручном режиме. Для этого примените метод ВвестиГлобальноеСвойство
.
Стуктура1 = Новый Структура();
Стуктура1.Вставить("Ключ", "Значение ключа");
ИОС.ВвестиГлобальноеСвойство(Стуктура1, "МояСтруктура", Ложь);
Только делать это нужно до метода ЗагрузитьСценарии
.
Ещё одна возможность этой работы это передача в метод другого сценария дополнительных данных, что то навроде аргументов события. Назовем их условно аргументами делегата. Можно создать делегат для выполнения в другом сценарии и при его выполнении в методе будут доступны агрументы где в свойстве Параметр
будут доступны данные.
//== Файл Стартовый.os
// ...
ОбщаяСтуктура = ИОС.ОбщаяСтруктура;
ОбщаяСтуктура.Вставить("ИОС", ИОС);
Сценарии = ИОС.ЗагрузитьСценарии(ЭтотОбъект, ".\");
Параметры = Новый Структура();
Параметры.Вставить("Ключ1", "Значение1");
Действие1 = ИОС.Действие(Сценарии.Главный, "МояПроцедура", Параметры);
Рез = ИОС.Выполнить(Действие1);
//...
//== Файл Главный.os
Функция МояПроцедура() Экспорт
Пар = ОбщаяСтруктура.ИОС.Аргументы.Параметр;
Возврат Пар.Ключ1;
КонецФункции
Так можно будет передавать данные в метод у которого параметров и нет вовсе.