Иллюстрированный самоучитель по языку системы 1С:Предприятие
В языке переменные не обязательно объявлять в явном виде. Неявным определением переменной является первое ее появление в левой части оператора присваивания. Возможно также явное объявление переменной при помощи оператора Перем. Тип переменной определяется типом присвоенного ей значения. Не допускается использование в выражениях переменных с неопределенным значением (то есть переменных, которым никогда не присваивалось значения).
Переменные могут объединяться в массивы. В данной реализации программы предусмотрены только одномерные массивы.
Оператор объявления переменной
Перем
Объявление переменной в явном виде.
Синтаксис:
Англоязычный синоним:
Параметры:
<Имя_переменной> | Имя переменной. |
[<Размерность>] | Необязательная числовая константа (записывается в квадратных скобках), указывается только в том случае, если объявляется массив и должна представляться в виде положительного целого числа. |
Экспорт | Необязательное ключевое слово Экспорт указывает, что данная переменная станет доступна для других модулей. Использование данного ключевого слова имеет смысл только в глобальном программном модуле. |
Описание:
Оператор Перем в явном виде объявляет переменную.
Пример:
Область использования переменной
Область использования переменных зависит от места их определения в конфигурации задачи. Существует три области, в которых можно объявить переменные:
- В разделе определения переменных глобального программного модуля. Если переменные определены с ключевым словом Экспорт (см. оператор Перем), то это будут глобальные переменные.
- В разделе определения переменных модуля. Это переменные модуля.
- В процедуре или функции. Это локальные переменные.
Глобальные переменные доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции любого программного модуля конфигурации задачи.
Переменные модуля доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции того программного модуля, в пределах которого они объявлены.
Локальные переменные доступны в пределах той процедуры или функции, в которой они объявлены.
Если переменная определена как глобальная переменная, то она видна из всех процедур и функций любого программного модуля конфигурации задачи. Если же переменная определена внутри процедуры, то ее областью видимости является данная процедура или функция. Таким образом, если две переменные с одинаковыми именами используются в двух различных процедурах модуля, и имя этой переменной не упоминается как глобальная переменная, то это две различные переменные, локальные для процедур. Если же переменная определена как глобальная переменная, то любое использование имени этой переменной будет приводить к обращению к одной и той же переменной.
Единственный способ создать для процедуры локальную переменную с именем, совпадающим с именем переменной, определенной как глобальная переменная – это объявить ее явно при помощи оператора Перем.
Переменные в 1С 8
Эта статья посвящена базовым понятиям работы с переменными и основным приемам. Мы рассмотрим требования и подходы к именованию переменных, разберем общепринятые кейсы использования переменных в языке 1С, а также имеющиеся ограничения на использование переменных.
Также есть видео версия статьи.
Что такое переменные и зачем они нужны?
Переменная – это именованное хранилище в памяти компьютера, куда можно помещать и откуда можно получать данные. Эти данные, которые размещаются по адресу переменной, называются значением переменной.
В языке 1С значение помещается в переменную при помощи оператора присваивания
а = 1; // Переменной а присвоили значение 1
Сообщить(а); // вывели в окно сообщений значение переменной а
Использование переменных позволяет отделить логику от данных, сделать код универсальным и переиспользуемым.
Стандарты и требования к наименованиям переменных в языке 1С
В языке 1С имена переменных должны соответствовать некоторым требованиям.
- могут начинаться с нижнего подчеркивания, латинской или русской буквы
- могут содержать в себе символы подчеркивания, буквы и цифры
- никакие другие символы (спец. символы или пробелы) в именах переменных не допускаются
- имена переменных не должны совпадать с зарезервированными словами языка или с именами свойств, доступных из текущего контекста(см. раздел “Контекст, область видимости и время жизни переменных в языке 1С”).
Но помимо требований платформы 1С, существуют еще негласные соглашения и общепринятые подходы, которыми пользуются большинство разработчиков. А также есть система стандартов и методик разработки и от самой компании 1С, где даются рекомендации и требования, как следует именовать переменные.
Язык 1С – регистронезависимый, то есть, для платформы не важно, заглавными или строчными буквами написана переменная или ключевое слово. И это следует учитывать при создании имен переменных в 1С, и при их дальнейшем использовании в коде.
Вот основные критерии хорошего имени переменной
- состоит не из одной буквы
- Не начинается с подчеркивания
- Каждое слово, из которого состоит имя, начинается с заглавной буквы.
- отражает прикладное назначение и смысл переменной
Что не рекомендуется:
- Без необходимости смешивать русские и латинские буквы в имени
- Писать имя полностью заглавными или полностью строчными
- Использовать сокращения, в результате которых теряется смысл имени
- Придерживаться одного языка при написании кода. Если пишете конфигурацию на английском, то и все переменные на английском, если на русском – соответственно, все переменные на русском.
- Использовать одинаковое написание имени переменной во всех местах ее использования
Основные приемы работы с переменными
Объявление переменных
Переменные можно объявить тремя способами.
Явным образом, используя ключевое слово Перем. Можно указать сразу несколько переменных через запятую
Неявно объявить переменную при первом присвоении ей значения
Неявно объявить переменную в качестве итератора цикла при обходе коллекции:
Использование переменных в выражениях языка 1С
Нельзя обращаться к переменным, которые еще не объявлены:
Типизация
Язык 1С поддерживает нестрогую динамическую типизацию. т.е. тип значения переменной определяется ее содержимым, и явным образом не декларируется.
Поэтому разработчику особенно важно следить за корректностью использования переменной, и по возможности обеспечивать защиту от ошибок.
Контекст, область видимости и время жизни переменных в языке 1С
Контекст – это окружение программного кода, доступные из данной точки кода переменные, объекты языка и методы. Контекст – это очень важное понятие для качественного программирования в 1С. Различают три вида контекста – локальный контекст, контекст модуля, и глобальный контекст.
И прежде чем перейти дальше к определениям, давайте рассмотрим еще одно понятие, тесно связанное с контекстом – область видимости переменной. Рассмотрим простой пример:
Переменные, объявленные внутри процедуры или функции, являются локальными, и видны только в пределах этой процедуры или функции. Время жизни переменной начинается с момента ее объявления. После завершения кода процедуры, переменная перестает существовать. Платформа сама следит за временем жизни переменных, и уничтожает их, высвобождая память, после того, как переменная перестает использоваться.
Контексты, можно сказать, вложены один в другой. На самом верхнем уровне лежит глобальный контект. Он в первую очередь состоит из методов и свойств, предоставляемых самой платформой, а также из системных перечислений и системных наборов значений. В справке и синтакс-помощнике есть отдельная большая ветка, которая так и называется “глобальный контекст”.
Свойства и методы глобального контекста доступны из любой точки кода (но следует уточнить, что код делится на клиентский и серверный, и компилируется на клиенте и на сервере отдельно).
Каждый программный модуль – например, модуль приложения, модуль формы или модуль объекта – также имеет свой контекст, который называется локальным контекстом модуля. Контекст модуля определяет – какие методы, переменные и объекты языка “видны” в конкретном модуле.
Если объявить переменную в разделе объявления переменных модуля, то она будет доступна в пределах всего текста этого модуля. Ее значение можно будет менять как внутри методов, так и в разделе основной программы Пример:
Еще ниже уровнем располагается локальный контекст метода, который состоит из параметров и переменных, объявленных в этом методе. Переменные, объявленные внутри процедуры или функции, называются локальными.
Расширение контекста при помощи слова Экспорт
Часть контекста модуля можно сделать “публичной”, добавив ключевое слово Экспорт для нужных переменных, процедур или функций. В этом случае такие экспортные переменные и методы будут дополнять контекст других модулей, и станут “видны” в других точках кода. Пример:
Модуль приложения
Модуль формы
Как видно из примера, экспортная переменная модуля приложения расширяет контекст модуля формы, и доступна в нем как в разделе процедур и функций, так и в разделе основной программы. А вот Переменная ЛокальнаяПеременнаяМодуля в контексте модуля формы будет недоступна.
Важно! Локальные переменные методов нельзя сделать экспортными, т.е. при попытке сохранить конфигурацию с нижеследующим кодом платформа выдает ошибку:
Важно! При явном объявлении переменных в нижлежащем контексте, они будут перекрывать переменные с таким же именем, но из более высокого уровня контекста. Переменные модуля будут перекрывать одноименные глобальные переменные, а локальные переменные будут перекрывать переменные модуля.
Глобальная переменная >> Переменная модуля >> Локальная переменная метода
Пример:
Модуль приложения
Модуль формы
Таким образом, несмотря на одинаковые названия, это будут разные переменные, т.е. они будут занимать разные адреса в памяти, а изменение значения одной переменной не будет приводить к изменениям в значениях других переменных.
Некоторые итоги и рекомендации
Следует по возможности уменьшать область видимости переменной. Если есть возможность обойтись без экспортной глобальной переменной – лучше обойтись. Если можно не создавать переменную модуля – лучше не создавать.
Почему? Чем больше время жизни переменной и чем больше ее область видимости, тем в больших контекстах она будет доступна. Возрастает возможность ошибки, когда переменную изменит код, который для этого не предназначался. Поведение выполнения программы может стать менее предсказуемым, а также это затруднит анализ и доработку кода.
Старайтесь давать переменным осмысленные имена, отражающие их прикладное назначение и по возможности – тип принимаемых значений. Пользуйтесь отладчиком, контекстной подсказкой и табло выражений для анализа и отладки переменных.
Эту и многие другие темы более подробно вы можете изучить при помощи моего видеокурса “Разработчик 1С с нуля”.
Переменные и операторы (бесплатная статья по Программированию 1С)
из цикла статей «Первые шаги в разработке на 1С»
Как правило, изучение любого языка программирования начинается с примера написания первой простейшей программы (“Hello world!”). Делается это для того, чтобы наглядно показать работу с базовыми синтаксическими конструкциями. Мы не будем делать исключение из этого общепринятого способа подачи материала при изучении новой среды разработки и поэтому нашу первую статью следует рассматривать в этом же ключе. В ней мы подробно разберем ответы на следующие вопросы, касающиеся программирования на платформе «1С:Предприятие 8»:
- Где и при помощи чего писать программный код на встроенном языке 1С?
- Что такое программные модули, какие существуют правила работы с ними?
- Что такое переменная, как с ней работать, как и где её объявлять?
- Какие операторы сравнения, присваивания и условий существуют и как их применять?
- Булевы операции – что это и как с ними работать?
- Зачем нужны циклы и как их использовать?
Статья будет полезна всем тем, кто еще не знаком с разработкой на платформе «1С:Предприятие 8», но хочет научиться программировать на 1С.
Применимость
Материал актуален для платформы «1С:Предприятие 8» редакций 8.2. и 8.3.
Переменные и операторы
В этой статье мы приступаем к изучению встроенного языка 1С:Предприятие 8. Исполняемый код содержится в программных модулях.
Существует достаточно большое количество модулей, которые предназначены для обработки различных событий.
Так, вход пользователя в систему обрабатывается в одном модуле, а обработка нажатия пользователя на некоторую кнопку – в совершенно другом.
Таким образом, каждый модуль описывает поведение конфигурации в определенной точке. В модуле содержится, прежде всего, раздел описания переменных. Т.е. мы можем объявить в модуле некоторые переменные.
В дальнейшем они могут быть использованы в процедурах и функциях этого модуля. Если переменная определена с ключевым словом Экспорт, то она будет доступна вне данного модуля. Пример строки объявления переменных:
Перем Склад, Подразделение, Кладовщик Экспорт;
После объявления переменных содержится раздел процедур и функций.
За ними располагается раздел основной программы, который будет выполняться в момент обращения к данному модулю.
Например, в разделе основной программы можно осуществить инициализацию переменных, т.е. присвоить им некоторые начальные значения:
Состояние=1;
НовоеВыражение=2;
Результат=3;
Модуль можно представить, как комбинацию различных операторов, которые выполняют разные нужные нам действия.
Разделителем операторов является символ «;» (точка с запятой). Этот знак является признаком окончания оператора. Т.е. оператор может быть записан в таком виде:
Результат=100Х200
+400
-600;
При этом не важно, на скольких строках располагается оператор.
Конечно, чаще удобнее и нагляднее располагать оператор в одной строке, но иногда операторы являются достаточно длинными (число строк обоснованно может достигать нескольких десятков).
Точку с запятой можно не ставить в завершающем операторе данной конструкции, например, процедуры. Т.е. следующий код будет работать:
ИсходноеЗначение = 100;
ПромежуточноеЗначение = ИсходноеЗначение/5;
ИтоговоеЗначение = ИсходноеЗначение+ПромежуточноеЗначение
Однако лучше использовать точку с запятой в завершающем операторе. Не исключено, что со временем конструкция будет продолжена, и завершающий оператор окажется уже не завершающим. Придется специально отслеживать эту ситуацию.
Переменные предназначены для того, чтобы хранить некоторые значения любого типа данных. Они используются для промежуточного хранения информации, для обработки.
Практически в любом программном модуле, который выполняет некоторые действия, есть различные переменные. Типизация переменных по значениям в Платформе 1С:Предприятие 8 мягкая.
Например, переменная может содержать значение одного типа данных, а через несколько строк – другого типа:
Создан = Ложь;
Создан = Истина;
Создан =100;
В первых двух операторах значение переменных булевское, а в третьем оно меняется на числовое значение. Т.е. типизация зависит от того значения, которое присваивается данной переменной.
Описывать переменные можно двумя способами:
- неявный способ (упоминание в левой части оператора присваивания описывает данную переменную, нет предварительного описания переменной со словом Перем, т.е. нет специального раздела описания переменных);
- явное описание переменных (Перем КонтрольныеДанные;). Явное описание переменных используется, например, если предполагается последующая передача этой переменной в функцию.
Для названия переменных используется классическое описание идентификатора. Идентификатор состоит из букв, цифр и знаков подчеркивания. Начинаться идентификатор должен либо с буквы, либо со знака подчеркивания.
При этом название переменной должно отображать смысл данной переменной. Названия переменных из одной буквы (типа А, В, С) являются плохими примерами. Они не отражают суть переменных.
Примеры правильного названия переменных: Счетчик (увеличивающаяся переменная для цикла), Контрагент. Если имя переменной содержит несколько слов, то каждое новое слово, для наглядности, следует начинать с большой буквы.
В названии переменных нельзя использовать зарезервированные слова, такие как Процедура, Функция, Цикл, КонецЦикла и т.д. (эти конструкции выделяются в программном модуле красным цветом).
Зарезервированные слова – это операторы встроенного языка и их достаточно небольшое количество. Все они представлены в Синтакс-помощнике.
Следует отметить, что типы данных к зарезервированным словам не относятся (например, Массив, Булево, Истина, Ложь). Система такие имена переменных воспримет корректно.
Для написания программного кода регистр не имеет никакого значения. Например, слово Процедура можно писать как с большой, так и с маленькой буквы. Более того, большие и маленькие буквы можно чередовать внутри слова.
Для Платформы это не имеет никакого значения. Тем не менее, по правилам хорошего тона начало слова нужно писать с большой буквы, все остальные буквы маленькими.
По поводу языка. Можно использовать и русский язык, и английский, и комбинацию двух языков. Если кому-то удобно, можно спокойно использовать английский язык для написания программного кода, а также комбинировать русский и английский языки. Для Платформы это не важно.
Но существуют рекомендации использовать русский язык, потому что в системе достаточно большое количество объектов, которые имеют длинные названия.
Многие названия на английском языке довольно сложно помнить. При использовании комбинации двух языков ухудшается читаемость программного кода.
Булевы операции
В операторах сравнения очень часто используется булевская логика, которая возвращает значение Истина или Ложь.
Например, в условном операторе можно сравнивать: Если Событие = Продажа Тогда алгоритм пойдет по одной ветке (т.е. при значении Истина), по условию Ложь выполняется другая ветка алгоритма.
Условия могут быть достаточно сложными, они могут комбинироваться, при этом применяются следующие операторы: И, ИЛИ, и НЕ. Так, для оператора И:
Истина И Истина = Истина;
Истина И Ложь = Ложь;
Ложь И Истина = Ложь;
Ложь И Ложь = Ложь.
Для опрератора ИЛИ достаточно, чтобы один из операндов был равен Истина, тогда и значение комбинации будет Истина. Значение Ложь получается только в том случае, когда оба операнда Ложь.
Оператор НЕ просто инвертирует текущее значение (Ложь в Истину, Истину в Ложь).
С помощью комбинации данных операторов можно строить достаточно сложные условия. При составлении сложных условных операторов следует учитывать приоритеты.
Высший приоритет имеет оператор НЕ, следующим идет оператор И, а за ним оператор ИЛИ. То, что заключено в скобки, имеет самый высший приоритет и выполняется в первую очередь.
Например, расставим приоритеты (последовательность выполнения) для операций в приведенном выражении:
НЕ(Условие1 ИЛИ Условие2) И Условие3 ИЛИ Условие4
1. Результат1 = (Условие1 ИЛИ Условие2);
2. Результат2 = НЕ Результат1;
3. Результат3 = Результат2 И Условие1;
4. Результат = Результат3 ИЛИ Условие4;
Существует правило преобразования:
НЕ (Условие1 ИЛИ Условие2) = НЕ Условие1 И НЕ Условие2.
Однако не следует всегда стремиться упростить выражение, поскольку зачастую, по логике, проще читается выражение развернутое.
Оператор присваивания
Не следует путать оператор присваивания с равенством, не смотря на то, что у них одинаковое написание.
Принцип работы оператора присваивания таков, что левому значению (переменной с левой части) присваивается то значение, которое находится справа от знака равенства. Разберем пример:
Переменная1 = Переменная2 = Переменная3;
Левое значение – Переменная1, далее следует оператор присваивания.
Переменной1 присваивается значение равенства из булевской логики, т.е. Истина, если Переменная2 = Переменная3, или Ложь в обратном случае.
При тестировании на должность начинающего программиста довольно часто используется задача: поменять значения двух переменных местами.
Данная задача решается с использованием оператора присваивания и имеет два решения.
Решение №1 с использованием временной переменной:
ВременнаяПеременная = Переменная1;
Переменная1 = Переменная2;
Переменная2 = ВременнаяПеременная;
Решение №2:
Переменная1 = Переменная1 + Переменная2;
Переменная2 = Переменная1 – Переменная2;
Переменная1 = Переменная1 – Переменная2;
Условный оператор
Есть такой оператор Если, после которого необходимо описать некоторое условие (само условие может быть достаточно большим). После условия следует слово Тогда и выполняемые операторы.
Далее может следовать ключевое слово Иначе и серия других операторов. Если разных условий несколько, можно использовать серию ключевых слов ИначеЕсли (см. пример ниже). Вся конструкция обязательно завершается ключевым словом КонецЕсли, после чего следует знак точки с запятой.
Кроме простого и множественного условия существует сокращенная форма условного оператора: ?(Условие, Выражение1, Выражение2);
Если условие истинное, то будет выполняться Выражение1, в противном случае – Выражение2. Пример кода: ДорогойТовар = ?(Товар.Цена>100000, Истина, Ложь);
На практике вместо записей сравнения со значением Истина (Ложь) типа:
Если Переменная = Истина Тогда
и
Если Переменная = Ложь Тогда
реально используются эквивалентные записи:
Если Переменная Тогда
и
Если НЕ Переменная Тогда
Циклические операторы
Для любого вида цикла обязательно явное указание окончания этого цикла с помощью ключевого слова КонецЦикла. Существует несколько типов циклов.
Цикл по счетчику – цикл с фиксированным количеством повторений. Условием выхода из цикла является превышение граничного значения. Пример использования для расчета значения А!
А = 5;
Факториал = 1;
Для Счетчик = 1 По А Цикл
Факториал = Факториал * Счетчик;
КонецЦикла;
Цикл по условию – выполняется пока истинно условие данного цикла. Пример:
ОстатокСуммы = 1000;
ЦенаДополнительногоТовара = 243;
Количество = 0;
Пока ОстатокСуммы>0 Цикл
Количество = Количество+1;
ОстатокСуммы = ОстатокСуммы – Количество*ЦенаДополнительногоТовара;
ЦенаДополнительногоТовара = ЦенаДополнительногоТовара * 0.8;
КонецЦикла
Количество = Количество-1;
Данный цикл вычисляет, сколько единиц товара можно купить на данную сумму (1000 рублей), если после покупки каждой единицы товара предыдущая его цена умножается на коэффициент 0,8. Изначальная цена товара – 243 рубля.
Примером ошибки при использовании данного вида цикла новичками является вечный цикл, когда изначально условие цикла истинно, а в рамках самого цикла оно никак не изменяется.
Цикл по коллекциям (другое название Для каждого).
В Платформе существует достаточно большое количество коллекций (это такие контейнеры, которые содержат элементы определенного типа).
Обойти элементы коллекции можно с помощью цикла специального вида.
Например, существует массив чисел, необходимо посчитать сумму всех элементов массива:
Сумма = 0;
Для каждого Элемент Из Массив Цикл
Сумма=Сумма+Элемент;
КонецЦикла;
Для циклов существуют специальные операторы: Продолжить и Прервать.
Если в некоторой точке цикла выполнение дальнейших операторов данного витка становится бессмысленным, то чтобы вернуться на начало цикла и организовать его следующий виток используется оператор Продолжить.
Оператор Прервать позволяет закончить выполнение цикла, даже если условие цикла истинно.
На этом мы завершаем наше первое знакомство с разработкой на внутреннем языке 1С.
А как же Hello World? Мы же его еще не написали, да? Да, но ничто не мешает вам сделать это самостоятельно, т.к. знаний УЖЕ достаточно. Ну а если не получается, то можете подглядеть сюда.
Далее мы продолжим изучать разработку на 1С, поэтому оставайтесь на связи и не пропустите следующую статью 😉
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Вы можете скачать эту статью в формате PDF по следующей ссылке:Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Переменные в 1С 8.2 и 8.3
Во встроенном языке программирования 1С используются переменные. Имена переменных должны начинаться с английского или русского символа, или подчеркивания. Нельзя чтобы наименование переменной начиналось с цифры. Не рекомендуется именовать переменные зарезервированными синтаксическими конструкциями. Имена переменных должны носить осмысленный характер. Это улучшает читабельность программного кода. Что в последующем увеличивает скорость разработки или доработки приложения. При объявлении переменных не требуется указывать тип значения, как это делается во многих других языках программирования. Тип значения определяется автоматически системой.
Локальные переменные
Локальные переменные определяются внутри процедур или функций. Перед ними необязательно писать ключевое слово "Перем". Область доступности таких переменных ограничена границами своей процедуры или функции. То есть, к такой переменной нельзя обратиться в другой процедуре или функции или из глобального контекста.
Глобальные переменные
Во многих языках программирования предусмотрено создание глобальных переменных. Во встроенном языке 1С, так же есть возможность создавать глобальные переменные. Такие переменные доступны во всех процедурах и функциях модуля в котором они определены. В языке программирования 1С глобальные переменные могут быть определены в любых модулях (объектов, форм, и т.д) кроме общих модулей. Глобальные переменные задаются в самом верху модуля, перед определением всех процедур и функций. Перед именем переменной пишется ключевое слово "Перем". Значение указывать нельзя. Значение глобальной переменной можно задать в процедурах, функциях модуля или в конце модуля после всех процедур и функций.
Экспортные переменные
Глобальную переменную можно сделать экспортной, указав ключевое слово "Экспорт". Например, если экспортная переменная создаётся в модуле объекта справочника, то к ней можно обратиться через объект этого справочника, СправочникОбъект.ИмяПеременной.
Комментарии (0)
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться