Имя: Пароль:
1C
1С v8
Обмен между базами при помощи плана обмена
0 Ranger_83
 
26.08.11
09:03
Здравствуйте коллеги.
Появилась нетривиальная задача,помогите сообразить.
Настроил обмен между 2-мя базами УПП используя план обмена УППУПП.Обмен в целом проходит нормально,но закралась маленькая ошибка.В правилах была опция продолжить искать по полям поиска,если по уиду не найден.Речь идет о справочнике сотрудники,а поле поиска наименование.
Так вот в базе-приемнике одноименные сотрудники свернулись в одного.Соответственно кадровые документы теперь не проводятся...
Правила то я поправил,но повторная выгрузка уже не дает ожидаемого эффекта,поскольку сопоставление объектов произошло при первой загрузке.База-приемник создала соответствие в регистре сведений и отослала его в базу-источник.Теперь объекты из базы-источника выгружаются с одним и тем же ключом писка {КлючПоискаВИБПриемнике},хотя
<Свойство Имя="{УникальныйИдентификатор}"> разные.
Я попробовал снести соответствия в обоих базах по сотрудникам и выгрузить еще раз.Создаются сотрудники как положено без сворачивания,НО вместе с уже существующими объектами.В итоге в базе-источнике к примеру 2 сотрудника,а в базе приемнике 3 :)
Вот такая петрушка...
1 Кокос
 
26.08.11
09:10
сделай выгрузку по коду. а по уиду убери чтобы не искало
2 Ranger_83
 
26.08.11
09:18
(1)Это хороший вариант,НО у меня на самом деле несколько баз-источников,а база-приемник одна.Коды могут быть не уникальными...
Есть еще одна идея,но я не уверен.
Что если обработку ОбменДаннымиXML на время подредактировать.
Чтобы объекты искались всегда по свойству {УникальныйИдентификатор}
[email protected] (09:10:30 26/08/2011)
без учета {КлючПоискаВИБПриемнике}.
Не уверен,что обработка объектам в базе-приемнике присваивает УникальныйИдентификатор такой же как в источнике
3 NcSteel
 
26.08.11
09:20
(2) Уиды тем более могут быть не уникальны.

Префикс кода тебя спасет
4 Ranger_83
 
26.08.11
09:22
(3)Ты уверен,что Уиды в создаваемых объектах не устанавливаются равными уиду объекта базы-источника?
5 NcSteel
 
26.08.11
09:25
(4) Все от рук зависит
6 Кокос
 
26.08.11
09:29
(4) уиды для того и созданы что они в разных местах по разному создаются. если конечно базу копируешь то да они копируются но если занов создаешь то всегда уникальны. cls_id в COM объектах также задается.
7 Ranger_83
 
26.08.11
09:29
(5)Обработка-то типовая...
(6)вот смотри функцию из обработки:
Функция УстановитьСсылкуНового(Объект, Менеджер, СвойстваПоиска)
   
   УИ = СвойстваПоиска["{УникальныйИдентификатор}"];
   
   Если УИ <> Неопределено Тогда
       
       НоваяСсылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(УИ));
       
       Объект.УстановитьСсылкуНового(НоваяСсылка);
       
       СвойстваПоиска.Удалить("{УникальныйИдентификатор}");
       
   Иначе
       
       НоваяСсылка = Неопределено;
       
   КонецЕсли;
   
   Возврат НоваяСсылка;
   
КонецФункции
8 Кокос
 
26.08.11
09:32
(7) и что? объекд уид всегда при создании уникален. там в поле есть даже помоему уидпроца, место где он создан, время когда создан. и т.д. это я когда на с++ прогил изучал
9 Ranger_83
 
26.08.11
09:32
+(6)Вот есть обработка универсальный обмен в формате XML.Там механизм сопоставления объектов не используется.А используется поиск по уиду.Вот я и хочу на время использовать этот механизм
10 NcSteel
 
26.08.11
09:33
(6) Чушь.
11 NcSteel
 
26.08.11
09:33
(7) В данном случае УИД будет равен УИДу из источника
12 NcSteel
 
26.08.11
09:34
(9) Посмотри типовые переносы УТ - БП и т.д. тап поиск не по УИДу .
13 Кокос
 
26.08.11
09:34
(10) ну значит мы просто о разных вещах говорим :) я не про данный случай я вообще про уид
14 NcSteel
 
26.08.11
09:34
(13) В разных базах Уиды могут совпадать и это не редкость.
15 Ranger_83
 
26.08.11
09:34
(12)Что типовые?Правила?
16 NcSteel
 
26.08.11
09:35
(15) да .
17 NcSteel
 
26.08.11
09:35
(16) Там даже можно выбрать сопоставления :
18 Кокос
 
26.08.11
09:35
(14) только при копировании одной базы в другую. старые уиды совпадают. а новые никогда :)
19 Ranger_83
 
26.08.11
09:36
(17)Ну хорошо.как считаешь прокатит поиск по уиду?
20 Кокос
 
26.08.11
09:38
хе хе. в типовых как раз стоят на правилах лупы :) и когда открываешь правило там стоит галочка "Искать по внутреннему идентификатору". первый поиск всегда по полям поиска идет а потом хрен что сделаешь если не переписать. чушь несешь короче нсстил :)
21 Ranger_83
 
26.08.11
09:41
По коду я уже вряд ли смогу искать.Данные уже перенесены и как бы гарантии нет никакой.
Вcе-таки я склоняюсь к поиску по уиду
22 Кокос
 
26.08.11
09:44
(21) тебе по любому надо какое-то сопоставление сделать будет по какомуто правило. в этом самый гимор :)
23 Ranger_83
 
26.08.11
09:45
(22)Скажи,почему нельзя сделать сопоставление по {УникальныйИдентификатор}?
24 Кокос
 
26.08.11
09:51
уид в новой базе у объекта другой. там даже должно быть чтото вроде регистра где уид объекта источника сопоставляется с элементом в базе приемника.
25 Кокос
 
26.08.11
09:51
ты чего? не видишь в своем тексте? "Новый УникальныйИДентификатор(...))"

НОВЫЙ!
26 Ranger_83
 
26.08.11
09:53
(25)А в скобочках видишь что подставляется?
27 Кокос
 
26.08.11
09:54
(26) блин. для него создается НОВЫЙ уид а не вытаскивается из него старый.
28 Ranger_83
 
26.08.11
09:55
(27)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ПолучитьСсылку (GetRef)
Синтаксис:

ПолучитьСсылку(<УникальныйИдентификатор>)
Параметры:

<УникальныйИдентификатор> (необязательный)

Тип: УникальныйИдентификатор.
Уникальный идентификатор, из которого будет формироваться ссылка.
Возвращаемое значение:

Тип: СправочникСсылка.

Описание:

Формирует ссылку из значения типа УникальныйИдентификатор.
Данный уникальный идентификатор может быть в дальнейшем получен из ссылки методом УникальныйИдентификатор.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Если параметр не указан, то будет сформирована новая уникальная ссылка.
29 Ranger_83
 
26.08.11
09:55
Ссылка новая,а идентификатор из базы-источника
30 Ranger_83
 
26.08.11
09:58
вот смотри из этой же типовой обработки:
Функция одНайтиОбъектПоСвойству(Менеджер, Свойство, Значение,
   НайденныйОбъектПоУникальномуИдентификатору = Неопределено,
   ОбщаяСтруктураСвойств = Неопределено, ОбщиеСвойстваПоиска = Неопределено,
   РежимПоискаОсновногоОбъекта = Истина, СтрокаЗапросаПоискаПоУникальномуИдентификатору = "") Экспорт

Если Свойство = "{УникальныйИдентификатор}" Тогда
       
       СсылкаПоИдентификатору = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(Значение));
       
       Ссылка =  ПроверитьСуществованиеСсылки(СсылкаПоИдентификатору, Менеджер, НайденныйОбъектПоУникальномуИдентификатору,
           РежимПоискаОсновногоОбъекта, СтрокаЗапросаПоискаПоУникальномуИдентификатору);
           
       Возврат Ссылка;
31 Кокос
 
26.08.11
09:59
(29) ну может быть. попробуй короче :) сделай две копии базы и вперед :)
32 Ranger_83
 
26.08.11
10:00
(31)Поменял сове мнение?:)а то споришь
33 Jaffar
 
26.08.11
10:47
ИМХО - и ссылка новая, и УИД новый.
Когда ты первый раз делал загрузку в эту базу - она посоздавала объекты с новыми УИДами, теперь тебе нужно сопоставить их с УИДами соответствующих сотрудников в базах-источниках.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой