Прохождение обучающего курса по книге М. Г. Радченко «Практическое пособие разработчика» — это классический и очень эффективный способ освоить программирование в среде «1С:Предприятие 8». Однако в процессе самообучения, особенно на начальных этапах, легко допустить досадную опечатку в коде или запутаться в контекстах выполнения процедур. На четвертом занятии книги, при реализации документа «Оказание услуг», многие начинающие разработчики сталкиваются с ошибкой компиляции Переменная не определена (СтрокаТабличнойЧасти) при попытке настроить автоматический расчет суммы строки при изменении количества или цены.
В этой статье мы подробно разберем, почему возникает данная ошибка, как правильно исправить опечатку в коде, а также рассмотрим полезные настройки Конфигуратора и лайфхаки, которые помогут вам избежать подобных проблем в будущем и значительно ускорят процесс разработки.
Проанализируем ситуацию и посмотрим на исходный код, который часто приводит к ошибке на клиенте в модуле формы документа:
&НаКлиенте
Процедура ПереченьНоменклатурыКоличествоПриИзменении(Элемент)
СторкаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
При попытке сохранить или запустить конфигурацию в режиме отладки система выдает диагностическое сообщение:
{Документ.ОказаниеУслуг.Форма.ФормаДокумента.Форма(5,37)}: Переменная не определена (СтрокаТабличнойЧасти)
Причина кроется в банальной, но труднозаметной для замыленного глаза опечатке. Обратите внимание на первую строку внутри процедуры: переменной присваивается имя СторкаТабличнойЧасти (буквы «о» и «р» поменялись местами). А на следующей строке в метод общего модуля передается уже правильно написанная переменная СтрокаТабличнойЧасти. Поскольку первая переменная была объявлена с ошибкой, компилятор «1С» не понимает, откуда взялась корректно написанная переменная во второй строке, и сообщает, что она не определена.
Для устранения ошибки нам необходимо привести имена переменных к единому правильному написанию. Мы можем исправить букву вручную, а можем воспользоваться встроенным в Конфигуратор механизмом автоматического переименования, что особенно полезно, если переменная используется в коде многократно.
Выполним следующие шаги по рефакторингу кода:
СторкаТабличнойЧасти.СтрокаТабличнойЧасти.После исправления наш код в модуле формы документа «Оказание услуг» примет следующий вид:
&НаКлиенте
Процедура ПереченьНоменклатурыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
&НаКлиенте
Процедура ПереченьНоменклатурыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Чтобы мгновенно визуально определять опечатки в именах переменных при написании кода, настроим Конфигуратор 1С так, чтобы он подсвечивал все совпадающие идентификаторы в тексте модуля.
Выполним настройку по шагам:
Теперь, когда вы будете кликать мышкой на переменную СтрокаТабличнойЧасти, все ее корректные вхождения в коде подсветятся выбранным цветом. Если же вы допустили опечатку (написали Сторка...), то при нажатии на нее парное слово не подсветится, и вы сразу поймете, где именно допущена ошибка.
Чтобы полностью исключить человеческий фактор при вводе длинных имен переменных, возьмем за правило использовать контекстную подсказку платформы.
Рассмотрим, как это работает на практике:
СтрокаТабличнойЧасти = ..., платформа запомнила это имя для текущего модуля.Строк, и нажать комбинацию клавиш Ctrl + Пробел.Вы также можете настроить автоматическое появление этой подсказки без необходимости каждый раз нажимать сочетание клавиш. Для этого перейдите в меню Сервис — Параметры — Модули — Контекстная подсказка, активируйте флажок «Автоматически вызывать» и задайте удобные параметры задержки (например, после ввода точки или нескольких символов).
Помимо опечаток, при выполнении этого задания у начинающих разработчиков часто возникают концептуальные архитектурные ошибки. Разберем их подробнее, чтобы закрепить понимание работы платформы.
1. Путаница с размещением кода (Модуль формы vs Общий модуль)
Процедуры-обработчики событий, такие как ПереченьНоменклатурыКоличествоПриИзменении, содержат директиву компиляции &НаКлиенте и работают непосредственно с элементами интерфейса. Они должны располагаться строго в модуле формы документа (в нашем случае — формы документа «Оказание услуг»).
В то же время вспомогательная процедура расчета суммы является универсальной и выносится в Общий модуль РаботаСДокументами. Код в общем модуле должен выглядеть так:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Обратите внимание на ключевое слово Экспорт в заголовке процедуры общего модуля. Без него данная процедура будет недоступна для вызова из других модулей конфигурации (в том числе из модуля формы документа).
2. Настройка свойств общего модуля
Для того чтобы клиентские процедуры из модуля формы могли успешно обратиться к общему модулю РаботаСДокументами, необходимо правильно настроить его свойства в дереве метаданных:
Позже, на следующих занятиях книги Радченко (например, при получении цен из регистров сведений), вам понадобится общий модуль РаботаСоСправочниками. Для него настройки будут иными: там потребуется установить флажки «Сервер» и обязательно «Вызов сервера», чтобы клиентские процедуры формы имели легальную возможность инициировать серверный вызов для чтения данных из базы.
Если вы хотите полностью обезопасить себя от опечаток при наборе демонстрационного кода из книги, воспользуйтесь официальными материалами, которые поставляются вместе с учебным пособием. В комплекте файлов найдите файл с расширением templates — Example.st. Это готовые шаблоны текстов кода для всех занятий книги.
Чтобы подключить их к вашему Конфигуратору, выполните следующие действия:
Example.st из папки с материалами курса.После этого вы сможете быстро вызывать готовые куски кода по автоподстановке, просто выбирая нужные листинги из структурированного дерева шаблонов. Это убережет вас от синтаксических ошибок на этапе обучения алгоритмической логике 1С.