Имя: Пароль:
1C
1С v8
Как сопоставить один документ нескольким в конвертации данных.
0 Bodrug
 
29.10.15
15:38
Добрый день. Настраиваю обмен данными между двумя разными конфигурациями. В базе-источнике есть документ "Платежное поручение исходящее", в котором есть ссылка на документ "Договор контрагента"(типа Справочник). В базе есть аналогичный документ "Оплата договора", в котором есть ссылка "Договор контрагента". Эта ссылка имеет составной тип данных (может иметь ссылку на 6 документов). Вот мне нужно в ПКО в конвертации как-то дать программе что, что один документ в источнике соответствует нескольким документам в приемнике, и чтоб найти нужный документ, надо его искать по реквизиту "Номер договора".
Надеюсь, объяснил доступно. =)
1 MadJhey
 
29.10.15
15:42
есть ссылка на документ "Договор контрагента"(типа Справочник)?
2 Bodrug
 
29.10.15
15:43
(1) да. это элемент справочника, типовая Бухгалтерия для Украины.
3 MadJhey
 
29.10.15
15:44
Договор контрагента в приемнике какой тип имеет?  6 типов документов или справочников?
4 Bodrug
 
29.10.15
15:44
"есть ссылка на документ "Договор контрагента"(типа Справочник)" - читать как "есть ссылка на справочник "Договор контрагента"
5 Bodrug
 
29.10.15
15:44
сорри, очепятка
6 Bodrug
 
29.10.15
15:45
(3) в приемнике 6 типов документов, в источнике - 1 типа справочник
7 MadJhey
 
29.10.15
15:46
думаю вы используете только один тип документа, а не все 6.
8 Bodrug
 
29.10.15
15:46
(7) Да, но это разные документы
9 MadJhey
 
29.10.15
15:47
переносить в разных условиях надо в разные типы документов?
10 MadJhey
 
29.10.15
15:48
ПКО ДоговорыКонтаргентов в ДоговорыКонтрагентов (документ).
Поля поиска Номер договора в Номер документа.
В дату документа можно какую-нибудь константу засунуть.
11 MadJhey
 
29.10.15
15:49
если (9) то переопределить ИмяПКО
12 Bodrug
 
29.10.15
15:52
(9) нужно по по значению "Номер договора" из источника искать документ с таким же значением этого реквизита в приемнике в 6-ти документах.Если не нашли договора с таким номером, то новый НЕ создаем.
13 MadJhey
 
29.10.15
16:02
(12) о как
14 Bodrug
 
29.10.15
16:04
(12) а если нашли, то его подставлять в поле "Договор контрагента".
15 MadJhey
 
29.10.15
16:04
тогда в "после загрузки" договоров, делаешь запрос к 6 типа документов, если нашли то подставляем.
16 MadJhey
 
29.10.15
16:05
типа=типов
17 Bodrug
 
29.10.15
16:06
(16) А как там в запрос передать параметр?
18 MadJhey
 
29.10.15
16:08
(15) не правильно -  в "после загрузке" документа, а не договора.
номер можно в комментарии передать
19 MadJhey
 
29.10.15
16:09
ну или сделать доп. узел XML.
20 Bodrug
 
29.10.15
16:41
(18) Буду пробовать, спасибо
21 Bodrug
 
29.10.15
17:42
Теперь другой вопрос. Я пытаюсь сделать следующее: в обработчике "При выгрузке" прописал:

Попытка
    Параметры.Вставить("НомерДок",Источник.Состав[0].ДоговорКонтрагента.Номер);
Исключение
    КонецПопытки;

В обработчике "После загрузки" формирую запрос с отбором по коду и в этот запрос передаю параметр:

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
|    ДоговорАвто.Ссылка
|ИЗ
|    Документ.ДоговорАвто КАК ДоговорАвто
|ГДЕ
|    ДоговорАвто.Номер = &Номер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДоговорНС.Ссылка
|ИЗ
|    Документ.ДоговорНС КАК ДоговорНС
|ГДЕ
|    ДоговорНС.Номер = &Номер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДоговорВЗР.Ссылка
|ИЗ
|    Документ.ДоговорВЗР КАК ДоговорВЗР
|ГДЕ
|    ДоговорВЗР.Номер = &Номер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДоговорОСАГО.Ссылка
|ИЗ
|    Документ.ДоговорОСАГО КАК ДоговорОСАГО
|ГДЕ
|    ДоговорОСАГО.Номер = &Номер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДоговорЗК.Номер
|ИЗ
|    Документ.ДоговорЗК КАК ДоговорЗК
|ГДЕ
|    ДоговорЗК.Номер = &Номер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДоговорПроизвольный.Ссылка
|ИЗ
|    Документ.ДоговорПроизвольный КАК ДоговорПроизвольный
|ГДЕ
|    ДоговорПроизвольный.Номер = &Номер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ДоговорКвартираЭксперт.Ссылка
|ИЗ
|    Документ.ДоговорКвартираЭксперт КАК ДоговорКвартираЭксперт
|ГДЕ
|    ДоговорКвартираЭксперт.Номер = &Номер";
Запрос.УстановитьПараметр("Номер",ПараметрыОбъекта.НомерДок);
Рез = Запрос.ВыполнитьВыгрузить();
Если Рез.Количество()<>0 Тогда
    Объект.Состав[0].Договор = Рез[0].Ссылка;    
КонецЕсли;


Запускаю обмен через стандартную обработку "Универсальный обмен в формате ХМЛ", и выдается мне такое сообщение "Ошибка в обработчике После загрузки объекта...Значение не является значением объектного типа НомерДок". Подскажите, что я не так делаю?
22 Bodrug
 
29.10.15
17:43
Пробовал Запрос.УстановитьПараметр("Номер",Параметры.НомерДок)
Тоже не помогло.
23 Bodrug
 
29.10.15
17:47
Может, я как-то неверно передал параметр?
24 hhhh
 
29.10.15
17:53
параметры не передаются просто так из выгрузки в загрузку
25 Bodrug
 
29.10.15
17:54
(24) может есть какой-нибудь другой способ?
26 MadJhey
 
29.10.15
17:56
Попытка
    Параметры.Вставить("НомерДок",Источник.Состав[0].ДоговорКонтрагента.Номер);
Исключение
    КонецПопытки;
это нафига?

сделай как я уже писал через комментарий:

там же где запрос
Запрос.УстановитьПараметр("Номер",j,Объект.Комментарий)
27 MadJhey
 
29.10.15
17:56
Запрос.УстановитьПараметр("Номер",Объект.Комментарий)
28 MadJhey
 
29.10.15
17:57
Объект.Состав[0].Договор = Рез[0].Ссылка;
В табличной части "Состав" строки точно есть?
29 Bodrug
 
29.10.15
18:00
(27) Дело в том, что Комментарий уже занят, да и конфа типовая - не хочется снимать с поддежки и "допиливать".
30 Bodrug
 
29.10.15
18:02
(28) Это я не предусмотрел, сделаю проверку
31 MadJhey
 
29.10.15
18:14
новый реквизит при обновлении мешать не будет. минус - не получится самостоятельно пользователям обновлять конфу.

других реквизитов нет?

тогда кури Бояркова передача произвольного значения в приемник через доп. узел XML.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший