Получить консультацию

Переменные в 1С 8

Эта статья посвящена базовым понятиям работы с переменными и основным приемам. Мы рассмотрим требования и подходы к именованию переменных, разберем общепринятые кейсы использования переменных в языке 1С, а также имеющиеся ограничения на использование переменных.
Также есть видео версия статьи.

Что такое переменные и зачем они нужны?

Переменная – это именованное хранилище в памяти компьютера, куда можно помещать и откуда можно получать данные. Эти данные, которые размещаются по адресу переменной, называются значением переменной.

В языке 1С значение помещается в переменную при помощи оператора присваивания

а = 1; // Переменной а присвоили значение 1

Сообщить(а); // вывели в окно сообщений значение переменной а

Использование переменных позволяет отделить логику от данных, сделать код универсальным и переиспользуемым.

Стандарты и требования к наименованиям переменных в языке 1С

В языке 1С имена переменных должны соответствовать некоторым требованиям.

  • могут начинаться с нижнего подчеркивания, латинской или русской буквы
  • могут содержать в себе символы подчеркивания, буквы и цифры
  • никакие другие символы (спец. символы или пробелы) в именах переменных не допускаются
  • имена переменных не должны совпадать с зарезервированными словами языка или с именами свойств, доступных из текущего контекста(см. раздел “Контекст, область видимости и время жизни переменных в языке 1С”).

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

Язык 1С – регистронезависимый, то есть, для платформы не важно, заглавными или строчными буквами написана переменная или ключевое слово. И это следует учитывать при создании имен переменных в 1С, и при их дальнейшем использовании в коде.

Вот основные критерии хорошего имени переменной

  • состоит не из одной буквы
  • Не начинается с подчеркивания
  • Каждое слово, из которого состоит имя, начинается с заглавной буквы.
  • отражает прикладное назначение и смысл переменной

Что не рекомендуется:

  • Без необходимости смешивать русские и латинские буквы в имени
  • Писать имя полностью заглавными или полностью строчными
  • Использовать сокращения, в результате которых теряется смысл имени

 

Что рекомендуется

  • Придерживаться одного языка при написании кода. Если пишете конфигурацию на английском, то и все переменные на английском, если на русском – соответственно, все переменные на русском.
  • Использовать одинаковое написание имени переменной во всех местах ее использования

Основные приемы работы с переменными

Объявление переменных

Переменные можно объявить тремя способами.

Явным образом, используя ключевое слово Перем. Можно указать сразу несколько переменных через запятую

Перем ПерваяПеременная, ВтораяПеременная, ТретьяПеременная;

Неявно объявить переменную при первом присвоении ей значения

НоваяПеременная = "какое-то значение";

Неявно объявить переменную в качестве итератора цикла при обходе коллекции:

МассивЗначений = Новый Массив;
Для каждого ЭлементКоллекции из МассивЗначений Цикл //ЭлементКоллекции объявлен неявно

Использование переменных в выражениях языка 1С

Нельзя обращаться к переменным, которые еще не объявлены:

Перем ЭтоОбъявленнаяПеременная;

ЭтоТожеОбъявленнаяПеременная = 123;
Сообщить(АВотЭтаНеОбъявлена);// Такой переменной не объявлено, и платформа выдаст сообщение об ошибке

Типизация

Язык 1С поддерживает нестрогую динамическую типизацию. т.е. тип значения переменной определяется ее содержимым, и явным образом не декларируется.

Перем НоваяПеременная; // Тип значения будет Неопределено

НоваяПеременная = 1; // Тип значения - число

НоваяПеременная = "2"; // Тип значения - число

Поэтому разработчику особенно важно следить за корректностью использования переменной, и по возможности обеспечивать защиту от ошибок.

Контекст, область видимости и время жизни переменных в языке 1С

Контекст – это окружение программного кода, доступные из данной точки кода переменные, объекты языка и методы. Контекст – это очень важное понятие для качественного программирования в 1С. Различают три вида контекста – локальный контекст, контекст модуля, и глобальный контекст.

И прежде чем перейти дальше к определениям, давайте рассмотрим еще одно понятие, тесно связанное с контекстом – область видимости переменной. Рассмотрим простой пример:

Процедура ПримерОбластиВидимостиПеременной()
Перем ЛокальнаяПеременная, ЕщеОднаЛокальнаяПеременная;
КонецПроцедуры

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

Контексты, можно сказать, вложены один в другой. На самом верхнем уровне лежит глобальный контект. Он в первую очередь состоит из методов и свойств, предоставляемых самой платформой, а также из системных перечислений и системных наборов значений. В справке и синтакс-помощнике есть отдельная большая ветка, которая так и называется “глобальный контекст”.

Свойства и методы глобального контекста доступны из любой точки кода (но следует уточнить, что код делится на клиентский и серверный, и компилируется на клиенте и на сервере отдельно).

Каждый программный модуль – например, модуль приложения, модуль формы или модуль объекта – также имеет свой контекст, который называется локальным контекстом модуля. Контекст модуля определяет – какие методы, переменные и объекты языка “видны” в конкретном модуле.

Если объявить переменную в разделе объявления переменных модуля, то она будет доступна в пределах всего текста этого модуля. Ее значение можно будет менять как внутри методов, так и в разделе основной программы Пример:

Перем ПеременнаяМодуля; // Объявили переменную в разделе описания переменных

Процедура СообщитьПеременную()
Сообщить(ПеременнаяМодуля); // используем переменную в процедуре
КонецПроцедуры

Процедура ПоменятьПеременную()

ПеременнаяМодуля = "новое значение"; // присвоили переменной новое значение
КонецПроцедуры
ПеременнаяМодуля = "первоначальное значение"; // присвоили переменной значение в разделе основной программы

Еще ниже уровнем располагается локальный контекст метода, который состоит из параметров и переменных, объявленных в этом методе. Переменные, объявленные внутри процедуры или функции, называются локальными.

Расширение контекста при помощи слова Экспорт

Часть контекста модуля можно сделать “публичной”, добавив ключевое слово Экспорт для нужных переменных, процедур или функций. В этом случае такие экспортные переменные и методы будут дополнять контекст других модулей, и станут “видны” в других точках кода. Пример:

Модуль приложения

Перем ЭкспортнаяПеременая Экспорт;

Перем ЛокальнаяПеременнаяМодуля;

Модуль формы

&НаКлиенте
Процедура ПриОткрытии()

Сообщить(ЭкспортнаяПеременая) ;

КонецПроцедуры
ЭкспортнаяПеременая = "Новое значение";

Как видно из примера, экспортная переменная модуля приложения расширяет контекст модуля формы, и доступна в нем как в разделе процедур и функций, так и в разделе основной программы. А вот Переменная ЛокальнаяПеременнаяМодуля в контексте модуля формы будет недоступна.

Важно! Локальные переменные методов нельзя сделать экспортными, т.е. при попытке сохранить конфигурацию с нижеследующим кодом платформа выдает ошибку:

Процедура ПриведетКОшибке()
Перем ЛокальнаяПеременнаяМетода Экспорт;
КонецПроцедуры

Важно! При явном объявлении переменных в нижлежащем контексте, они будут перекрывать переменные с таким же именем, но из более высокого уровня контекста. Переменные модуля будут перекрывать одноименные глобальные переменные, а локальные переменные будут перекрывать переменные модуля.

Глобальная переменная >> Переменная модуля >> Локальная переменная метода
Пример:

Модуль приложения

Перем ЭкспортнаяПеременая Экспорт;

ЭкспортнаяПеременная = 123;

Модуль формы

Перем ЭкспортнаяПеременая; // Переменная модуля перекрыла глобальную переменную с тем же именем.

&НаКлиенте
Процедура ПриОткрытии()

Перем ЭкспортнаяПеременая; // Локальная переменная перекрыла вышележащие переменные - как глобальную, так и переменную модуля

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

Таким образом, несмотря на одинаковые названия, это будут разные переменные, т.е. они будут занимать разные адреса в памяти, а изменение значения одной переменной не будет приводить к изменениям в значениях других переменных.

Некоторые итоги и рекомендации

Следует по возможности уменьшать область видимости переменной. Если есть возможность обойтись без экспортной глобальной переменной – лучше обойтись. Если можно не создавать переменную модуля – лучше не создавать.
Почему? Чем больше время жизни переменной и чем больше ее область видимости, тем в больших контекстах она будет доступна. Возрастает возможность ошибки, когда переменную изменит код, который для этого не предназначался. Поведение выполнения программы может стать менее предсказуемым, а также это затруднит анализ и доработку кода.

Старайтесь давать переменным осмысленные имена, отражающие их прикладное назначение и по возможности – тип принимаемых значений. Пользуйтесь отладчиком, контекстной подсказкой и табло выражений для анализа и отладки переменных.

Эту и многие другие темы более подробно вы можете изучить при помощи моего видеокурса “Разработчик 1С с нуля”.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

8 + три =

К НАЧАЛУ