1С:Предприятие 8.2 /
Разработчикам /
Соглашения при написании кода
Использование глобальных переменных в программных модулях
1. В большинстве случаев, вместо переменных программных модулей следует использовать более подходящие средства разработки платформы 1С:Предприятие. Поскольку область видимости ( использования ) таких переменных сложно контролировать, то они зачастую становятся источником трудновоспроизводимых ошибок.
Примеры некорректного использования и исключений из этого правила приведены далее. Рекомендации по оформлению переменных в коде программных модулей см. в статье Структура модуля .
2. Неоправданные примеры использования переменных в модулях объектов (справочников, документов, наборов записей, обработок, отчетов и пр.).
2.1. Для передачи параметров между обработчиками подписок на события и в обработчики событий модуля объекта из внешнего кода рекомендуется использовать свойство объекта ДополнительныеСвойства. Например, неправильно:
Перем КонвертацияФайлов Экспорт; Процедура ПередЗаписью(Отказ) Если КонвертацияФайлов Тогда ... КонецПроцедуры // вызывающий код ФайлОбъект.КонвертацияФайлов = Истина; ФайлОбъект.Записать();
Правильно:
Процедура ПередЗаписью(Отказ) Если ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда ... КонецПроцедуры // вызывающий код ФайлОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); ФайлОбъект.Записать();
В то же время, для передачи внутренних параметров между обработчиками событий модуля объекта целесообразно использовать неэкспортные переменные модуля объекта, которые недоступны из внешнего кода.
Например:
Перем ПредыдущееЗначениеОрганизации; // значение реквизита " Организация " до записи объекта в базу Процедура ПередЗаписью(Отказ) ПредыдущееЗначениеОрганизации = ...; // с помощью запроса выясняем значение до записи объекта в базу КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ПредыдущееЗначениеРеквизита <> Организация Тогда // отрабатываем изменение значения реквизита при записи ... КонецЕсли; КонецПроцедуры
2.2. Для обработки кодов возврата (ошибок) в логике программного модуля рекомендуется использовать строковые константы.
Например, неправильно:
Перем НетОшибок, Ошибка_ОбработкиПроверкиЗаполнения, // возникает, если обработка проверки заполнения вернула отказ Ошибка_ЗаписиОбъекта, // возникает, если во время записи объекта возникло исключение Ошибка_БлокировкиОбъекта, // возникает, при попытке блокировки объекта Процедура ВыполнитьПерерасчет() ... Результат = ОбработатьДокументы(...); Если Результат = Ошибка_ЗаписиОбъекта Тогда ... ИначеЕсли Результат = Ошибка_БлокировкиОбъекта Тогда ... ИначеЕсли ... КонецПроцедуры ... //////////////////////////////////////////////////////////////////////////////// // ИНИЦИАЛИЗАЦИЯ МОДУЛЯ НетОшибок = 1; Ошибка_ОбработкиПроверкиЗаполнения = 2; Ошибка_ЗаписиОбъекта = 3; Ошибка_БлокировкиОбъекта = 4;
правильно:
Процедура ВыполнитьПерерасчет() ... Результат = ОбработатьДокументы(...); Если Результат = "ОшибкаЗаписиОбъекта" Тогда ... ИначеЕсли Результат = "ОшибкаБлокировкиОбъекта" Тогда ... ИначеЕсли ... КонецПроцедуры
2.3. Для кеширования долго-вычисляемых и часто-используемых значений в процедурах и функциях рекомендуется применять модули с повторным использованием возвращаемых значений на время вызова сервера.
Исключение из этого правила составляют случаи, когда по соображениям безопасности возвращать результат вычисления в экспортной функции недопустимо. В этом случае они размещаются в локальной переменной модуля.
3. Неоправданные примеры использования переменных в модулях форм.
3.1. Для кеширования долго-вычисляемых и часто-используемых значений в процедурах и функциях рекомендуется применять модули с повторным использованием возвращаемых значений.
При этом не следует кешировать статическую и легко вычисляемую информацию. В частности, не следует кешировать в клиентских переменных модуля формы значения предопределенных элементов и перечислений. Для их получения на клиенте предназначен метод ПредопределенноеЗначение.
3.2. Для хранения и передачи промежуточных результатов вычислений между разными процедурами и функциями формы следует использовать
- Параметры процедур и функций – для передачи результатов по цепочке вызовов дочерних процедур и функций в контексте одного вызова.
- Реквизиты формы – если требуется сохранять промежуточные результаты между разными вызовами с клиента. (Следует иметь в виду, что значения серверных переменных модуля формы не сохраняются между вызовами с клиента.)
Исключение из этого правила составляют случаи использования клиентских переменных формы для хранения промежуточных результатов в обработчиках ожидания формы, в обработчиках внешних событий и в клиентских обработчиках событий элементов формы.
Например:
&НаКлиенте Перем ПорядковыйНомерИзображения; // счетчик-нумератор для наименования файлов при сканирования нескольких изображений ... &НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) Если Источник = "TWaIN" И Событие = "Imageacquired" Тогда Если ПорядковыйНомерИзображения = Неопределено Тогда ПорядковыйНомерИзображения = 1; КонецЕсли; ПорядковыйНомерИзображения = ПорядковыйНомерИзображения + 1; // Сохранение отсканированного документа в файл с номером ПорядковыйНомерИзображения // ... КонецЕсли; КонецПроцедуры
4. Переменные управляемого и обычного приложения следует использовать для хранения «клиентских параметров сеанса». Подробнее см. статью Использование параметров сеанса .
Другие материалы по теме:
примеры, иначе, конецпроцедуры, буфер обмена, копировать, код, обмен, формы, значения, время, объект, результат, конфигурирование, пример
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Соглашения при написании кода
Другие материалы по теме:
Использование параметров сеанса
Нас находят: 1с 7 7 глобальная переменная, 1С глобальные переменные, требование к глобальным переменным 1с, глобальная переменная 1с, 1с глобальные переменные в модуле управляемой формы, глобальные переменные в 1с 7 7, глобальные переменные 1с 8 2, глобальные переменные 1с 8, проверить наличие глобальной переменной 1с 8 2, с : использование глобальных переменных в обработчиках событий
Мы на Facebook