При работе в конфигурации 1С:Управление торговлей 10.3 часто возникает необходимость ограничить возможность удаления или пометки на удаление документов. Пользователи часто сталкиваются с тем, что обработчик события ПередУдалением в форме списка не срабатывает при попытке пометить документ на удаление через контекстное меню. Давайте разберемся, почему это происходит и как правильно реализовать такую проверку.
Важно различать два процесса: непосредственное удаление объекта из базы данных (физическое удаление) и установку пометки на удаление. Событие ПередУдалением в форме списка срабатывает только тогда, когда объект удаляется безвозвратно. Когда же пользователь нажимает правой кнопкой мыши и выбирает «Пометить на удаление», происходит обычная запись документа, в ходе которой изменяется реквизит ПометкаУдаления. Следовательно, стандартные события формы списка здесь не помогут.
Для управления процессом пометки на удаление необходимо использовать событие ПередЗаписью в модуле объекта. Именно здесь мы можем перехватить попытку записи документа и проверить, меняется ли статус ПометкаУдаления.
Разберем алгоритм действий:
ЗаказПокупателя.ПередЗаписью.Отказ = Истина, если пользователь не имеет соответствующих прав или если статус документа не допускает удаления.Рассмотрим пример кода для реализации этой проверки:
Если ЭтотОбъект.ПометкаУдаления Тогда
// Проверим: это новая пометка или документ уже был помечен
СтараяПометка = ЭтотОбъект.Ссылка.ПометкаУдаления;
// Если пометка устанавливается сейчас, проверяем права и условия
Если Не СтараяПометка Тогда
Если Не РольДоступна("УдалениеСформированныхЗаказов") Тогда
// Дополнительная логика проверки статусов
Если ЭтотОбъект.Статус = Перечисления.СтатусыЗаказов.ГотовКОтбору Тогда
Отказ = Истина;
Сообщить("Удаление документа в данном статусе запрещено!");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Чтобы не менять типовой код конфигурации, что крайне важно для удобства дальнейшего обновления, мы рекомендуем использовать Подписки на события. Это «профессиональный» способ реализации задачи.
Порядок действий:
Подписка на событие.ПередЗаписью.ДокументОбъект.ЗаказПокупателя.Использование подписки позволяет централизованно управлять проверками для всех типов заказов и делает систему гибкой. Вы можете легко добавить права для новых сотрудников, просто назначив им нужную роль, вместо внесения правок в программный код.
Никогда не прописывайте имена конкретных пользователей (например, «Илья» или «Саша») непосредственно в коде 1С. Это плохая практика, так как при увольнении или смене сотрудников вам придется постоянно корректировать исходный код. Вместо этого:
УдалениеЗаказов.РолиДоступны("УдалениеЗаказов") для проверки прав.Такой подход обеспечивает безопасность и профессиональный уровень разработки. Если вы столкнулись с ошибкой «Метод не обнаружен» при обращении к общим модулям, помните, что в разных версиях конфигураций структура объектов может отличаться. Всегда можно обратиться к данным напрямую через ЭтотОбъект.Ссылка.ПометкаУдаления — это самый надежный способ получения данных из базы для проверки.