|
Обмен между базами при помощи плана обмена | ☑ | ||
---|---|---|---|---|
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
|
ИМХО - и ссылка новая, и УИД новый.
Когда ты первый раз делал загрузку в эту базу - она посоздавала объекты с новыми УИДами, теперь тебе нужно сопоставить их с УИДами соответствующих сотрудников в базах-источниках. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |