Консультация № 154180
13.12.2008, 11:36
0.00 руб.
0 3 2
Здравствуйте уважаемые эксперты. Подскажите, пожалуйста, как создать объект (например справочник) с наперед известным уникальным идентификатором в 8,1. (Есть две базы, и в второстепенной базе нужно создать объекты с точно такими УИД, как и в основной (связь по COM)), Заранее спасибо.

Обсуждение

Неизвестный
13.12.2008, 12:43
общий
это ответ
Здравствуйте, М.Денис!
Для копирования достаточно открыть радом две базы 1С и скопировав в одной вставить, в другую, конечно если включена возможность изменений для каждой базы.
Неизвестный
13.12.2008, 13:06
общий
Спасибо за внимание, получилось реализовать самостоятельно:

///
,,,,
///
V8 = Новый COMОбъект("V81.COMConnector");
Если НаСервере Тогда
Відкриття = V8.Connect("srvr="+ИмяСервера+"; ref="+ИмяБазы+"; usr="+ИмяПользователяСервер+"; pwd="+ПарольСервер);
Иначе
ПутьКБазе = СокрЛП(ПутьКБазе);
ИмяПользователяЛокально = СокрЛП(ИмяПользователяЛокально);
Відкриття = V8.Connect("file="""+ПутьКБазе+"""; usr="+ИмяПользователяЛокально+"; pwd="+ПарольЛокально);
КонецЕсли;


///
,,,,
///
Попытка
Выборка = Справочники[ВыбранныйСправочник].ВыбратьИерархически();
Исключение
Выборка = Справочники[ВыбранныйСправочник].Выбрать();
КонецПопытки;

ТаблицаСправочника = Новый ТаблицаЗначений;
ТаблицаСправочника.Колонки.Добавить("СсылкаСправочника");
ТаблицаСправочника.Колонки.Добавить("ЭтоГруппа");
ТаблицаСправочника.Колонки.Добавить("Родитель");
ТаблицаСправочника.Колонки.Добавить("Владелец");

Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления = Истина Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТаблицаСправочника.Добавить();
НоваяСтрока.СсылкаСправочника = Выборка.Ссылка;
Если НЕ Выборка.Владелец.Ссылка.Пустая() Тогда
НоваяСтрока.Владелец = Выборка.Владелец.Ссылка
Иначе
НоваяСтрока.Владелец = Неопределено;
КонецЕсли;
Если НЕ Выборка.Родитель.Ссылка.Пустая() Тогда
НоваяСтрока.Родитель = Выборка.Родитель.Ссылка
Иначе
НоваяСтрока.Родитель = Неопределено;
КонецЕсли;
Если Выборка.ЭтоГруппа = Истина Тогда
НоваяСтрока.ЭтоГруппа = Истина
Иначе
НоваяСтрока.ЭтоГруппа = Ложь;
КонецЕсли;
КонецЦикла;

Для Каждого ТекущаяСтрока Из ТаблицаСправочника Цикл
//Вияснимо UID довідника
УИД = СтрокаУникальногоИдентификатора(ТекущаяСтрока.СсылкаСправочника.УникальныйИдентификатор());
Попытка
УИДРодитель = СтрокаУникальногоИдентификатора(ТекущаяСтрока.Родитель.УникальныйИдентификатор());
Исключение
УИДРодитель = Неопределено;
КонецПопытки;
Попытка
УИДВладелец = СтрокаУникальногоИдентификатора(ТекущаяСтрока.Владелец.УникальныйИдентификатор());
Исключение
УИДВладелец = Неопределено;
КонецПопытки;

//Спробуємо знайти такий ж елемент довідника в приєднаній базі
ИД = Відкриття.NewObject("УникальныйИдентификатор", УИД);
СправочникИмпорт = Відкриття.Справочники[ВыбранныйСправочник].GetRef(ИД);
СправочникЭкспорт = ТекущаяСтрока.СсылкаСправочника;

Если СтрДлина(СправочникИмпорт.Description) = 0 Тогда // Не знайшли
//Створимо новий
Если ТекущаяСтрока.ЭтоГруппа = Истина Тогда
НовыйОбъект = Відкриття.Справочники[ВыбранныйСправочник].СоздатьГруппу();
НовыйОбъект.УстановитьСсылкуНового(СправочникИмпорт);
Иначе
НовыйОбъект = Відкриття.Справочники[ВыбранныйСправочник].СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(СправочникИмпорт);
КонецЕсли;
ЗаполнитьРеквизиты(СправочникЭкспорт, НовыйОбъект, УИДВладелец, УИДРодитель);
НовыйОбъект.Записать();
Иначе
//Заповнимо старий
СтарыйОбъект = СправочникИмпорт.ПолучитьОбъект();
ЗаполнитьРеквизиты(СправочникЭкспорт, СтарыйОбъект, УИДВладелец, УИДРодитель);
СтарыйОбъект.Записать();
КонецЕсли;
КонецЦикла;
Неизвестный
13.12.2008, 16:19
общий
это ответ
Здравствуйте, М.Денис!

1. Способ: создать объект с наперед заданным идентификатором. (пример во вложении) и заполнить его свойства, как нужно.


2. Способ: Через 1 день выйдет новая версия продукта Enterprise Integrator (http://main.1c-ei.ru/)
Одна из возможностей этой версии - редактирование UID объекта

Приложение:
СправочникКонтрагентыОбъект.УстановитьСсылкуНового(Новый Ссылка(Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУникальногоИдентификатора))));
//Проверка
Проверка = (СтрокаУникальногоИдентификатора = СправочникКонтрагентыОбъект.ПолучитьСсылкуНового().УникальныйИдентификатор());
Форма ответа