В регистре сведений отловить событие при удалении записи
1.
user1916391
10.02.25 17:00
Сейчас в теме
Как в регистре сведений (независимый, непериодический) отловить событие при удалении записи?
По теме из базы знаний
Найденные решения
4.
spacecraft
10.02.25 19:46
Сейчас в теме
(1) обработчик ПередЗаписью регистра сведений
Только нужно учитывать, что МенеджерЗаписи при перезаписи всегда делает 2 записи. Сначала запись пустого набора (как раз попадает в условие удаление записи), затем записывает уже с данными.
Процедура ПередЗаписью(Отказ, Замещение)
Если Замещение И Выгрузить().Количество() = 0 Тогда
//Это удаление записей
КонецЕсли;
КонецПроцедурыТолько нужно учитывать, что МенеджерЗаписи при перезаписи всегда делает 2 записи. Сначала запись пустого набора (как раз попадает в условие удаление записи), затем записывает уже с данными.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
4.
spacecraft
10.02.25 19:46
Сейчас в теме
(1) обработчик ПередЗаписью регистра сведений
Только нужно учитывать, что МенеджерЗаписи при перезаписи всегда делает 2 записи. Сначала запись пустого набора (как раз попадает в условие удаление записи), затем записывает уже с данными.
Процедура ПередЗаписью(Отказ, Замещение)
Если Замещение И Выгрузить().Количество() = 0 Тогда
//Это удаление записей
КонецЕсли;
КонецПроцедурыТолько нужно учитывать, что МенеджерЗаписи при перезаписи всегда делает 2 записи. Сначала запись пустого набора (как раз попадает в условие удаление записи), затем записывает уже с данными.
Была задача: в качестве ресурса в регистре есть ссылка на Прикрепленный файл, необходимо при очистке регистра их удалять тоже.
Использовал альтернативный метод (если есть форма списка регистра). Использовал событие Списка "СписокПередУдалением" для формирования массива файлов к удалению и событие списка "СписокПослеУдаления" для удаления:
Использовал альтернативный метод (если есть форма списка регистра). Использовал событие Списка "СписокПередУдалением" для формирования массива файлов к удалению и событие списка "СписокПослеУдаления" для удаления:
&НаКлиенте
Перем МассивФайловКУдалению;
&НаСервере
Процедура СписокПослеУдаленияНаСервере(МассивФайловКУдалению)
Если МассивФайловКУдалению.Количество() > 0 Тогда
Для А = 0 По МассивФайловКУдалению.Количество() - 1 Цикл
СпрО = МассивФайловКУдалению[А].ПолучитьОбъект();
СпрО.Удалить();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПослеУдаления(Элемент)
СписокПослеУдаленияНаСервере(МассивФайловКУдалению);
КонецПроцедуры
&НаКлиенте
Процедура СписокПередУдалением(Элемент, Отказ)
МассивСтр = Элемент.ВыделенныеСтроки;
МассивФайловКУдалению = СписокПередУдалениемНаСервере(МассивСтр);
КонецПроцедуры
&НаСервере
Функция СписокПередУдалениемНаСервере(МассивСтр)
МассивФайлов = Новый Массив;
Для Каждого ЭлМассива из МассивСтр Цикл
Запись = РегистрыСведений.Сообщения.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(Запись, ЭлМассива);
Запись.Прочитать();
Если ЗначениеЗаполнено(Запись.ПрикрепленныйФайл) Тогда
МассивФайлов.Добавить(Запись.ПрикрепленныйФайл);
КонецЕсли;
КонецЦикла;
Возврат МассивФайлов;
КонецФункции Показать
(7)
а может и очистка регистра сведений перед записью данных
вот так вроде точнее событтия различает
ЭтоУдалениеЗаписей = Замещение И ЭтотОбъект.Количество() = 0;
а может и очистка регистра сведений перед записью данных
вот так вроде точнее событтия различает
Процедура ПередЗаписью(Отказ, Замещение)
Если ЭтотОбъект.Количество()=0 Тогда //это удаление или очистка перед записью данных
Если ЭтотОбъект.Модифицированность() Тогда
// только удаление
Иначе
// очистка перед записью
КонецЕсли;
КонецЕсли;
КонецПроцедуры Показать
Насколько помню, все решается тем, что событие ПриЗаписи вызывается и при обновлении записи и при удалении только один раз. В отличие от ПередЗаписью. Поэтому, как-то так:
Внимание! Вроде как 1С открыло для себя update вместо delete and insert, поэтому поведение под новыми версиями платформы надо проверить.
Процедура ПередЗаписью(Отказ, Замещение)
Если Замещение И ЭтотОбъект.Количество() = 0 Тогда
ЭтотОбъект.ДополнительныеСвойства.Вставить("Удалили", истина); // ну или что надо, вместо Истина
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Замещение) // Вызовется только один раз
Если ЭтотОбъект.Количество() = 0 И И Замещение
И ЭтотОбъект.ДополнительныеСвойства.Свойство("Удалили") Тогда
ну и что-то дальше делаем
ПоказатьВнимание! Вроде как 1С открыло для себя update вместо delete and insert, поэтому поведение под новыми версиями платформы надо проверить.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот