Имя: Пароль:
1C
1С v8
Конвертация данных - Передача документа и табличной части
,
0 VladSt
 
09.09.15
09:44
Добрый день
Задача такая: передать часть документов в другую базу. Выполняю запрос и передаю документы в ПКО:

    Запрос = Новый Запрос("
    |ВЫБРАТЬ *
    |ИЗ
    |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
    |ГДЕ
    |    РасходнаяНакладная.Дата >= &НачПериода
    |    И РасходнаяНакладная.Проведен
    |    И (НЕ РасходнаяНакладная.ПометкаУдаления)
    |");

    Запрос.УстановитьПараметр("НачПериода", Параметры.НачПериода);

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

в ПКО уатТТД_РасходнаяНакладная данные приходят и шапка документа нормально загружается. НО, в источнике и приемнике название табличной части разное, и поэтому не хочет загружать ТЧ. Как ПКГС заставить загружать из ТЧ с другим наименованием?
1 Мимохожий Однако
 
09.09.15
09:46
Где в приведенном запросе табличная часть?
2 VladSt
 
09.09.15
09:50
(1) в запросе звездочкой (*) считывает документ, в нем есть и ТЧ, ее тоже передает как ТаблицаЗначений, Наверное, можно было бы описать запрос подробно и там переименовать ТЧ, но хотелось бы ТЧ подменить на этапе выгрузки
3 Брегорьян
 
09.09.15
09:52
ВходящиеДанные.Вставить("Товары", РезультатыЗапроса[0].Выгрузить());
4 el-gamberro
 
09.09.15
09:54
Выгрузи таб часть как параметр с типом тз. При загрузке делай с таблицей значений что хочешь.
5 Мимохожий Однако
 
09.09.15
09:59
Выбрать Товары Как ДругоеНазваниеТЧ
6 VladSt
 
09.09.15
10:04
(5) во это именно то, про что и я думал, но тогда надо писать подробно запрос. Так?
7 VladSt
 
09.09.15
10:05
В ПКС для элементов можно использовать такой код:
Значение = ВходящиеДанные.РеквизитТакойТо;
А для групп это не работает ((
8 Mankubus
 
09.09.15
10:10
(7) пиши КоллекцияОбъектов = ВходящиеДанные.ТЧТакаяТо;
9 Mankubus
 
09.09.15
10:12
(8) + или КоллекцияОбъектов = Источник.ТЧТакаяТо; тогда запрос (0) не надо переделывать
10 VladSt
 
09.09.15
10:15
сделал как в (8), но тогда при обходе ТЧ не находит реквизиты. И так и так не работает:
//Сообщить("ВходящиеДанные.Всего " + ВходящиеДанные.Всего);
//Сообщить("КоллекцияОбъектов.Всего " + КоллекцияОбъектов.Всего);
11 Брегорьян
 
09.09.15
10:18
12 VladSt
 
09.09.15
10:33
(11)
http://i.imgur.com/ounkPLF.png?1
http://i.imgur.com/0DQWepG.png
http://i.imgur.com/Xgtjbgb.png

Начало выгрузки:   09.09.2015 10:17:10

Ошибка в обработчике события ПередВыгрузкой (свойства)
    ПКО                    =  уатТТД_РасходнаяНакладная  (Документ: Расходная накладная)
    ПКС                    =  24  (--> Всего)
    Объект                 =    (Неопределено)
    СвойствоПриемника      =  Всего  (Число)
    Обработчик             =  ПередВыгрузкойСвойства
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML(8972)
    КодСообщения           =  55
13 Брегорьян
 
09.09.15
10:39
(12) я не настаиваю
14 VladSt
 
09.09.15
10:40
)
15 Mankubus
 
09.09.15
10:48
(12) Всего это колонка ТЧ? в ПКС надо писать не КоллекцияОбъектов, а ОбъектКоллекции
16 VladSt
 
09.09.15
10:55
(15) Спасибо!
17 mc lammer
 
09.09.15
10:57
(0) зачем выгружаешь строку ТЗ с реквизитам объекта, а не сам объект ?  лишний гемор имхо.

а так,  можешь в обработчике перед выгрузкой для группы объектов соответсвующей ТЧ документа написать  КоллекцияОбъектов = Источник.<НазваниеТЧВИсточнике>
18 VladSt
 
09.09.15
13:50
(17)
Изначально я так и делал. Результат запроса выгружал в ТЗ:
ВыгрузитьПоПравилу(, , ТЗ, , "уатТТД_РасходнаяНакладная");
но почему то так не работало, (( Пришлось сделать так как есть.
19 VladSt
 
09.09.15
13:55
А еще подскажите.
После загрузки документов в справочнике Номенклатура создаются элементы, их родители. Но я бы хотел, чтобы для всех эти элементов с их родителями был самый главный родитель, например ГруппаКонвертированная. А дальше их иерархия сохранялась.
20 VladSt
 
09.09.15
14:03
Все разобрался. В ПКО Номенклатура ПослеЗагрузки:
Если НЕ ЗначениеЗаполнено(Объект.Родитель) Тогда
    Объект.Родитель = Справочники.Номенклатура.НайтиПоКоду("01");
КонецЕсли;
21 Naumov
 
09.09.15
14:06
(0) А нафиг пристраивать свой велосипед, где стандартная выборка прекрасно работает?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший