Вот возникла у меня задача «Запретить пользователям интерактивно удалять последнюю запись в непериодическом независимом РС». И я столкнулся с проблемой – а как же все-таки отловить именно удаление записи, а не ее изменение? Ведь при изменении РС сначала происходит удаление записи, потом ее добавление. Перерыл Мисту – ничего однозначно определяющего удаление записи не нашел… Поэтому расскажу свое решение, авось кому пригодится, а может, и покритикует кто
Проверку удаления я делаю в модуле набора записей РС, для этого:
1. Завел константу ИзменнениеРС (булево), в которую в событии ОбработкаПроверкиЗаполнения устанавливаю значение Истина. Это событие срабатывает только при интерактивном изменении РС в форме записи, соответственно при удалении записи в списке РС событие не вызывается…
2. В процедуре ПриЗаписи проверяю
Если ЭтотОбъект.Количество() = 0 И Не Константы.ИзменениеРС.Получить() Тогда
//Это именно удаление записи
ЭтотОбъект.Количество() = 0 – означает, что запись удаляется, но такое же значение мы имеем и при «первом прогоне» изменения записи…
3. Дальше в ПриЗаписи проверяю наличие записи в базе с теми же измерениями и меняю константу ИзменениеРС:
Если Не Отказ Тогда
Если Константы. ИзменениеРС.Получить() И Не РезультатПроверкиИзмЗаписи.Пустой() Тогда
//Это запись набора записей регистра, значит снимам флаг ИзменениеРС
Константы. ИзменениеРС.Установить(Ложь);
КонецЕсли;
КонецЕсли;
Вот как-то так… Работает у меня на платформе 8.2.17.143
(1) У меня это регистр, в котором хранится расписания формирования заказов, и для каждого поставщика должна существовать хотя бы одна запись расписания...
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший