powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Транзакия, исключение, запись документа.
16 сообщений из 16, страница 1 из 1
Транзакия, исключение, запись документа.
    #37553769
Фотография МистерШоу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое почтение сведующим!

Любезные, пробую реализовать следующую логику:

в цикле создаются и сохраняются документы. В зависимости от заданных пользователем параметров
для документов может вызываться проведение, при этом возможно два варианта поведения - при
возникновении исключения откатить транзакцию, т.е. создание документа вообще,
или просто оставить документ записанным, но непроведенным.

Структура логики такова:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Цикл
  НачатьТранзакцию
  Попытка
    ...
    Док.ЗаписатьДокумент(РежимЗаписиДокумента.Запись);
    Если
      РежимПроводитьДокументы
    Тогда
      Попытка
        Док.ЗаписатьДокумент(РежимЗаписиДокумента.Проведение);
      Исключение
         Если
            РежимОткатПриОшибкеПроведения
         Тогда
            ВызватьИсключение;
         КонецЕсли;
      КонецПопытки
    ...
    ЗафиксироватьТранзакцию
  Исключение
     ОтменитьТранзакцию
  КонецПопытки
КонецЦикла

однако при вызове процедуры с условием продолжения обработки в случае ошибки проведения документа
при возникновении ошибки проведения цикл обработки продолжается, но транзакции отменены, документы
на записаны.
Вот пытаюсь понять, какова логика платформы.

Пресветлый старец Фалоим Московскый.
тимтэг:некоммерческое товарищество "Напиджак",
издательство "Московский Пустомолец"
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37554129
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делайте 2 раза НачатьТранзакцию. А то вы отменяете основную транзакцию а не вложенную.

И одну строчку поправлю
Док.ЗаписатьДокумент(?( РежимПроводитьДокументы,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись));
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37554217
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сДелайте 2 раза НачатьТранзакцию. А то вы отменяете основную транзакцию а не вложенную.

И одну строчку поправлю
Док.ЗаписатьДокумент(?( РежимПроводитьДокументы,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись));
С каких это пор 1С поддерживает вложенные транзакции? Это вообще не будет работать. Откатиться внутренняя, автоматом откатиться и внешняя. Надо алгоритм переосмыслить.
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37554232
sWinTyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+1
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37554359
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitriyZПрограммист 1сДелайте 2 раза НачатьТранзакцию. А то вы отменяете основную транзакцию а не вложенную.

И одну строчку поправлю
Док.ЗаписатьДокумент(?( РежимПроводитьДокументы,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись));
С каких это пор 1С поддерживает вложенные транзакции? Это вообще не будет работать. Откатиться внутренняя, автоматом откатиться и внешняя. Надо алгоритм переосмыслить.Забавно. Проверил - действительно ругается.

А я то полагал что раз 1с поддерживает несколько раз начатьтранзакцию() - отмена тоже нормально выполняется...


Тогда получается надо сначала в транзакции получить весь список не записываемых или не проведнных документов, а потом уже создавать вторую транзакцию и в ней записывать то что можно.
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37554367
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с, на ИТС есть статья на эту тему. И я еще во времена 7.7 напарывался примерно с такой же задачей :)
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37554882
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitriyZПрограммист 1с, на ИТС есть статья на эту тему. И я еще во времена 7.7 напарывался примерно с такой же задачей :)Ну вот ткнули мордой - что еще в 77 не знаю . Спасибо - мелочь но очень забавная. И что им мешает сделать нормальные транзакции???
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37555099
Фотография МистерШоу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сДелайте 2 раза НачатьТранзакцию. А то вы отменяете основную транзакцию а не вложенную.

как так - внешнюю? Вообще, по коду я рассчитываю на то, что исключение будет поглощено, а транзакция - прокатит,
а не откатится :)
Тут, экспериментально подтверждаю, DmitriyZ прав. Хотя для меня не очевидно, что исключение = транзакция.
Явной вложенности я не вижу, всё-таки в моем представлении пришельца с далёких платформ транзакция не равна
попытке. И в буквальном прочтении кода ничто не мешает прокатить транзакцию в случае поглощенного исключения.
Но факт - не прокатит. Неудобно, увы.
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37555103
Фотография МистерШоу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое неприятное, что всё происходит тихой сапой. В блок обработки исключения код не проходит, он спокойно доходит до
Зафиксировать, но в фиксации на самом деле откатывается. И ни ошибок, ничего, только молчаливый приговор в логе - отменена.
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37555134
shurikvz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МистерШоуЯвной вложенности я не вижу, всё-таки в моем представлении пришельца с далёких платформ транзакция не равна
попытке. И в буквальном прочтении кода ничто не мешает прокатить транзакцию в случае поглощенного исключения.

В 1С при использовании конструкции Попытка-Исключение также вызывается неявная транзакция.
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37555185
Фотография МистерШоу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurikvzМистерШоуЯвной вложенности я не вижу, всё-таки в моем представлении пришельца с далёких платформ транзакция не равна
попытке. И в буквальном прочтении кода ничто не мешает прокатить транзакцию в случае поглощенного исключения.

В 1С при использовании конструкции Попытка-Исключение также вызывается неявная транзакция.

Пока могу констатировать по трассировке MS SQL - при вызове НачатьТранзакцию по-честному имею BEGIN TRAN,
записываю док, потом пытаюсь провести, "проглатываю" исключение, но когда дохожу до Зафиксировать - получаю
в трассе явный ROLLBACK. Зэц ол фолкс. Грустно. И исключения не возникает, и зафиксировать вызывает, и транзакция отменена.
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37555432
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МистерШоу, На ИТС есть статья на эту тему. Проще почитать, чем в трассировщик сразу лезть :)
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37555449
Фотография МистерШоу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitriyZМистерШоу, На ИТС есть статья на эту тему. Проще почитать, чем в трассировщик сразу лезть :)

У меня диск ИТС вот только-только появился. Я вижу её неоднократное упоминание в сети, но найти там же не смог,
хотя я не слишком упорствовал. Сейчас буду искать на диске. Библиотека статей, кстати, на дисках ИТС накопительным
образом сохраняется? Т.е. она должна быть на каждом диске ИТС от момента её публикации?
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37555477
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МистерШоу, что касается тех. документации, то, вроде, да. Может мигрировать из раздела в раздел, но остается.
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37556543
Фотография МистерШоу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В итоге, какую-то спецальную статью не нашел, кроме руководства разработчика.
Смысл таков, что если причина исключения не связана с базой данных, продолжение транзакции
и исполнения кода далее возможно. Но если исключитение было вызвано ошибкой базы данных,
тогда фиксируется признак возникновения ошибки в этой транзакции и продолжение транзакции
или ее фиксация становятся невозможны. Всё, что может сделать в этом случае разработчик -
отменить транзакцию. Ах, да - он может осуществить попытку выполнения транзакции еще раз.
В приведенном примере приведено именно такое элегантное обходное решение - впилить в цикл и
записывать, записывать до кровавых пузырей из хрипящего горла! :)
Но не поспоришь - воркэраунд. Таки придётся делать - при установленном режиме
проведения без отката записи при отказе проведения крутить тран заново с попыткой
только записи без проведения. Хотя в моём случае, мне, верхогляду, кажется, что
именно прогрмаммный отказ проведения по итогу логической проверки не есть отказ БД...,
и можно было бы катить и дальше, ну там, к сэйв точке откатиться. хотя всё это уже сложнее,
а система должна и на собственной файловой реализации работать...

Итого, повторяя самого себя: я многое готов принять и простить, всё-таки система сложная и
вполне вероятно, что такое транзакционное поведение выстрадано и оптимально, но вот такое поведение,
когда по логике кода происходит вход в штатную процедуру ЗафиксироватьТранзакцию,
и её выполнение завершается откатом без какого-либо исключения, уведомления и проч,
лишь скупой отпиской в системный журнал - такое поведение даже с натяжкой не могу
признать фичей. Моё ничтожное мнение - баг. И я даже наберусь наглости отправить
своё чириканье в саппорт 1С :)
...
Рейтинг: 0 / 0
Транзакия, исключение, запись документа.
    #37556782
shurikvz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МистерШоу,

статья, которая вам возможно поможет на диске ИТС называется "вложенность транзакций" (проще найти через поиск в разделе технологическая поддержка -> методическая поддержка 1С 8).

В вашем же конкретном случае, как уже заметили ранее, гораздо проще поменять алгоритм участка кода. Это дело 10 минут.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Транзакия, исключение, запись документа.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]