Книга знаний

1С:Предприятие / v8 / Приемы программирования / Встроенный язык

v8: Доступ к глобальным переменным, процедурам и функциям из общих модулей

Не секрет, что в общих модулях 8.0 не видны экспортируемые переменные, процедуры и функции модуля приложения. Ниже предлагается некоторое решение этой проблемы.Автор статьи: Волшебник | Редакторы: Rovan, Гений 1С, nop,
Последняя редакция №6 от 12.10.06 | История
URL: http://kb.mista.ru/article.php?id=37

Ключевые слова: глобальных, экспорт, переменные, видимость, общих, модулей


Небольшим заместителем глобальных переменных могут служить параметры сеанса, которые доступны в общих модулях. Но параметры сеанса могут сохранять не все типы значений, например, не получится так сохранить коллекцию значений (массив, структуру, список значений, таблицу значений и т.д.) Без преобразования в строку эти значения нельзя сохранить в параметре сеанса.

Кроме того, в параметрах сеанса не получается хранить сложные объекты, типа COM-объектов (в том числе из внешних компонент), обработок и др.

В некоторых случаях будет полезным следующий трюк:

В конфигурации создается обработка, которая обеспечивает доступ к модулю приложения из общего модуля.

В модуле обработки (не путать с модулем формы) размещаются следующие процедуры и функции:

//------------------------- 
Функция Получить(Выражение) Экспорт 
    Возврат Вычислить(Выражение); 
КонецФункции 


//------------------------- 
Процедура Установить(Имя, Значение) Экспорт 
   Выполнить(Имя +" = Значение"); 
КонецПроцедуры 

//------------------------- 
Процедура ВыполнитьПрограмму(Текст) Экспорт 
   Выполнить(Текст); 
КонецПроцедуры 
//-------------------------


Теперь в процедурах и функциях общих модулей можно делать следующие вещи:

Процедура Тест() Экспорт 

//создаем объект типа ОбработкаОбъект.XXX 
гл = Обработки.гл.Создать(); 

//получение значения переменной 
а = гл.Получить("а"); 

//коллекции значений передаются "по ссылке", т.е. 
//ниже можно изменять ее элементы и они будут изменяться 
//в глобальной переменной 

//установить значение глобальной переменной 
гл.Установить("а",10); 

//вызвать экспортную процедуру модуля приложения 
гл.ВыполнитьПрограмму("проц()"); 

//вызвать функцию и получить ее возвращаемое значение 
а = гл.Вычислить("функ()");

КонецПроцедуры 
-----------------


Я думаю, вы выясните самостоятельно, как передавать параметры в процедуры и функции.

Еще хочу заметить, что такая обработка представляет собой ДЫРУ В БЕЗОПАСНОСТИ, потому что позволяет выполнить произвольный программный код и вызвать любую процедуру или функцию модуля приложения и общих модулей.

Еще хочу заметить, что этот трюк не соответствует идеологии платформы и возможно, что такая конфигурация не пройдет "1С:Совместимо", станет запутаннее и сложнее.

Кроме того, обращение к глобальным переменным будет довольно накладным (требуется создание объекта ОбработкаОбъект), но целью данной статьи является демонстрация технологических возможностей платформы на принципах "AS-IS". Вся ответственность за ваши программы лежит на вас.

Рекомендуется по возможности:
1. Обходиться вообще без глобальных переменных
2. Передавать информацию через параметры процедур и функций
3. Использовать параметры сеанса
4. Не допускать выполнения чужого программного кода
5. Комментировать сложные участки программы

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика