|
подскажите с кд. выгрузка нескольких объектов в 1 объект приемника | ☑ | ||
---|---|---|---|---|
0
zladenuw
21.06.13
✎
10:58
|
Нужно несколько документов загрузить в 1 документ в приемнике.
Есть правило по выгрузке 1 к 1.но не соображу как множество объектов выгружать и что передавать в параметр обработки для выгрузки |
|||
1
ЧашкаЧая
21.06.13
✎
11:03
|
Можно по разному, смотря как связаны несколько объектов в базе-источнике, какие данные нужно брать из источников в приемник. Вобщем нужно заполнить ВходящиеДанные, и КоллекцииОбъектов для ТЧ. Больше конкретики.
|
|||
2
zladenuw
21.06.13
✎
11:05
|
(1) в базе источник это 1 тип документа, пользователь может выбрать как 1 так и несколько их нужно загрузить в 1 объект приемника.
|
|||
3
ЧашкаЧая
21.06.13
✎
11:06
|
(2) Есть реквизит связи между документами?
|
|||
4
zladenuw
21.06.13
✎
11:07
|
(3) Если которые выгружаются, пользователь сам выбирает список выгрузки. они могут быть не связаны между собой. я буду передавать список для выгрузки
|
|||
5
zladenuw
21.06.13
✎
11:17
|
(3) связи нет. и проверки не надо. шапка заполняется по умолчанию, грубо говоря нужно только табличную часть заполнить.
|
|||
6
zladenuw
21.06.13
✎
11:20
|
http://forum.infostart.ru/forum26/topic44575/
Я так понимаю создаю новое пко и в него перед выгрузкой пишу свой запрос по выборке документов, как мне передать в него параметр этот список документов ? и потом достаточно будет вызвать процедуру выгрузитьпоправилу и передать то что мне надо выгружать, уже в готов виде так ? |
|||
7
ЧашкаЧая
21.06.13
✎
11:21
|
(4) Круто, будет проблема - как передать этот список в обработку выгрузки. Теоретически можно сделать списком значений в параметре, но придется или допиливать обработку V8Exchange.efp или писать свою обетку, возможно здесь другое решение.
(5) Во всяком случае, если признака объединяющего несколько объектов в один нет - список объектов придется передать извне в параметры правил (будет выгружаться всегда только один объект по списку или несколько объектов по нескольким спискам?). Тогда писать свое правило выгрузки данных которое соберет нужные данные из табличных частей и передать через входящие данные в ПКО. |
|||
8
zladenuw
21.06.13
✎
11:24
|
(7) 1 список по нескольким объектов, вернее может быть как 1 документ, так и 10. но одного типа. и загружаться всегда в 1 тип документа.
ПВД ? выбираю произвольный запрос, там пишу запрос. попробую через параметры обработки. Вот я создам пвд и подготовлю тз, создаю новое правило указываю пвд, указываю приемник и потом описывать каждое пкс ? |
|||
9
zladenuw
21.06.13
✎
11:27
|
(7) какая должна быть структура вход данных ? такая же как у документа ? и что тогда в ПКО нужно менять для заполнения ?
|
|||
10
ЧашкаЧая
21.06.13
✎
11:35
|
Если не будете писать обертку для УниверсальныйОбменДаннымиXML список нужных документов можно выбрать с помощью подключаемой обработки (добавляется в свойствах самой конфигурации).
(9) Во первых шапка - для всех полей заполнение должно происходить алгоритмами или из входящих данных. Табличная часть из входящих данных переданных из ПВД. В ПКО нужно поставить флажек для ТЧ "Получить из входящих данных" Примерный код ПВД событие перед выгрузкой: Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.Количество, | РеализацияТоваровУслугТовары.Цена, | РеализацияТоваровУслугТовары.Сумма |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка В(&СписокДокументов)"; Запрос.УстановитьПараметр("СписокДокументов", Параметры.СписокДокументов); Товары = Запрос.Выполнить().Выгрузить(); ДанныеВПКО = Новый Структура; ДанныеВПКО.Добавить("Товары", Товары); ВыгрузитьПоПравилу(, , ДанныеВПКО, , "ЗдесьИмяПКО", , , ) |
|||
11
zladenuw
21.06.13
✎
11:40
|
(10) а как заполнить шапку ? создавать все поля в ДанныеВПКО ?
|
|||
12
zladenuw
21.06.13
✎
11:41
|
(10) тут пример такой. только не пойму он просто передает
Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); ВыборкаДанных= Результат.Выгрузить(); http://forum.infostart.ru/forum26/topic44575/ |
|||
13
zladenuw
21.06.13
✎
11:41
|
(12) ссылка http://forum.infostart.ru/forum26/topic44575/
|
|||
14
zladenuw
21.06.13
✎
11:42
|
(10) и он помещает перед обработкой, в чем разница где выполнять такой запрос ?
|
|||
15
ЧашкаЧая
21.06.13
✎
11:51
|
(11) Можно и так, или напрямую в ПКО для каждого реквизита написать в перед выгрузкой код получения, например:
Значение = глЗначениеПеременной("глТекущийПользователь"); Второй вариант мне больше нравиться - чем меньше Входящих-Исходящих данных - тем легче получается конвертация. (14) Потому что все что идет после "ПередОбработкой" уже работает с отдельным выгружаемым объектом, в общем случае после "ПередОбработкой" должна быть заполнена ВыборкаДанных - тогда обработка сама вызовет ВыгрузитьПоПравилу. |
|||
16
zladenuw
21.06.13
✎
11:59
|
(15) то так будет работать. в пвд написал запрос
Запрос.УстановитьПараметр("СпЗнСсылки", Параметры.СпЗнДок); ТЗ = Запрос.Выполнить().Выгрузить(); ТЗРез= ТЗ.СкопироватьКолонки(); ТЗРез.Колонки.Добавить("ТчЗч"); НоваяСтрока= ТЗРез.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[0]); НоваяСтрока.ТчЗч= ТЗ; ВыборкаДанных= ТЗРез; |
|||
17
ЧашкаЧая
21.06.13
✎
12:05
|
(16) Будет работать если сам запрос с шапкой документа как и на инфостарте. У меня без шапки потому что я вручную вызывал ВыгрузитьПоПравилу (без заполнения ВыборкаДанных) и предполагал что шапка будет заполнятся в самом ПКО данными по понятным правилам, в примере на инфостарте шапка берется из первого попавшегося документа (заметьте возможно и не самого первого в последовательности).
|
|||
18
ЧашкаЧая
21.06.13
✎
12:07
|
(16) Хотя ... получается что ПКО будет вызываться столько раз сколько и строк в объединенных документах, странно что у него работало, я бы так не делал.
|
|||
19
ЧашкаЧая
21.06.13
✎
12:09
|
(18) Нет, все нормально, работать будет :)
|
|||
20
zladenuw
21.06.13
✎
12:10
|
(19) спасиб. пока пробую прикрутить заполнение списка и вызов нужного правила для выгрузки. скоро вернусь
|
|||
21
zladenuw
21.06.13
✎
12:22
|
(20) блин а как выбрать нужное пвд и передать параметр ?
|
|||
22
zladenuw
21.06.13
✎
12:23
|
(21) до этого вызывал настроить построитель и передавал что мне нужно было. но там я явно передавал ссылку. а тут как ?
|
|||
23
zladenuw
21.06.13
✎
12:27
|
(22) как правильно вызывать и заполнить обработку для обмена ? может где то в типовой можно подсмотреть
|
|||
24
ЧашкаЧая
21.06.13
✎
12:38
|
(21) 1. Если планируете использовать стандарную форму обработки без оберки можно сделать подключаемыми обработками с флажком "Это обработка формы настройки".
2. Если с оберкой (теоретически, сам такого не делал) после загрузки правил обмена установить в реквизите Параметры обработки нужный параметр. (23) Видел во всяких выгрузках остатков из бухгалтерии. Поищите по УниверсальныйОбменДаннымиXML. |
|||
25
zladenuw
21.06.13
✎
12:46
|
(24) хм валится на ошибке. заполнить параметры спзнДок. но вот такая ошибка
Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1028)}: Ошибка при вызове метода контекста (XMLСтрока): Ошибка преобразования данных XML в отладчике падает на параметре СпЗнДок |
|||
26
zladenuw
21.06.13
✎
12:47
|
(25) был флаг передавать при выгрузке в приемник.
|
|||
27
zladenuw
21.06.13
✎
12:49
|
теперь и ошибки нету и данных нету :(
|
|||
28
zladenuw
21.06.13
✎
12:53
|
мда по СОМ, я бы уже сделал. а тут :). что то не нашел в УТП программное заполнение параметров и вызов нужного ПКО для обмена :(
|
|||
29
ЧашкаЧая
21.06.13
✎
12:57
|
> мда по СОМ, я бы уже сделал
(28) Это грешные мысли, нельзя так думать когда работаешь с КД. На самом деле прелесть КД осознается когда нужно перетащить кучу разных объектов. Параметры это реквизит обработки который после загрузки правил обменов становится структурой. Так что нужно сначала вызвать загрузку правил. |
|||
30
ЧашкаЧая
21.06.13
✎
13:02
|
Нашел в УПП обработку ВыгрузкаСпискаОбъектов - как раз то что нужно.
|
|||
31
zladenuw
21.06.13
✎
13:13
|
(30) полез искать упп
|
|||
32
zladenuw
21.06.13
✎
13:20
|
(30) так там просто передали параметр и вызвали выгрузку. я делаю то же самое. только у меня выгрузитьпоправилу и там
ИначеЕсли Правило.СпособОтбораДанных = "ПроизвольныйАлгоритм" Тогда Если ВыборкаДанных <> Неопределено Тогда И не попадает, так как ВыборкаДанных = Неопределено |
|||
33
zladenuw
21.06.13
✎
13:21
|
(32) и не могу найти где заполняются выборкаданных :(
|
|||
34
zladenuw
21.06.13
✎
13:23
|
(33) вроде нашел проблему нужно было в передобработкой. пока исправляю ошибки
|
|||
35
ЧашкаЧая
21.06.13
✎
13:28
|
(32) Не нашел там такого кода, см.
Процедура ВыполнитьВыгрузку() Экспорт Если СписокОбъектов.Количество() = 0 Тогда Возврат; КонецЕсли; ИмяФайлаПравилОбмена = ПолучитьИмяВременногоФайла("xml"); ПравилаОбмена.Вывод = ИспользованиеВывода.Разрешить; ПравилаОбмена.Записать(ИмяФайлаПравилОбмена); УниверсальныйОбменДаннымиXML = Обработки.УниверсальныйОбменДаннымиXML.Создать(); УниверсальныйОбменДаннымиXML.ЗагрузитьПравилаОбмена(ИмяФайлаПравилОбмена); УниверсальныйОбменДаннымиXML.Параметры.Вставить("СписокСсылок", СписокОбъектов.ВыгрузитьЗначения()); УниверсальныйОбменДаннымиXML.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена; УниверсальныйОбменДаннымиXML.ИмяФайлаОбмена = ИмяФайлаОбмена; УниверсальныйОбменДаннымиXML.ВыполнитьВыгрузку(); КонецПроцедуры // То есть список будет выгружен в параметр СписокСсылок, соответственно нужно подправить установку параметра в запросе. |
|||
36
zladenuw
21.06.13
✎
13:29
|
получаю пустой запрос. хотя параметр вроде как заполнен.
что может быть не так ? |
|||
37
zladenuw
21.06.13
✎
13:30
|
(35) да этот код который вызывается уже в самой обработке обмена. когда перебирает ПКО. это уже исправил. сейчас другая проблема. пустой запрос. хотя параметр заполнен.
|
|||
38
zladenuw
21.06.13
✎
13:39
|
ура работает. только 1 но. не видит параметров. почему так может быть ?
|
|||
39
zladenuw
21.06.13
✎
13:40
|
(38) смотрю в отладчике. Параметр мой есть и он заполнен. почему в модуле перед обработкой он не видит значений ?
|
|||
40
zladenuw
21.06.13
✎
13:47
|
(39) не все заполнилось. тч пустая хотя вот склад заполнился и дата.
|
|||
41
zladenuw
21.06.13
✎
13:58
|
для ПКО нужно ставить какие то флаги или нет ?
|
|||
42
zladenuw
21.06.13
✎
14:00
|
(41) в хмл все есть. чего пустой документ :(
|
|||
43
zladenuw
21.06.13
✎
14:49
|
А как можно перед выгрузкой заменить значения. например автор стоит 1 пользователь, а мне при выгрузке нужно установить другого ?. так как загрузка выполняется на сервере в фоновом задание
|
|||
44
mxs089
21.06.13
✎
14:53
|
читай книгу по конвертации и жуй кактус
|
|||
45
zladenuw
21.06.13
✎
14:56
|
(43) разобрался. да втыканул. что можно просто написать Значение = Текущийпользователь.
|
|||
46
zladenuw
21.06.13
✎
14:59
|
(44) а книгу читал не раз. и толку. пока не столкнешься с реальной задачей. теория в топку
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |