Имя: Пароль:
1C
1С v8
Конвертация 2 Не пойму как сделать
0 wuff
 
14.08.23
15:21
Есть готовая конвертация. В ТЧ документа нужно добавить выгрузку поля договор. Договор имеет реквизиты (вообще это документ в источнике): Номер, Дату, Сотрудник. Сотрудника надо конвертировать в контрагента для базы приемника. Так вот, модифицировал я запрос формирования ТЧ для загрузки, получаю там номер, дату и сотрудника. Добавил в конвертации свойств таб. части свое поле договор задаю значение:

ПКС.ПередВыгрузкой

Значение = Новый Структура;

Значение.Вставить("НомерДоговора", ОбъектКоллекции.НомерДоговораГПХ);
Значение.Вставить("ДатаДоговора", ОбъектКоллекции.ДатаДоговораГПХ);
Значение.Вставить("Сотрудник", ОбъектКоллекции.СотрудникДоговораГПХ);

В ПКО Договоры ПередВыгрузкой делаю чтобы из сотрудника сделать контрагента

ДанныеКонтрагента = Новый Структура;
ДанныеКонтрагента.Вставить("ВидКонтрагента", "ФизЛицо");
ДанныеКонтрагента.Вставить("ИНН", Источник.Сотрудник.ФизическоеЛицо.ИНН);
ДанныеКонтрагента.Вставить("ЮридическоеФизическоеЛицо", Источник.Сотрудник.ФизическоеЛицо);
ДанныеКонтрагента.Вставить("Наименование", Источник.Сотрудник.ФизическоеЛицо.Наименование);
ДанныеКонтрагента.Вставить("КонтактнаяИнформация", Источник.Сотрудник.ФизическоеЛицо.КонтактнаяИнформация.Выгрузить());

ВходящиеДанные = Новый Структура("Контрагент", ДанныеКонтрагента);

ПКС задаю правило для контрагента и ставлю отметку получить из входящих данных.

Проблема в том что номер и дата договора выгружаются, а вот поле контрагент ни в какую...
Подскажите ЧЯДНТ? Такое ощущение, что правило конвертации контрагента не дергается, а почему не могу понять.
1 Baiji
 
14.08.23
16:41
ПКО, Перед выгрузкой:

ВходящиеДанные = Новый Структура;

Если Источник.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратДенежныхСредствОтНаемногоПерсонала Тогда
    Отказ = Источник.РасшифровкаПлатежа.Количество() = 0;
    Если НЕ Отказ Тогда
        ВходящиеДанные.Вставить("Контрагент", Источник.РасшифровкаПлатежа[0].НаемныйПерсонал);
        ВыгрузитьПоПравилу(Источник.РасшифровкаПлатежа[0].НаемныйПерсонал,,ВходящиеДанные,,"НаемныйПерсонал");
    КонецЕсли;
ИначеЕсли Источник.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратДенежныхСредствОтСотрудника Тогда
    ВходящиеДанные.Вставить("Контрагент", Источник.Подотчетник);
    ВыгрузитьПоПравилу(Источник.Подотчетник,,ВходящиеДанные,,"Сотрудники");
ИначеЕсли ЗначениеЗаполнено(Источник.Контрагент) Тогда
    ВходящиеДанные.Вставить("Контрагент", Источник.Контрагент);
    ВыгрузитьПоПравилу(Источник.Контрагент,,ВходящиеДанные,,"Контрагенты");
ИначеЕсли ЗначениеЗаполнено(Источник.Подотчетник) Тогда
    ВходящиеДанные.Вставить("Контрагент", Источник.Подотчетник);
    ВыгрузитьПоПравилу(Источник.Подотчетник,,ВходящиеДанные,,"Сотрудники");
Иначе
    Отказ = Истина;
КонецЕсли;
2 Baiji
 
14.08.23
16:42
ВыгрузитьПоПравилу не хватает
3 Baiji
 
14.08.23
19:35
ПКО "Источник:Сотрудник > Приемник:Контрагент" есть?
4 wuff
 
14.08.23
20:11
(3) Да.
5 Baiji
 
14.08.23
22:24
(4) Тогда не нужны все эти структуры. Выше, я выдернул рабочий код.
Договор выгружаются в Договор?

Как-то так, в в ПКО Договор, перед выгрузкой:

ВходящиеДанные.Вставить("Контрагент", Источник.Сотрудник);
ВыгрузитьПоПравилу(Источник.Сотрудник,,ВходящиеДанные,,"ПКО_СотрудникКонтрагент");

https://disk.yandex.ru/i/aXN1vhn0WeI4EQ
6 Baiji
 
14.08.23
22:27
А все связи реквизитов прописываем в ПКО_СотрудникКонтрагент
Для сложных реквизитов, в ПКС Перед Выгрузкой: Значение = <произвольный алгоритм>
7 Baiji
 
14.08.23
22:28
Ну и т.к. ТЧ, то все это в цикле по строкам ТЧ
8 Baiji
 
14.08.23
22:32
Хотя, сотрудник в договоре, наверное не в ТЧ. Тогда как я и написал.
9 wuff
 
15.08.23
09:27
(5) Не, проблема в том что источник (договор) у меня это структура. Не ссылочный тип, потому он дальше свойств отмеченных для поиска и не выгружает...
10 wuff
 
15.08.23
10:31
ВыгрузитьПоПравилу выгружает контрагента, просто как элемент справочника, и там все ок. Но, в поле договор не подхватывает его. Т.е. в результате в табличной части в поле контрагент есть только значения для поиска (ИНН, Вид контрагента).
11 Лирик
 
15.08.23
16:42
Что то вы несусветное нагородили, батенька. Все проще.
Из (0) не очень понятно куда нужно передать договор, но предположим:
Есть документ источник с реквизитами "ХозяйственнаяОперация, Контрагент, Подотчетник" и ТЧ "РасшифровкаПлатежа" с реквизитами ТЧ "НомерГПХ, ДатаГПХ"
Есть документ приемник в котором есть ТЧ "РасшифровкаПлатежа" у которой есть реквизит  "Договор"

1) В группе ПКС "РасшифровкаПлатежа" добавляем новую строку где приемник - реквизит "Договор".
2) "Перед выгрузкой" этой строки пишем:
    
    СтруктураДоговора = Новый Структура;
    СтруктураДоговора .Вставить("Номер", ОбъектКоллекции.НомерГПХ");
    СтруктураДоговора .Вставить("Дата", ОбъектКоллекции.ДатаГПХ");
    
    // Заполняем другие реквизиты которые будут присутствовать в ПКО "Договоры"
    Если Источник.ХозяйственнаяОперация = ... Тогда
      СтруктураДоговора .Вставить("Контрагент", Источник.Контрагент");
    ИначеЕсли Источник.ХозяйственнаяОперация = ... Тогда
      СтруктураДоговора .Вставить("Контрагент", Источник.Подотчетник");
    .......
    Иначе
      Отказ = Истина; //
    КонецЕсли;
    
    Значение = СтруктураДоговора;

3) Создаем ПКО "ДоговорыБезИсточника" где источник пустой, а приемник справочникссылка.Договоры.
   Состав свойств должен совпадать со свойствами СтруктураДоговора из 2)
   У этого ПКО ставим свойство "Не запоминать выгруженные"
   У ПКС реквизита "Контрагент" оставляем пустым "Правило конвертации" а в обработчике "Перед выгрузкой" пишем примерно следующее:
   Если ТипЗнч(Источник.Контрагент) = Тип("СправочникСсылка.Контрагенты") Тогда
      ИмяПКО = "Контрагенты";
   ИначеЕсли ТипЗнч(Источник.Контрагент) = Тип("СправочникСсылка.Сотрудники") Тогда
      ИмяПКО = "Сотрудники_В_Контрагенты";
      .....
   КонецЕсли;
4) Создаем Нужные ПКО для конвертации других типов в контрагенты ("Сотрудники_В_Контрагенты"). Ну и контрагенты в контрагенты уже должен быть.
5) В ПКС объекта коллекции "Договоры" группы свойств "РасшифровкаПлатежа" 1) назначаем правило конвертации "ДоговорыБезИсточника".
12 Лирик
 
15.08.23
16:45
* // Заполняем другие реквизиты которые будут присутствовать в ПКО "ДоговорыБезИсточника"
13 wuff
 
15.08.23
21:25
(11) У меня единственная проблема: в вашем п. 3. не дергается правило выгрузки "Контрагенты". В отладчике я выяснил, что когда передаешь структуру (из П. 2) то выгружаются только свойства отмеченный для поиска, у меня это номер и дата, они выгружаются. Может конечно я что-то делаю не так, не спорю... Только у меня в п. 3, как раз, поле "Правило конвертации" не пустое, а выбрано конкретное.
14 Лирик
 
17.08.23
09:51
(13) Вот и сравните состав ключей и ТИПЫ значений структуры которую вы передаете в качестве источника для ПКО с составом и ТИПОМ полей источника в ПКО. Вы же не написали по какому ПКО вы конвертируете контрагента из структуры. Если вы сделаете как в (11) у вас все заработает, поверьте. Можете обратиться лично в почту (у меня открыта) свяжемся - помогу.
15 wuff
 
17.08.23
10:11
(14) Спасибо.