|
Глупый вопрос про GUID 1с и ЗагрузкаВыгрузкаXML | ☑ | ||
---|---|---|---|---|
0
Икогнито
16.03.12
✎
12:31
|
ЗагрузкаВыгрузкаXML между одинаковыми по структуре базами переносит элемент справочника. Как я понимаю, обработка привязана к идентификатору элемента, потому переноси хоть 20 раз элементы не двоятся.
Если обработка может создавать в одинаковых по структуре базах элементы с одинаковыми идентификаторами, то почему нельзя программно в разных по структуре базах создавать элементы с нужным идентификатором? |
|||
1
YF
16.03.12
✎
12:31
|
(0) Почему нельзя?
|
|||
2
Икогнито
16.03.12
✎
12:34
|
(1) Сейчас пишу обработку переноса контрагентов между разными по структуре базами.
1. И в источнике и в получателе есть один и тот же справочник "Контрагенты". 2. Прилепил регистр сведений, где вынужден хранить идентификаторы элементов из разных баз. Неужели можно при загрузке из одной базы создать в справочнике элемент с точно таким же идентификатором, чтобы не лепить это в регистр соответствий? Как? |
|||
3
Sammo
16.03.12
✎
12:34
|
УстановитьСсылкуНового(<Ссылка>)
Параметры: <Ссылка> (обязательный) Тип: СправочникСсылка. Ссылка, которая будет назначена при записи нового объекта. |
|||
4
Икогнито
16.03.12
✎
12:35
|
(3) а как ссылке назначить идентификатор из другой базы?
|
|||
5
Sammo
16.03.12
✎
12:35
|
(4) Продажей СП занимаются другие люди. Там все есть - отправная точка дана
|
|||
6
Икогнито
16.03.12
✎
12:36
|
(5) что такое СП?
|
|||
7
PVV65
16.03.12
✎
12:37
|
(4) В ПКО на закладке "Настройки" поставить галку "Искать объект приемника по внутреннему идентификатору объекта источника".
|
|||
8
PVV65
16.03.12
✎
12:37
|
(3) Это здесь ни при чем.
|
|||
9
Икогнито
16.03.12
✎
12:38
|
(7) что такое ПКО?
|
|||
10
Икогнито
16.03.12
✎
12:40
|
Спасибо, помогли
|
|||
11
Икогнито
16.03.12
✎
12:40
|
+(10) в смысле, что не фига не помогли
|
|||
12
fisher
16.03.12
✎
12:41
|
(4) Объект УникальныйИдентификатор() имеет вариант конструктора из строки.
Метод ПолучитьСсылку() менеджеров объектов умеет создавать её из уникального идентификатора. А её уже можно назначить новому объекту. В конвертации именно так и делается. Там же всё штатными методами. (6) Синтакс-Помощник. (9) Правило Конвертации Объекта |
|||
13
PVV65
16.03.12
✎
12:41
|
(9)(10)(11) Как ты пишешь правила переноса между базами с разной структурой, если не знаешь, что такое ПКО?
|
|||
14
Kashemir
16.03.12
✎
12:42
|
(11) Чем тебе (3) не угодило ?
|
|||
15
Икогнито
16.03.12
✎
12:43
|
(14) не решает проблему создания элемента с нужным идентификатором
|
|||
16
PVV65
16.03.12
✎
12:44
|
+(13) Понял. Ты пишешь свою обработку.
|
|||
17
Икогнито
16.03.12
✎
12:45
|
(13) фиг знает, вот так пишу:
ЗапросПоГруппам = СоединениеБП.NewObject("Запрос"); ЗапросПоГруппам.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка, | 0 КАК Уровень, | ВЫРАЗИТЬ("""" КАК СТРОКА(36)) КАК УникальныйИдентификаторБП |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.ЭтоГруппа"; ТабЗапроса = ЗапросПоГруппам.Выполнить().Выгрузить(); Если ТабЗапроса.Количество() = 0 Тогда Возврат; КонецЕсли; Для Каждого СтрокаТабЗапроса из ТабЗапроса Цикл СтрокаТабЗапроса.Уровень = СтрокаТабЗапроса.Ссылка.Уровень(); СтрокаТабЗапроса.УникальныйИдентификаторБП = СоединениеБП.Документы.удДоговор.ВернутьСтрокуУникальногоИдентификатора(СтрокаТабЗапроса.Ссылка); КонецЦикла; ТабЗапроса.Сортировать("Уровень убыв"); Для Каждого СтрокаТабЗапроса из ТабЗапроса Цикл МаксНомерУровня = СтрокаТабЗапроса.Уровень; Прервать; КонецЦикла; ОтборСтрок = СоединениеБП.NewObject("Структура"); Для ш = 0 По МаксНомерУровня Цикл ОтборСтрок.Вставить("Уровень",ш); МассивСтрокТаб = ТабЗапроса.НайтиСтроки(ОтборСтрок); Для к = 0 По МассивСтрокТаб.Количество()-1 Цикл СтрокаМассива = МассивСтрокТаб.Получить(к); СсылкаИсточник = СтрокаМассива.Ссылка; СсылкаИлиОбъект = НайтиСоответствиеКонтрагентаПоИдентификатору(СтрокаМассива.УникальныйИдентификаторБП,Истина); ОбъектНайденВРегистре = Ложь; Если ТипЗнч(СсылкаИлиОбъект) = ТИП("СправочникОбъект.Контрагенты") Тогда ИзменяемыйОбъект = СсылкаИлиОбъект; ОбъектНайденВРегистре = Ложь; ИначеЕсли ТипЗнч(СсылкаИлиОбъект) = ТИП("СправочникСсылка.Контрагенты") Тогда ИзменяемыйОбъект = СсылкаИлиОбъект.ПолучитьОбъект(); ИзменяемыйОбъект.Заблокировать(); ОбъектНайденВРегистре = Истина; КонецЕсли; ИзменяемыйОбъект.Наименование = СсылкаИсточник.Наименование; ИзменяемыйОбъект.ПометкаУдаления = СсылкаИсточник.ПометкаУдаления; Если ш > 0 Тогда РодительОбъектаИдентификатор = СоединениеБП.Документы.удДоговор.ВернутьСтрокуУникальногоИдентификатора(СсылкаИсточник.Родитель); ИзменяемыйОбъект.Родитель = НайтиСоответствиеКонтрагентаПоИдентификатору(РодительОбъектаИдентификатор,Истина); КонецЕсли; ИзменяемыйОбъект.Записать(); Если НЕ ОбъектНайденВРегистре Тогда //занесем в регистр соответствий СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("Контрагент",ИзменяемыйОбъект.Ссылка); СтруктураЗаписи.Вставить("ИдентификаторБП",СтрокаМассива.УникальныйИдентификаторБП); СтруктураЗаписи.Вставить("ИдентификаторУСФ",СокрЛП(ИзменяемыйОбъект.Ссылка.УникальныйИдентификатор())); ВыполнитьЗаписьВРегистрСоответствийКонтрагентов(СтруктураЗаписи); КонецЕсли; КонецЦикла; |
|||
18
Kashemir
16.03.12
✎
12:45
|
(15) Эту проблему как раз решает.
|
|||
19
Икогнито
16.03.12
✎
12:46
|
(18) приведи пожалуйста пример
|
|||
20
fisher
16.03.12
✎
12:46
|
Я понял. Чукча - писатель.
|
|||
21
Kashemir
16.03.12
✎
12:46
|
(19) В СП четко описано предназначение этого метода, полностью совпадающее с поставленной задачей.
|
|||
22
Икогнито
16.03.12
✎
12:47
|
(20) без обсиралова, плиз
|
|||
23
Икогнито
16.03.12
✎
12:48
|
(18)
СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>) УстановитьСсылкуНового (SetNewObjectRef) Синтаксис: УстановитьСсылкуНового(<Ссылка>) Параметры: <Ссылка> (обязательный) Тип: СправочникСсылка. Ссылка, которая будет назначена при записи нового объекта. Описание: Устанавливает значение для нового (созданного и еще не записанного) объекта, которое будет назначено при записи в качестве ссылки. Значение не может равняться ссылке какого-либо из имеющихся в базе данных объекта данного типа. Уникальность ссылки проверяется при записи объекта. Доступность: Сервер, толстый клиент, внешнее соединение. См. также: СправочникМенеджер, метод ПолучитьСсылку |
|||
24
Икогнито
16.03.12
✎
12:48
|
+(23) ни слова про строковый идентификатор типа b6b60de1-8b63-11e0-ab89-001e0bdd2030
|
|||
25
Икогнито
16.03.12
✎
12:50
|
Меня интересует вопрос, как создать элемент справочника Контрагенты с идентификатором "b6b60de1-8b63-11e0-ab89-001e0bdd2030".
|
|||
26
Икогнито
16.03.12
✎
12:51
|
+(25) имхо, в 1С это невозможно
|
|||
27
fisher
16.03.12
✎
12:58
|
(26) Ты таки чукча. Перечитай (12)
|
|||
28
Kashemir
16.03.12
✎
12:59
|
(26) Мда, как все запущено
НовыйКонтрагентОбъект.УстановитьСсылкуНового(Справочник.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор("b6b60de1-8b63-11e0-ab89-001e0bdd2030")) |
|||
29
Мыш
16.03.12
✎
13:11
|
(25) Не делай так. Когда установишь элементу справочника точно такой же идентификатор - данные старого перезапишутся. Он не зря называется уникальным.
|
|||
30
Мыш
16.03.12
✎
13:12
|
+(29) А, хотя не прав. Тебе же в разных базах нужно.
|
|||
31
Sammo
16.03.12
✎
13:14
|
||||
32
Мыш
16.03.12
✎
13:14
|
Тогда элементарно. ОбъектСправочникаКонтрагенты = ПрочитатьXML(ЧтениеXML)
Идентификатор будет ровно такой же, как и в базе источнике. |
|||
33
Живой Ископаемый
16.03.12
✎
13:15
|
2(32) при разных по составу реквизитов объектах выйдет ошибка.
|
|||
34
Икогнито
16.03.12
✎
13:22
|
(28) Спасибо, разобрался
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |