Имя: Пароль:
1C
 
Конвертация данных, перенос документов и движений (односторонний обмен)
0 askerman
 
25.01.11
15:53
Добрый день!

Изучаю конвертацию данных, настраиваю обмен между двумя разными конфигурациями 1 - ЗУП 2.5; 2 - самописная, где ведется табельный учёт.
Исторически сложилось так:
В самописную перегружаются данные регистров состояния работников организаций и РаботникиОрганизаций (Кадровая история) через план обмена и передаётся документ без заполненной ТЧ и др. реквизитов, чтобы в регистрах сведений не было битых ссылок.
Общепринятой практики, когда приходит из источника документ с ТЧ и проводится в базе приёмнике - нет.

Как лучше поступить в данном случае:

1. Сделать обработку проведения кадровых документов в базе приемнике, передавать ТЧ, проводить.
2. Отдельно грузить документ без ТЧ и движения ВыгрузитьПоПравилу записывая в приёмнике в регистр сведений.
3. Какой другой вариант?
1 Defender aka LINN
 
25.01.11
15:54
(0) Та как хочешь.
2 askerman
 
25.01.11
16:01
Мне больше нравится когда движения создаются в приёмнике, но это получится объём данных чуть больше ну и обработки проведения может когда придется менять.
3 askerman
 
26.01.11
11:39
Пробую сделать через КД так:
в ПКГС при конвертации объекта (например, документ ПриемНаРаботу) заполняю НаборДвиженийРегистраСведений.
Движения выгружаются с документом.
Но при записи объекта в приёмник Документ распроводится и попадает в ОтложенныеДвиженияДокументов, т.о. движения не переносятся, документ распроведён.
Это если делать через on-line обмен.
Если я загружаю обработкой Универсальный Обмен Данными в формате XML (версия 2.1.4) то все движения и документ загружаются нормально.

Не могу понять где ставить режим записи документа при выгрузке, чтобы режим записи объекта записывался в файл обмена. Потому что сейчас при загрузке ПроцедурыОбменаДанными отрабатывают так: Раз документ Проведен = true, то он распроводится и пишется в отложенные движения.

В КД, в обработчике "ПриВыгрузке" ПКО (документ) задал РежимЗаписи = "Запись";
Не помогло, в файле обмена не значится как записывать документ.

где поискать?

P.S. Если всё же удастся поставить режим записи "Запись" - документ запишется со статусом проведён и запишется набор движений?
4 askerman
 
26.01.11
11:56
Поставил, надо было перед выгрузкой.
Но вот штатный обмен данными содержит кусок (извините, не знаю как форматировать чтобы код выделился)

Если ИмяТипаОбъекта = "Документ" Тогда
               
               Если РежимЗаписи = "Проведение" Тогда
                   
                   РежимЗаписи = РежимЗаписиДокумента.Проведение;
                   
               ИначеЕсли РежимЗаписи = "ОтменаПроведения" Тогда
                   
                   РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
                   
               Иначе
                   
                   // определим как записывать документ
                   Если Объект.Проведен Тогда
                       
                       РежимЗаписи = РежимЗаписиДокумента.Проведение;
                       
                   Иначе
                       
                       // а документ вообще может проводиться или нет
                       ДокументМожетПроводиться = (Объект.Метаданные().Проведение = мРазрешитьПроведениеДокумента);
                       
                       Если ДокументМожетПроводиться Тогда
                           РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
                       Иначе
                           РежимЗаписи = РежимЗаписиДокумента.Запись;
                       КонецЕсли;
                       
                   КонецЕсли;
                                       
               КонецЕсли;            

-----
т.е. независимо от режима записи документ со статусом "Проведен" начинает проводится в базе. Можно исправить обработку загрузки, но не хочется ломать штатный механизм. Как справится ?
5 askerman
 
26.01.11
11:56
Теперь знаю как форматировать :)
6 Axel2009
 
26.01.11
12:13
вроде как обычно ставят "Если ОбменДанными.Загрузка = Истина Тогда Возврат; КонецЕсли;"?
7 askerman
 
26.01.11
13:32
Это в модуле документа в ПередЗаписью()? Если да, то ничего не вышло, документ загрузился распроведенным - выполняется "ОтменитьПроведениеОбъектаВИБ"
8 Axel2009
 
26.01.11
13:33
в обработке проведения
9 askerman
 
26.01.11
13:57
Всё равно не сохраняются движения и документ распроведенным остаётся..

В обработке ОбменДаннымиXML происходит:
----
// отменяем проведение документа
   Объект.Проведен = Ложь;
   УстановитьОбменДаннымиЗагрузка(Объект);
   Объект.Записать();
   
   Отказ = Ложь;
   УдалитьДвиженияУДокуемнта(Объект, Отказ);



Всё же, ведь как-то можно перенести проведенный документ с движениями без проведения его в базе приёмнике, где отсутствуют обработки проведения? гугл уже устал, может есть у кого что на примете?
10 GenV
 
26.01.11
14:04
(9) Пробовал снимать галку "Выполнять отложенные движения" в настройках обмена?
11 Axel2009
 
26.01.11
14:09
если в источнике проведен а в приемнике распроведен, значит на этапе загрузки документ не проведен. а если не проведен - то грузитсья всякие движения не будут. ну и еще. какая версия обработки перегрузки используется?
у меня вот что
           Если ИмяТипаОбъекта = "Документ" Тогда
               
               Если РежимЗаписи = "Проведение" Тогда
                   
                   РежимЗаписи = РежимЗаписиДокумента.Проведение;
                   
               Иначе
                   
                   РежимЗаписи = ?(РежимЗаписи = "ОтменаПроведения", РежимЗаписиДокумента.ОтменаПроведения, РежимЗаписиДокумента.Запись);
                   
               КонецЕсли;
12 Defender aka LINN
 
26.01.11
14:19
(11) "а если не проведен - то грузитсья всякие движения не будут" - Будут.
13 Axel2009
 
26.01.11
14:21
(12) аха, учтемс.. вообще когда писал думал про "возможно не будут". возможно пропало..
но фактически получается что документ будет не проведен а записи в регистрах будут. нестыковочка. ну да это лирика
14 askerman
 
26.01.11
14:35
Обработка взята из конфигурации ЗиУП 2.5.30.4  (встроенная), процедуры обмена данными оттуда же. то бишь весь механизм обмена типовой ЗУП 2.5

Во время загрузки документ проведён. Я так понял обработка обмен данными распроводит документ в любом случае, проверяя его на возможность проведения. т.е. документ может быть просто записан, только если он не делает никакх движений.

Если ИмяТипаОбъекта = "Документ" Тогда
               
               Если РежимЗаписи = "Проведение" Тогда
                   
                   РежимЗаписи = РежимЗаписиДокумента.Проведение;
                   
               ИначеЕсли РежимЗаписи = "ОтменаПроведения" Тогда
                   
                   РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
                   
               Иначе
                   
                   // определим как записывать документ
                   Если Объект.Проведен Тогда
                       
                       РежимЗаписи = РежимЗаписиДокумента.Проведение;
                       
                   Иначе
                       
                       // а документ вообще может проводиться или нет
                       ДокументМожетПроводиться = (Объект.Метаданные().Проведение = мРазрешитьПроведениеДокумента);
                       
                       Если ДокументМожетПроводиться Тогда
                           РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
                       Иначе
                           РежимЗаписи = РежимЗаписиДокумента.Запись;
                       КонецЕсли;
                       
                   КонецЕсли;
                                       
               КонецЕсли;

   

Я воткнул код Axel2009 в результате получилось то, что нужно, спасибо. Странности какие-то с моей версией обработки  .
Спасибо всем. Оставлю пока как получилось
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.