Решение задач 1С:Предприятие 8 на примерах

«Переменная не определена» в 1С: причины и как исправить

Ошибки 1СОшибки в кодеОпубликовано

В коде используется имя, которое в этом месте модуля не объявлено и ничем не инициализировано. Ошибка обычно обнаруживается при компиляции модуля, поэтому модуль не запускается целиком.

Текст ошибки

Переменная не определена (ИмяПеременной)

Причины

Как работает область видимости

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

&НаКлиенте
Перем КэшНастроек;

&НаСервере
Процедура ЗаполнитьНаСервере()
    // Ошибка: переменная объявлена для клиента
    // Если КэшНастроек = Неопределено Тогда ...
КонецПроцедуры

Данные, нужные и на клиенте, и на сервере, храните в реквизите формы или передавайте параметром серверной процедуры.

Пошаговое исправление

  1. Посмотрите имя в скобках и строку в тексте ошибки. Выполните синтаксический контроль модуля (в конфигураторе кнопка на панели модуля или Ctrl+F7), чтобы увидеть все такие места сразу.
  2. Проверьте раскладку: латинская «C» или «o» в русском слове выглядят одинаково, но для платформы это другое имя. Наберите имя заново.
  3. Если это реквизит объекта в модуле формы, обращайтесь через основной реквизит: Объект.Организация.
  4. Если это имя общего модуля, убедитесь, что модуль существует и компилируется в нужном контексте. Серверный общий модуль без флага «Вызов сервера» не виден в клиентском коде.
  5. Если переменная должна быть доступна в нескольких процедурах, объявите её в начале модуля через Перем или передавайте параметром.

Переменные в Выполнить() и Вычислить()

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

Для пользователя

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

Частые вопросы

Чем «Переменная не определена» отличается от значения Неопределено?

Неопределено — нормальное значение переменной, которая существует. «Переменная не определена» означает, что такого имени в этом месте кода нет вообще.

Почему падает весь модуль, а не одна строка?

Модуль компилируется целиком перед выполнением. Если компиляция не прошла, не работает ни одна его процедура.

&НаКлиенте и &НаСервере в 1С: директивы компиляции в управляемых формах

Управляемые формы

Чем отличаются директивы &НаКлиенте, &НаСервере и &НаСервереБезКонтекста, что доступно на клиенте и на сервере, как передавать данные в управляемой форме и не делать лишних серверных вызовов.

Процедуры и функции в 1С: синтаксис, параметры, экспорт и общие модули

Алгоритмы

Разбор процедур и функций встроенного языка 1С: отличия, параметры, возврат нескольких значений, экспортные методы, флаги общих модулей, рекурсия и динамическое выполнение кода.

Конфигуратор 1С для программиста: как зайти, полезные функции и горячие клавиши

Алгоритмы

Обзор конфигуратора 1С для разработчика: как его открыть, как устроено дерево конфигурации и модули, чем пользоваться при поиске и проверке кода, как сохранять и загружать cf и dt и какие сочетания клавиш ускоряют работу.

Похожие ошибки