Разработка и Конфигурация · 8 мин
Как определить переменную в 1С
Как объявить и определить переменную в 1С: оператор Перем, типы значений, область видимости, примеры кода, типичные ошибки и проверка результата.
Переменная в 1С — это именованная область памяти, в которой хранится значение во время выполнения кода. Определить переменную можно двумя способами: явно, через ключевое слово Перем, или неявно — просто присвоив значение новому имени. Оба подхода рабочие, но отличаются по читаемости кода и риску ошибок.
Встроенный язык 1С динамически типизирован: тип переменной определяется значением, которое ей присвоено, и может меняться в ходе выполнения. Это удобно, но требует внимательности — если в переменную вместо числа попала строка, ошибка проявится только в момент использования.
Ниже разобраны синтаксис объявления, правила именования, область видимости, типичные типы значений и способы проверить, что переменная определена корректно.
Как объявить переменную через оператор Перем
Явное объявление выполняется ключевым словом Перем с указанием одного или нескольких имён через запятую. Объявление размещают в начале модуля, процедуры или функции — до первого исполняемого оператора.
Перем Сумма;
Перем Контрагент, ДатаДокумента;
Процедура Рассчитать()
Перем Результат;
Результат = Сумма * 1.2;
КонецПроцедуры
После объявления переменная существует, но её значение равно Неопределено, пока ей ничего не присвоено. Попытка использовать такую переменную в арифметике или сравнении без проверки — частый источник ошибок выполнения.
Имена переменных пишутся на русском или английском языке, без пробелов, начинаются с буквы или символа подчёркивания. Регистр букв не имеет значения: Сумма и сумма — одна и та же переменная.
Неявное определение переменной через присваивание
Если присвоить значение имени, которое ещё не объявлено, платформа создаст переменную автоматически. Такой способ короче, но таит риск: опечатка в имени создаст новую переменную вместо ошибки, и найти её будет сложно.
Количество = 5; // переменная создана неявно
Количество = Количество + 1;
Количестов = 10; // опечатка: создана новая переменная, ошибки нет
Чтобы платформа отлавливала подобные опечатки, используют явное объявление всех переменных в начале процедуры. Тогда обращение к необъявленному имени вызовет ошибку компиляции модуля, и проблема обнаружится до запуска.
Область видимости: где переменная доступна
Переменная, объявленная внутри процедуры или функции, существует только в ней — это локальная переменная. После завершения процедуры значение теряется, а из другого кода к переменной обратиться нельзя.
Переменные, объявленные в разделе объявления модуля (до первой процедуры), доступны всем процедурам этого модуля. Если добавить ключевое слово Экспорт, переменная станет доступна и из других модулей — но злоупотреблять этим не стоит, так как усложняется контроль за изменением данных.
Перем СчетчикОпераций Экспорт; // доступна извне модуля
Процедура ВыполнитьОперацию()
Перем ЛокальноеЗначение; // видна только здесь
СчетчикОпераций = СчетчикОпераций + 1;
КонецПроцедуры
Сравнение вариантов объявления
Подходит для промежуточных расчётов. Не засоряет модуль, значение не переживает вызов.
Нужна, когда значение используют несколько процедур модуля. Требует аккуратности при параллельных вызовах.
Для доступа из других модулей. Ограничение: затрудняет отладку и сопровождение, применять редко.
Быстро для простых скриптов, но опасно опечатками и не рекомендуется в прикладном коде.
Какие типы значений принимает переменная
Тип переменной не фиксируется при объявлении — он появляется в момент присваивания. Одна и та же переменная может последовательно хранить строку, число и ссылку на объект, хотя так делать не рекомендуется.
Число—Цена = 150.50;Строка—Наименование = "Товар";Булево—Признак = Истина;Дата—ДатаНачала = '20260101';Неопределено— значение до первого присваивания или явноеПеременная = Неопределено;- Ссылки на объекты базы, массивы, структуры и другие коллекции.
Проверить фактический тип значения помогает функция ТипЗнч() в связке с Тип(): Если ТипЗнч(Переменная) = Тип("Число") Тогда .... Это полезно, когда переменная заполняется из внешних данных и её тип заранее не гарантирован.
Перем Значение;
Значение = 42;
Если ТипЗнч(Значение) = Тип("Число") Тогда
Сообщить("Это число");
КонецЕсли;Как проверить, что переменная определена корректно
Самый простой способ убедиться, что переменная получила ожидаемое значение, — вывести её через Сообщить() или посмотреть в отладчике конфигуратора. Отладчик показывает имена, типы и текущие значения всех переменных в точке останова.
Для проверки «заполненности» используют сравнение с Неопределено и функцию ЗначениеЗаполнено(). Вторая учитывает не только Неопределено, но и пустые строки, нулевые даты и пустые ссылки.
Как проверить результат
Переменная видна, тип и значение соответствуют ожиданию
Переменная отсутствует в списке или равна Неопределено
Модуль сохраняется без ошибок
Ошибка «Переменная не определена» — имя не объявлено и не присвоено
ТипЗнч возвращает ожидаемый тип
Вместо числа — строка или Неопределено
Типичные ошибки при определении переменных
Отдельная группа проблем связана с контекстом выполнения. Переменная, объявленная в модуле формы на клиенте, не видна в серверной процедуре той же формы — данные между контекстами передают через параметры или реквизиты формы.
Как выбрать способ определения
Частые вопросы
Чем отличается Перем от присваивания без объявления?
Перем явно объявляет переменную в начале модуля или процедуры, а присваивание создаёт её неявно в точке использования. Явное объявление позволяет компилятору отловить опечатки и делает структуру кода понятнее.
Какое значение у переменной сразу после Перем?
Значение Неопределено. Перед использованием в расчётах переменной нужно присвоить конкретное значение или проверить её сравнением с Неопределено.
Можно ли задать тип переменной при объявлении?
Нет, встроенный язык 1С не поддерживает статическую типизацию переменных. Тип определяется присвоенным значением и может меняться, поэтому при необходимости тип проверяют функцией ТипЗнч().
Почему возникает ошибка «Переменная не определена»?
Код обращается к имени, которое не объявлено через Перем и которому ничего не присваивалось. Проверьте написание имени, область видимости и то, что присваивание выполняется до первого использования.
Видна ли переменная одной процедуры в другой?
Нет, локальные переменные процедуры доступны только внутри неё. Для обмена значениями используют параметры процедур, возвращаемые значения функций или переменные уровня модуля.
Как посмотреть значение переменной во время выполнения?
Установите точку останова в конфигураторе и запустите отладку: в окне «Локальные переменные» или через «Вычислить выражение» видны имена, типы и значения. Альтернатива — временный вывод через Сообщить().
Что важно запомнить
Объявляйте переменные через Перем в начале модуля или процедуры, сразу присваивайте начальное значение и следите за областью видимости. Тип переменной определяется значением, поэтому проверяйте его через ТипЗнч, а корректность — в отладчике.