Разработка и Конфигурация · 10 мин
Как задать переменную в 1С
Как объявить и задать переменную в 1С: синтаксис присваивания, типы данных, область видимости, экспортные переменные, типичные ошибки и примеры кода.
Переменная в 1С — это именованная область памяти, в которой хранится значение определённого типа: число, строка, дата, ссылка на объект базы данных и т. д. Встроенный язык 1С (он же «код на встроенном языке») не требует строгой типизации: тип переменной определяется значением, которое вы ей присваиваете, и может меняться в процессе выполнения кода.
Чтобы задать переменную в 1С, достаточно присвоить ей значение через знак равенства: ИмяПеременной = Значение;. Если переменная используется только внутри одной процедуры, дополнительное объявление не требуется. Если она нужна на уровне модуля или должна быть доступна из других модулей, её объявляют явно через ключевое слово Перем.
Ниже разобраны все способы задать переменную: локальные, переменные модуля, экспортные, а также правила именования, типы данных, проверка результата и типичные ошибки начинающих разработчиков.
Базовый синтаксис: как присвоить значение переменной
Самый простой способ задать переменную — написать её имя, знак равенства и значение. Каждая строка кода в 1С завершается точкой с запятой. Пропуск точки с запятой — одна из самых частых причин синтаксических ошибок.
Количество = 10;
Цена = 150.50;
Наименование = "Товар первый";
ДатаОтгрузки = '20260115';
ЭтоАктивный = Истина;
Обратите внимание на форматы литералов: строки заключаются в двойные кавычки, даты — в одинарные в формате ГГГГММДД, дробная часть числа отделяется точкой, булевы значения пишутся как Истина и Ложь без кавычек.
Переменную можно сразу использовать в выражениях и переприсваивать:
Сумма = Количество * Цена;
Сумма = Сумма + 100; // переменная участвует в собственном пересчёте
Количество = 10;
Цена = 150.50;
Сумма = Количество * Цена;
Сообщить("Итого: " + Сумма);Объявление переменных через Перем: когда это нужно
Внутри процедуры или функции переменная создаётся автоматически при первом присваивании. Но если переменная должна хранить значение между вызовами процедур одного модуля, её объявляют в разделе объявления переменных модуля — до первой процедуры.
Перем СчетчикОпераций;
Перем ТекущийПользователь;
Процедура УвеличитьСчетчик()
СчетчикОпераций = СчетчикОпераций + 1;
КонецПроцедуры
Допускается объявление нескольких переменных в одной строке через запятую: Перем Адрес, Телефон, КонтактноеЛицо;. Необъявленная переменная модуля, которой не присвоено значение, содержит Неопределено.
Важно понимать: переменная, объявленная внутри процедуры через Перем, остаётся локальной для этой процедуры. Объявление на уровне модуля делает её видимой во всех процедурах этого модуля.
Область видимости: локальные, модульные и экспортные переменные
Область видимости определяет, откуда переменная доступна. В 1С есть три уровня:
- Локальная — создаётся внутри процедуры или функции, существует только во время её выполнения.
- Переменная модуля — объявлена через
Перемв начале модуля, доступна всем процедурам этого модуля. - Экспортная — объявлена с ключевым словом
Экспорт, доступна из других модулей через обращение к модулю.
Перем КурсВалюты Экспорт; // доступна извне: ОбщийМодуль.КурсВалюты
Экспортные переменные доступны только в общих модулях и модулях объектов. В модулях форм вместо них используют реквизиты формы — это более управляемый и безопасный механизм.
Правила именования переменных
Имя переменной в 1С должно начинаться с буквы (русской или латинской) или знака подчёркивания и может содержать буквы, цифры и подчёркивания. Пробелы и спецсимволы запрещены. Язык нечувствителен к регистру: Сумма и сумма — одна и та же переменная.
Нельзя использовать в качестве имён ключевые слова языка: Процедура, Функция, Если, Цикл, Возврат и другие. Также стоит избегать имён, совпадающих с именами методов глобального контекста, — это затрудняет чтение кода.
Практические рекомендации по именованию:
- Имя должно отражать содержимое:
ДатаНачалаПериодавместоД1. - Для булевых переменных удобны префиксы-признаки:
ЕстьОшибки,ЭтоНовый. - Однобуквенные имена (
И,К) допустимы только для счётчиков коротких циклов. - Не смешивайте русский и английский в одном проекте без необходимости.
Типы данных и изменение типа переменной
1С — язык с динамической типизацией: тип переменной определяется последним присвоенным значением. Одна и та же переменная может последовательно хранить число, строку и ссылку на объект:
Значение = 100; // Число
Значение = "Сто"; // Строка
Значение = ТекущаяДата(); // Дата
Основные примитивные типы: Число, Строка, Дата, Булево, Неопределено, Null. Кроме них переменные могут хранить ссылки на объекты базы (справочники, документы), коллекции (Массив, Структура, Соответствие, ТаблицаЗначений) и другие типы платформы.
Проверить тип значения можно функцией ТипЗнч() в сочетании с Тип():
Если ТипЗнч(Значение) = Тип("Число") Тогда
// работаем как с числом
КонецЕсли;
Примеры: структуры, массивы и передача параметров
Часто переменная хранит не одно значение, а коллекцию. Массив создаётся конструктором Новый Массив, структура — Новый Структура:
Товары = Новый Массив;
Товары.Добавить("Молоко");
Товары.Добавить("Хлеб");
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Склад", СкладОтгрузки);
ПараметрыОтбора.Вставить("Период", НачалоМесяца(ТекущаяДата()));
При передаче переменной в процедуру по умолчанию она передаётся по значению — изменения внутри процедуры не влияют на исходную переменную. Чтобы процедура могла изменить переданную переменную, параметр объявляют с ключевым словом Знач отсутствует — наоборот, без Знач параметр передаётся по ссылке и может быть изменён:
Процедура РассчитатьСкидку(Сумма, Результат)
Результат = Сумма * 0.9; // Результат изменится и снаружи
КонецПроцедуры
Как проверить результат
Проверка конфигурации (Конфигурация → Проверка конфигурации) не выдаёт ошибок по модулю
Сообщения «Переменная не определена» или «Синтаксическая ошибка»
В табло или окне «Вычислить выражение» отображается ожидаемое значение и тип
Значение Неопределено или тип отличается от ожидаемого
Локальные переменные сбрасываются, расчёт повторяем
Результат зависит от предыдущего вызова — значит, переменная объявлена на уровне модуля
Как проверить работу переменной: отладка и вывод значений
Самый быстрый способ убедиться, что переменная задана правильно, — вывести её через Сообщить():
Сообщить("Сумма = " + Сумма + ", тип: " + ТипЗнч(Сумма));
Для серьёзной проверки используйте встроенный отладчик: поставьте точку останова (F9) на строке после присваивания, запустите отладку (F5) и посмотрите значение в табло (Shift+F9) или наведите курсор на имя переменной. Отладчик показывает и значение, и тип.
При работе на тонком или веб-клиенте помните, что код может выполняться на сервере — тогда сообщения попадают в окно сообщений клиента, а отладку сервера нужно включать отдельно в параметрах конфигуратора или службы агента сервера.
Что важно запомнить
Переменная задаётся присваиванием через знак равенства; Перем нужно только для переменных модуля и экспортных; тип определяется значением и может меняться; локальные переменные предпочтительнее модульных; проверяйте результат отладчиком или Сообщить().
Часто задаваемые вопросы
Нужно ли объявлять переменную перед первым использованием?
Нет, если она используется только внутри одной процедуры или функции — переменная создаётся автоматически при первом присваивании. Объявление через Перем обязательно лишь для переменных уровня модуля и экспортных переменных.
Чем отличается Перем от Экспорт?
Перем объявляет переменную модуля, доступную всем процедурам этого модуля. Добавление слова Экспорт (Перем Имя Экспорт;) делает её доступной из других модулей через имя модуля. Экспорт работает не во всех видах модулей — например, в модулях форм вместо него используют реквизиты формы.
Почему переменная содержит Неопределено, хотя я её задал?
Чаще всего причина в опечатке в имени: присваивание создало одну переменную, а читается другая. Вторая частая причина — присваивание выполняется в другой ветке условия, которая не сработала. Включите в конфигураторе проверку модуля и пройдите код отладчиком, чтобы увидеть фактический путь выполнения.
Можно ли задать переменную на русском языке?
Да, встроенный язык 1С полностью поддерживает русские идентификаторы, и это принятый стандарт в большинстве конфигураций. Имя может начинаться с русской буквы и содержать русские буквы, цифры и подчёркивания.
Как задать переменную со значением даты?
Литерал даты записывается в одинарных кавычках в формате ГГГГММДД, например: ДатаОтчёта = '20260315';. Также можно использовать функции: ТекущаяДата(), Дата(2026, 3, 15) или вычисления вроде НачалоМесяца(ТекущаяДата()).
Что будет, если присвоить переменной значение другого типа?
Ничего страшного: тип переменной просто изменится на тип нового значения. Однако дальнейший код, рассчитанный на старый тип (например, арифметика со строкой), вызовет ошибку времени выполнения. Перед операциями, зависящими от типа, проверяйте его через ТипЗнч().