|
УПП 2.4 Док создается, присваивается номер, но не сохраняется | ☑ | ||
---|---|---|---|---|
0
ЭЦ
17.05.22
✎
14:21
|
ГОСПОДА !
Требуется обработкой создать несколько документов ЗаказНаПеремещение и записать ссылки на них в регистр сведений. Документы создаются, заполняются и записываются (при записи присваивается очередной номер) Что наблюдается в отладчике и выдаются соответствующие сообщения. Однако по завершении обработки выясняется, что в базе имеется только один документ (последний из создававшихся). В регистре сведений также только одна запись. Не понятно кода делись другие документы. В чем тут может быть. Прошу подсказать. Заранее благодарен. Код ниже |
|||
1
ЭЦ
17.05.22
✎
14:24
|
тзПремещений = Новый ТаблицаЗначений;
тзПремещений.Колонки.Добавить("Номенклатура"); тзПремещений.Колонки.Добавить("Организация"); тзПремещений.Колонки.Добавить("Вид"); тзПремещений.Колонки.Добавить("Склад"); тзПремещений.Колонки.Добавить("Количество"); // Тут заполняем тзПремещений тзПремещений.Сортировать("Организация,Вид,Склад"); тзДокументовПерезаписи = тзПремещений.Скопировать(); тзДокументовПерезаписи.Свернуть("Организация,Вид,Склад"); тзДокументовПерезаписи.Сортировать("Организация,Вид,Склад"); Для Каждого СтрТЗ Из тзДокументовПерезаписи Цикл ЗаказДляперезаписи = НайдемЗаказНаПеремещениеДляПерезаписи(СтрТЗ); Если ЗаказДляперезаписи = Неопределено Тогда ДокЗП = Документы.ЗаказНаПеремещение.СоздатьДокумент(); ТекстСообщения = "Создан новый заказ на перемещение "; Иначе ДокЗП = ЗаказДляперезаписи.ПолучитьОбъект(); ТекстСообщения = "Перезаписан существующий заказ на перемещение "; КонецЕСли; СтруктураЗаказа = Новый Структура; СтруктураЗаказа.Вставить("Организация",СтрТЗ.Организация); СтруктураЗаказа.Вставить("СкладОтправитель",СтрТЗ.Склад); СтруктураЗаказа.Вставить("Цех", Цех ); СтруктураЗаказа.Вставить("СкладПолучатель", СкладПолучатель); СтруктураЗаказа.Вставить("ВидСвязи", СтрТЗ.Вид); СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Организация",СтрТЗ.Организация); СтруктураОтбора.Вставить("Склад",СтрТЗ.Склад); СтруктураОтбора.Вставить("Вид", СтрТЗ.Вид); мСтрокиНоменклатуры = тзПремещений.НайтиСтроки(СтруктураОтбора); ЗаполнимЗаказНаПеремещениеДляОрганизации(ДокЗП,СтруктураЗаказа,мСтрокиНоменклатуры); Попытка НачатьТранзакцию(); ТекстОшибки = "заказа"; ДокЗП.Записать(); ТекстОшибки = "регистра"; мз = РегистрыСведений.sСвязиОбъектов.СоздатьМенеджерЗаписи(); мз.Источник = ДокЗП.Ссылка; мз.Получатель = Неопределено; мз.ВидСвязи = СтруктураЗаказа.ВидСвязи; мз.Прочитать(); Если мз.Выбран() Тогда мз.ДатаСоздания = ТекущаяДата(); мз.Ответственный = ПараметрыСеанса.ТекущийПользователь; мз.Записать(); Иначе мз.Источник = ДокЗП.Ссылка; мз.Получатель = Неопределено; мз.ВидСвязи = СтруктураЗаказа.ВидСвязи; мз.ДатаСоздания = ТекущаяДата(); мз.Ответственный = ПараметрыСеанса.ТекущийПользователь; мз.Записать(); КонецЕСли; ЗафиксироватьТранзакцию(); Сообщить(ТекстСообщения + " " + СокрЛП(ДокЗП)); Исключение ОтменитьТранзакцию(); Сообщить("Неудачная попытка записи " + ТекстОшибки + " " + СОКрлП(ДокЗП)); КонецПопытки; КонецЦикла |
|||
2
shuhard
17.05.22
✎
14:33
|
(0)[Не понятно кода делись другие документы.] ты же пишешь в один документ
|
|||
3
ЭЦ
17.05.22
✎
14:43
|
(2) Каждый раз срабатывает
ДокЗП = Документы.ЗаказНаПеремещение.СоздатьДокумент(); и при записи генерится новый номер т.е. документы разные |
|||
4
shuhard
17.05.22
✎
15:03
|
(3) мы же видим, что документ один
|
|||
5
ЭЦ
17.05.22
✎
15:20
|
(4) Я думаю причина не в этом.
У меня тут много других доков создается также (В цикле создаются документы и присваиваются одной переменной, которая каждый раз обновляется) - везде все норм. А тут попа. |
|||
6
vicof
17.05.22
✎
15:21
|
И транзакции не откатываются?
|
|||
7
shuhard
17.05.22
✎
15:24
|
(5) запиши события в журнал - получишь ответ
|
|||
8
ЭЦ
17.05.22
✎
18:07
|
(6) Прошел все отладчиком.
и вывод сообщения вставил - ни каких признаков откатывания транзакций не видно |
|||
9
shuhard
17.05.22
✎
18:09
|
(8) ещё раз - запиши в журнал регистрации и выведи из транзакции
|
|||
10
Злопчинский
17.05.22
✎
18:24
|
могу ошибаться, но смысла в
Попытка НачатьТранзакцию(); нет . правильнее . НачатьТранзакцию(); Попытка |
|||
11
ЭЦ
17.05.22
✎
19:10
|
(9) Нашел.
Ошибка - в моем алгоритме поиска документа для перезаписи. Так что извиняйте? (10) Нет правильно сначала Попытка потом НачатьТранзакцию() тогда при ошибке в транзакции будет выскакивать на исключение. |
|||
12
Злопчинский
17.05.22
✎
19:20
|
(11) "сначала Попытка потом НачатьТранзакцию()
тогда при ошибке в транзакции будет выскакивать на исключение." (могу ошибаться) Кто это тебе сказал? |
|||
13
Злопчинский
17.05.22
✎
19:22
|
(11) при чем здесь "ошибка в транзакции"...?
Попытка - это отлов ошибки выполнения. а будет при этом открыта транзакция или нет - это уже совсем другое и к попытке отношения не имеет. НачатьТранзакцию() - само по себе нихера не блокирует и не делает такого что именно на НачатьТранзакцию() можно сломаться. Поэтому пихать начатьТранзакцию() в Попытку - масло масленое... . пусть спецы по снеговику меня поправят если что |
|||
14
Камчадал
naïve
17.05.22
✎
19:28
|
Смотря какая транзакция и какой код в ней, а есть правила как включать попытку в транзакцию, можно посмотреть на итс. Транзакция и попытка это разные вещи. Но вполне уживаются вместе. Хотя я сам не любитель конструкций попытка исключение
|
|||
15
Камчадал
naïve
17.05.22
✎
19:29
|
Особенно популярная ошибка, что:в данной транзакции уже происходили ошибки
|
|||
16
ЭЦ
17.05.22
✎
19:32
|
(13) Попытка позволяет продолжить выполнение программы при возникновении ошибки - вызывается исключение которое можно обрабатывать любым способом
- например - отменить незавершенную транзакцию Транзакция - обеспечивает синхронную запись или не запись в базу всех объектов внутри транзакции. т.е они все либо записываются либо все не записываются |
|||
17
Злопчинский
17.05.22
✎
19:33
|
(16) и где здесь что начатьТранзакция() д.б. внутри попытки?
|
|||
18
Злопчинский
17.05.22
✎
19:34
|
(14) НачатьТранзакцию() - ошибку вызвать может?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |