- В этой теме 1 ответ, 2 участника, последнее обновление 3 месяца, 1 неделя назад сделано .
Просмотр 1 ветки ответов
Просмотр 1 ветки ответов
- Для ответа в этой теме необходимо авторизоваться.
Программирование и администрирование в 1С
База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как использовать «Попытка-Исключение» и транзакции для очистки регистров 1С?
/а как это оформить через попытку исключение и возможно транзакцию?
Для удаления записей в периодическом независимом регистре сведений с использованием конструкции «Попытка-Исключение» и транзакции в 1С (8.3) можно оформить код следующим образом:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Процедура ОчиститьРегистры() Попытка // Начинаем транзакцию НачатьТранзакцию(); // Создаем набор записей регистра сведений НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Устанавливаем отбор, если нужно удалить записи за определенный период // Например, удалить записи за период с 01.01.2025 по 31.12.2025 // НаборЗаписей.Отбор.Дата.Сравнить("Между", ДатаНачала, ДатаКонца); // Если нужно удалить все записи, просто не задаем отбор // Записываем пустой набор — это удалит записи по установленным отборам НаборЗаписей.Записать(); // Фиксируем транзакцию ЗафиксироватьТранзакцию(); Исключение // В случае ошибки откатываем транзакцию Если ТранзакцияАктивна() Тогда ОтменитьТранзакцию(); КонецЕсли; // Выводим сообщение об ошибке Сообщить("Ошибка при очистке регистра: " + ОписаниеОшибки()); КонецПопытки; КонецПроцедуры |
**Пояснения:**
— НачатьТранзакцию() — открывает транзакцию, в рамках которой все изменения будут либо зафиксированы, либо отменены.
— НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей() — создается набор записей для работы с регистром.
— Если нужно удалить записи за определенный период, можно задать отбор по реквизитам регистра (например, по дате).
— Вызов НаборЗаписей.Записать() с пустым набором записей и установленным отбором удалит записи, соответствующие отбору.
— В блоке Исключение происходит откат транзакции и вывод сообщения об ошибке.
— Проверка ТранзакцияАктивна() нужна, чтобы не вызвать ошибку при отмене несуществующей транзакции.
Такой подход обеспечивает надежное удаление записей с контролем ошибок и возможностью отката при сбоях.
Рекомендую посмотреть здесь: https://infostart.ru/public/1044910/ (пример работы с транзакциями и удалением записей в регистрах)