|
Конвертация данных, перенос подчиненного объекта | ☑ | ||
---|---|---|---|---|
0
MuhinaL
07.07.16
✎
15:10
|
Добрый день.
Есть задача: из хмл файла получить файл для загрузки через стандартную выгрузку/загрузку хмл. Из файла получаю структуру вида "Тег" - "значение" В "ПередВыгрузкойДанных" Конвертации вызываю формирование структуры и ВыгрузитьПоПравилу() для справочника "Договоры". Справочник "Договоры" заполняю по структуре. Проблема: имеется реквизит "Контрагент". Надо: выгрузить сначала Контрагента, а потом при выгрузке Договора указать на Контрагента. Если выгружать сначала всех Контрагентов, а потом все договора - то непонятно, как получить ссылку на Контрагента. Если вызывать ВыгрузитьПоПравилу "Контрагент" в момент ПКС "ПередВыгрузкой" Договоров, то получается что сначала выгружается Договор, потом Контрагент, что некрасиво. Вопрос: каким образом при выгрузке Договора получить объект Контрагент и как указать на него ссылку? Конвертация 2.1 |
|||
1
gorakh
07.07.16
✎
15:31
|
Написано явно не о конвертации. Или решили "в рукопашную" файл подготовленный конвертацией загрузить?
|
|||
2
gorakh
07.07.16
✎
15:33
|
В ПКО всех объектов поставте настройку синхронизировать по внутренниму идентификатору.
|
|||
3
Sonny
07.07.16
✎
15:45
|
(0) У контрагентов в файле есть какие-то идентификаторы? Как они связаны с договорами в этом файле?
|
|||
4
gorakh
07.07.16
✎
16:05
|
Кусок из файла "встудию"
|
|||
5
MuhinaL
07.07.16
✎
16:08
|
Написано именно о конвертации. Конвертация позволяет из файла хмл произвольной структуры получить файл хмл со структурой, которую примет стандартная загрузка хмл.
Имею: <Элемент> <Контрагент> Иванов </Контрагент> <Договор> Основной </Договор> </Элемент> Надо: <ФайлОбмена> <Объект Нпп="1" Тип="СправочникСсылка.Контрагенты" ИмяПравила="Контрагенты"><Ссылка> <Свойство Имя="Наименование" Тип="Строка"> <Значение>Иванов</Значение> </Свойство> </Ссылка> </Объект> <Объект Нпп="2" Тип="СправочникСсылка.Договоры" ИмяПравила="Контрагенты"><Ссылка> <Свойство Имя="Наименование" Тип="Строка"> <Значение>Основной</Значение> </Свойство> </Ссылка> </Объект> <Объект Нпп="2" Тип="СправочникСсылка.Договоры" ИмяПравила="Договоры"><Ссылка> <Свойство Имя="Наименование" Тип="Строка"> <Свойство Имя="Контрагент" Тип="СправочникСсылка.Договоры"><Ссылка Нпп="1"> <Значение>Основной</Значение> </Свойство> </Ссылка> </Объект> </ФайлОбмена> |
|||
6
MuhinaL
07.07.16
✎
16:09
|
Простите, задублировалось
Надо: <ФайлОбмена> <Объект Нпп="1" Тип="СправочникСсылка.Контрагенты" ИмяПравила="Контрагенты"><Ссылка> <Свойство Имя="Наименование" Тип="Строка"> <Значение>Иванов</Значение> </Свойство> </Ссылка> </Объект> <Объект Нпп="2" Тип="СправочникСсылка.Договоры" ИмяПравила="Договоры"><Ссылка> <Свойство Имя="Наименование" Тип="Строка"> <Значение>Основной</Значение> <Свойство Имя="Контрагент" Тип="СправочникСсылка.Договоры"><Ссылка Нпп="1"> <Значение>Иванов</Значение> </Свойство> </Ссылка> </Объект> </ФайлОбмена> |
|||
7
MuhinaL
07.07.16
✎
16:13
|
Постараюсь подробнее описать: нет выгружаемых объектов. Источники везде пустые. Я алгоритмом получаю данные в виде структуры и из него генерирую данные для загрузки.
Это приводит к тому, что стандартные ПВД не срабатывают, т.к. выгружать по идее нечего. Применяю выгрузку ВыгрузитьПоПравилу(, , МояСтруктура, , "Договоры"). Договор выгружается ОК, но ссылочные типы не заполняются. Потому что их как бы нет. И надо все ссылочные типы: 1. выгрузить принудительно. 2. после выгрузки подхватить и запихнуть в контрагента |
|||
8
Sonny
07.07.16
✎
16:20
|
(7) Судя по файлу у тебя идентификатор - наименование. Сделай правило с полем поиска Наименование и выгружай по нему. Можешь сначала выгрузить всех контрагентов, потом договоры.
|
|||
9
hhhh
07.07.16
✎
16:31
|
(7) справочник контрагенты загружается изначально, при первоначальном переносе. А потом подгружаются только измененные и новые.
|
|||
10
gorakh
07.07.16
✎
16:52
|
У договоров есть реквизит владелец=контрагенту. Не наблюдаю его.
|
|||
11
MuhinaL
07.07.16
✎
17:28
|
(10)
Конфа не типовая. Договора не подчинены. Есть реквизит "Контрагент", в котором и хранится владелец. (8) Выгружаю Контрагентов, выгружаю Договоры. Без проблем. При загрузке в Договорах нет упоминанию на Контрагента. Косяк. В Договоре есть ПКС для Контрагента. Но, т.к. физически Контрагента нет - то ничего не выгружается. Я думала, что в данном случае будет выгружаться Контрагент по правилу ПКО Контрагенты. Но снова - объекта-то нет, кого выгружать - непонятно. В момент выгрузки Договора надо заиметь Контрагента. Плохо знаю про параметры или Получение из входящих данных - может туда рыть? |
|||
12
MuhinaL
07.07.16
✎
17:30
|
Либо заиметь не ссылку, а принудительно выгрузить Контрагента в момент выгрузки Договора.
Пока что других идей нет. |
|||
13
Sonny
07.07.16
✎
17:41
|
(11) Не надо, чтобы контрагент был физически. Сделай ИсходящиеДанные в ПКС, заполни их реквизитами контрагента, в ПКО поставь флажки получить из входящих данных.
|
|||
14
MuhinaL
07.07.16
✎
18:40
|
(13)
Делаю так ПКС "Перед выгрузкой" свойства "Контрагент" для ПКО "Договоры": ИсходящиеДанные = Новый Структура("Контрагент", ВходящиеДанные.Контрагент) В ПКО "Контрагенты" - галочка ПолучитьИзВходящих. ПКС "Перед выгрузкой" свойства "Наименование" для ПКО "Контрагенты" - Значение = ВходящиеДанные.Контрагент. Результат: выгрузились только Контрагенты. |
|||
15
bolder
08.07.16
✎
05:03
|
(5) Глаз режет:
Свойство Имя="Контрагент" Тип="СправочникСсылка.Договоры"><Ссылка Нпп="1"> |
|||
16
MuhinaL
08.07.16
✎
07:07
|
(15) да, должно быть Свойство Имя="Контрагент" Тип="СправочникСсылка.Контрагенты"><Ссылка Нпп="1">
Невнимательна, пропустила момент. Если это поправить то есть решение? |
|||
17
Sonny
08.07.16
✎
11:17
|
(14) В ПВД можно убрать ВыгрузитьПоПравилу(). Вместо этого создаем таблицу значений ВыборкаДанных, добавляем колонки "Ссылка", "Наименование", "Контрагент" и если есть еще другие в соответствии со свойствами Договора.
Заполняем таблицу значений ВыборкаДанных строками-договорами. Поле "Контрагент" заполняем строкой таблицы значений со свойствами Контрагента ("Ссылка, Наименование"). Ссылки генерим следующим образом: Справочники.Контрагенты.ПолучитьСсылку() Галку получить из входящих данных нигде не ставим. При правильном заполнении выборки данных в ПВД для договоров больше никакой код нигде не понадобится. |
|||
18
mistеr
08.07.16
✎
12:19
|
Я так и не понял: самих контрагентов загружать не надо, только найти в базе-приемнике?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |