Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

1С Ошибка: Переменная не определена (Variable undefined) — Исправление

Обновлено: 25.08.2026  ·  Официальная база знаний
  • Ошибка синтаксического контроля или запуска модуля: {ОбщийМодуль.Имя.Модуль(Строка, Колонка)}: Переменная не определена (ИмяПеременной).
  • Конфигурация не обновляется по F7 из-за ошибок компиляции.
  • Сбой возникает из-за опечаток в именах переменных или использования локальной переменной вне тела ее процедуры.

1. Проверка синтаксиса конфигурации (Синтаксический контроль)

В Конфигураторе запустите полную проверку модулей:

  1. Меню Конфигурация → Проверка конфигурации...
  2. Отметьте: Синтаксический контроль модулей (в режимах: Тонкий клиент, Сервер, Внешнее соединение).
  3. Нажмите Выполнить для получения списка всех необъявленных переменных.

2. Корректное объявление переменных уровня модуля

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

// Объявление переменной уровня модуля
Перем мИмяПользователя Экспорт;
Перем мБуферДанных;

Процедура Инициализировать()
    мБуферДанных = Новый Массив;
КонецПроцедуры

3. Исправление ошибок условной компиляции (#Если Сервер / #Если Клиент)

Ошибка часто возникает, когда переменная инициализирована внутри блока #Если Сервер, а используется в блоке #Если Клиент:

// НЕВЕРНО:
#Если Сервер Тогда
    СерверныйПараметр = 100;
#КонецЕсли

#Если Клиент Тогда
    Сообщить(СерверныйПараметр); // Ошибка: Переменная не определена
#КонецЕсли

// ВЕРНО: передача данных через параметры вызова
&НаСервере
Функция ПолучитьПараметр()
    Возврат 100;
КонецФункции

4. Исправление опечаток в конструкциях циклов

Проверьте объявление счетчиков в циклах Для и Для Каждого:

// Если переменная не была создана ранее, цикл Для инициализирует ее локально:
Для Индекс = 0 По Массив.ВГраница() Цикл
    // код
КонецЦикла;
Практический опыт инженера: Всегда запускайте полную проверку конфигурации (Ctrl+F7) во всех целевых режимах (Тонкий клиент, Сервер, Мобильный клиент) перед каждым релизом: переменная, валидная на сервере, может вызывать фатальный крэш на клиенте.

Частые вопросы (FAQ)

В чем разница между локальной переменной и переменной модуля в 1С?

Локальная переменная создается внутри процедуры/функции при первом присваивании и уничтожается при выходе из нее. Переменная модуля живет все время жизни экземпляра объекта и доступна всем его процедурам.

Помогает ли ключевое слово 'Экспорт' при объявлении переменной модуля?

Да, ключевое слово Перем Имя Экспорт; делает переменную доступной для чтения и изменения снаружи объекта через точку (Объект.Имя).

Почему Конфигуратор не подчеркивает необъявленную переменную сразу?

Язык 1С использует динамическую типизацию. Ошибки необъявленных переменных проверяются парсером компилятора при сохранении модуля или запуске синтаксического контроля (Ctrl+F7).

Что делать, если ошибка возникает в типовом общем модуле после обновления?

Убедитесь, что включены правильные свойства модулей для целевого режима (Тонкий клиент / Сервер) или сбросьте кэш метаданных Конфигуратора.