Как исправить ошибку «Переменная не определена» при расчете суммы в документе по книге Радченко?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Прохождение обучающего курса по книге М. Г. Радченко «Практическое пособие разработчика» — это классический и очень эффективный способ освоить программирование в среде «1С:Предприятие 8». Однако в процессе самообучения, особенно на начальных этапах, легко допустить досадную опечатку в коде или запутаться в контекстах выполнения процедур. На четвертом занятии книги, при реализации документа «Оказание услуг», многие начинающие разработчики сталкиваются с ошибкой компиляции Переменная не определена (СтрокаТабличнойЧасти) при попытке настроить автоматический расчет суммы строки при изменении количества или цены.

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

Анализ проблемы: почему возникает ошибка компиляции?

Проанализируем ситуацию и посмотрим на исходный код, который часто приводит к ошибке на клиенте в модуле формы документа:


&НаКлиенте
Процедура ПереченьНоменклатурыКоличествоПриИзменении(Элемент)
    СторкаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

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

{Документ.ОказаниеУслуг.Форма.ФормаДокумента.Форма(5,37)}: Переменная не определена (СтрокаТабличнойЧасти)

Причина кроется в банальной, но труднозаметной для замыленного глаза опечатке. Обратите внимание на первую строку внутри процедуры: переменной присваивается имя СторкаТабличнойЧасти (буквы «о» и «р» поменялись местами). А на следующей строке в метод общего модуля передается уже правильно написанная переменная СтрокаТабличнойЧасти. Поскольку первая переменная была объявлена с ошибкой, компилятор «1С» не понимает, откуда взялась корректно написанная переменная во второй строке, и сообщает, что она не определена.

Вариант 1. Исправление опечатки вручную или через Рефакторинг

Для устранения ошибки нам необходимо привести имена переменных к единому правильному написанию. Мы можем исправить букву вручную, а можем воспользоваться встроенным в Конфигуратор механизмом автоматического переименования, что особенно полезно, если переменная используется в коде многократно.

Выполним следующие шаги по рефакторингу кода:

  1. Установим курсор на ошибочно написанную переменную СторкаТабличнойЧасти.
  2. Нажмем комбинацию клавиш Ctrl + Alt + R (или выберем в главном меню Конфигуратора пункт «Текст» — «Рефакторинг» — «Переименовать...»).
  3. В появившемся окне введем правильное имя: СтрокаТабличнойЧасти.
  4. Нажмем кнопку «ОК». Система автоматически заменит все вхождения данного имени в текущем модуле, исключая риск пропустить опечатку в других строках.

После исправления наш код в модуле формы документа «Оказание услуг» примет следующий вид:


&НаКлиенте
Процедура ПереченьНоменклатурыКоличествоПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

&НаКлиенте
Процедура ПереченьНоменклатурыЦенаПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

Вариант 2. Настройка подсветки синтаксиса в Конфигураторе

Чтобы мгновенно визуально определять опечатки в именах переменных при написании кода, настроим Конфигуратор 1С так, чтобы он подсвечивал все совпадающие идентификаторы в тексте модуля.

Выполним настройку по шагам:

  1. В главном меню Конфигуратора перейдем по пути: Сервис — Параметры.
  2. В открывшемся окне выберем вкладку «Модули», а затем перейдем на вкладку «Редактирование».
  3. Найдем раздел «Выделение цветом синтаксических конструкций».
  4. В списке элементов найдем пункт «Текущий идентификатор».
  5. Установим для него заметный цвет фона (например, мягкий серый, светло-зеленый или желтый) и обязательно поставим галочку активности.
  6. Нажмем кнопку «Применить» и «ОК».

Теперь, когда вы будете кликать мышкой на переменную СтрокаТабличнойЧасти, все ее корректные вхождения в коде подсветятся выбранным цветом. Если же вы допустили опечатку (написали Сторка...), то при нажатии на нее парное слово не подсветится, и вы сразу поймете, где именно допущена ошибка.

Вариант 3. Использование автодополнения (Ctrl + Пробел)

Чтобы полностью исключить человеческий фактор при вводе длинных имен переменных, возьмем за правило использовать контекстную подсказку платформы.

Рассмотрим, как это работает на практике:

  1. Когда вы один раз инициализировали переменную, написав СтрокаТабличнойЧасти = ..., платформа запомнила это имя для текущего модуля.
  2. На следующей строке, когда вам нужно передать эту переменную в метод, не пишите ее имя целиком. Достаточно написать первые несколько букв, например, Строк, и нажать комбинацию клавиш Ctrl + Пробел.
  3. Перед вами откроется список автоподстановки, в котором уже будет присутствовать ваша переменная. Выберите ее стрелочками и нажмите клавишу Enter.

Вы также можете настроить автоматическое появление этой подсказки без необходимости каждый раз нажимать сочетание клавиш. Для этого перейдите в меню Сервис — Параметры — Модули — Контекстная подсказка, активируйте флажок «Автоматически вызывать» и задайте удобные параметры задержки (например, после ввода точки или нескольких символов).

Важная деталь: Размещение кода и свойства Общего Модуля

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

1. Путаница с размещением кода (Модуль формы vs Общий модуль)

Процедуры-обработчики событий, такие как ПереченьНоменклатурыКоличествоПриИзменении, содержат директиву компиляции &НаКлиенте и работают непосредственно с элементами интерфейса. Они должны располагаться строго в модуле формы документа (в нашем случае — формы документа «Оказание услуг»).

В то же время вспомогательная процедура расчета суммы является универсальной и выносится в Общий модуль РаботаСДокументами. Код в общем модуле должен выглядеть так:


Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
    СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры

Обратите внимание на ключевое слово Экспорт в заголовке процедуры общего модуля. Без него данная процедура будет недоступна для вызова из других модулей конфигурации (в том числе из модуля формы документа).

2. Настройка свойств общего модуля

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

  1. В окне конфигурации найдем ветку «Общие» — «Общие модули» — «РаботаСДокументами».
  2. Нажмем по нему правой кнопкой мыши и выберем «Свойства».
  3. В палитре свойств убедимся, что установлен флажок «Клиент (управляемое приложение)».
  4. Снимите флажок «Сервер» (для целей этого занятия на данном этапе разработки). Если этого не сделать, клиентский контекст формы не сможет напрямую вызвать данный код без дополнительных директив.

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

Использование готовых шаблонов автоподстановки

Если вы хотите полностью обезопасить себя от опечаток при наборе демонстрационного кода из книги, воспользуйтесь официальными материалами, которые поставляются вместе с учебным пособием. В комплекте файлов найдите файл с расширением templates — Example.st. Это готовые шаблоны текстов кода для всех занятий книги.

Чтобы подключить их к вашему Конфигуратору, выполните следующие действия:

  1. В главном меню выберите: Сервис — Шаблоны текста.
  2. В открывшейся панели шаблонов нажмите кнопку «Действия» — «Настройка шаблонов...».
  3. Нажмите кнопку «Добавить» и укажите путь к файлу Example.st из папки с материалами курса.

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

← На главную