Имя: Пароль:
1C
1С v8
подскажите с кд. выгрузка нескольких объектов в 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
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) а книгу читал не раз. и толку. пока не столкнешься с реальной задачей. теория в топку