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

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

Как добавить действие в 1С: команды, обработчики и события

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

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

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

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

Определите, какое именно действие нужно добавить

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

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

Маршрут решения

Как выбрать способ

Пользователь нажимает кнопку на формеСоздайте команду формы и обработчик в модуле формы
Действие срабатывает при записи или проведении объектаИспользуйте обработчик события объекта или подписку на событие
Действие выполняется по расписаниюСоздайте регламентное задание
Конфигурация типовая на поддержкеДелайте доработку через расширение конфигурации

Добавьте кнопку с действием на форму

Откройте конфигуратор, найдите нужный объект (документ, справочник, обработку) и откройте его основную форму. В дереве команд формы (вкладка «Команды») добавьте новую команду, задайте ей имя, например ЗаполнитьПоДанным, и заголовок, который увидит пользователь.

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

&НаКлиенте

Процедура ЗаполнитьПоДанным(Команда)

ЗаполнитьПоДаннымНаСервере();

Элементы.СписокТоваров.Обновить();

КонецПроцедуры

&НаСервере

Процедура ЗаполнитьПоДаннымНаСервере()

// Логика заполнения

КонецПроцедуры

После создания команды перетащите её из дерева команд в дерево элементов формы — на командную панель или в нужную группу. Без этого шага команда существует, но кнопка на форме не появится, и это самая частая причина «пропавшего» действия.

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

Назначьте обработчик событию объекта

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

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если Не ЗначениеЗаполнено(Комментарий) Тогда

Комментарий = "Создан автоматически";

КонецЕсли;

КонецПроцедуры

Параметр Отказ позволяет прервать действие: если установить Отказ = Истина, запись или проведение не выполнится. Используйте это для проверок, но аккуратно — отказ без понятного сообщения пользователю выглядит как «ничего не происходит». Добавляйте Сообщить() или вызов исключения с пояснением причины.

Добавьте действие через подписку на событие

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

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

// В общем модуле ОбработчикиПодписок

Процедура ПроверитьЗаполнениеПриЗаписи(Источник, Отказ) Экспорт

Если Отказ Тогда

Возврат;

КонецЕсли;

// Логика проверки

КонецПроцедуры

Подписки удобны для сквозной логики — проверок, заполнения полей, синхронизации. Минус: действие «спрятано» от разработчика, который смотрит только модуль объекта. Документируйте созданные подписки, чтобы их не искали месяцами при отладке.

Добавьте действие через расширение конфигурации

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

В расширении можно добавлять новые команды формы, свои процедуры и обработчики с аннотациями &Перед, &После и &Вместо. Аннотация &После("ИмяПроцедуры") выполняет ваш код после типового обработчика, &Вместо — полностью заменяет его, что рискованнее при обновлениях.

&После("ПриСозданииНаСервере")

Процедура Префикс_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Дополнительная инициализация формы

КонецПроцедуры

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

Изменение конфигурации или расширение

Прямое изменение конфигурации

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

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

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

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

Подходит для разовых действий и сервисных операций без изменения конфигурации. Запускается через Файл → Открыть или подключается в «Дополнительные отчеты и обработки».

Настройте действие по расписанию

Если действие должно выполняться автоматически — например, ежедневная выгрузка или пересчёт — создайте регламентное задание. В дереве конфигурации: «Общие» → «Регламентные задания» → добавить. Укажите имя, метод (процедуру в общем серверном модуле) и расписание.

Метод задания должен быть экспортной процедурой без параметров в общем модуле с признаками «Сервер» и «Вызов сервера». В файловой базе регламентные задания выполняются только при запущенном сеансе с включённым выполнением заданий; в клиент-серверном варианте их выполняет сервер 1С.

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

Типичные ошибки
01
Команда создана, но не перенесена в элементы формы — кнопка не появляется на форме
02
Обработчик подписки размещён в модуле без признака «Сервер» — событие не срабатывает
03
Использована аннотация &Вместо в расширении — после обновления типовой конфигурации логика конфликтует или отключается
04
Отказ = Истина без сообщения пользователю — запись «молча» не сохраняется
05
Изменена типовая конфигурация на поддержке — обновление блокируется или затирает доработку

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

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

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

Контрольные точки

Как проверить результат

Кнопка на форме
Норма

Кнопка видна, при нажатии действие выполняется без ошибок

Тревожный признак

Кнопки нет или появляется ошибка «Процедура не обнаружена»

Подписка на событие
Норма

Действие срабатывает при записи всех целевых объектов

Тревожный признак

Срабатывает выборочно или тормозит групповое проведение

Расширение
Норма

В списке расширений стоит признак подключения, ошибок применимости нет

Тревожный признак

Расширение отключено после обновления конфигурации

Регламентное задание
Норма

В журнале регистрации есть записи об успешном выполнении

Тревожный признак

Задание заблокировано или завершается с ошибкой

Частые вопросы

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

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

Почему команда есть, а кнопки на форме нет?

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

Чем подписка на событие отличается от обработчика в модуле объекта?

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

Что делать, если расширение отключилось после обновления?

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

Как добавить действие в мобильном клиенте или тонком клиенте?

Команды формы и обработчики работают одинаково во всех клиентах, если форма управляемая. Ограничения касаются специфики: модального вызова, работы с файлами и некоторых методов, недоступных в веб-клиенте. Тестируйте действие именно в том клиенте, которым пользуются сотрудники.

Опасно ли снимать конфигурацию с поддержки ради одного действия?

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

Итог

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

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