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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как использовать «Попытка-Исключение» и транзакции для очистки регистров 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34339
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        /а как это оформить через попытку исключение и возможно транзакцию?

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С