Имя: Пароль:
1C
1С v8
КД2. Указать документ основания в базе приемнике.
0 KazSever
 
06.10.21
20:01
Коллеги, добрый всем вечер.
Такая ситуация: из одного документа, при выгрузке по правилам обмена КД2, создаются два документа. Как указать в одном из них, что первый является документом основания второго?
1 Жан Пердежон
 
06.10.21
20:11
В реквизит второго записать ссылку на первый
2 KazSever
 
06.10.21
20:14
(1)А как ее получить?
3 серый КТУЛХУ
 
06.10.21
20:57
(2): судя по вашему вопросу - никак.
4 GANR
 
06.10.21
21:16
(0) 1 документу-основанию соответствует 1 документ-потомок? Если да, то хэш-функцией на основании ГУИД-а документа из источника сгенерировать ГУИД документа основания. Если же нет, то это не к форуму вопрос уже.
5 KazSever
 
06.10.21
21:38
(4) Вот, о чем я говорю
https://ibb.co/CWZKrw3
6 vde69
 
06.10.21
21:53
ВыгрузитьПоПравилу

и в параметрах передаешь ключ на первый
7 KazSever
 
06.10.21
21:55
(6) А в обработчике каком событии это сделать? Перед выгрузкой?
8 vde69
 
06.10.21
22:01
(7) перед выгрузкой ОБЪЕКТА.

только с передачей параметра есть засада, тебе нужно передавать ключ а потом после загрузки по ключу искать документ и записывать ссылку, то есть уже в базе приемника обработка параметра должна быть.

хотя можно передать и "по ссылке" но это не очень красиво будет
9 KazSever
 
06.10.21
22:04
(8) Спасибо, буду пробовать!
10 hhhh
 
06.10.21
22:50
что-то вы напугали парня. Просто создать 2 правила, а в ПКС ДокументОснование первого правила задать Значение = Источник.Ссылка; и указать там второе правило.
11 KazSever
 
07.10.21
12:00
В общем нашел следующий выход из ситуации - в обработчике события ПКО "после загрузки" программно создаю подчиненный документ и тут же указывают в нем нужный документ основания (так же и заполняю нужные реквизиты). Конечно вопрос о дублях возникает, но думаю организовать поиск по коду и дате документа не составит труда.

НовыйДок = Документы.эл_ПоступлениеЗерна.СоздатьДокумент();

НовыйДок.Номер = Объект.Номер;
НовыйДок.Дата  = Объект.Дата;
НовыйДок.ДокументОснование = Объект.Ссылка;

НовыйДок.Записать();

Всем спасибо за помощь, думаю вопрос закрыт.
12 vde69
 
07.10.21
20:24
до меня дошел самый простой способ

в ПВД делаем выгрузку только для вторичного(подчиненного) документа, все штатно
в ПКС у этого документа (поле "ДокументОснование") указываем указываем
Значение = Источник.Ссылка
и в свойствах указываем на ПКО родителя
у Родителя указываем "всегда выгружать обьект"
13 серый КТУЛХУ
 
08.10.21
12:54
(12): ха, при выгрузке данных создается подчиненный, в его реквизит суется ссылка на документ-источник - и уже по значению этого реквизита по пко он же выгоняется туда же (в выгрузку) уже по-другому?..
14 vde69
 
08.10.21
21:20
(13) да именно так.

единственный минус системы - всегда будет создаватся два документа с одним гуидом, но это не смертельно по сколько типы (и таблицы) разные
15 Naumov
 
09.10.21
01:15
(14) Беда начинается, когда эти два документа оказываются в одном журнале документов
16 серый КТУЛХУ
 
09.10.21
01:55
(15): а развернуть этот комментарий - можно?
(заранее благодарен)
17 acanta
 
09.10.21
06:28
(16) вероятно, что-то вроде попытки вставки не уникального значения в уникальный индекс
18 hhhh
 
09.10.21
08:30
(14) не создается там с одинаковым гуидом. КД2 не совсем тупая. Надо просто в правиле убрать поиск по уникальному идентификатору. И оставить поиск по номеру и дате.
19 vde69
 
09.10.21
13:31
(18) да можно и с разными гуидами создавать, и если уж делать хорошо - гуид перегенерить и записать в регистр соответствий и поиск делать по гуиду через регистр.

(15) в (12) я написал в пол девятого вечера по памяти без живого примера, но практически без кода, одними галочками...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший