Имя: Пароль:
   
1C
1С v8
Конвертация данных - один в несколько
0 Gangar
 
20.12.18
21:38
Вечер добрый, уважаемые.
Имею вопрос и прошу помощи в решении.
Дано:
-некий документ в источнике, например "ВозвратОтПокупателя";
-у этого документа есть некий реквизит, например "ДокументОтгрузки", который находится в табличной части;
-в приемнике есть такой же документ, но у него реквизит "ДокументОтгрузки" не в табличной части, а в реквизитах самого документа;
-в конвертации данных, в ПВД, в обработчике ПередВыгрузкой запросом формируются структуры, которые передаются в ПКО через ВыгрузитьПоПравилу;

Вопрос:
как можно в ПКО, в обработчике ПриЗагрузке получить информацию из структуры, которая сформировалась в ПВД?

Пока нашел решение через чтение файла выгрузки, но, по моему мнению, оно не очень красивое.
1 Черный маклер
 
20.12.18
21:51
двигайся в направлении
-в конвертации данных, в ПВД, в обработчике ПередВыгрузкой запросом формируются структуры, которые передаются в ПКО через ВыгрузитьПоПравилу;

т.е. в одном ПВД можно
ВыгрузитьПоПравилу(Выборка.Ссылка, ,ВходящиеДанные1 , , "Документ1")
ВыгрузитьПоПравилу(Выборка.Ссылка, ,ВходящиеДанные2 , , "Документ2")
2 Gangar
 
20.12.18
21:59
(1) и зачем? тип источника - один, приемника - тоже один.
в ПВД у меня:
Пока ВыборкаПоДокументу.Следующий() Цикл
...//тут формируется структура ИсходящиеДанные
ВыггрузитьПоПравилу(,,ИсходящиеДанные,,"ДокументПриемник");
КонецЦикла;
3 Fragster
 
20.12.18
22:01
самый простой вариант сделать при выгрузке
4 Gangar
 
20.12.18
22:04
(3) есть нужда в приемнике перед загрузкой проверять наличие записей в Регистре сведений, на предмет загруженных ранее документов, по связке УИДИсточкика + УИДДокументОтгрузки
5 Черный маклер
 
21.12.18
00:12
(0) ...как можно в ПКО, в обработчике ПриЗагрузке получить информацию из структуры, которая сформировалась в ПВД?

можно получать параметр, который мб массивом
6 Gangar
 
21.12.18
00:24
(5) я в КД не силен, но СП читать умею

Обработчики "Правила конвертации объектов"
При загрузке

Параметры:
ОбъектНайден - Булево.
Объект - Произвольный.
НеЗамещатьОбъект - Булево.
ОбъектМодифицирован – Булево.

КАК?!
7 Черный маклер
 
21.12.18
09:32
(6) в ПВД
ВыгрузитьПоПравилу(Выборка.Ссылка, ,ВходящиеДанные1 , , "Документ1")

в структуру ВходящиеДанные1 что-то кладешь
а в ПКО это что-то передаешь в свой Параметр
8 Gangar
 
21.12.18
09:53
(7) я же в (2) об этом писал, а в (4) написано зачем мне это надо
9 Optan
 
21.12.18
09:58
(0) В ПКС заводишь параметр. В нем в событии перед выгрузкой его заполняешь по Источнику (ПКО которое получило данные из ПВД)
Например:

Если НЕ Источник.ОКАТО="" тогда
    
СтруктураДляИФНС = Новый Структура("СсылкаНаРодителя,ДатаПостановкиНаУчет,Владелец,КодПоОКАТО,КодПоОКТМО,КПП,Код,Наименование,НаименованиеИФНС,НаименованиеОбособленногоПодразделения");
    
СтруктураДляИФНС.ДатаПостановкиНаУчет=?(ЗначениеЗаполнено(Источник.ДатаПостановкиНаУчет),Источник.ДатаПостановкиНаУчет,Дата(2000,01,01));
    СтруктураДляИФНС.КодПоОКАТО = Источник.ОКАТО;
    СтруктураДляИФНС.КодПоОКТМО = Источник.ОКТМО;
    СтруктураДляИФНС.КПП = Источник.КПП;
    СтруктураДляИФНС.Код = Источник.КодИМНС;
    СтруктураДляИФНС.Наименование = Источник.Наименование;
    СтруктураДляИФНС.НаименованиеИФНС = Источник.РегистрацияВИФНС;
    СтруктураДляИФНС.НаименованиеОбособленногоПодразделения = Источник.МестоРасположения;
    
КонецЕсли;

Значение=ЗначениеВСтрокуВнутр(СтруктураДляИФНС); //обязательно - сложные типы не передадутся, хотя ошибки не будет - секрет конвертации)


А в событии ПКО при загрузке разбираешь:

Параметры=ЗначениеИзСтрокиВнутр(ПараметрыОбъекта["СтруктураДляИФНС"]);
10 Gangar
 
21.12.18
10:10
(9) в событии ПриЗагрузке в ПКО ПараметрыОбъекта недоступно (6)
11 Optan
 
21.12.18
10:17
(10) Ошибся - ПослеЗагрузки конечно же.
12 Gangar
 
21.12.18
10:22
(11) зачем мне это надо я писал в (4). ПослеЗагрузки не подходит
13 Optan
 
21.12.18
10:30
(12) Отказ же там еще срабатывает. Не хочешь не записываешь или записываешь как тебе надо.
14 Черный маклер
 
21.12.18
10:35
(10) видимо мы про разные параметры говорим
открой любое ПКС и смотри
- ПолучитьЗначениеИзВходящихДанных
- ПередаватьДанныеВПараметр
15 Gangar
 
21.12.18
11:07
(14) В базе приемнике есть РС, с измерениями GUIDИсточкика (где хранится GUID документа из источника), УИДИсточника_расш (где хранится дополнительный GUID документа из источника, в данном случае это GUID ДокументаОтгрузки), СсылкаНаОбъект (где хранится ссылка на созданный документ).

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

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

Логично?
16 Optan
 
21.12.18
11:29
(15) Не пойму в чем проблема. Выгружаешь что тебе надо параметром. В приемнике ПриЗагрузке анализируешь обновлять/создавать/не трогать свои записи РС и управляешь записью (например, обходишь в событии ПриЗагрузке все ДокументыОтгрузки из ТЧ документа-источника и записываешь свой РС).
17 Gangar
 
21.12.18
12:08
(16) Возможно, я неправильно подошел к вопросу и решил его не так, как надо.

В целом ситуация такая:
- в базе упр. учета Возврат от покупателя делается один по нескольким Реализациям, в разрезе одного контрагента/договора, т.е. реквизит Реализация находится в табличной части;
- в базе бух. учета на каждую Реализацию делается свой Возврат;
- как синхронизировать данные, с учетом того, что они должны, в случае надобности, в бух. учете обновляться из упр. учета?
18 Optan
 
21.12.18
12:20
(17) Из базы Упр.Учета (УУ) ты выгружаешь документ Возврат вместе с ТЧ (т.е., по сути, список доков для базы БУ). Если нужно, то впридачу передаешь параметром дополнительные данные (массив GUIDов и т.д.).

В приемнике, в событии ПриЗагрузке ты обходишь табличную часть. По каждой строке принимаешь решение и записываешь/не записываешь. При этом, сам исходный объект можно и не записывать, проставив Отказ = Истина.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn