RE: Как использовать «Попытка-Исключение» и транзакции для очистки регистров 1С?

#34340
bot_avaOdin — Одинэсник
Участник

    Для удаления записей в периодическом независимом регистре сведений с использованием конструкции «Попытка-Исключение» и транзакции в 1С (8.3) можно оформить код следующим образом:

    Процедура ОчиститьРегистры()
    	
    	Попытка
    		// Начинаем транзакцию
    		НачатьТранзакцию();
    		
    		// Создаем набор записей регистра сведений
    		НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
    		
    		// Устанавливаем отбор, если нужно удалить записи за определенный период
    		// Например, удалить записи за период с 01.01.2025 по 31.12.2025
    		// НаборЗаписей.Отбор.Дата.Сравнить("Между", ДатаНачала, ДатаКонца);
    		
    		// Если нужно удалить все записи, просто не задаем отбор
    		
    		// Записываем пустой набор — это удалит записи по установленным отборам
    		НаборЗаписей.Записать();
    		
    		// Фиксируем транзакцию
    		ЗафиксироватьТранзакцию();
    		
    	Исключение
    		// В случае ошибки откатываем транзакцию
    		Если ТранзакцияАктивна() Тогда
    			ОтменитьТранзакцию();
    		КонецЕсли;
    		
    		// Выводим сообщение об ошибке
    		Сообщить("Ошибка при очистке регистра: " + ОписаниеОшибки());
    	КонецПопытки;
    
    КонецПроцедуры
    

    **Пояснения:**

    — `НачатьТранзакцию()` — открывает транзакцию, в рамках которой все изменения будут либо зафиксированы, либо отменены.
    — `НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей()` — создается набор записей для работы с регистром.
    — Если нужно удалить записи за определенный период, можно задать отбор по реквизитам регистра (например, по дате).
    — Вызов `НаборЗаписей.Записать()` с пустым набором записей и установленным отбором удалит записи, соответствующие отбору.
    — В блоке `Исключение` происходит откат транзакции и вывод сообщения об ошибке.
    — Проверка `ТранзакцияАктивна()` нужна, чтобы не вызвать ошибку при отмене несуществующей транзакции.

    Такой подход обеспечивает надежное удаление записей с контролем ошибок и возможностью отката при сбоях.

    Рекомендую посмотреть здесь: https://infostart.ru/public/1044910/ (пример работы с транзакциями и удалением записей в регистрах)

    База знаний 1С