Как открыть модуль управляемого приложения в 1с
Общие модули содержат общие алгоритмы, которые могут вызываться из других модулей.
Опции Общего модуля
Вызов метода общего модуля
Вызов методов общего модуля из других модулей возможен, если они были определены экспортными и область компиляции метода соответствует вызывающему методу. Пример непосредственного вызова метода общего модуля:
Пример косвенного вызова метода общего модуля:
- присутствует у Справочников, Документов, Отчетов, Обработок, ПВХ
- отсутствует у Констант, Перечислений, Журналов, Внешних источников данных
- у Регистров аналогичную роль выполняет Модуль Записи
- переменные объявленные как Экспорт доступны у объекта как реквизиты <объект>.<Переменная>, но в отличие от реквизита она не сохраняется при записи
- процедуры и функции описанные как Экспорт доступны у объекта как методы <объект>.<Процедура>(<параметры>)
- по неизвестной причине доступ к переменным и методам у Обработок не действует
Примеры
Пример описания переменной, конструктора объекта, экспортной функции и пример вызова:
ДанныеИсточника = ИсточникОбъект . ЭкспортнаяФункция ( ) ;Модуль предназначен для описания общих статических процедур и функций применимых к прикладному типу без контекста отдельного элемента семейства. Модуль менеджера похож на Общий модуль, но инкапсулирован в своем прикладном типе.
- присутствует у Справочников, Документов, Журналов, Перечислений, Отчетов, Обработок, ПВХ, Регистров, Бизнес-процессов, Задач
- отсутствует у Внешних источников данных
- доступность обеспечивается только из модулей на Сервере
- могут при необходимости получить объект или ссылку в параметре вызова
Примеры
Пример описания статической экспортной функции и ее вызов из другого модуля , где эти типы доступны (на Сервере). :
ДанныеИсточника = Справочники . Источник . ЭкспортнаяФункция ( ) ;Очень похож на Общий модуль, но инкапсулирован в форму, поэтому ему доступны реквизиты данных, реквизиты формы, элементы формы и статические переменные.
- компиляция по умолчанию выполняется на Сервере, но отдельные фрагменты модуля могут устанавливать другую область компиляции директивами компиляции
- НаКлиенте
- реквизиты объекта формы доступны через Объект.<Реквизит>
- реквизиты формы доступны непосредственно по имени <Реквизит>
- элементы формы доступны через Элементы.<Элемент>
- статические переменные существуют только на время обработки события формы, а затем удаляются
- реквизиты объекта формы доступны через Объект.<Реквизит>
- реквизиты формы доступны непосредственно по имени <Реквизит>
- элементы формы на Сервере недоступны
- статические переменные существуют только на время вызова метода на Сервере, а затем удаляются
- данные реквизитов при каждом вызове НаКлиенте->НаСервере и возврате НаСервере->НаКлиенте все (целиком в полном объеме) проходят через XDTO сериализацию
- доступные методы реквизитов на Клиенте и на Сервере отличаются
Временный динамический модуль создается платформой при использовании оператора Выполнить() :
Пять директив определяют область исполнения функций и процедур. Их следует применять только в коде модулей управляемых форм и в коде модулей команд, в остальных модулях рекомендуется применять инструкции препроцессора.
- директива должна предшествовать каждому определению в модуле
- по умолчанию действует директива &НаСервере
- директива &НаСервереБезКонтекста имеет смысл только в формах (чей контекст директива подразумевает)
- определение в общем модуле с директивой &НаСервере в общем модуле имеет
- директива &НаСервереНаКлиенте применяется только в коде модулей команд
- приведенный в таблице порядок директив соответствует иерархии доступности, так функции и процедуры определенные с некоторой директивой имеют доступ к процедурам и функциям определенным с той же директивой, либо с любой директивой следующей ниже, но не имеют доступа к определенным с предшествующей директивой
- определениям с директивой &НаКлиенте доступны все определения на Клиенте и все определения на Сервере, для которых предусмотрен серверный вызов
- определениям с директивой &НаКлиентеНаСервереБезКонтекста доступны определения только с такой же директивой
Инструкции препроцессора управляют включением и исключением фрагментов модуля прежде чем он будет скомпилирован для выполнения, все инструкции препроцессора и исключенные ими фрагменты кода отсутствуют в коде передаваемом компилятору модуля.
Предусмотрены четыре инструкции
- <Логическое выражение> = [НЕ] <Символ препроцессора> [<Булева операция> [НЕ] <Символ препроцессора> [<Булева операция> [НЕ] <Символ препроцессора>]…]
- <Символ препроцессора> =
<Булева операция> =
Области
Области дают возможность выделять произвольные области кода, группировать и сворачивать их в окне редактора модуля и служат только для облегчения работы разработчика над исходным кодом большого объема. Инструкции определения Области относятся к препроцессору, хотя они не влияют ни на работу препроцессора, ни на дальнейшую компиляцию модуля, поскольку перед компиляцией они полностью исключаются из кода.
Области выделяются с помощью двух инструкций препроцессора:
- <имя области> должно соответствовать общим требованиям к именам переменных (не может начинаться с цифры, содержать пробелы, знаки и символы и т.п.).
- области могут быть вложены друг в друга или в другие группируемые конструкции языка.
- 1С не рекомендует разрывать отдельные грамматические конструкции, выражения, а также объявления и места вызова процедур и функций.
Конфигурации применяют следующие области:
Три аннотации позволяют определить перехват порядка вызова типовых методов новыми методами.
Модуль управляемого приложения
Предназначен в основном для того чтобы поймать момент запуска приложения и момент завершения работы. Здесь же находятся обработчики, которые позволяют перехватить внешнее событие от оборудования. В модуле управляемого приложения отслеживается именно интерактивный запуск системы.
События модуля управляемого приложения срабатывают при запуске тонкого клиента, Веб-клиента и Толстого клиента управляемого приложения. В модуль упр. приложения можно попасть из палитры свойств корневого узла конфигурации или из контекстного меню вызванного на корневом узле конфигурации.
Модуль обычного приложения
Модуль обычного приложения играет такую же роль как и модуль управляемого приложения, только события модуля обычного приложения срабатывают при запуске толстого клиента обычного приложения.
Модуль обычного приложения станет доступен из палитры свойств корневого узла конфигурации после установки в параметрах конфигуратора на вкладке «Общие» опции «Редактирование конфигурации для режимов запуска» в положение «Управляемое приложение и обычное».
Модуль внешнего соединения
Модуль внешнего соединения предназначен для обработки события входа (не интерактивного, а в режиме COM-соединения) и выхода из системы. Имеются соответствующие обработчики. При COM-соединении не происходит открытие интерактивного окна, поэтому функции для диалога с пользователем не сработают. В модуле возможно описывать экспортные переменные и методы. Модуль внешнего соединения компилируется на сервере. Т.е. возможно обращение к соответствующим объектам конфигурации, например к справочникам.
Модулем сеанса
Существует такой общий объект конфигурации как «Параметры сеанса». Модуль сеансов создан для инициализации параметров сеанса (для этого существует определенное событие, при запуске приложения оно стартует самое первое).
Запускается в привилегированном режиме (не выполняется проверка прав доступа при обращении к БД). Модуль сеанса компилируется на сервере. Нет раздела описания переменных и раздела основной программы, нельзя описывать экспортные методы, используется только для установки параметров сеанса. Как видно у модуля сеанса очень узкое предназначение.
Общие модули
Общие модули описывают некоторые общие алгоритмы, содержат функции, которые могут вызываться из различных мест. Общие модули могут быть скомпилированы как на клиенте, так и на сервере.
В общих модулях доступен ТОЛЬКО раздел описания процедур и функций. Если необходимо использовать глобальную переменную то можно использовать, либо параметры сеанса, либо экспортную переменную модуля управляемого приложения.
В общем модуле можно задавать некоторые параметры, которые будут влиять на его поведение. Если в общем модуле установлена галочка «Глобальный» то его экспортные функции будут участвовать в формировании глобального контекста. И к ним можно будет обратиться из другого контекста напрямую (без упоминания имени общего модуля) : МетодОбщегоМодуля( );
Не стоит использовать свойство «Глобальный» общих модулей повсеместно, т.к. такие модули компилируются при старте системы и замедляют старт программы
Модуль объекта
У многих объектов конфигурации (справочники, документы и т.д. ) существует модуль объекта. В него можно вводить стандартные события, такие как создание нового элемента справочника, запись нового объекта, удаление, обработка проведения документа и т.д. Событие записи существует и в модуле формы (возникает в процессе интерактивной записи, когда пользователь нажимает на кнопку «записать») и в модуле объекта.
Нужно помнить, что у одного объекта может быть несколько форм. Поэтому событие записи нужно обрабатывать именно в модуле объекта. Именно там проверяется корректность записываемых данных.
Модуль объекта можно вызвать из палитры свойств данного объекта, либо из контекстного меню. Структура модуля объекта не отличается от модуля формы. Модуль объекта компилируется на сервере, соответственно директивы компиляции указывать не требуется.
Модуль формы
Модуль формы предназначен для обработки действий пользователя (обработка события нажатия кнопки и т.д.). Так же существуют события связанные непосредственно с самой формой (например событие её открытия, закрытия). Модули управляемых и обычных форм различаются прежде всего тем, что модуль управляемой формы четко разделяется на контекст. Каждая процедура должна иметь директиву компиляции. В обычной форме весь код исполняется на клиенте.
Структура управляемой формы содержит раздел описания переменных, раздел процедур и функций и раздел основной программы (выполняется в момент инициализации формы). К стандартным событиям формы можем обратиться через список процедур и функций (Ctrl+Alt+P) либо в палитре свойств самой формы. Так же в управляемой форме можно обработать событие записи элемента (это событие присутствует только для объектов: справочников, документов).
Модуль менеджера объекта
Модуль менеджера появился только в 1С 8.2,существует у многих объектов конфигурации. Основное предназначение модуля менеджера объекта это переопределить стандартное событие «ОбработкаПолученияДанныхВыбора», а так же в нем можем
Модуль менеджера значений
У объекта конфигурации константы не существует модуля объекта, а существует очень похожий модуль – модуль менеджера значений. В модуле менеджера значения константы можно описать различные процедуры (в том числе и экспортные), а также обработать 3 события: ПередЗаписью, ПриЗаписи, ОбработкаПроверкиЗаполнения. Этот модуль компилируется на сервере.
Модули наборов записей
Модуль набора записей является аналогом модуля объекта и присущ регистрам. В модуле набора записей существуют стандартные события:
- Перед записью
- При записи
- Обработка проверки заполнения
В модуле набора записей существует раздел описания переменных, процедур и функций (в том числе и экспортных), раздел основной программы.
В системе 1С:Предприятие существуют несколько видов программных модулей. Они различаются по месту размещения и доступному контексту.
Модуль управляемого приложения
Модуль управляемого приложения располагается в корневом разделе конфигурации. В нем располагаются процедуры-обработчики событий, которые инициализируются при старте и окончании работы системы с установленном в значение "Управляемое приложение" свойства Основной режим запуска. В модуле управляемого приложения возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации (кроме модуля внешнего соединения). Их доступность также обеспечивается для неглобальных общих модулей с установленным свойством Клиент (управляемое приложение). В контексте модуля управляемого приложения доступны экспортируемые процедуры и функции общих модулей.
Модуль сеанса
Модулем сеанса называется модуль, который автоматически выполняется при старте системы 1С:Предприятие 8 в момент загрузки конфигурации.
Модуль сеанса предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы. Модуль сеанса всегда исполняется в привилегированном режиме в кластере серверов 1С:Предприятия 8.
Важно! Модуль сеанса может содержать только определения процедур и функций.
Модуль сеанса не содержит экспортируемых процедур и функций и может использовать процедуры из общих модулей конфигурации.
Модуль внешнего соединения
Модуль внешнего соединения расположен в корневом разделе конфигурации. В нем располагаются процедуры-обработчики событий, которые инициализируются при старте и окончании работы системы в режиме внешнего соединения (СОМ-соединения).
В модуле внешнего соединения возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны для внешнего приложения, а также для неглобальных общих модулей с установленным свойством Внешнее соединение.
Объекты 1С:Предприятия, доступные извне через COM-соединение:
- Экспортируемые переменные и процедуры/функции модуля внешнего соединения
- Экспортируемые процедуры/функции общих модулей
- Включение и исключение модулей целиком с помощью установки свойств общих модулей
- Включение и исключение фрагментов общих модулей с помощью препроцессора
- Глобальный контекст 1С:Предприятия 8
- За исключением объектов, жестко связанных с клиентским приложением (ТекстовыйДокумент, ТабличныйДокумент, . )
Модуль присутствует только в сессии внешнего соединения.
В данном режиме характерно полное отсутствие пользовательского интерфейса.
Модуль обычного приложения
Модуль обычного приложения располагается в корневом разделе конфигурации. В нем располагаются процедуры-обработчики событий, которые инициализируются при старте и окончании работы системы с установленным в значение "Обычное приложение" свойством Основной режим запуска. В модуле обычного приложения возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации (кроме модуля внешнего соединения). Их доступность также обеспечивается для неглобальных общих модулей с установленным свойством Клиент (обычное приложение). В контексте модуля обычного приложения доступны экспортируемые процедуры и функции общих модулей.
Общие модули
Общие модули располагаются в отдельной ветке дерева метаданных. Основным назначением общих модулей является содержание общих алгоритмов конфигурации, доступных из разных модулей. В общих модулях отсутствует раздел определения переменных и раздел основной программы, то есть они содержат только раздел процедур и функций (см. раздел "Структура программного модуля").
В любом общем модуле возможно объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации.
Если используется клиент–серверный вариант системы 1С:Предприятие 8, то с помощью свойств Клиент (обычное приложение), Клиент (управляемое приложение) и Сервер, а также инструкций препроцессора можно организовывать выполнение различных процедур и функций общих модулей на сервере приложения или на клиентском месте.
Если установлено свойство Клиент (обычное приложение) или Клиент (управляемое приложение), то все процедуры и функции общего модуля могут использоваться в клиентском приложении.
В контексте неглобального общего модуля с установленным свойством Клиент (обычное приложение) доступны экспортируемые переменные, процедуры и функции модуля обычного приложения.
В контексте неглобального общего модуля с установленным свойством Клиент (управляемое приложение) доступны экспортируемые переменные, процедуры и функции модуля управляемого приложения.Важно! Свойство Клиент (обычное приложение) показывается, если в настройках конфигурации режима запуска установлен режим "Управляемое приложение и обычное приложение".
Если установлено свойство Сервер, то все процедуры и функции общего модуля могут использоваться в клиент-серверном варианте.
Если предполагается, что процедуры и функции общего модуля могут быть использованы во внешнем соединении, то следует установить свойство Внешнее соединение.
В контексте неглобального общего модуля с установленным свойством Внешнее соединение доступны экспортируемые переменные, процедуры и функции модуля внешнего соединения.Свойство Вызов сервера разрешает вызов сервера. Свойство доступно, если установлено свойство Сервер. Если не установлено, то процедуры и функции данного модуля доступны только на сервере. Если установлено, то процедуры и функции данного модуля доступны на клиенте.
Свойство Привилегированный предназначено для установки полных прав доступа при выполнении действий с базой данных в процедурах и функциях общего модуля. При установленном свойстве выполнение производится только на сервере.
Повторное использование возвращаемых значений. Свойство доступно, если общий модуль не является Глобальным. Это свойство может принимать следующие значения:
- Не использовать – повторное использование возвращаемых значений для функций этого общего модуля не используется;
- На время вызова и На время сеанса – для общего модуля используется метод определения повторного использования данных. Суть этого метода заключается в том, что в ходе выполнения кода система запоминает параметры и результат работы функций после первого вызова функции. При повторном вызове функции с такими же параметрами, происходит возврат запомненного значения (из первого вызова) без выполнения самой функции. Если функция во время своего выполнения меняет значения параметров, то повторный вызов функции не будет это делать.
Можно выделить следующие особенности сохранения результатов вызова:
- если функция выполняется на сервере и вызывается из серверного кода, то значения параметров и результат вызова запоминаются для текущего сеанса на стороне сервера;
- если функция выполняется на толстом или тонком клиенте, то значения параметров и результатов вызова запоминается на стороне клиента;
- если функция выполняется на стороне сервера, а вызывается из клиентского кода, то значения параметров вызова запоминаются и на стороне клиента и на стороне сервера.
Сохраненные значения удаляются:
- если свойство установлено в значение На время вызова:
- на стороне сервера – при возврате управления с сервера;
- на стороне клиента – при завершении работы процедуры или функции встроенного языка верхнего уровня (вызванной системой из интерфейса, а не из другой процедуры или функции встроенного языка).
- на стороне сервера – при окончании сеанса;
- на стороне клиента – при закрытии клиентского приложения.
Сохраненные значения могут быть удалены:
- после долгого неиспользования (более 5 минут);
- при нехватке оперативной памяти в рабочем процессе сервера;
- при перезапуске рабочего процесса;
- при переключении клиента на другой рабочий процесс.
После удаления значений, вызов экспортной функции выполняется как при первом вызове.
Свойство Глобальный определяет, являются ли экспортируемые методы общего модуля частью глобального контекста.
Если свойство Глобальный установлено в значение Истина, то экспортируемые методы общего модуля доступны как методы глобального контекста.Если свойство Глобальный установлено в значение Ложь, то в глобальном контексте создается свойство с именем, соответствующим имени общего модуля в метаданных. Данное свойство доступно ТОЛЬКО для чтения. Значением данного свойства является объект ОбщийМодуль. Через данный объект доступны экспортируемые методы данного общего модуля. Таким образом, обращение к методам неглобальных общих модулей выглядит как XXXXX.YYYYY, где XXXXX – это имя свойства общего модуля, а YYYYY – имя экспортируемого метода общего модуля.
Если установлено свойство Клиент (обычное приложение), то модуль загружается в толстом клиенте в режиме обычного приложения.
Если установлено свойство Клиент (управляемое приложение), то все процедуры и функции общего модуля могут использоваться в режиме Управляемое приложения, в тонком клиенте, в веб-клиенте.
Модули с установленным свойством Клиент (обычное приложение), проверяются для режимов запуска:
- Толстый клиент (обычное приложение);
- Толстый клиент (обычное приложение) вариант клиент-сервер.
Модули с установленным свойством Клиент (управляемое приложение), проверяются для режимов запуска:
- Толстый клиент (управляемое приложение);
- Толстый клиент (управляемое приложение) вариант клиент-сервер;
- Тонкий клиент;
- Веб-клиент.
Модули общих объектов
Некоторые общие объекты имеют собственные модули. К таким объектам относятся:
Модули располагаются в ветках конфигурации, в которых содержатся сами объекты и являются свойствами объектов. Каждый объект имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с объектом извне во встроенном языке, дополняя контекст объекта.
Модули прикладных объектов
Набор прикладных объектов имеет собственные модули. К таким объектам относятся:
- менеджеры значения константы;
- справочники;
- документы;
- отчеты (внешние отчеты);
- обработки (внешние обработки);
- планы видов характеристик;
- планы счетов;
- планы видов расчетов;
- бизнес-процессы;
- задачи;
- регистры.
Модули располагаются в ветках конфигурации, в которых содержатся сами объекты и являются свойствами объектов. Каждый объект имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с объектом извне во встроенном языке, дополняя контекст объекта.
В контексте модуля прикладного объекта есть доступ к реквизитам и табличным частям объекта, а также его методам и событиям.
Модули менеджеров прикладных объектов
Каждый прикладной объект имеет менеджер, предназначенный для управления этим объектом, как объектом конфигурации. С помощью менеджера можно создавать объекты, работать с формами и макетами. Модуль менеджера позволяет расширить функциональность менеджеров за счет введения процедур и функций на встроенном языке. Фактически, это позволяет описать методы для объекта конфигурации (например, справочника), которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации.
Контекст модуля менеджера образуется из:- глобального контекста, в том числе экспортируемых функций общих модулей (если для модулей установлено свойство Клиент (обычное приложение), Клиент (управляемое приложение) или Сервер);
- экспортируемых переменных, процедур и функций модулей управляемого или обычного приложений;
- локальных и экспортируемых функций самого модуля.
Модуль менеджера не может иметь переменных и тела модуля.
Если функции или процедуры модуля менеджера объявлены как экспортируемые, к ним можно будет получить доступ через менеджер объекта.
Пример:
Модуль менеджера:Вызов из прикладного кода:
Модули команд (модули общих команд)
Для нестандартных команд требуется написать процедуру ее выполнения. Для этого служит модуль команды, в котором можно написать предопределенную процедуру ОбработатьКоманду(). Данная процедура должна предваряться директивой компиляции &НаКлиенте, так как выполнение команды происходит в клиентском приложении.
Модули управляемых форм
Модуль состоит из набора процедур и функций. Переменные модуля и тело модуля не допускаются.
Модули форм
Эти модули содержатся в формах конфигурации. Каждая форма имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с формой извне во встроенном языке, дополняя контекст формы.
В контексте модуля формы доступны реквизиты формы, а также ее свойства, методы и события. Если у формы назначен основной реквизит, то в модуле формы становятся доступны свойства и методы прикладного объекта, используемого в качестве основного реквизита.
Функции, которые объявлены с флагом "экспорт" в таком модуле, можно вызывать из любых мест конфигурации. Вызов делается через ИмяОбщегоМодуля.ИмяФункции().
В таких модулях отсутствует раздел переменных.
Выполнение общих модулей зависит от выставленных параметров в их свойствах:
Флаг "Глобальный"
Если этот флаг установлен, то контекст такого модуля становится глобальным. То есть при обращении к его экспортным функциям не нужно указывать имя модуля. Но имена его экспортных функций должны быть уникальными в пределах глобального контекста конфигурации.
Флаг "Сервер"
Функции такого модуля могут выполняться на сервере.
Флаг "Клиент (обычное приложение)"
Функции такого модуля могут выполняться на клиенте в режиме обычного приложения.
Флаг "Клиент (управляемое приложение)"
Функции такого модуля могут выполняться на клиенте в режиме управляемого приложения.
Флаг "Вызов сервера"
Флаг доступен для модулей с установленным флагом "Сервер". Разрешает вызов на клиенте экспортных функций этого модуля (которые будут выполняться на сервере).
Флаг "Внешнее соединение"
Экспортные функции такого модуля могут быть вызваны при подключении из внешнего источника.
Флаг "Привилегированный"
В модуле с таким флагом будет отключена проверка прав. Подходит для повышения производительности или действий по администрированию.
Параметр "Повторное использование"
Если включить данный параметр, то возвращаемые значения экспортных функций будут кэшироваться сразу после первого вызова. Кэширование возможно на время вызова (время исполнение определенной процедуры) или на время сеанса пользователя.
Модуль приложения
Предназначен для обработки событий запуска и завершения приложения. Бывает двух видов: для обычного и управляемого приложений.
Не следует его перегружать, так как это влияет на время запуска приложения.
Модуль сеанса
Специальный модуль, который используется для инициализации параметров сеанса. Нужен для того, чтобы не дублировать код в различных модулях приложений.
Использовать его следует осторожно, так как модуль может выполняться несколько раз, а также выполняться без дальнейшего запуска базы. Выполняется до модулей приложения.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Читайте также: