|   |   | 
| 
 | УПП 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) НачатьТранзакцию() - ошибку вызвать может?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |