Переменные в 1С 8.2 и 8.3
Во встроенном языке программирования 1С используются переменные. Имена переменных должны начинаться с английского или русского символа, или подчеркивания. Нельзя чтобы наименование переменной начиналось с цифры. Не рекомендуется именовать переменные зарезервированными синтаксическими конструкциями. Имена переменных должны носить осмысленный характер. Это улучшает читабельность программного кода. Что в последующем увеличивает скорость разработки или доработки приложения. При объявлении переменных не требуется указывать тип значения, как это делается во многих других языках программирования. Тип значения определяется автоматически системой.
Локальные переменные
Локальные переменные определяются внутри процедур или функций. Перед ними необязательно писать ключевое слово «Перем». Область доступности таких переменных ограничена границами своей процедуры или функции. То есть, к такой переменной нельзя обратиться в другой процедуре или функции или из глобального контекста.
Глобальные переменные
Во многих языках программирования предусмотрено создание глобальных переменных. Во встроенном языке 1С, так же есть возможность создавать глобальные переменные. Такие переменные доступны во всех процедурах и функциях модуля в котором они определены. В языке программирования 1С глобальные переменные могут быть определены в любых модулях (объектов, форм, и т.д) кроме общих модулей. Глобальные переменные задаются в самом верху модуля, перед определением всех процедур и функций. Перед именем переменной пишется ключевое слово «Перем». Значение указывать нельзя. Значение глобальной переменной можно задать в процедурах, функциях модуля или в конце модуля после всех процедур и функций.
Экспортные переменные
Глобальную переменную можно сделать экспортной, указав ключевое слово «Экспорт». Например, если экспортная переменная создаётся в модуле объекта справочника, то к ней можно обратиться через объект этого справочника, СправочникОбъект.ИмяПеременной.
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться
1с глобальная переменная в модуле формы массив
v8: Доступ к глобальным переменным, процедурам и функциям из общих модулей
Не секрет, что в общих модулях 8.0 не видны экспортируемые переменные, процедуры и функции модуля приложения. Ниже предлагается некоторое решение этой проблемы. | Автор статьи: Волшебник | Редакторы: Rovan, Гений 1С, nop Последняя редакция №13 от 06.12.07 | История URL: http://kb.mista.ru/article.php?id=37 |
Ключевые слова: глобальных, экспорт, переменные, видимость, общих, модулей
Небольшим заместителем глобальных переменных могут служить параметры сеанса, которые доступны в общих модулях. Но параметры сеанса могут сохранять не все типы значений, например, не получится так сохранить коллекцию значений (массив, структуру, список значений, таблицу значений и т.д.) Без преобразования в строку эти значения нельзя сохранить в параметре сеанса.
Кроме того, в параметрах сеанса не получается хранить сложные объекты, типа COM-объектов (в том числе из внешних компонент), обработок и др.
В некоторых случаях будет полезным следующий трюк:
В конфигурации создается обработка, которая обеспечивает доступ к модулю приложения из общего модуля.
В модуле обработки (не путать с модулем формы) размещаются следующие процедуры и функции:
Теперь в процедурах и функциях общих модулей можно делать следующие вещи:
Я думаю, вы выясните самостоятельно, как передавать параметры в процедуры и функции.
Еще хочу заметить, что такая обработка представляет собой ДЫРУ В БЕЗОПАСНОСТИ, потому что позволяет выполнить произвольный программный код и вызвать любую процедуру или функцию модуля приложения и общих модулей.
Еще хочу заметить, что этот трюк не соответствует идеологии платформы и возможно, что такая конфигурация не пройдет «1С:Совместимо», станет запутаннее и сложнее.
Кроме того, обращение к глобальным переменным будет довольно накладным (требуется создание объекта ОбработкаОбъект), но целью данной статьи является демонстрация технологических возможностей платформы на принципах «AS-IS». Вся ответственность за ваши программы лежит на вас.
Рекомендуется по возможности:
1. Обходиться вообще без глобальных переменных
2. Передавать информацию через параметры процедур и функций
3. Использовать параметры сеанса
4. Не допускать выполнения чужого программного кода
5. Комментировать сложные участки программы
Альтернативное решение, посредством общей формы вместо обработки
В модуль приложения
для формы, которая рабочий стол
Исправлю позже, сделав передаче через «парам»
Использование переменных в программных модулях
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
Примеры некорректного использования и исключений из этого правила приведены далее. Рекомендации по оформлению переменных в коде программных модулей см. в статье Структура модуля.
2. Неоправданные примеры использования переменных в модулях объектов (справочников, документов, наборов записей, обработок, отчетов и пр.).
Перем КонвертацияФайлов Экспорт;
Если КонвертацияФайлов Тогда
.
// вызывающий код
ФайлОбъект.КонвертацияФайлов = Истина;
ФайлОбъект.Записать();
Если ДополнительныеСвойства.Свойство(«КонвертацияФайлов») Тогда
.
// вызывающий код
ФайлОбъект.ДополнительныеСвойства.Вставить(«КонвертацияФайлов», Истина);
ФайлОбъект.Записать();
В то же время, для передачи внутренних параметров между обработчиками событий модуля объекта целесообразно использовать неэкспортные переменные модуля объекта, которые недоступны из внешнего кода.
Например:
Перем ПредыдущееЗначениеОрганизации; // значение реквизита «Организация» до записи объекта в базу
Процедура ПриЗаписи(Отказ)
Если ПредыдущееЗначениеРеквизита <> Организация Тогда
// отрабатываем изменение значения реквизита при записи
.
КонецЕсли;
2.2. Для обработки кодов возврата (ошибок) в логике программного модуля рекомендуется использовать строковые константы.
Например, неправильно:
Перем НетОшибок,
Ошибка_ОбработкиПроверкиЗаполнения, // возникает, если обработка проверки заполнения вернула отказ
Ошибка_ЗаписиОбъекта, // возникает, если во время записи объекта возникло исключение
Ошибка_БлокировкиОбъекта, // возникает, при попытке блокировки объекта
НетОшибок = 1;
Ошибка_ОбработкиПроверкиЗаполнения = 2;
Ошибка_ЗаписиОбъекта = 3;
Ошибка_БлокировкиОбъекта = 4;
2.3. Для кеширования долго-вычисляемых и часто-используемых значений в процедурах и функциях рекомендуется применять модули с повторным использованием возвращаемых значений на время вызова сервера.
Исключение из этого правила составляют случаи, когда по соображениям безопасности возвращать результат вычисления в экспортной функции недопустимо. В этом случае они размещаются в локальной переменной модуля.
3. Неоправданные примеры использования переменных в модулях форм.
3.1. Для кеширования долго-вычисляемых и часто-используемых значений в процедурах и функциях рекомендуется применять модули с повторным использованием возвращаемых значений.
3.2. Для хранения и передачи промежуточных результатов вычислений между разными процедурами и функциями формы следует использовать
Исключение из этого правила составляют случаи использования клиентских переменных формы для хранения промежуточных результатов в обработчиках ожидания формы, в обработчиках внешних событий и в клиентских обработчиках событий элементов формы.
Например:
4. Переменные управляемого и обычного приложения следует использовать для хранения «клиентских параметров сеанса». Подробнее см. статью Использование параметров сеанса.
Переменные в 1С 8
Эта статья посвящена базовым понятиям работы с переменными и основным приемам. Мы рассмотрим требования и подходы к именованию переменных, разберем общепринятые кейсы использования переменных в языке 1С, а также имеющиеся ограничения на использование переменных.
Что такое переменные и зачем они нужны?
Переменная — это именованное хранилище в памяти компьютера, куда можно помещать и откуда можно получать данные. Эти данные, которые размещаются по адресу переменной, называются значением переменной.
В языке 1С значение помещается в переменную при помощи оператора присваивания
а = 1; // Переменной а присвоили значение 1
Сообщить(а); // вывели в окно сообщений значение переменной а
Использование переменных позволяет отделить логику от данных, сделать код универсальным и переиспользуемым.
Стандарты и требования к наименованиям переменных в языке 1С
В языке 1С имена переменных должны соответствовать некоторым требованиям.
Но помимо требований платформы 1С, существуют еще негласные соглашения и общепринятые подходы, которыми пользуются большинство разработчиков. А также есть система стандартов и методик разработки и от самой компании 1С, где даются рекомендации и требования, как следует именовать переменные.
Язык 1С — регистронезависимый, то есть, для платформы не важно, заглавными или строчными буквами написана переменная или ключевое слово. И это следует учитывать при создании имен переменных в 1С, и при их дальнейшем использовании в коде.
Вот основные критерии хорошего имени переменной
Что не рекомендуется:
V8: Глобальная переменная в модуле управляемой формы 8.2.
В начале модуля упр. формы обработки 8.2. создаю переменную таким образом
Потом в при создании формы на сервере создается экземпляр Comобъекта для соединения с БД.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
БД = Новый COMОбъект(«ADODB.Connection»);
Вопрос: Где хранить на протяжении всей работы обработки СOMобъект??
(Ясен пень, что можно хранить СCom-объект во временном хранилище, каждый раз засоввыая и высоввывая его оттуда, но это весьма достает когда таких объектов много, кроме того является ли это корректным с точки зрения быстродействия??)
Ок, спасибо! Так я и думал.
На самом деле все гораздо сложнее, чем в вышеозначенном примере и коннект должен быть всегда открыт)
То есть через вр. хранилище. или может еще кто-нибудь какой-нибудь способ предложит??
P.S. Ну все таки почему так?? Не могу привыкнуть после 8.1., там они жили у меня в объекте, а тут нас из объекта выгнали, тк из формы к объекту обратиться нельзя, так еще и форме переменные не храняться!
(19) Спасибо большое! Я решил эту проблему примерно так же, только не по таймеру смотрю жив или нет, а в момент обращения к com-объекту.
Спасибо всем за помощь!
Уважаемый, H A D G E H O G s, о твоей статье.
Позволю себе внести пару замечаний. Буду очень благодарен, если ты объяснишь мне в чем я не прав если что.
«В ФАКЕ процедуры ПоместитьВоВременноеХранилище() можно почитать, что хранилище живет, пока живет его форма-владелец, идентификатор которой мы передаем во 2-ом пераметре», но ты передаешь во втором параметре не ее УИ а Новый УИ! Поэтому форма не будет владельцем этого хранилища.
Может причина чуда в этом??
Из синт.помощника:
Просто хочу понять для себя этот механизм, что бы не осталось «повисщих» вопросов.