Разработка и Конфигурация · 11 мин
Что такое модуль приложения в 1С и как с ним работать
Модуль приложения в 1С: что это, какие виды модулей существуют, где хранится код, как создать общий модуль и какие ошибки допускают разработчики.
Модуль в 1С — это контейнер для программного кода на встроенном языке платформы. Вся логика прикладного решения — расчёты, проверки, обработка событий, обращения к данным — размещается именно в модулях, а не «размазывается» по объектам конфигурации без структуры. Понимание того, какие бывают модули и где должен лежать тот или иной код, — базовый навык разработчика и внедренца 1С.
Когда говорят «модуль приложения», обычно имеют в виду одно из двух: либо конкретный объект конфигурации «Модуль приложения» (в управляемом приложении), в котором описывается поведение системы при запуске и завершении сеанса, либо в целом совокупность программных модулей, из которых состоит прикладное решение. Ниже разобраны оба смысла, чтобы вы могли ориентироваться в терминологии и в структуре конфигурации.
Знание устройства модулей помогает быстрее находить нужный код при доработке, правильно выбирать место для новых процедур и не нарушать логику типовых конфигураций при обновлении. Это особенно важно при поддержке решений на платформе 1С:Предприятие 8.3, где код строго разделён по контекстам исполнения — клиент и сервер.
Что такое модуль в платформе 1С:Предприятие
Модуль — это текст программы на встроенном языке 1С, состоящий из раздела объявления переменных, раздела процедур и функций и раздела инициализации (основной программы). Код модуля выполняется в строго определённом контексте: на клиенте или на сервере, при определённых событиях или при явном вызове из другого кода.
Каждый модуль привязан к конкретному месту в конфигурации: к приложению в целом, к объекту (справочнику, документу), к форме, к команде или к сеансу. Платформа сама определяет, когда какой модуль исполняется. Например, модуль объекта документа срабатывает при записи и проведении, а модуль формы — при открытии формы пользователем.
Виды модулей в конфигурации 1С
Платформа предоставляет несколько типов модулей, каждый со своим назначением и контекстом исполнения. Путаница между ними — частая причина ошибок вида «процедура не обнаружена» или выполнения кода не на той стороне (клиент вместо сервера).
| Тип модуля | Где находится | Назначение |
|---|---|---|
| Модуль приложения | Корень конфигурации | События запуска и завершения сеанса в управляемом приложении |
| Модуль сеанса | Корень конфигурации | Инициализация параметров сеанса, выполняется на сервере при старте |
| Общие модули | Ветка «Общие модули» | Библиотеки процедур и функций, доступные из любого места |
| Модуль объекта | Внутри справочника, документа и т.п. | Логика объекта: запись, проведение, проверка заполнения |
| Модуль менеджера | Внутри объекта метаданных | Операции над коллекцией объектов, создание, печать |
| Модуль формы | Внутри формы | Реакция на действия пользователя, работа с элементами формы |
| Модуль команды | Внутри команды | Действие при выполнении команды интерфейса |
Ключевое различие — доступность извне. Процедуры общего модуля с признаком «Экспорт» можно вызывать отовсюду. Процедуры модуля формы или объекта доступны только внутри своего контекста (либо через экспорт и явное обращение к объекту, что делается редко и осознанно).
Модуль приложения: что в нём размещают
Модуль приложения открывается из конфигуратора: корень дерева конфигурации → контекстное меню → «Открыть модуль приложения». В нём платформа предлагает предопределённые обработчики событий, главные из которых:
- ПриНачалеРаботыСистемы — выполняется при запуске клиентского приложения. Здесь обычно проверяют версию платформы, открывают стартовую форму, запускают фоновые проверки, показывают пользователю напоминания.
- ПриЗавершенииРаботыСистемы — срабатывает при закрытии приложения, позволяет задать вопрос пользователю или отменить завершение.
- ПриВыбореРезультатаГлобальногоПоиска, ОбработкаОтображенияОшибки и другие — для тонкой настройки поведения клиента.
Модуль приложения исполняется на клиенте, поэтому прямые запросы к базе данных из него невозможны — для этого вызывают серверные процедуры общих модулей. Тяжёлую логику в обработчике запуска размещать не стоит: каждая лишняя секунда в ПриНачалеРаботыСистемы — это задержка входа всех пользователей.
Общие модули: основа прикладной логики
Общие модули — главный инструмент структурирования кода. В типовых конфигурациях их сотни: они группируются по подсистемам и содержат процедуры для работы с данными, печатью, обменами, правами доступа.
Настройки общего модуля определяют, где он компилируется и как вызывается:
- Сервер — код выполняется на сервере, имеет доступ к базе данных. Основной вариант для бизнес-логики.
- Клиент (управляемое приложение) — код на стороне клиента, работа с интерфейсом.
- Клиент (обычное приложение) — для решений на обычных формах.
- Вызов сервера — разрешает обращаться к серверному модулю с клиента. Без этого флага серверный модуль с клиента недоступен.
- Привилегированный режим — код выполняется без проверки прав. Используется для системных операций, требует осторожности.
Принятое в типовых решениях соглашение об именовании: суффиксы «Клиент», «Сервер», «КлиентСервер», «Переопределяемый», «Глобальный». Например, ОбщегоНазначенияСервер — серверные функции, ОбщегоНазначенияКлиент — клиентские. Следование этому соглашению упрощает чтение чужого кода.
- 1В конфигураторе откройте ветку «Общие» → «Общие модули» и добавьте новый модуль
- 2Задайте имя по соглашению, например РасчетыСервер
- 3В свойствах установите флаги: «Сервер» и при необходимости «Вызов сервера»
- 4Добавьте экспортные процедуры и функции с ключевым словом Экспорт
- 5Обновите конфигурацию базы данных (F7) и проверьте вызов из нужного места кода
Клиент и сервер: где исполняется код модуля
Главная особенность управляемого приложения — разделение исполнения. Клиентская часть работает на компьютере пользователя и отвечает за интерфейс, серверная — на сервере 1С и работает с базой данных. Код модуля компилируется только в тех контекстах, которые отмечены в его свойствах.
Из клиентского кода нельзя напрямую выполнить запрос к базе или изменить данные — нужен вызов серверной процедуры. В модуле формы для этого используют директивы компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Директива «БезКонтекста» предпочтительнее для серверных вызовов: на сервер не передаются данные формы, вызов быстрее.
Типичная ошибка новичка — написать запрос к данным в клиентской процедуре и получить синтаксическую ошибку при проверке модуля. Платформа сообщит, что объект недоступен в данном контексте. Решение — перенести обращение к данным в серверный общий модуль или серверную процедуру формы.
&НаСервереБезКонтекста
Функция ПолучитьЦенуТовара(Товар)
Запрос = Новый Запрос("ВЫБРАТЬ Цена ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Товар)");
Запрос.УстановитьПараметр("Товар", Товар);
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.Цена, 0);
КонецФункцииКак найти нужный модуль и безопасно доработать код
Когда нужно понять, где находится логика конкретного поведения, начинайте с формы: откройте её модуль и найдите обработчик нужной кнопки или события. Оттуда по вызовам (Ctrl+клик или F12 по имени процедуры) можно перейти в общие модули и модули объектов. Глобальный поиск по конфигурации (Ctrl+Shift+F) находит процедуру по фрагменту имени или текста сообщения об ошибке.
При доработке типовой конфигурации не редактируйте типовые общие модули напрямую — изменения затрутся при обновлении. Правильные варианты: использовать модули с суффиксом «Переопределяемый», предусмотренные поставщиком, подписки на события, расширения конфигурации или собственные общие модули с вызовами из разрешённых точек.
Перед изменением любого модуля в рабочей базе сделайте резервную копию или выгрузку конфигурации. Проверяйте изменения на копии базы: синтаксический контроль (конфигуратор → «Проверка конфигурации») выявляет ошибки компиляции, но не проверяет бизнес-логику.
Проверка результата после изменений
После доработки модуля убедитесь, что конфигурация обновлена (F7 в конфигураторе), код компилируется без ошибок и поведение системы соответствует ожиданиям. Проверку делайте в том же режиме, в котором работают пользователи: если они используют тонкий клиент, тестирования в толстом клиенте недостаточно — контексты компиляции различаются.
Как проверить результат
Проверка конфигурации проходит без ошибок в нужных контекстах
Сообщения «Процедура или функция не обнаружена», «Переменная не определена»
Серверная процедура отрабатывает, данные возвращаются
Ошибка «Метод объекта не обнаружен» — проверьте флаг «Вызов сервера»
Приложение стартует без задержек и лишних окон
Долгое открытие — в модуле приложения тяжёлый код
FAQ: частые вопросы о модулях в 1С
Чем модуль приложения отличается от модуля сеанса?
Модуль сеанса выполняется на сервере один раз при установке сеанса и предназначен для установки параметров сеанса (например, текущего пользователя). Модуль приложения работает на клиенте и обрабатывает события запуска и завершения приложения. Они срабатывают в разное время и в разных контекстах.
Почему моя процедура из общего модуля «не обнаружена»?
Проверьте три вещи: стоит ли у процедуры ключевое слово «Экспорт», включён ли нужный контекст у модуля (например, «Клиент» для вызова из клиентского кода или «Вызов сервера» для серверного модуля) и обновлена ли конфигурация базы данных после изменений.
Можно ли вызвать процедуру модуля объекта извне?
Только если она объявлена с «Экспорт» и у вас есть сам объект (например, полученный через СоздатьОбъект() или из ссылки). На практике логику, нужную извне, выносят в модуль менеджера или общий модуль — так архитектура чище.
Что такое глобальный общий модуль?
Это общий модуль с флагом «Глобальный»: его экспортные процедуры и функции доступны из любого кода без указания имени модуля. Так устроены, например, некоторые клиентские процедуры оповещений. Злоупотреблять глобальными модулями не стоит — имена их процедур могут конфликтовать с другими.
Как доработать типовой модуль, чтобы изменения не пропали при обновлении?
Используйте расширение конфигурации — оно позволяет переопределять и дополнять процедуры типовых модулей. Альтернатива — программные интерфейсы в модулях «Переопределяемый» и подписки на события, которые поставщик сохраняет при обновлении.
Где посмотреть, какие модули есть в конфигурации?
В конфигураторе: общие модули — в ветке «Общие» → «Общие модули», модули объектов и менеджеров — внутри соответствующих объектов метаданных, модуль приложения и сеанса — через контекстное меню корня конфигурации. Также полный список виден в окне «Конфигурация» при поиске по типу.
Что важно запомнить
Модуль — контейнер кода с чётким контекстом исполнения. Модуль приложения обрабатывает запуск и завершение сеанса на клиенте, бизнес-логику размещайте в серверных общих модулях, типовые модули дорабатывайте через расширения, а после изменений проверяйте компиляцию и поведение в рабочем режиме клиента.