При разработке на платформе 1С:Предприятие 7.7 многие сталкиваются с классической синтаксической ошибкой: «Определения процедур и функций должны размещаться перед операторами основной программы». Это сообщение сбивает с толку, так как на первый взгляд код кажется логичным. Давайте разберем, почему это происходит и как привести модуль в рабочее состояние.
В платформе 1С 7.7 модуль формы или документа жестко разделен на две логические зоны:
Процедура или Функция.Как только «основная программа» запущена, компилятор больше не ожидает увидеть объявления новых функций. Если после исполняемого оператора вы попытаетесь объявить процедуру, система выдаст ошибку.
Частой причиной внезапного перехода к «основной программе» являются лишние знаки препинания. В 1С 7.7 после закрывающих конструкций КонецПроцедуры или КонецФункции не нужно ставить точку с запятой. Если вы поставите ;, интерпретатор воспримет это как пустой оператор. Если такой оператор окажется между процедурами или в начале модуля, он может быть ошибочно принят за начало основной программы.
Рассмотрим, как правильно структурировать код. Если у вас есть функции и процедуры, они должны идти строго друг за другом без лишних разделителей:
Процедура ПриНачалеРедактированияСтроки()
Если ПустоеЗначение(Исполнитель) = 0 Тогда
Если ИмяПользователя() = "Бухгалтер" Тогда
Предупреждение("Исполнитель уже введен. Для изменения обратитесь к мастеру", 10);
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
// Логика работы
КонецПроцедуры
Помимо устранения синтаксических ошибок, важно следить за удобством использования методов 1С. Рассмотрим несколько советов по улучшению качества кода:
Предупреждение() является модальным. Если пользователь не нажмет «ОК», окно будет висеть бесконечно. Всегда указывайте параметр таймаута, например Предупреждение("Сообщение", 10), где 10 — время в секундах.КонецПроцедуры и КонецФункции в вашем модуле. Убедитесь, что после них нет знака ;.ПриОткрытии(). Не оставляйте «висящие» операторы (например, вызовы методов) в теле модуля вне процедур.Соблюдая эти правила, вы навсегда избавитесь от проблем со структурой модуля и сделаете ваш код более предсказуемым и надежным!