Имя: Пароль:
1C
1С v8
Конвертация данных, перенос подчиненного объекта
,
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
Я так и не понял: самих контрагентов загружать не надо, только найти в базе-приемнике?