Перейти к содержимому

❓ 6.1 Какие виды программных модулей существуют в “1С:Предприятие 8”?


В «1С:Предприятии» программный код размещается в модулях.

Каждый модуль имеет свой контекст выполнения:

  • к какому объекту он относится;
  • где выполняется код — на клиенте или на сервере;
  • когда этот код вызывается платформой;
  • какие данные и методы доступны внутри модуля.

При разработке важно правильно выбрать место, где этот код должен находиться.


В 1С используются разные виды модулей:

  • модуль управляемого приложения;
  • модуль обычного приложения;
  • модуль внешнего соединения;
  • модуль сеанса;
  • общие модули;
  • модули объектов;
  • модули менеджеров объектов;
  • модули форм;
  • модули команд;
  • модули наборов записей.

Разберем их с точки зрения назначения.


Модули, связанные со стартом и завершением работы

Заголовок раздела «Модули, связанные со стартом и завершением работы»

Модуль управляемого приложения используется для обработки действий, связанных с сеансом работы пользователя.

В первую очередь это события:

  • начала работы системы;
  • завершения работы системы.

В этом модуле рекомендуется размещать только обработчики соответствующих событий.

Например, здесь может выполняться логика, которая нужна при запуске управляемого приложения.

Важно: модуль управляемого приложения недоступен для процедур, которые выполняются на сервере.


Модуль внешнего соединения используется при работе системы в режиме внешнего соединения (COM-соединения).

В этом модуле размещаются обработчики событий:

  • начала работы внешнего соединения;
  • завершения работы внешнего соединения.

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


Модуль сеанса автоматически выполняется при старте системы «1С:Предприятие» в момент загрузки конфигурации.

Он предназначен для:

  • инициализации параметров сеанса;
  • выполнения действий, связанных с началом работы сеанса.

Особенность модуля сеанса в том, что он всегда выполняется на сервере в привилегированном режиме.

Установка параметров сеанса выполняется в обработчике события УстановкаПараметровСеанса.


Модули, связанные с объектами конфигурации

Заголовок раздела «Модули, связанные с объектами конфигурации»

Модуль объекта используется для описания логики конкретного экземпляра объекта базы данных.

Например:

  • конкретного элемента справочника;
  • конкретного документа;
  • конкретного бизнес-процесса;
  • конкретной задачи.

В модуле объекта обычно размещают код, который связан с жизненным циклом самого объекта:

  • заполнение объекта;
  • проверка перед записью;
  • запись;
  • проведение;
  • отмена проведения;
  • обработка удаления.

Например, если нужно проверить данные конкретного документа перед записью, такая логика обычно относится к модулю объекта.


Модуль менеджера относится не к конкретному экземпляру объекта базы данных, а к объекту конфигурации в целом.

Например, не к конкретному элементу справочника Номенклатура, а к справочнику Номенклатура как объекту конфигурации.

Через менеджер можно:

  • создавать объекты;
  • получать формы;
  • работать с макетами;
  • описывать методы, которые относятся к объекту конфигурации в целом.

Например, если нужна процедура поиска, подбора или создания элемента справочника по определенным правилам, ее часто размещают в модуле менеджера.

Главное отличие:

  • модуль объекта — логика конкретного объекта базы данных;
  • модуль менеджера — логика объекта конфигурации в целом.

Модуль формы содержит код, который связан с работой конкретной формы.

В нем обычно размещают:

  • обработчики команд формы;
  • обработчики событий элементов формы;
  • клиентскую логику интерфейса;
  • вызовы серверных процедур формы.

Например, в модуле формы может быть код, который:

  • реагирует на нажатие кнопки;
  • изменяет доступность реквизита формы;
  • открывает форму выбора;
  • вызывает серверную процедуру для заполнения данных.

Важно понимать: модуль формы нужен для логики формы, а не для всей бизнес-логики объекта.

Если проверка должна выполняться всегда при записи документа, ее не стоит оставлять только в форме.
Пользователь может записать объект не только через эту форму, но и другим способом.


Модуль команды предназначен для описания действия, которое должна выполнить система при вызове команды.

Модуль команды может содержать только процедуры и функции.

В нем не может быть:

  • переменных модуля;
  • тела модуля.

То есть модуль команды используется как место, где описывается обработка конкретной команды.


Общие модули предназначены для размещения общих алгоритмов конфигурации.

Их используют, когда один и тот же код должен быть доступен из разных мест:

  • из модулей форм;
  • из модулей объектов;
  • из модулей менеджеров;
  • из других общих модулей.

В общих модулях отсутствуют:

  • раздел определения переменных;
  • раздел основной программы.

Они содержат только процедуры и функции.

Общие модули удобно использовать для кода, который не относится напрямую к конкретной форме или конкретному объекту базы данных.

Например:

  • общие проверки;
  • сервисные функции;
  • алгоритмы заполнения;
  • интеграционная логика;
  • работа с внешними сервисами;
  • переиспользуемая бизнес-логика.

При этом важно учитывать настройки общего модуля: где он доступен и где выполняется — на клиенте или на сервере.


Модуль набора записей используется у регистров.

Такой модуль позволяет описывать логику, которая выполняется при работе с набором записей, например при записи движений регистра.

По смыслу его можно сравнить с модулем объекта, но для регистров.

В регистрах основной объект работы — это не элемент справочника или документ, а набор записей.


Чтобы правильно выбрать модуль, нужно сначала понять, к чему относится логика.

Если логика относится к конкретному объекту базы данных

Заголовок раздела «Если логика относится к конкретному объекту базы данных»

Например:

  • конкретному документу;
  • конкретному элементу справочника;
  • конкретной задаче;
  • конкретному бизнес-процессу.

Тогда чаще всего используется модуль объекта.


Если логика относится к объекту конфигурации в целом

Заголовок раздела «Если логика относится к объекту конфигурации в целом»

Например:

  • найти объект по правилам;
  • выполнить общий метод справочника или документа.

Тогда чаще всего используется модуль менеджера.


Например:

  • обработать нажатие кнопки;
  • изменить видимость элемента;
  • заполнить реквизиты формы;
  • выполнить действие только в рамках конкретной формы.

Тогда используется модуль формы.


Например, один и тот же алгоритм вызывается из формы, объекта и обработки.

Тогда такую логику лучше вынести в общий модуль.


Например:

  • установить параметры сеанса;
  • выполнить действия при начале работы пользователя;
  • обработать запуск внешнего соединения.

Тогда используются специальные модули:

  • модуль управляемого приложения;
  • модуль внешнего соединения;
  • модуль сеанса.

Модуль определяет контекст, в котором этот код будет выполняться.

Поэтому правильный вопрос звучит не так:

«Куда бы написать эту процедуру?»

А так:

«К чему относится эта логика и в каком контексте она должна выполняться?»

Если логика относится к конкретному объекту — используем модуль объекта.
Если к объекту конфигурации в целом — модуль менеджера.
Если к интерфейсу — модуль формы.
Если алгоритм общий — общий модуль.
Если код связан со стартом или завершением работы — специальные модули приложения, сеанса или внешнего соединения.