Обязательный комментарий при закрытии задачи в 1С: подписка ПередЗаписью без правок типовой конфигурации | infolimp.ru

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

12 мая 2026 · infolimp.ru

Автор: 1С Инсайдер · роль: практик 1С · проверка: типовые конфигурации и рабочие сценарии · 0 комментариев

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

Где живёт «выполнение задачи» в платформе

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

Что нам это даёт

Если в обработчике ПередЗаписью мы поймём, что комментарий пустой, а пользователь отмечает задачу выполненной — можно отказаться от записи через Отказ = Истина. Платформа не позволит закрыть задачу, пользователь увидит сообщение и заполнит поле. Без обхода типового механизма, без перехвата команд формы. Ниже разбираем именно реализацию через подписку на событие, а не через модуль объекта самой задачи: подписка живёт в расширении и переживает обновления типовой конфигурации.

Базовая логика обработчика

Каркас обработчика подписки на событие (имена реквизитов «Выполнена» и «ТекстКомментария» — абстрактные, в вашей конфигурации они могут называться иначе; проверьте в Конфигураторе):

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

    // Только при попытке закрыть задачу
    Если НЕ Источник.Выполнена Тогда
        Возврат;
    КонецЕсли;

    // Если задача только создаётся — пропускаем
    Если Источник.ЭтоНовый() Тогда
        Возврат;
    КонецЕсли;

    // Сравниваем с состоянием в базе: нужна проверка только в момент перехода
    СтароеЗначение = Источник.Ссылка.Выполнена;
    Если СтароеЗначение = Истина Тогда
        // Уже была выполнена — это просто перезапись, пропускаем
        Возврат;
    КонецЕсли;

    Если ПустаяСтрока(Источник.ТекстКомментария) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Чтобы закрыть задачу, опишите, что именно вы сделали — это видят другие участники процесса и аудитор.";
        Сообщение.Поле = "ТекстКомментария";
        Сообщение.УстановитьДанные(Источник);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;

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

Здесь две существенные детали:

Куда положить этот код, чтобы не сломать обновления

СпособГде живётКому подходитМинусы
1. Подписка на событие в расширении Расширение конфигурации (.cfe), общий модуль с обработчиком Когда нужно сразу для всех видов задач, без правки конфигурации Расширение нужно сопровождать при обновлениях типовой
2. Доработка формы задачи в расширении Расширение, переопределённая форма документа-задачи Когда нужно проверять не только при записи, но и подсвечивать пустое поле в форме Чувствительно к версии конфигурации — форма может меняться при обновлениях
3. Прямая правка снятой с поддержки конфигурации Конфигурация без поддержки Только если вы полностью отвечаете за обновления и готовы вручную мержить Каждое обновление от вендора — это долгие сравнения и объединения
Если конфигурация на поддержке вендора — начинайте со Способа 1. Подписка из расширения переживёт большинство минорных обновлений; при мажорных (смена режима совместимости, переименование реквизитов задачи) её придётся ревизовать, но это всё равно несравнимо дешевле, чем держать снятую с поддержки конфигурацию ради одного обработчика.

Чек-лист внедрения

  1. В Конфигураторе найдите объект-задачу (Задача.* или Документ.* — зависит от конфигурации) и точное имя реквизита для текста комментария исполнителя.
  2. Создайте расширение конфигурации, добавьте в него подписку на событие ПередЗаписью для нужного типа задачи.
  3. В обработчике подписки реализуйте проверку: задача переводится в «выполнена», комментарий пуст → Отказ = Истина и сообщение пользователю.
  4. Отдельно проверьте, что подписка не мешает фоновым процессам, которые могут писать задачу программно (массовые операции, обмены, регламентные задания). Если они есть — нужно явно их обходить: например, через привилегированный режим или через флаг в дополнительных параметрах.
  5. Протестируйте под обычным пользователем: создайте задачу, попробуйте закрыть с пустым комментарием, убедитесь, что отказ срабатывает и сообщение читаемо.
  6. Протестируйте обратный случай: задача редактируется без изменения статуса (исполнитель меняет срок) — запись должна проходить без сообщений.
  7. Опишите доработку в реестре расширений: что делает, какую задачу решает, кто заказчик. Через год это пригодится при первом мажорном обновлении конфигурации.

Типичные ошибки

Профессиональные решения для 1С и marketplace-интеграций — каталог отчётов и инструментов на витрине НОПи.

Перейти в каталог решений →