Программный модуль представляет собой текст на встроенном языке «1С:Предприятия 8», расположенный в определенном месте конфигурации. В соответствии с этим различают следующие виды программных модулей:
На следующем рисунке показано расположение всех этих модулей:
Разделы программного модуля
Любой программный модуль, за исключением общих модулей, состоит из следующих разделов:
Внимание! У общих модулей есть только раздел процедур и функций.
Контекст
Контекст — очень важное понятие при программировании на любом языке. В «1С:Предприятии 8» контекст обозначает окружение модуля, т. е. какие ему будут доступны переменные, объекты, свойства, методы и события.
Можно выделить следующие виды контекстов, существующих в «1С:Предприятии 8»:
В контексте модуля приложения (или модуля внешнего соединения) доступны экспортируемые процедуры и функции общих модулей.
В контексте общего модуля доступны экспортируемые процедуры и функции других общих модулей. В этом контексте недоступны экспортируемые переменные, процедуры и функции модуля приложения.
В контексте модуля прикладного объекта есть доступ к реквизитам и табличным частям объекта, а также его методам и событиям. Например, в модуле документа РасходнаяНакладная доступны реквизиты документа и его табличные части, можно вызывать методы документа и обрабатывать события.
В контексте модуля формы доступны реквизиты формы, а также ее свойства, методы и события. Если у формы назначен основной реквизит, то в модуле формы становятся доступны свойства и методы прикладного объекта, используемого в качестве основного реквизита, а также экспортируемые переменные, процедуры и функции модуля этого прикладного объекта.
Необходимо помнить правила видимости экспортируемых переменных, процедур и функций различных модулей:
Проиллюстрируем применение первых четырех правил на следующей схеме:
Стрелки на схеме обозначают, что модуль предоставляет другим модулям возможность обращаться к своим экспортируемым переменным, процедурам и функциям. Напомним, что в общих модулях не может быть объявления переменных.
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1.1. Общие модули создаются для реализации процедур и функций, объединенных по некоторому признаку. Как правило, в один общий модуль помещаются процедуры и функции одной подсистемы конфигурации (продажи, закупки) или процедуры и функции сходного функционального назначения (работа со строками, общего назначения).
1.2. При разработке общих модулей следует выбирать один из четырех контекстов выполнения кода:
Тип общего модуля
Пример наименования
Вызов сервера
Сервер
Внешнее соединение
Клиент (обычное приложение)
Клиент (управляемое приложение)
1.
Серверный
ОбщегоНазначения (или ОбщегоНазначенияСервер)
2.1. Серверные общие модули предназначены для размещения серверных процедур и функций, не доступных для использования из клиентского кода. В них реализуется вся внутренняя серверная бизнес-логика приложения. Для корректной работы конфигурации в режимах внешнего соединения, управляемого и обычного приложений, серверные процедуры и функции следует размещать в общих модулях с признаками:
2.2. Серверные общие модули для вызова с клиента содержат серверные процедуры и функции, доступные для использования из клиентского кода. Они составляют клиентский программный интерфейс сервера приложения. Такие процедуры и функции размещаются в общих модулях с признаком:
2.3. Клиентские общие модули содержат клиентскую бизнес-логику (функциональность, определенную только для клиента) и имеют признаки:
Исключение составляют случаи, когда клиентские процедуры и функции должны быть доступны только в режиме управляемого приложения (только в режиме обычного приложения или только в режиме внешнего соединения). В таких случаях, допустима иная комбинация двух этих признаков.
2.4. Для того чтобы избежать дублирования кода, рекомендуется создавать клиент-серверные общие модули с теми процедурами и функциями, содержание которых одинаково на сервере и на клиенте. Такие процедуры и функции размещаются в общих модулях с признаками:
В то же время, как только возникает необходимость ветвить код в клиент-серверных общих модулях на серверный и клиентский, то не следует использовать для этого инструкции препроцессора. Вместо этого, функциональность, различную для клиента и для сервера, рекомендуется реализовывать по общим правилам в модулях соответствующего типа – см. пп. 2.1 и 2.3. Такое явное разделение клиентской и серверной бизнес-логики продиктовано соображениями повышения модульности прикладного решения, упрощения контроля со стороны разработчика над клиент-серверным взаимодействием и снижением риска ошибок из-за принципиальных отличий требований к разработке клиентского и серверного кода (необходимость минимизации кода, выполняемого на клиенте, разной доступностью объектов и типов платформы и др.). При этом нужно иметь в виду неизбежное увеличение числа общих модулей в конфигурации.
Особым случаем смешанных клиент-серверных модулей являются модули форм и команд, которые специально предназначены для реализации серверной и клиентской бизнес-логики в одном модуле.
3.1. Имена общих модулей рекомендуется строить по общим правилам именования объектов метаданных. Название общего модуля должно совпадать с названием подсистемы или отдельного механизма, процедуры и функции которой он реализует. Рекомендуется избегать в названиях общих модулей таких общих слов как «Процедуры», «Функции», «Обработчики», «Модуль», «Функциональность» и т.п. и применять их только в исключительных случаях, когда они более полно раскрывают назначение модуля.
Для того чтобы различать общие модули одной подсистемы, которые созданы для реализации процедур и функций, выполняемых в разных контекстах, рекомендуется задавать им постфиксы, описанные ранее в пп. 2.1-2.4.
3.2. Дополнительно к общим модулям могут быть добавлены уточняющие постфиксы.
Общий модуль нужен для того, чтобы вынести код процедуры или функции в одно место, откуда в дальнейшем его можно будет вызывать. Например, есть процедура для расчета суммы строки:
Если в конфигурации есть несколько видов документов с табличной частью, то данную процедуру придется расположить в модуле формы каждого вида документа. Если в дальнейшем потребуется внести изменения в эту процедуру, то придется сделать это несколько раз, в модуле формы каждого вида документа.
В этом случае целесообразно вынести данную процедуру в общий модуль, добавить ключевое слово Экспорт, чтобы данная процедура была доступна из других модулей и вызывать ее из модуля формы:
Вызов общего модуля
Вызов общего модуля выполняется через имя общего модуля. После имени общего модуля нужно указать точку, а потом имя метода. Метод должен быть экспортным, иначе при вызове возникнет ошибка «Метод объекта не обнаружен».
Для примера добавим в конфигурацию новый общий модуль. Общие модули расположены в узле Общие — Общие модули:
В свойствах общего модуля установим флаг Клиент:
В самом модуле добавим следующий код:
В модуле обработки вызовем оба метода общего модуля:
Вызов метода ТестОдин отработает корректно, а при вызове метода ТестДва возникнет ошибка «Метод объекта не обнаружен», потому что у процедуры нет ключевого слова Экспорт.
Переменные в общем модуле могут быть только внутри методов. Нельзя создать переменную, доступную во всем модуле или через свойства модуля.
Клиентский общий модуль
Если в свойствах общего модуля установлен только флаг Клиент, то к методам такого модуля можно будет обращаться только на клиенте. Из самого общего модуля можно выполнять вызов экспортных методов модуля приложения.
Серверный общий модуль
Если установлен только флаг Сервер, то к методам такого модуля можно будет обращаться только на сервер.
Вызов сервера
При установленных двух флагах Сервер и Вызов сервера к методам модуля можно обращаться как на клиенте, так и на сервере. Но само выполнение методов будет выполнено на сервере.
Клиент-серверный общий модуль
У такого общего модуля в свойствах нужно установить и флаг Клиент и флаг Сервер.
Чтобы при компиляции такого общего модуля не было ошибок нужно с помощью инструкций препроцессора разделить процедуры на клиентские и серверные:
Вызывать серверные методы общего модуля можно только на сервере:
Глобальный общий модуль
Если в свойствах модуля поставить флаг Глобальный, то для вызова методов общего модуля не нужно указывать имя общего модуля.
Глобальные общие модули будут скомпилированы при запуске конфигурации.
Привилегированный общий модуль
Общий модуль с таким флагом всегда выполняется без проверки прав доступа. Такой общий модуль может быть только серверным.
Повторное использование возвращаемых значений
Использование данного свойства позволяет сохранять в кеше параметры и результат функций. Работает только для функций в неглобальных общих модулях.
При первом вызове такой функции она будет выполнена как обычно. После выполнения значения параметров и результат будут сохранены в кеше. Если снова обратиться к такой функции с теми же значениями параметров, то результат будет сразу взят из кеша, без выполнения тела функции.
Есть два варианта повторного использования возвращаемых значений:
Кешированный результат выполнения может быть удален в нескольких случаях:
Если выполнить вызов функции общего модуля с повторным использованием возвращаемых значений из самого общего модуля и не указать до имени функции имя общего модуля, то функция будет выполнена как в первый раз.
Для сохранения в кеше и повторного использования можно использовать параметры следующих типов:
Объект «Общие модули» содержит программный код (процедуры и функции), вызываемый из других мест конфигурации (используемый в других программных модулях), и может принадлежать всей конфигурации.
Примеры общего модуля 1С:
Особенности объекта «Общий модуль»:
Палитра свойств объекта «Общие модули»
«Глобальный» — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте (их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля). При этом названия процедур и функций должны быть уникальны в рамках глобального контекста.
Если флаг не установлен, то экспортируемые методы общего модуля не являются частью глобального контекста и могут иметь одинаковые имена в разных неглобальных общих модулях.
«Клиент (управляемое приложение)» — если флаг установлен, методы общего модуля будут доступны для тонкого клиента, веб-клиента, а также для толстого клиента в режиме управляемого приложения.
В контексте неглобального общего модуля с установленным свойством «Клиент (управляемое приложение)» доступны экспортируемые переменные, процедуры и функции модуля управляемого приложения.
«Сервер» — если флаг установлен, процедуры и функции данного общего модуля могут быть выполнены на сервере (в клиент-серверном варианте).
«Внешнее соединение» — если флаг установлен, программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
В контексте неглобального общего модуля с установленным свойством » Внешнее соединение» доступны экспортируемые переменные, процедуры и функции модуля внешнего соединения.
В контексте неглобального общего модуля с установленным свойством «Клиент (обычное приложение)» доступны экспортируемые переменные, процедуры и функции модуля обычного приложения.
«Вызов сервера» — флаг, разрешающий вызов сервера, процедуры и функции доступны на клиенте (само свойство доступно, если установлен флаг компиляции «Сервер», все остальные флаги компиляции стоит снять во избежание различных проблем). Если флаг «Вызов сервера» не установлен, то процедуры и функции модуля доступны только на сервере.
«Привилегированный» — если флаг установлен, то устанавливаются полные права доступа при выполнении действий с базой данных в процедурах и функциях общего модуля. При установленном свойстве выполнение производится только на сервере.
Опция может принимать следующие значения:
Особенности сохранения результатов вызова:
Сохраненные значения удаляются:
Сохраненные значения могут быть удалены:
После удаления значений вызов экспортной функции выполняется как при первом вызове!
Рекомендации по выставлению флагов общего модуля 1С:
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Что мы знаем про общие модули в 1С? Только то, что этот общий объект конфигурации помогает нам обращаться к коду, который необходим в разных объектах нашего программного продукта 1С Предприятие.
Практически все типовые процедуры и функции находятся в модулях. Спросите, зачем? Одна из главных причин такого способа разработки – читабельность кода. Допустим, Вы имеете дело громоздкой процедурой «Обработка проведения», в которой выполняется множество проверок и заполнений. Будет ли Вам удобно разбираться в коде другого программиста, который написал такую большую процедуру? Полагаю, нет. Реализация процедуры отдельными блоками в общем модуле с возможностью вызвать их в любую секунду значительно упрощает и ускоряет работу.
Другая причина – разделение выполнения кода на разных уровнях контекста конфигурации. На управляемых формах идет жесткое разделение на 2 уровня и потому часть функционала, который можно выполнить на сервере, можно также просто выполнить и в общем модуле с определенным признаком, предварительно передав в него данные.
У общего модуля есть несколько свойств, на которые в большей своей степени мы не обращаем внимание, а зря.
2. Преимущества Глобального модуля в 1С
Всего у него 7 свойств, которые можно смело использовать. В данной статье я расскажу о свойстве модуля «Глобальный».
Общий модуль может быть клиентским модулем или серверным модулем – в этом плане разницы нет. Но если установлен флаг «Глобальный», это дает пользователю массу преимуществ.
Например, все знают такие глобальные процедуры как «РольДоступна()» или «СтрНайти()», а уж подобных им примеров можно найти массу. И если у Вашего общего модуля установлен вышеупомянутый признак модуля, то можно смело вызывать свои процедуры и функции даже без указания конкретного общего модуля. Единственное, однако, обязательное к соблюдению требование – необходимость различать наименования глобальных и типовых функций. Если это правило соблюдено, тогда смело можно пользоваться именно Вашей процедурой.
Приведу пример. Допустим, Вы создали отдельный модуль программы, в который добавили склонение ФИО сотрудника в определенном падеже. И для того чтобы Ваш код выглядел более гармонично и читабельно, Вы решили добавить флаг «Глобальный» для модуля. Теперь Вы сможете вызывать вашу экспортную процедуру легко, всего лишь по наименованию, словно эта функция процедуры модуля, который на данный момент выполняется.
У глобального модуля в 1С масса преимуществ, которые могут помочь улучшить разработку решений 1С и повысить производительность. Но, увы, мало кто знает про преимущества данного свойства общего модуля. Хотите узнавать и о других полезных фишках в работе с 1С. Что ж, коллеги, на сайте мы постоянно публикуем интересные материалы, а если у Вас возникают вопросы, не стесняйтесь обращаться – мы всегда на связи и всегда на связи и рады помочь!