Вновь транзакции
Добрый день всем !
8.2 ОФ
Есть примерно такой код:
В итоге ловлю ошибку в случайном месте: " В данной транзакии уже происходили ошибки". Что не так ?
рекоммендации с ИТС не увенчались успехом.
Забавно, что если отладчиком проходить по коду, то ошибки никакой не возникает!!!
UPD(обьяснение):
Пользователь в обработке выбирает список документов "Заказ покупателя".
У каждого заказа:
1) выбирает тип цен
2) выбирает договор
3) Меняет цены в самом заказе
4) Устанавливает время доставки.
После этого жмёт "Утвердить".
Собственно после этого идёт мой код с записью
Если эти пункты отличаются от заказа, то документ записывается по моим условиям!
8.2 ОФ
Есть примерно такой код:
НачатьТранзакцию();
Если Количеств > 0 Тогда
Для Каждого Стр Из Массив Цикл
Документ= Заказ.ПолучитьОбъект();
.....
Попытка
Документ.Записать();
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка...");
возврат;
КонецПопытки
..........
Попытка
Документ.Записать();
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка...");
возврат;
КонецПопытки
..........
Попытка
Документ.Записать();
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка...");
возврат;
КонецПопытки
конеццикла
конецесли
Если ТранзакцияАктивна() Тогда
ЗафиксироватьТранзакцию();
Конецесли
ПоказатьВ итоге ловлю ошибку в случайном месте: " В данной транзакии уже происходили ошибки". Что не так ?
рекоммендации с ИТС не увенчались успехом.
Забавно, что если отладчиком проходить по коду, то ошибки никакой не возникает!!!
UPD(обьяснение):
Пользователь в обработке выбирает список документов "Заказ покупателя".
У каждого заказа:
1) выбирает тип цен
2) выбирает договор
3) Меняет цены в самом заказе
4) Устанавливает время доставки.
После этого жмёт "Утвердить".
Собственно после этого идёт мой код с записью
Если эти пункты отличаются от заказа, то документ записывается по моим условиям!
По теме из базы знаний
Найденные решения
(20)А договоры новые создаются? И записать лучше документ только в конце один раз, когда пройдешь все условия. Добавь переменную ПерезаписатьДокумент (Булево) и её меняй при необходимости. Если ПерезаписатьДокумент = Истина, тогда и запиши только уже в конце. Проблема ещё может быть в том, что при записи документа, запускаются ещё типовые механизмы, которые пытаются поменять записи в регистрах. Проверяй в отладчике на Отказ. В общем надо пройтись отладчиком. Что-то в системе не нравится в твоем документе (Может есть незаполненые поля, а может ещё что-то)
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) Предлагаю сделать следующее: заводим переменную АктивныхТранзакций = 0 когда делаем НачатьТранзакцию() увеличиваем переменную на 1 и сообщаем; когда ОтменитьТранзакцию() уменьшаем на 1 и сообщаем;
Получим лог - начала и отмен транзакций, и узнаем значение переменной на момент возникновения ошибки ...
Если на момент ошибки АктивныхТранзакций = 0 значит проблема не в нашем коде а где-то "выше";
А вот если на момент ошибки АктивныхТранзакций <> 0 значит точно у нас в коде
Получим лог - начала и отмен транзакций, и узнаем значение переменной на момент возникновения ошибки ...
Если на момент ошибки АктивныхТранзакций = 0 значит проблема не в нашем коде а где-то "выше";
А вот если на момент ошибки АктивныхТранзакций <> 0 значит точно у нас в коде
В отмененной транзакции повторная попытка. Например, при первом заходе в цикле вы попытались записать документ, но произошло исключение и вы отменили транзакцию, а затем при последующем заходе в цикл вы пытаетесь заново записать документ в уже отмененной транзакции. Если вы хотите продолжить цикл, вам надо начать новую транзакцию.
(7)Зависит от задачи. Если вы принципиально хотите продолжить записывать следующие документы, несмотря на то, что предыдущий документ не был записан, то начинать транзакцию нужно сразу после отмены.
Попытка
Документ.Записать();
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка...");
НачатьТранзакцию();
ПРодолжить;
КонецПопытки.
Или вообще не пишите НачатьТранзакцию() нигде
Попытка
Документ.Записать();
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка...");
НачатьТранзакцию();
ПРодолжить;
КонецПопытки.
Или вообще не пишите НачатьТранзакцию() нигде
(19) Нет, запись только как в теме указана происходит, если попадаем в условие какое-либо.
В первом случае например перезаписываем цену в документе
Во втором случае комментарии
В третьем Тип цен
В четвертом Договор
И все эти записи зависят от условия, необходимо ли менять эти данные в документе.
В первом случае например перезаписываем цену в документе
Во втором случае комментарии
В третьем Тип цен
В четвертом Договор
И все эти записи зависят от условия, необходимо ли менять эти данные в документе.
(20)А договоры новые создаются? И записать лучше документ только в конце один раз, когда пройдешь все условия. Добавь переменную ПерезаписатьДокумент (Булево) и её меняй при необходимости. Если ПерезаписатьДокумент = Истина, тогда и запиши только уже в конце. Проблема ещё может быть в том, что при записи документа, запускаются ещё типовые механизмы, которые пытаются поменять записи в регистрах. Проверяй в отладчике на Отказ. В общем надо пройтись отладчиком. Что-то в системе не нравится в твоем документе (Может есть незаполненые поля, а может ещё что-то)
(24) Нет, договоры только подставляются, либо пустаяссылка вставляется.
К сожалению, если идти отладчиком, то на ошибки вообще не попадает :)
Видимо, я нахожусь в транзакции ,из-за этого.
По поводу переменной ПерезаписатьДокумент- уже подумывал, но решил, что может здесь помогут )
К сожалению, если идти отладчиком, то на ошибки вообще не попадает :)
Видимо, я нахожусь в транзакции ,из-за этого.
По поводу переменной ПерезаписатьДокумент- уже подумывал, но решил, что может здесь помогут )
(24) А поводо этого
В конце цикла обхода массива имеете ввиду и при этом оставить "возвраты" и " транзакции" ?
И записать лучше документ только в конце один раз, когда пройдешь все условия. Добавь переменную ПерезаписатьДокумент (Булево) и её меняй при необходимости. Если ПерезаписатьДокумент = Истина, тогда и запиши только уже в конце
В конце цикла обхода массива имеете ввиду и при этом оставить "возвраты" и " транзакции" ?
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)