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