Имя: Пароль:
1C
 
Конвертация одного документа в несколько. Очень нужна помощь.
0 Ataulf
 
06.09.06
01:51
Вопрос к спецам по Конвертации Данных 2.0.
Использую Конвертацию 2.0.13.1.
Перенос одной самописной конфы в другую самописную. Обе на v8.

Так вот ситуация:

Существуют некие ДокПриемник и ДокИсточник. В ДокИсточнике есть табличная часть, а в ДокПриемнике её нет. Нужно, чтобы для каждой строки табчасти ДокИсточника создавался новый ДокПриекник. Возможно ли это сделать?

Первое, что я придумал - это создать глобальный параметр - таблицу значений, заполнять её во время выгрузки, а при загрузке формировать новый ДокПриемник для каждой строки. Но это не получилось, т.к. собственные параметры в события загрузки не передаются (флажок "использовать при загрузке" на закладке параметров не работает, имхо).
Дальше пытался извращаться с ПКО с входящими и выходящими данными, но это всё не то.

Кто нибудь сталкивался? Есть идеи?
2 DF_Slayer
 
06.09.06
05:08
(0) Один раз видел КД2. Но идея такая: при выполнении правила (неважно какого), может быть задано действие (скрипт), которое вполне может решить эту проблему. Делал на 77, поэотому за результат не ручаюсь.
3 StranNik1С
 
06.09.06
10:26
Используй процедуру ВыгрузитьПоПравилу в обработчике ПередВыгрузкой группы свойств (табличной части). Параметр ОбъектКоллекции этого обработчика - строка табличной части. Его передаешь например в качестве параметра ИсходящиеДанные процедуры.
При вызове процедуры будет запускаться ПКО документа-приемника. Источник для  ПКО пустой, реквизиты документа заполняешь из исходящих данных. Примерно так.
4 Ajeksa
 
06.09.06
10:40
//Цикл по строкам докумена источника
Источник.ВыбратьСтроки();
Пока Источник.ПолучитьСтроку()=1 Цикл
...
СписокПолей.Установить("ТипПриемника2", ТипПриемника2);
СписокПолей.Установить("ИмяПКО2", ИмяПКО2);
СписокПолей.Установить("СуммаДокумента", Источник.Сумма);

...
// Табличную часть оформим в виде табл. и передадим в реквизит.
СписокПолей.Установить("РасшифровкаПлатежа", ТЗ);
...

// Функция ВыгрузитьПоПравилу(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО = "", УзелСсылки = "", ТолькоПолучитьУзелСсылки = 0, НомерПКО = 0)
// Источник передадим только чтобы корректно прописалось время документа
ВыгрузитьПоПравилу(Источник,,СписокПолей,,"ПлатежноеПоручениеИсходящее");//Источник
...
5 Ataulf
 
08.09.06
16:13
В ПКО: источник пустой, приемник - ДокПриемник(Без Таб части). Выбираем нужные поля и ставим галку "Получить из входящих данных". Я выбрал все поля (даже дату и номер). На всякий случай указываем правила конвертации для реквизитов (склад там какой-нить или номенклатура). Имя ПКО = "Приемка";

Делаем ПВД для ДокИсточника (ПриемкаТМЦ, с табчастью);
В событии ПередВыгрузкой пишем:

Для Каждого Строка Из Объект.Номенклатура Цикл
   
   ВходящиеДанные = Новый Структура;
   ВходящиеДанные.Вставить("Номер",Объект.Номер);
   ВходящиеДанные.Вставить("Дата",Объект.Дата);
   ВходящиеДанные.Вставить("Склад",Объект.СкладПриемник);
   ВходящиеДанные.Вставить("ВидТовара",Строка.Номенклатура);
   ВходящиеДанные.Вставить("Количество",Строка.Количество);
   ВходящиеДанные.Вставить("СуммаПолучения",Строка.Сумма);
   
   ВыгрузитьПоПравилу(,,ВходящиеДанные,,"Приемка");
   
КонецЦикла;

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

p.s. Насчет v7 в названии темы - я ошибся при создании. Тема - v8.
Ошибка? Это не ошибка, это системная функция.