Инструменты пользователя

Инструменты сайта


1c:база:модули

Модули

Описание

Модули служат непосредственно для хранения исполняемого кода на языке 1С предприятия. Модули как правило состоят из:

  1. Раздела объявления переменных
  2. Раздела процедур и функций
  3. Раздела основной программы.

Причем разделы идут именно в таком порядке, наличие всех разделов в модуле не обязательно. При указании процедур, функций и переменных следует указывать, где они будут скомпилированы, если не указана директива компиляции, то компиляция произойдет на сервере(необязательно для толстого клиента). Некоторые модули могут компилироваться и на клиенте и на сервере, некоторые только на сервере.FIXME(здесь следует добавить примеров). При указании процедур, функций и переменных можно указать их как экспортные. Тогда эти процедуры и переменные будут доступны из вне этого модуля. Делается это с помощью ключевого слова Экспорт

Процедура ПроцедураВмоемМодуле()  Экспорт
   //какие то действия
КонецПроцедуры

Модуль приложения

Модуль приложения используется для отслеживания запуска\завершения программы. Отрабатывает только в случае если 1С запускается интерактивно, то есть показывается на экране. В 1С есть два модуля приложения один для запуска обычного приложения, второй для запуска управляемого приложения. Модуль приложения управляемого приложения компилируется на стороне клиента. То есть недоступны обращения к базе данных и прочие объекты доступные только на сервере. В модуле обычного приложения, понятно таких проблем нет. В модуле приложения могут как обычно размещаться объявления переменных, процедуры и функции, а также предопределенные обработчики событий. В модуле доступны следующие события:

  • ПередНачаломРаботыСистемы событие срабатывает в момент запуска системы, одним из первых, когда запуск еще не произошел. У этого события есть параметр Отказ и если его выставить в Истина, то запуск не произойдет. В этот момент окна еще нет, и взаимодействовать с пользователем, не получится.
  • ПриНачалеРаботыСистемы событие срабатывает когда запуск уже случился и нужно сделать какие то действия после запуска. Уже есть окно программы и можно что то спросить или сказать. Отказаться от запуска уже невозможно.
  • ПередЗавершениемРаботыСистемы событие по аналогии с предыдущим срабатывает когда завершение работы еще не произошло, есть параметр отказ и можно спросить пользователя, не ошибся ли он, нажав на крестик.
  • ПриЗавершенииРаботыСистемы событие срабатывает когда все уже произошло и надо отработать действия которые должны происходить после завершения работы системы.
  • ОбработкаВнешнегоСобытия вызывается когда происходит какое то событие передаваемое в систему, например вызов ридера магнитных карт или сканера штрихокда.

Если в модуле приложения объявить экспортную процедуру или функцию, то можно будет обращаться к ней напрямую без указания имени модуля, из любого другого модуля(если экспортная процедура объявлена в модуле управляемого приложения то очевидно, что она будет доступна только из клиентских модулей). По существу мы получим процедуру глобального контекста. При этом нужно понимать, что этот модуль компилируется при старте системы всегда, поэтому при наличии большого числа процедур в этом модуле будет падать скорость запуска приложения.

Модуль внешнего соединения

Модуль срабатывает в момент запуска приложения в режиме ком соединения, в этом модуле так же есть события ПриНачалеРаботыСистемы и ПриЗавершенииРаботыСистемы в этом модуле не создается окно и нет возможности взаимодействовать с пользователем . Компилируется на сервере.

Модуль сеанса

Запускается и при запуске пользователем и в случае ком соединения, его предназначение – установка параметров сеанса, в модуле сеанса есть только один обработчик УстановкаПараметровСеанса, этот обработчик вызывается первым при запуске приложения. Модуль сеанса компилируется на сервере и запускается в привилегированном режиме - без контроля прав конкретного пользователя. Так же в модуле сеанса запрещены экспортные процедуры и функции.

Внимание.Этот модуль запускается не только при старте системы, но еще и при обращении к параметрам сеанса которые не были определены. В этом случае в первом параметре процедуры УстановкаПараметровСеанса будет массив с параметрами к которым произошло обращение.

Общие модули

Общие модули служат для хранения процедур и функций, которые должны быть доступны из любого места конфигурации. Как правило в них описывают какие то общие механизмы. Количество общих модулей неограниченно. Обычно общие модули разбивают по функционалу. В отличии от предопределенных модулей, у общих модулей есть возможность указать, в каком контексте они будут скомпилированы. В общих модулях доступны только описания процедур и функций, недоступно описание переменных и раздел основной программы. При написании процедур в общих модулях необходимо учитывать место компиляции этого модуля. Есть возможность установить свойство глобальный в этом случае экспортные процедуры будут доступны без указания названий модуля. Глобальные модули компилируются при старте системы и также замедляют старт системы(особенно это плохо, когда там содержатся такие функции которые могут никогда не понадобиться или используются очень редко). Использование процедур из этих модулей может ухудшить читаемость кода. То есть строчка

УправлениеПользователями.ПолучитьЗначениеПоУмолчанию();

Читается гораздо лучше чем просто

ПолучитьЗначениеПоУмолчанию();

Галочка Привилегированный указывает на то что при обработке процедур из этого модуля система не будет обращать внимания на права пользователя, это бывает удобно при больших объемах обработки данных когда обработка должна отработать как можно быстрее и нет смысла уменьшать ее быстродействие проверкой прав или когда на время работы процедуры, необходимо дать пользователю недостающие права. Место компиляции модуля определяется с помощью установки свойств модуля. Доступные значения:

  • Сервер
  • Клиент
  • Внешнее соединение
  • Обычное приложение

В случае если стоят все галочки, то при компиляции процедура скомпилируется и будет доступна только там где указано директивой препроцессору. Если такая директива не указана, то процедура будет скомпилирована и на сервере и на клиенте. В таком случае, необходимо придерживаться ограничений, накладываемых как на серверный контекст так и на клиентский, то есть не будут работать функции обращения к базе данных(сервер) и не будут работать функции взаимодействия с пользователем(клиент). Обращение к экспортным методам общего модуля скомпилированного на сервере, возможно в том случае если установлено свойство Вызов сервера.

Модуль формы

Формы делятся на управляемые и на обычные. В управляемых формах код делится на клиентский и серверный. В обычных формах весь код выполняется на клиенте. Модуль предназначен для обработки действий пользователя и событий формы. FIXME(Подробно о событиях выполняемых в модуле формы можно будет почитать либо по ссылке, которая будет здесь, либо события будут добавлены сюда).

Модуль объекта

В модуле объекта записывают такие обработчики как ПриЗаписи, ОбработкаПроведения. FIXME()Суть модуля заключается в том, что события могут срабатывать, даже при программной записи объекта, открытие формы в данном случае необязательно. Также есть возможность, определить дополнительные методы для объекта, если определить их в модуле объекта с ключевым словом Экспорт.

Модуль менеджера

Модуль позволяет добавить функционал расширяющий возможности менеджера, например: В модуле менеджера справочника номенклатура можно указать:

Функция Получить5ПродавамыхТоваров()
	//здесь будет алгоритм выборки данных
КонецФункции

А потом в коде указать:

Продаваемый товар = Получить5ПродавамыхТоваров()
Только авторизованные участники могут оставлять комментарии.
1c/база/модули.txt · Последние изменения: 2014/12/26 22:35 — user1