1C-CodeОсновы 1С → Переменные: где программа хранит данные

Переменные: где программа хранит данные

С самого начала и по шагам. Половина главы — упражнения: вы пишете код прямо здесь.

Глава 2 из 36 · чтение примерно 25 минут

Переменная — первое понятие программирования: если оно не уложилось, дальше не уложится ничего. Поэтому глава подробная.

Упражнения лучше делать все — они короткие, и навык остаётся именно от них: читать про код и писать код — разные умения.

Зачем нужны переменные

Число само по себе программе негде хранить: посчитала — и забыла. Чтобы значение можно было использовать дальше, ему дают имя.

Переменная — это не «ячейка памяти», а имя, за которым закреплено значение. Вы называете число «Цена» и дальше говорите про него «Цена», а не «двести пятьдесят».

Самая первая строка кода

Цена = 250;
ЧастьЧто означает
Ценаимя переменной — вы придумываете его сами
=знак присваивания: «положить в то, что слева, то, что справа»
250значение, которое кладём
;точка с запятой — конец команды, как точка в конце предложения

Прочитайте эту строку вслух так: «переменной Цена присвоить 250». Не «Цена равно 250» — это важное различие, к нему мы ещё вернёмся.

После этой строки в программе появилось имя Цена, и оно означает 250. Можно писать Цена * 4 — получится 1000.

Упражнение 1. Ваша первая переменная

Создайте переменную Цена и положите в неё число 250. Одна строка. Не забудьте точку с запятой в конце.

Решается в тренажёре: код запускается и проверяется сразу.

Имя придумываете вы

Имя переменной ни на что не влияет технически: программа одинаково выполнит Цена = 250 и ЫФВА = 250. Влияет оно на людей — на вас через неделю и на того, кто откроет этот код через год.

Правила простые:

Заглавные и строчные буквы не различаются

В 1С Цена, цена и ЦЕНАодна и та же переменная. Это удобно, но и опасно: опечатка в регистре не приведёт к ошибке, а вот опечатка в букве — приведёт.

И отдельная ловушка, на которой теряют часы: русская С и латинская C выглядят одинаково, а для программы это разные буквы. Сумма с латинской C — уже другая переменная. Тренажёр такие случаи узнаёт и говорит об этом прямо.

Упражнение 2. Имя из двух слов

Создайте переменную КоличествоТоваров со значением 12. Обратите внимание: без пробела, второе слово с заглавной буквы.

Решается в тренажёре: код запускается и проверяется сразу.

Переменную можно изменить

Слово «переменная» означает ровно это: значение можно заменить на другое. Каждое новое присваивание затирает старое.

Значение меняется

Остаток = 100;
Остаток = 80;
Остаток = Остаток - 30;
ЧастьЧто означает
первая строкав Остатке 100
вторая строкасотня забыта, теперь 80 — старое значение не сохраняется
третья строкасначала считается правая часть: 80 − 30 = 50, потом кладётся в Остаток
итогв Остатке 50

Почему «Остаток = Остаток − 30» — не уравнение

В математике запись x = x − 30 не имеет решений. В программировании это не равенство, а команда: «возьми то, что сейчас в Остатке, вычти 30 и положи обратно в Остаток».

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

Упражнение 3. Изменение значения

Дано: Остаток = 100;. Допишите одну строку так, чтобы из остатка вычлось 35 и результат остался в той же переменной.

Решается в тренажёре: код запускается и проверяется сразу.

Что можно класть в переменную

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

Четыре типа, которые встречаются постоянно:

Типы, с которых всё начинается

ТипКак выглядит в кодеЧто это
ЧислоЦена = 250;
Доля = 0.15;
Целое или дробное. Дробная часть — через ТОЧКУ, не запятую
СтрокаИмя = "Иванов";Текст. Всегда в двойных кавычках
БулевоПроведён = Истина;Только два значения: Истина или Ложь
ДатаСрок = '20240515';Момент времени. В одинарных кавычках, ГГГГММДД

Кавычки разные, и это не мелочь

Двойные кавычки — строка: "250" это текст из трёх знаков.
Одинарные — дата: '20240515' это 15 мая 2024 года.

Число в кавычках — уже не число. "250" + 10 не даст 260: программа не станет складывать текст с числом и сообщит об ошибке. Это одна из самых частых ошибок при загрузке данных из файлов, где всё приходит строками.

Упражнение 4. Разные типы

Создайте три переменные: Товар со значением "Гвозди" (строка, в двойных кавычках), Количество со значением 50 и Итого, равную количеству, умноженному на 7.

Решается в тренажёре: код запускается и проверяется сразу.

Тип не объявляют — он берётся из значения

Во многих языках тип переменной пишут заранее: «здесь будет число». В 1С это не нужно. Тип определяется тем, что вы положили.

Больше того — в одну переменную можно последовательно положить значения разных типов. Программа не возражает.

Тип меняется вместе со значением

Значение = 250;        // сейчас это Число
Значение = "двести";   // а теперь Строка
Значение = Истина;     // теперь Булево
ЧастьЧто означает
// после кодакомментарий — текст для человека, программа его не выполняет
Значениеодна и та же переменная
типменяется сам, вслед за тем, что положили
выводудобно, но требует внимательности: что лежит внутри, надо помнить самому

Комментарии

Две косые черты // означают: всё до конца строки — заметка для человека. Программа её пропускает.

Комментарии пишут не для того, чтобы пересказать код словами (// увеличиваем счётчик рядом со строкой, которая увеличивает счётчик, бесполезен), а чтобы объяснить почему сделано именно так. Это привычка, которая отличает хороший код от просто работающего.

Как посмотреть, что внутри

Пока вы пишете код, значения переменных не видны. Чтобы заглянуть внутрь, есть команда Сообщить — она выводит значение на экран.

Это первый инструмент отладки: когда непонятно, что происходит, выводят значения и смотрят.

Упражнение 5. Посмотреть значение

Создайте переменную Приветствие со значением "Здравствуйте" и выведите её командой Сообщить(Приветствие);

Решается в тренажёре: код запускается и проверяется сразу.

Переменная должна появиться раньше, чем понадобится

Программа выполняется сверху вниз, строка за строкой. Если обратиться к переменной, которой ещё нет, выполнение прекратится с ошибкой «Переменная не определена».

Звучит очевидно, но на практике это самая частая ошибка новичка — и почти всегда из-за опечатки в имени: объявили СуммаДокумента, а обратились к СумаДокумента. Для программы это разные имена, и второго она не знает.

✓ Так работает

Цена = 250;
Итого = Цена * 2;

Цена появилась строкой выше — к моменту второй строки она уже есть.

✕ А так — ошибка

Итого = Цена * 2;
Цена = 250;

В первой строке Цены ещё не существует. Программа остановится на ней.

Упражнение 6. Найдите ошибку

Этот код не работает. Исправьте порядок строк так, чтобы Сумма получилась равной 1000.

Решается в тренажёре: код запускается и проверяется сразу.

Пусто бывает разным

«Переменная пустая» — в 1С не одно состояние, а несколько разных, и путаница между ними даёт ошибки, которые трудно искать.

Неопределено — значения нет вообще. Так выглядит переменная, которой ничего не присвоили, непереданный параметр, ключ, которого нет в соответствии.

NULL — совсем другое: это «в базе данных по этому полю нет строки». Приходит только из запросов, из левых соединений. NULL не равен Неопределено, и это отдельный тип.

Пустое значение типа — ноль для числа, пустая строка для строки, пустая дата, пустая ссылка. Значение есть, оно просто пустое.

Что чем проверять

ПроверкаЧто отвечаетКогда применять
ЗначениеЗаполнено(Х)Ложь для нуля, пустой строки, пустой даты, пустой ссылки, Неопределено и NULLпочти всегда — это «есть ли тут что-нибудь осмысленное»
Х = Неопределенотолько про отсутствие значенияпроверить, передали ли параметр; есть ли ключ в соответствии
Х = NULLтолько про отсутствие строки в базеразбор результата запроса без ЕСТЬNULL
ПустаяСтрока(Х)Истина и для "", и для строки из одних пробеловпроверка текста, введённого человеком
Х = 0ровно про нолькогда ноль — настоящее значение, а не «не заполнено"

ЗначениеЗаполнено и ноль

ЗначениеЗаполнено(0) — это Ложь. Для 1С ноль и есть «пусто».

Обычно это удобно, но иногда губительно: скидка 0% — настоящее значение, остаток 0 — настоящий остаток, количество 0 в строке — ошибка оператора, которую надо поймать, а не проглотить.

Правило: ЗначениеЗаполнено — когда ноль действительно означает «не заполнено»; явное = 0 — когда ноль это значение.

Упражнение 7. Первое заполненное

Напишите ПервоеЗаполненное(Первое, Второе, Третье): вернуть первое из трёх значений, которое заполнено; если первые два пусты — третье. Проверка передаёт пустую строку, ноль и Основной.

Решается в тренажёре: код запускается и проверяется сразу.

Как узнать тип значения

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

ТипЗнч(Значение) — возвращает тип того, что лежит. Тип("Число") — тип по имени. Сравнивают их между собой:

Проверка типа

Если ТипЗнч(Значение) = Тип("Число") Тогда
	Сумма = Сумма + Значение;
ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда
	Текст = Текст + Значение;
КонецЕсли;
ЧастьЧто означает
ТипЗнч(Значение)тип того, что лежит в переменной прямо сейчас
Тип("Число")имя типа строкой; опечатка в нём — ошибка во время выполнения, а не при компиляции
СправочникСсылка.Номенклатуратак пишут имена ссылочных типов: Тип("СправочникСсылка.Номенклатура")
сравнениетипы сравниваются обычным «равно» — это обычные значения

Упражнение 8. Это число?

Напишите ЭтоЧисло(Значение): вернуть Истина, если в переменной лежит число. Проверка передаёт строку "5" — и ждёт Ложь.

Решается в тренажёре: код запускается и проверяется сразу.

Преобразование типов

Три команды с именами типов превращают одно в другое: Число("250"), Строка(250), Дата("20260115"), Булево("Да").

Работают они не всегда, и это важно: Число("двести") не возвращает ноль, а прекращает выполнение. Про то, как с этим жить, будет глава про ошибки и исключения.

А ещё преобразование происходит само, когда типы встречаются в одном выражении. Правило одно и было в первой главе: смотрят на то, что слева. "Итого: " + 250 — строка, 250 + "Итого: " — ошибка.

Имена, по которым видно новичка

В 1С пишут по-русски, и имена переменных — тоже. Это не вопрос вкуса: в типовых конфигурациях так пишут все, и латинские имена посреди русского кода читаются как ошибка.

Слова в имени соединяют без пробелов, каждое с большой буквы: СуммаДокумента, СтрокаТабличнойЧасти, НайденныйЭлемент.

Что режет глаз проверяющему: имена из одной буквы там, где это не счётчик (с, т, м); сокращения, понятные только автору (СумДок, КолТов); и имена, которые врут — Сумма, в которой лежит количество.

Короткие имена допустимы в одном месте: счётчик цикла и переменная, живущая две строки рядом. Всё остальное называют полным словом — читать код будут гораздо чаще, чем писать.

Перем: объявление, которое обычно не нужно

В 1С есть слово Перем — явное объявление переменной: Перем Итого;. Внутри процедуры оно не нужно: переменная и так появляется при первом присваивании.

Нужно оно в одном месте — в начале модуля, до всех процедур. Такая переменная живёт, пока живёт модуль, и видна всем его процедурам. На формах так хранят состояние между обработчиками событий.

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

Что дальше

Вы уже умеете главное: создавать переменные, менять их, использовать в вычислениях и смотреть, что внутри. Этого достаточно, чтобы начать решать задачи — и в разделе «Код» есть простые, где ничего сверх этого не нужно.

В следующих главах: как хранить не одно значение, а список (коллекции), как оформить код в функцию, чтобы его можно было вызывать, и как заставить программу выбирать путь в зависимости от данных.

Если что-то не уложилось

Вернитесь к упражнениям и сделайте их ещё раз, не подглядывая в подсказки: навык даёт письмо, а не чтение. Через несколько повторов работа с переменными перестанет требовать внимания.

Как закрепить

Читать про код и писать код — разные умения. В тренажёре к этой главе идут упражнения: вы пишете решение, оно запускается на настоящем интерпретаторе 1С и проверяется сразу, без установки платформы.

Открыть эту главу в тренажёре

Первая программа: код, который что-то делает
Функции и процедуры: как код делится на части