Код модулей может быть представлен в виде трех блоков
- Объявление переменных модуля
- Набор процедур и функций модуля
- Тело модуля
Каждый из указанных элементов может отсутствовать. Наличие первого и последнего, может быть запрещено на уровне системы.
Пример:
Данные блоки отделяются формально и не имеют четких границ.
Модули подразделяются на общие и модули, связанные с прикладными объектами. Данное разделение в большей мере ограничивает доступность или недоступность локальных данных (подробней ниже).
Блок объявлений переменных
Служит для объявления имен переменных, а также для указания их доступности извне через директиву “экспорт“. Эти переменные обычно называются переменными модуля, либо экспортными переменными объекта (формы).
Может содержать:
- Объявление переменных одной или нескольких
- Пустые строки и строки комментариев
- Директивы #Если #Тогда #КонецЕсли
- Директивы #Область #КонецОбласти
В модуле управляемой формы, модуле веб-сервисов, в общих модулях, в модуле команды не могут иметь блока переменных (детально данные модули в статье описываться не будут)
Блок кода процедур или функций
Предназначен для размещения текста функций и процедур. Этот блок возможно использовать во всех модулях.
Для модуля объекта или формы предоставляется возможность обращения к реквизитам данного объекта (формы, в том числе к элементам диалогов).
Для версий, начиная с 8.2 возможно указание директив исполнения (&НаСервере, &НаКлиенте, &НаСервереБезКонтекста)
В модулях обычного приложения использование директив требуется производить с глубокой проверкой, иначе возможно.
Для модуля формы обращение к реквизитам недоступно для функции или процедур с директивой &НаСервереБезКонтекста
Во всех версиях 8 (в отличии от 7.7), последовательность процедур и функции для доступности вызова не имеет значение (в 7.7. такое возможно было при использовании директив “Далее”, без данной директивы они были доступны снизу вверх)
Имена процедур должны быть уникальны в пределах локальной видимости (самого модуля или например, модуля объекта и формы для экспортных процедур)
Возможно наличие пустых строк и комментариев, как между процедурами(функциями), так и внутри самой процедуры
Для версии 8.3 и выше возможно логическое разделение кода на области, свертка редактором улучшает читабельность кода (#Область #КонецОбласти). Это не является обязательным, но рекомендуется для больших текстов кода. Замечу, что возможно использование вложенных процедур.
Блок тела модуля
Блок содержит код, который выполняется в момент создания объекта (формы или других прикладных объектов).
В нем доступны переменные модуля и возможна их инициализация.
Если модуль является модулем объекта или формы, видны и возможна записи реквизитов текущего объекта.
Так же возможен вызов процедур и модулей как данного модуля, так и других модулей, при допустимости их совместного использования (клиент-серверная реализация), глобальной видимости
Секрет интуиции тот же, что и секрет рекламы: повторите человеку тысячу раз, что мыло «Пирс» улучшает цвет лица, и он, возможно, интуитивно почувствует, что так оно и есть.