Автоматизация бизнеса

Установка, настройка, внедрение и сопровождение любых конфигураций на платформе 1С:Предприятие.

Тел: 8(985)141-74-63 Дмитрий.   
ICQ:     552-608-881
e-mail: info@programmist1c.ru

Оплата после выполнения работы.

  •   Удаленный админ
  •   Карта сайта
  •   Контакты


  • Поиск
     

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


    Не секрет, что в общих модулях 8.0 не видны экспортируемые переменные, процедуры и функции модуля приложения. Ниже предлагается некоторое решение этой проблемы.
    Автор статьи: Волшебник | Редакторы: Rovan, Гений 1С
    Последняя редакция №6 от 12.10.06 |


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


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

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

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

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

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

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


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

    Процедура Тест() Экспорт 
    
    //создаем объект типа ОбработкаОбъект.XXX 
    гл = Обработки.гл.Создать(); 
    
    //получение значения переменной 
    а = гл.Получить("а"); 
    
    //коллекции значений передаются "по ссылке", т.е. 
    //ниже можно изменять ее элементы и они будут изменяться 
    //в глобальной переменной 
    
    //установить значение глобальной переменной 
    гл.Установить("а",10); 
    
    //вызвать экспортную процедуру модуля приложения 
    гл.ВыполнитьПрограмму("проц()"); 
    
    //вызвать функцию и получить ее возвращаемое значение 
    а = гл.Вычислить("функ()");
    
    КонецПроцедуры 
    -----------------


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

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

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

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

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


    30.11.16 | 20:25


    28.11.16 | 09:22


    26.11.16 | 08:19


    22.11.16 | 20:17


    19.11.16 | 10:14


    18.11.16 | 20:09




    Внедрение 1С Автоматизация 1С Доработка 1С Сопровождение 1С Обслуживание 1С Программирование 1С 8 Hастройка 1С Карта сайта Контакты