Имя: Пароль:
1C
1С v8
Конвертация данных: Один справочник в два
, ,
0 abask
 
11.08.11
15:44
Не могу разобраться...

Делаю перенос контактных лиц из БП в УТ
В БП один справочник
КонтактныеЛица
в УТ два
КонтактныеЛица и КонтактныеЛицаКонтрагентов

Справочник КонтактныеЛицаКонтрагентов содержит ссылку на КонтактныеЛица

подкиньте мысль как это правильно делается...
1 Живой Ископаемый
 
11.08.11
15:46
два правила
2 abask
 
11.08.11
15:46
(2) ПВД или ПКО?
3 PVV65
 
11.08.11
15:47
(2) ПКО
4 abask
 
11.08.11
15:49
(3) с запросом типа этого
Запрос = Новый Запрос("
|ВЫБРАТЬ
|    КонтактнаяИнформация.Объект,
|    КонтактнаяИнформация.Тип,
|    КонтактнаяИнформация.Вид,
|    КонтактнаяИнформация.Представление,
|    КонтактнаяИнформация.Поле1,
|    КонтактнаяИнформация.Поле2,
|    КонтактнаяИнформация.Поле3,
|    КонтактнаяИнформация.Поле4,
|    КонтактнаяИнформация.Поле5,
|    КонтактнаяИнформация.Поле6,
|    КонтактнаяИнформация.Поле7,
|    КонтактнаяИнформация.Поле8,
|    КонтактнаяИнформация.Поле9,
|    КонтактнаяИнформация.Поле10,
|    КонтактнаяИнформация.Комментарий,
|    КонтактнаяИнформация.ЗначениеПоУмолчанию,
|    КонтактнаяИнформация.ТипДома,
|    КонтактнаяИнформация.ТипКорпуса,
|    КонтактнаяИнформация.ТипКвартиры
|ИЗ
|    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
|    КонтактнаяИнформация.Объект = &Объект");

Запрос.УстановитьПараметр("Объект", Источник);
Выборка = Запрос.Выполнить().Выбрать();
Сообщить(Выборка.Количество());
Пока Выборка.Следующий() Цикл
ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация");
КонецЦикла;
5 abask
 
11.08.11
15:49
?
6 Живой Ископаемый
 
11.08.11
15:51
Пока Выборка.Следующий() Цикл
ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация");
ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация2");
КонецЦикла;
7 abask
 
11.08.11
16:29
сделал два ПКО
КонтактныеЛица и КонтактныеЛицаКонтрагентов

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

Запрос.УстановитьПараметр("Объект", Источник);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВыгрузитьПоПравилу(Выборка, , , , "КонтактныеЛицаКонтрагентов");
ВыгрузитьПоПравилу(Выборка, , , , "КонтактныеЛица");
КонецЦикла;

выдает такую ошибку
ОписаниеОшибки         =  Ошибка при вызове метода контекста (Выполнить): {(11, 24)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
КонтактныеЛица.Ссылка <<?>>= &Объект

хотя при отладке типы вроде совпадают
8 Buster007
 
11.08.11
16:48
а Источник точно тип Ссылка? может быть Источник.Ссылка?
9 abask
 
11.08.11
16:53
Источник.Ссылка - то же самое
10 PVV65
 
11.08.11
17:03
(7)
1. В ПКО КонтактныеЛицаКонтрагентов Источник - КонтактныеЛица или КонтактныеЛицаКонтрагентов?
2. Вместо обработчика ПослеВыгрузки - ПередВыгрузкой.
11 abask
 
11.08.11
17:26
(10)
Источник КонтактныеЛица и там и там

КонтактныеЛицаКонтрагентов в БП нету
12 PVV65
 
12.08.11
08:51
Создаешь ПКО "КонтактныеЛица" - Источник "КонтактныеЛица", приемник "КонтактныеЛица".
В обработчике ПередВыгрузкой пишешь -

ВыгрузитьПоПравилу(Источник, , , , "КонтактныеЛицаКонтрагентов");

Создаешь ПКО "КонтактныеЛицаКонтрагентов" - Источника нет, приемник "КонтактныеЛицаКонтрагентов".

В обоих ПКО синхронизируешь свойства.
13 PVV65
 
12.08.11
08:52
+(12) В ПКО "КонтактныеЛицаКонтрагентов" - Источник "КонтактныеЛица".
14 abask
 
12.08.11
10:44
Не помогло

(12) с чем синхронизировать свойство КонтактноеЛицо в ПКО КонтактныеЛицаКонтрагентов?
15 PVV65
 
12.08.11
10:49
(12) Если я правильно понимаю структуру метаданных, то в ПКС КонтактноеЛицо - Источник - нет, Приемник - КонтактноеЛицо, Перед Выгрузкой - "Значение = Источник".
16 abask
 
12.08.11
11:51
тогда ошибка
Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(10224)}: Поле объекта не обнаружено (КонтактныеЛица)

видимо нужно в ПКО или ПВД КонтактныеЛица предусмотреть, чтобы не обрабатывалось это ПКС
17 PVV65
 
12.08.11
12:03
(16) В (15) у меня не было "КонтактныеЛица". Что там у тебя напутано. "КонтактныеЛица" - это справочник. Где у тебя "КонтактныеЛица" - поле объекта?
18 abask
 
12.08.11
12:42
Поле объекта КонтактноеЛицо есть в справочнике КонтактныеЛицаКонтрагентов
Мы выгружаем КонтактныеЛица по правилу КонтактныеЛицаКонтрагентов (12)
Вот отсюда, похоже, и проблема...
19 abask
 
12.08.11
12:44
упс, а ведь там (16) не КонтактноеЛицо, а КонтактныеЛица, сейчас буду разбираться
20 PVV65
 
12.08.11
12:52
(18) В (16) написано >> Поле объекта не обнаружено (КонтактныеЛица). В (18) пишешь >> Поле объекта КонтактноеЛицо есть в справочнике.

Как решается эта задача:

1. ПКО "КонтактныеЛица" - в обработчике ПередВыгрузкой -

ВыгрузитьПоПравилу(Источник, , , , "КонтактныеЛицаКонтрагентов");

+ анализ надо ли выгружать.
Источник "КонтактныеЛица", приемник - "КонтактныеЛица".
ПКС - стандартные.

2. ПКО "КонтактныеЛицаКонтрагентов" - обработчиков нет.
Источник "КонтактныеЛица", приемник - "КонтактныеЛицаКонтрагентов".
ПКС - стандартные.
21 abask
 
14.08.11
11:03
Все равно в УТ в справочнике КонтактныеЛицаКонтрагентов не создается ссылка на элемент справочника Контактные лица

Не поленился - специально создал с нуля две тестовые конфигурации для тестирования. Положил сюда http://depositfiles.com/files/uy8bdpvwg
размер 22 кб
22 abask
 
14.08.11
21:51
Задача решена. Правила Обмена для моих тестовых конфигураций тут http://depositfiles.com/files/xnw5pgbre

В трех словах решение такое:
1. Создаем все, что создается автоматически.
2. Создаем ПКО КонтактныеЛица -> КонтактныеЛицаКонтрагентов и автоматически для него ПВД
3. В ПКО КонтактныеЛицаКонтрагентов добавляем ПКС Источник - Пустой, Приемник - КонтактноеЛицо.
4. Для этого ПКС указываем ПравилоКонвертации - КонтактныеЛица.
5. Для этого же ПКС алгоритм перед выгрузкой:
Значение = Источник;