![]() |
|
Проведение документа в попытке внутри транзакции падает по ошибке vicof, JohnGilbert, H A D G E H O G s, ejikbeznojek, Мультук, Glacial, ИУБиПовиц, maxab72, МаленькийВопросик, Chameleon1980, craxx, Timon1405, Bigbro, toypaul, rozer76, denk32, kostik79, 1cVandal, Ногаминебить, nemoxp, Hawk_1c, Шурик71, unenu, Климов Сергей, 1snik_d, Олдж, Kigo_Kigo, d4rkmesa, denk, Vstur, arsik, shuhard, Михаил_, DiMel_77, p-soft, backfire, AlexKimp, Жеглофф, RVN, nick86, CepeLLlka, mikecool, lubitelxml, Михаил Козлов, ads55, PLUT, Terrixus, phabeZ, Crusher, Dedal, orakool, Irbis, boozin, Кир Пластелинин, ptiz, SleepyHead, formista2000, Sanchez_22, Ненавижу 1С, Sewace, Fish, Telcher, zenon46, maxar, Гипервизор, Amfiaray, Kobol, Homer, Галахад, bobark, Kongo2019
| ☑ | ||
---|---|---|---|---|
0
nemoxp
15.10.25
✎
13:40
|
Здравствуйте
Пожалуйста разъясните особенность: НачатьТранзакцию(); Попытка ДокументОбъект = Документы.ПеремещениеТоваров.СоздатьДокумент(); //***** заполнение реквизитов документа ***** //Запись объекта ДокументОбъект.ДополнительныеСвойства.Вставить("СШПНеобрабатывать", Истина); Попытка ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); Исключение ДокументОбъект.ОбменДанными.Загрузка = Истина; ДокументОбъект.Записать(); КонецПопытки; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); КонецПопытки; При выполнении приведенного выше кода вызывается ошибка "В данной транзакции уже происходили ошибки!" Если написать так, убрав проведение через попытку, то ошибки нет: НачатьТранзакцию(); Попытка ДокументОбъект = Документы.ПеремещениеТоваров.СоздатьДокумент(); //***** заполнение реквизитов документа ***** //Запись объекта ДокументОбъект.ДополнительныеСвойства.Вставить("СШПНеобрабатывать", Истина); ДокументОбъект.ОбменДанными.Загрузка = Истина; ДокументОбъект.Записать(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); КонецПопытки; Почему так и как организовать проведение в попытке внутри транзакции? |
|||
1
maxab72
15.10.25
✎
13:42
|
(0) поставь в Исключение оповещение об ошибке, читай и думай.
|
|||
2
unenu
15.10.25
✎
13:45
|
(1) только через переменную
ТекстОшибки = ОписаниеОшибки() Сообщить(ТекстОшибки) |
|||
3
Мультук
гуру
15.10.25
✎
13:47
|
(0)
Транзакции тут не нужны ДокументОбъект = Документы.ПеремещениеТоваров.СоздатьДокумент(); //***** заполнение реквизитов документа ***** //Запись объекта ДокументОбъект.ДополнительныеСвойства.Вставить("СШПНеобрабатывать", Истина); Попытка ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); Исключение ДокументОбъект.ОбменДанными.Загрузка = Истина; ДокументОбъект.Записать(); КонецПопытки; |
|||
4
nemoxp
15.10.25
✎
15:15
|
(3) У меня обмен через шину. Перед тем как создавать документ, я блокировку создаю:
#Область БлокировкаПакета Блокировка = Новый БлокировкаДанных; Элемент = Блокировка.Добавить("Документ.ПеремещениеТоваров"); Элемент.УстановитьЗначение("_Код", КодДокумента); Элемент.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); #КонецОбласти //БлокировкаПакета Поэтому без транзакции никак |
|||
5
nemoxp
15.10.25
✎
14:00
|
(1) чего-то будет не хватать в документе для проведения. например не заполнен склад получателя, потому что такого склада нет в базе. тогда этот объект надо записать.
|
|||
6
Мультук
гуру
15.10.25
✎
14:10
|
(5)
1) Я бы в транзакции в этом случае только записывал, а дальше вне транзакции в попытке исключении проводил. 2) "КодДокумента" А, пардон, а ссылка не является более кошерным первичным ключом ? Или обмен совсем не из 1С ? P.S. Склады это сильно. Каждые 5 мин новый склад ? Что тогда творится с номенклатурами -- страшно подумать. |
|||
7
nemoxp
15.10.25
✎
14:16
|
(6) обмен не из 1с. Есть код документа в другой базе, по нему и блокировка. При заполнении реквизитов документа записывается в "_Код".
Планируется делать дозапрос. Типа если склад не заполнен (не найден в 1С), то к другой системе делается дозапрос этого склада и через несколько минут повторно грузится документ. Но мне пока нужно попытаться провести документ, иначе записать... |
|||
8
Fish
гуру
15.10.25
✎
14:20
|
(7) " делается дозапрос этого склада и через несколько минут повторно грузится документ." - Зачем такие извращения? Ты дважды будешь разбирать документ.
Просто создавай новый склад, и потом уже отдельным заданием делай заполнение новых складов. А документы у тебя уже будут. |
|||
9
ejikbeznojek
15.10.25
✎
14:24
|
(7)
ДокументЗаписан = ложь; Попытка ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); ДокументЗаписан = истина; Исключение сообщить(ОписаниеОшибки()) КонецПопытки; если не ДокументЗаписан тогда Попытка ДокументОбъект.Записать(); ДокументЗаписан = истина; Исключение сообщить(ОписаниеОшибки()) КонецПопытки; конецесли если не ДокументЗаписан тогда сообщить("Всё пропало") конецесли |
|||
10
ejikbeznojek
15.10.25
✎
14:27
|
там ещё транзакцию отменять наверное в исключении. Она ж битой становится вроде
|
|||
11
H A D G E H O G s
15.10.25
✎
14:31
|
(1) Без такого шмотка в типовой можно только посмотреть ковер
|
|||
12
nemoxp
15.10.25
✎
16:07
|
(8) Без этих извращений никак. Когда приходит документ я не знаю есть ли уже в базе нужные склады, номенклатура, контрагент, договор. В сообщении нет детального описания номенклатуры, склада и т.к., только код внешней базы. Я собираю не найденные данные и если что-то не нашлось не записываю документ, делаю дозапрос недостающих данных, загружаю их в 1С своими обработчиками и после гружу еще раз документ. Это обмен через шину.
|
|||
13
nemoxp
15.10.25
✎
16:08
|
Придумал сделать регистр сведений куда буду писать записанные документы и регламентным заданием буду проводить их по этому списку, потом удалять из регистра.
|
|||
14
Timon1405
15.10.25
✎
16:33
|
(13) если смотрите в эту сторону лучше сразу тогда РС ВыполнениеОтложенныхДействий. измерения объект, НомерПоПорядку(чтоб разные алгоритмы можно было делать). Ресурсы ТекстАлгоритма, Параметры, Состояние, ОписаниеОшибки итд на что фантазии хватит.
тогда успешно выполненные действия можно не удалять, а менять состояние в РС. |
|||
15
Ногаминебить
15.10.25
✎
16:52
|
А что мешает сначала проверить есть ли склад, номенклатура, контрагент, договор и по итогу уже либо Запись, либо Проведение?
|
|||
16
nemoxp
15.10.25
✎
17:28
|
(15) Мешает то что могут быть разные случае из-за которых может не провестись. Все не проверить. Может договор такой есть, но пользователь изменил его вид или с аналитикой какие-то проблемы. Замучаешься все проверять.
|
|||
17
JohnGilbert
15.10.25
✎
20:44
|
Мммм...
ДокументОбъект.ДополнительныеСвойства.Вставить("СШПНеобрабатывать", Истина); Сладкий зхапах говна, под названием Dataareon |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |