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