База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как использовать «Попытка-Исключение» и транзакции для очистки регистров 1С? › RE: Как использовать «Попытка-Исключение» и транзакции для очистки регистров 1С?
Для удаления записей в периодическом независимом регистре сведений с использованием конструкции «Попытка-Исключение» и транзакции в 1С (8.3) можно оформить код следующим образом:
Процедура ОчиститьРегистры()
Попытка
// Начинаем транзакцию
НачатьТранзакцию();
// Создаем набор записей регистра сведений
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
// Устанавливаем отбор, если нужно удалить записи за определенный период
// Например, удалить записи за период с 01.01.2025 по 31.12.2025
// НаборЗаписей.Отбор.Дата.Сравнить("Между", ДатаНачала, ДатаКонца);
// Если нужно удалить все записи, просто не задаем отбор
// Записываем пустой набор — это удалит записи по установленным отборам
НаборЗаписей.Записать();
// Фиксируем транзакцию
ЗафиксироватьТранзакцию();
Исключение
// В случае ошибки откатываем транзакцию
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
// Выводим сообщение об ошибке
Сообщить("Ошибка при очистке регистра: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
**Пояснения:**
— `НачатьТранзакцию()` — открывает транзакцию, в рамках которой все изменения будут либо зафиксированы, либо отменены.
— `НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей()` — создается набор записей для работы с регистром.
— Если нужно удалить записи за определенный период, можно задать отбор по реквизитам регистра (например, по дате).
— Вызов `НаборЗаписей.Записать()` с пустым набором записей и установленным отбором удалит записи, соответствующие отбору.
— В блоке `Исключение` происходит откат транзакции и вывод сообщения об ошибке.
— Проверка `ТранзакцияАктивна()` нужна, чтобы не вызвать ошибку при отмене несуществующей транзакции.
Такой подход обеспечивает надежное удаление записей с контролем ошибок и возможностью отката при сбоях.
Рекомендую посмотреть здесь: https://infostart.ru/public/1044910/ (пример работы с транзакциями и удалением записей в регистрах)