К статье
Практический материал

Разработка и Конфигурация · 11 мин

Модули 1С: что это такое кратко и какие виды существуют

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

Модуль в 1С — это фрагмент программного кода на встроенном языке платформы, привязанный к конкретному объекту конфигурации или событию. Проще говоря, вся логика программы 1С — проведение документов, расчёт сумм, проверки при записи — написана именно в модулях. Когда говорят «доработать конфигурацию», в большинстве случаев речь идёт о добавлении или изменении кода в модулях.

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

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

Что такое модуль в 1С простыми словами

Конфигурация 1С состоит из объектов: справочников, документов, отчётов, регистров. Но сами по себе объекты — это только структура данных. Чтобы документ при проведении списывал товар со склада, а отчёт считал итоги, нужна логика. Эта логика размещается в модулях — текстах программ на встроенном языке, который по синтаксису напоминает упрощённый Pascal и допускает написание кода на русском языке.

Код внутри модуля организован в процедуры и функции. Процедура выполняет действия, функция дополнительно возвращает результат. Часть процедур — обработчики событий: они запускаются автоматически, когда происходит определённое действие, например запись документа или открытие формы. Другие процедуры и функции вызываются из кода вручную.

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

Какие виды модулей существуют

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

Вид модуляГде находитсяЗа что отвечает
Общий модульВетка «Общие модули» в дереве конфигурацииПроцедуры и функции, доступные из любого места конфигурации
Модуль объектаВнутри справочника, документа, отчёта и др.Логика записи, проведения, заполнения конкретного объекта
Модуль формыВнутри формы объектаПоведение интерфейса: реакция на кнопки, изменение полей
Модуль менеджераВнутри объекта метаданныхОперации над объектом в целом, а не с одним экземпляром
Модуль приложенияКорень конфигурацииСобытия запуска и завершения программы
Модуль сеансаКорень конфигурацииДействия при установке сеанса, например установка параметров
Модуль внешнего соединенияКорень конфигурацииСобытия при подключении через COM или веб-сервисы

Чаще всего на практике встречаются общие модули, модули объектов и модули форм — именно в них сосредоточена основная бизнес-логика типовых конфигураций.

Общие модули: где хранится переиспользуемый код

Общие модули — это библиотеки процедур и функций, которые можно вызывать из любой точки конфигурации. Если одна и та же операция нужна в нескольких документах, её выносят в общий модуль, чтобы не дублировать код. Например, функция расчёта суммы с НДС или проверки заполнения реквизитов.

У общего модуля есть важные свойства, которые задаются в палитре свойств: «Сервер», «Клиент», «Вызов сервера», «Привилегированный режим». От них зависит, где будет исполняться код и будет ли у него доступ к данным без учёта прав пользователя. Неверно выставленные свойства — частая причина ошибок вида «процедура или функция не определена».

Обращение к функции общего модуля выглядит как ИмяМодуля.ИмяФункции(). Например, если модуль называется «РаботаСДокументами», а функция — «ПолучитьСумму», вызов будет таким: РаботаСДокументами.ПолучитьСумму(Документ).

Модуль объекта и модуль формы: в чём разница

Эти два вида модулей путают чаще всего. Модуль объекта работает с данными: здесь находятся обработчики событий «ПриЗаписи», «ОбработкаПроведения», «ОбработкаЗаполнения». Код модуля объекта выполняется на сервере и не имеет доступа к элементам интерфейса — из него нельзя, например, изменить цвет поля на форме.

Модуль формы, напротив, отвечает за поведение экранной формы: обработчики нажатий кнопок, изменение видимости полей, заполнение списков выбора. Форма может исполняться и на клиенте, и на сервере — для этого в модуле формы используются директивы компиляции.

Директивы &НаКлиенте, &НаСервере и &НаСервереБезКонтекста указывают, где будет выполняться конкретная процедура. Клиентская процедура не может напрямую выполнить запрос к базе — для этого она вызывает серверную процедуру. Такое разделение обязательно для тонкого и веб-клиента.

Типичные ошибки
01
Размещение запроса к базе данных в клиентской процедуре формы — код не скомпилируется или выдаст ошибку при выполнении
02
Дублирование одной и той же логики в модулях нескольких объектов вместо выноса её в общий модуль — любое изменение придётся править в нескольких местах
03
Попытка обратиться к элементам формы из модуля объекта — у объекта нет доступа к интерфейсу, такой код не сработает
04
Выполнение служебных операций в модуле формы без проверки прав пользователя — безопаснее делать это в серверном привилегированном модуле

Модули приложения, сеанса и менеджера

Модуль приложения содержит обработчики событий запуска и завершения программы: «ПриНачалеРаботыСистемы», «ПриЗавершенииРаботыСистемы». В нём, например, проверяют версию конфигурации или открывают стартовую форму. Модуль сеанса срабатывает раньше — в момент создания сеанса — и обычно используется для установки параметров сеанса, от которых зависят права и отборы данных.

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

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

Где посмотреть и как изменить модуль

Работа с модулями ведётся только в конфигураторе. Порядок действий прост: открыть конфигуратор, загрузить конфигурацию, найти нужный объект в дереве метаданных и через контекстное меню открыть соответствующий модуль. Для общих модулей нужная ветка называется «Общие» → «Общие модули».

Порядок действий
  1. 1
    Откройте конфигуратор и войдите в информационную базу пользователем с правами на изменение конфигурации
  2. 2
    В меню выберите «Конфигурация» → «Открыть конфигурацию»
  3. 3
    Найдите нужный объект в дереве метаданных: справочник, документ или ветку «Общие модули»
  4. 4
    Щёлкните правой кнопкой мыши и выберите «Открыть модуль объекта», «Открыть модуль формы» или откройте общий модуль двойным щелчком
  5. 5
    Внесите изменения и нажмите F7 для проверки синтаксиса модуля
  6. 6
    Обновите конфигурацию базы данных (F7 в главном окне или через меню «Конфигурация») и проверьте работу в режиме Предприятия

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

Чем модуль отличается от расширения и внешней обработки

Модуль — это часть самой конфигурации. Но изменить логику программы можно и без правки типовых модулей. Расширение конфигурации добавляет собственные модули и обработчики поверх типовых, не затрагивая их. Внешняя обработка или отчёт — отдельный файл с собственными модулями, который подключается к базе и не меняет конфигурацию вообще.

Сравнение вариантов

Правка типового модуля

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

Расширение конфигурации

Оптимально для большинства доработок типовых решений: типовой код не меняется, обновления сохраняются. Ограничение: не все объекты и события можно переопределить

Внешняя обработка

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

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

Итог

Что важно запомнить

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

Часто задаваемые вопросы

Можно ли посмотреть код модуля без конфигуратора?

Нет, в пользовательском режиме «Предприятие» код модулей недоступен. Для просмотра нужен конфигуратор и права на просмотр конфигурации. Исключение — внешние обработки и отчёты: их модули тоже открываются только через конфигуратор, но сам файл можно открыть без доступа к основной конфигурации.

Почему возникает ошибка «Процедура или функция с указанным именем не определена»?

Чаще всего вызываемая процедура находится в общем модуле, у которого не установлено нужное свойство исполнения (клиент или сервер), либо процедура не объявлена с ключевым словом «Экспорт». Без «Экспорта» процедура общего модуля видна только внутри самого модуля.

На каком языке пишутся модули 1С?

На встроенном языке платформы 1С:Предприятие. Операторы можно писать как на русском, так и на английском языке — платформа понимает оба варианта и даже их смешение в одном модуле. В типовых конфигурациях используется русский синтаксис.

Что такое привилегированный режим общего модуля?

Это режим, при котором код выполняется без проверки прав доступа пользователя к объектам базы данных. Он нужен для операций, которые программа должна выполнить независимо от прав конкретного пользователя, например для записи служебных данных. Использовать его следует осознанно: через такой модуль нельзя давать пользователю обход ограничений без необходимости.

Потеряются ли изменения в модулях при обновлении конфигурации?

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

Нужно ли знать программирование, чтобы понимать модули?

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