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