| 
    
            
         
         | 
    
    
  | 
Конвертация данных, как после загрузки провести загруженные документы по порядку? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Бешеный заяц    
     13.08.20 
            ✎
    15:25 
 | 
         
        Бьюсь долгое время над проблемой не проведение документов после загрузки, проанализировав журнал понял что документы грузятся (проводятся) не по порядку в результате например перемещение может попытаться просветись до проведения (загрузки поступления).
 
        соответственно предполагаю необходимо собрать в ней параметр документы, отсортировать по моменту времени и в цикле перепроверки, вопрос как? может есть способ более кошерный?  | 
|||
| 
    1
    
        Aleksey    
     13.08.20 
            ✎
    15:26 
 | 
         
        А чем указанный способ не кошерный?     
         | 
|||
| 
    2
    
        Бешеный заяц    
     13.08.20 
            ✎
    15:28 
 | 
         
        (1) возможно данный функционал уже есть в конвертации и подобное "мышкой" делается     
         | 
|||
| 
    3
    
        Aleksey    
     13.08.20 
            ✎
    15:28 
 | 
         
        в глобальнике после загрузки объекта
 
        Если ИмяТипаОбъекта = "Документ" Тогда Если Объект.Проведен Тогда НоваяСтрока = Параметры.ТаблицаДокументов.Добавить(); Если Объект.ЭтоНовый() Тогда Объект.Записать(); КонецЕсли; НоваяСтрока.Документ = Объект.Ссылка; НоваяСтрока.ДатаВремя = Объект.Дата КонецЕсли; Если ОбъектНайден Тогда РежимЗаписи = "ОтменаПроведения"; КонецЕсли; КонецЕсли;  | 
|||
| 
    4
    
        Бешеный заяц    
     13.08.20 
            ✎
    15:35 
 | 
         
        (3) ок спасибо, только непонятно "Объект.Проведен" считывается после попытки провести? если да то в моём случае он будет в состоянии ложь так как при попытки провести он не проводит, или "Объект.Проведен" это то что пришло от источника?     
         | 
|||
| 
    5
    
        Aleksey    
     13.08.20 
            ✎
    16:10 
 | 
         
        Это то что пришло из источника. Если прилетел проведенный документ, то его нужно провести, вот и пишем в параметр ссылку на документ. Ну а если он уже есть в базе, то снимаем с проведения     
         | 
|||
| 
    6
    
        Aleksey    
     13.08.20 
            ✎
    16:11 
 | 
         
        И сам механизм проведения уже прописываем в глобалнике после загрузки данных
 
        Если Параметры.ТаблицаДокументов.Количество() > 0 Тогда Параметры.ТаблицаДокументов.Сортировать("ДатаВремя Возр"); Ин = 0; Для каждого Строка из Параметры.ТаблицаДокументов Цикл Попытка Объект = Строка.Документ.ПолучитьОбъект(); Исключение Сообщить("Ошибка получения документа "+Строка.Документ); Сообщить("Ошибка получения документа "+Строка.ДатаВремя); Продолжить; КонецПопытки; Попытка Объект.Записать(РежимЗаписиДокумента.Проведение); Состояние("Документ проведен : "+ СокрЛП(Объект)); Ин = Ин + 1; Исключение Сообщить("ДОКУМЕНТ НЕ ПРОВЕДЕН : "+ ОписаниеОшибки(), СтатусСообщения.ОченьВажное); Сообщить(" "+СокрЛП(Объект)); ЗаписатьВПротоколВыполнения("ДОКУМЕНТ НЕ ПРОВЕДЕН : "+ ОписаниеОшибки()); ЗаписатьВПротоколВыполнения(" "+СокрЛП(Объект)); КонецПопытки; КонецЦикла; Сообщить("Из "+СокрЛП(Параметры.ТаблицаДокументов.Количество())+" документов проведено " + СокрЛП(Ин) +" объектов"); Если Параметры.ТаблицаДокументов.Количество() <> Ин тогда ЗаписатьВПротоколВыполнения("Из "+СокрЛП(Параметры.ТаблицаДокументов.Количество())+" документов проведено " + СокрЛП(Ин) +" объектов") КонецЕсли; Иначе Сообщить("Из "+СокрЛП(Параметры.ТаблицаДокументов.Количество())+" документов проведено 0 объектов"); КонецЕсли;  | 
|||
| 
    7
    
        Aleksey    
     13.08.20 
            ✎
    16:12 
 | 
         
        Осталось только прописать в параметрах "ТаблицаДокументов" с галкой при загрузки
 
        И в глобальнке перед загрузкой данных ТаблицаДокументов = Новый ТаблицаЗначений; ТаблицаДокументов.Колонки.Добавить("Документ"); ТаблицаДокументов.Колонки.Добавить("ДатаВремя"); Параметры.ТаблицаДокументов = ТаблицаДокументов;  | 
|||
| 
    8
    
        Aleksey    
     13.08.20 
            ✎
    16:17 
 | 
         
        правда это работает только при полном обмене. так как при частичной выгрузке те документы которые не попали в обмен не будут проведены в приемнике (ну есть еще вариант, что в источнике физически грохнули и тогда в приемнике будет проведенный документ которого нет в источнике.)     
         | 
|||
| 
    9
    
        Бешеный заяц    
     13.08.20 
            ✎
    16:17 
 | 
         
        а параметр ТаблицаДокументов по умолчанию существует? (у меня онлайн обмен)
 
        В перед загрузкой данных сделал так ТабДок = Новый ТаблицаЗначений; ТабДок.Колонки.Добавить("Документ"); ТабДок.Колонки.Добавить("ДатаВремя"); Параметры.Вставить("ЗаписиРеестрДокументов",ТабДок); После загрузки объекта так Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) Тогда Если Объект.Проведен Тогда НоваяСтрока = Параметры.ТаблицаДокументов.Добавить(); Если Объект.ЭтоНовый() Тогда Объект.Записать(); КонецЕсли; НоваяСтрока.Документ = Объект.Ссылка; НоваяСтрока.ДатаВремя = Объект.Дата КонецЕсли; КонецЕсли; После загрузки данных Параметры.ТаблицаДокументов.Сортировать("ДатаВремя Возр"); Для каждого стр из Параметры.ТаблицаДокументов Цикл ДокОбъект = стр.Документ.ПолучитьОбъект(); Попытка ДокОбъект.Записать(РежимЗаписиДокумента.Проведение); Исключение КонецПопытки; КонецЦикла; еще правда не успел протестировать  | 
|||
| 
    10
    
        Бешеный заяц    
     13.08.20 
            ✎
    16:19 
 | 
         
        правда в начале в параметре ошибся. только что заметил нужно ТаблицаДокументов конечно     
         | 
|||
| 
    11
    
        Aleksey    
     13.08.20 
            ✎
    16:38 
 | 
         
        Обработчики "Правила конвертации объектов"
 
        После загрузки Условия возникновения события Только для платформы V8. Событие выполняется после прочтения и установки атрибутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта. Параметры: ИмяТипаОбъекта – Строка. Имя типа загруженного объекта, например, «СправочникСсылка.Номенклатура». чтобы методанные не дергать (ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные())) можно просто взять ИмяТипаОбъекта  | 
|||
| 
    12
    
        Aleksey    
     13.08.20 
            ✎
    16:40 
 | 
         
        и если документ у тебя был проведен, а при повторной загрузки он уже НЕ проведен, то такой документ будет без галки проведен, но с проводками, т..е. нужно
 
        Если ОбъектНайден Тогда РежимЗаписи = "ОтменаПроведения"; КонецЕсли;  | 
|||
| 
    13
    
        Aleksey    
     13.08.20 
            ✎
    16:42 
 | 
         
        плюс желательно отработать ситуацию когда документ не проводиться (нет товара на складе например, или еще какая беда), хотя бы в лог об этом написать     
         | 
|||
| 
    14
    
        Бешеный заяц    
     13.08.20 
            ✎
    16:53 
 | 
         
        какая реакция будет на  "Если Объект.Проведен Тогда" если объект уже записан в базу (в прошлые обмены) но не проведен? или не имеет значения? значение "Объект.Проведен" из источника берется при всех раскладах?     
         | 
|||
| 
    15
    
        Aleksey    
     13.08.20 
            ✎
    16:55 
 | 
         
        (14) см (11)
 
        Событие выполняется после прочтения и установки атрибутов объекта из файла, но до его записи в информационную базу Это то что прилетело из фала  | 
|||
| 
    16
    
        Бешеный заяц    
     13.08.20 
            ✎
    16:56 
 | 
         
        (15) ок спасибо     
         | 
|||
| 
    17
    
        Вафель    
     13.08.20 
            ✎
    17:00 
 | 
         
        раньше при обмене писалось в регистр, а потом проводилось по нему     
         | 
|||
| 
    18
    
        Aleksey    
     13.08.20 
            ✎
    17:01 
 | 
         
        (17) отложенное проведение... а смысл мучить базу?     
         | 
|||
| 
    19
    
        Вафель    
     13.08.20 
            ✎
    17:04 
 | 
         
        (18) а если ошибка при проведении? как выявлять. исправлять? все перегружать заново?     
         | 
|||
| 
    20
    
        Aleksey    
     13.08.20 
            ✎
    19:48 
 | 
         
        (19) Небывает золотого решения на все случае жизни. Мне достаточно лога. дальше разбор полета. У меня таких случаев 1 раз в месяц. ОТложенное проведения нужно когда нужно разделить загрузку и проведение с разбором полетов (типа в ручную попробовать провести, подвигать документы). Мне проще запустить повторно     
         | 
|||
| 
    21
    
        d4rkmesa    
     13.08.20 
            ✎
    21:22 
 | 
         
        (19) Обработка универсального обмена на УФ вывалит в конце кучу сообщений, из которых можно будет открыть документы, например. Но вообще да, для онлайн обменов лучше отложенное проведение использовать.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |