|
Уникальный идентификатор | ☑ | ||
---|---|---|---|---|
0
KonstantinK90
16.11.16
✎
16:32
|
Всем привет! Помогите разобраться как сделать
создаю номенклатуру заполняю нужные реквизиты далее записываю! но вопрос как сделать что бы этой созданной номенклатуре присвоить свой идентификатор! Дело в том что я загружаю XML файлик с номенклатурой к себе в базу и моей созданной номенклатуре нужно присваивать идентификатор из XML.Подскажите как присвоить идентификатор! |
|||
1
KonstantinK90
16.11.16
✎
16:33
|
идентификатор из xml имеет тип строка
|
|||
2
d546
16.11.16
✎
16:35
|
УникальныйИдентификатор.Из строки (UUID.From line)
УникальныйИдентификатор (UUID) Из строки Синтаксис: Новый УникальныйИдентификатор(<Строка>) Параметры: <Строка> (обязательный) Тип: Строка. Строка GUID. Строка задается в виде "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где Х - символы обозначающие шестнадцатеричное число. Описание: Создает уникальный идентификатор из указанной строки GUID. Уникальность полученного таким образом идентификатора определяется уникальностью строки и поэтому не гарантирована. Пример: СтрокаGUID = "a763cfbb-f94f-4c67-8e13-0e96a3a7f353"; НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID); |
|||
3
timurhv
16.11.16
✎
16:35
|
||||
4
polosov
16.11.16
✎
16:35
|
(0) Доп. реквизит? Отдельный реквизит?
|
|||
5
DTX 4th
16.11.16
✎
16:35
|
+
Прикладные объекты/Справочники/СправочникОбъект.<Имя справочника>/Методы/УстановитьСсылкуНового |
|||
6
NafBF
16.11.16
✎
16:36
|
СправочникМенеджер.<Имя справочника>.ПолучитьСсылку (CatalogManager.<Имя справочника>.GetRef)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>) ПолучитьСсылку (GetRef) Синтаксис: ПолучитьСсылку(<УникальныйИдентификатор>) Параметры: <УникальныйИдентификатор> (необязательный) Тип: УникальныйИдентификатор. Уникальный идентификатор, из которого будет формироваться ссылка. Возвращаемое значение: Тип: СправочникСсылка.<Имя справочника>. Описание: Формирует ссылку из значения типа УникальныйИдентификатор. Данный уникальный идентификатор может быть в дальнейшем получен из ссылки методом УникальныйИдентификатор. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Примечание: Если параметр не указан, то будет сформирована новая уникальная ссылка. См. также: СправочникСсылка.<Имя справочника>, метод УникальныйИдентификатор -------------------------------------------------------------------------------- Методическая информация |
|||
7
KonstantinK90
16.11.16
✎
16:42
|
интересно у меня в xml файле идентификатор к примеру такого вида "a763cfbbf94f4c678e130e96a3a7f353" без дефиса! Получается дефис обязан присутствовать в идентификаторе!???
|
|||
8
polosov
16.11.16
✎
16:46
|
(7) Зачем тебе корежить внутренний УИД? Сделай отдельный реквизит и грузи туда свои УИДы.
|
|||
9
Skylark
16.11.16
✎
17:09
|
(7) ""a763cfbbf94f4c678e130e96a3a7f353" без дефиса" это не УИД а идентификатор. Добавляй реквизит "Идентификатор" и синхронизируй по нему.
|
|||
10
KonstantinK90
16.11.16
✎
17:12
|
"a763cfbbf94f4c678e130e96a3a7f353" без дефиса" это не УИД а идентификатор------- а УИД чем отличается от идентификатора????
|
|||
11
Skylark
16.11.16
✎
17:16
|
(10) Идентификатор это любое поле принимаемое в качестве ключа. А УИД это тип.
|
|||
12
Skylark
16.11.16
✎
17:17
|
И получить переменную с типом УИД можно конструктором на основании строки. Но для этого строка должна иметь определенный вид, т.е. "с дефисами".
|
|||
13
Skylark
16.11.16
✎
17:19
|
УИД = Новый УникальныйИдентификатор("a763cfbb-f94f-4c67-8e13-0e96a3a7f353");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД); |
|||
14
KonstantinK90
16.11.16
✎
17:21
|
блин чет я тогда запутался а как тогда мне моей новой номенклатуре( которую я создаю присвоить свой идентификатор без пробела полученный из xml a763cfbbf94f4c678e130e96a3a7f353)
|
|||
15
1c_July
16.11.16
✎
17:22
|
Я так примерно делала:
УнИд = новый УникальныйИдентификатор(ГуидИзXML); ссылкапоИд=Справочники.МестаХранения.ПолучитьСсылку(УнИд); Если ссылкапоИд.ПолучитьОбъект() = неопределено Тогда //объекта с таким ид-ром нет, надо создать новЭл = Справочники.МестаХранения.СоздатьЭлемент(); новЭл.УстановитьСсылкуНового(ссылкапоИд); //тут установка реквизитов по значениям из файла xml //... попытка новЭл.Записать(); Исключение сообщить("Не удалось создать элемент по ссылке:"+символы.ПС+Описаниеошибки()); КонецПопытки; сообщить("Записан новый элемент, код "+новЭл.код); Иначе //создавать не надо, такой уже есть СуществующийОбъектСсылка = XMLЗначение(Тип("СправочникСсылка.МестаХранения"),ГуидИзXML); КонецЕсли; |
|||
16
1c_July
16.11.16
✎
17:26
|
+15, извините за некрасивый код, давно не писала сюда, забыла как красиво оформить
и могут быть ошибки, т.к. надергала немного из разных мест, чтобы идею показать Делала так, чтобы перенести из одной базы в другую созданные новые объекты, базы почти идентичные, но пару полей добавлено, из-за чего универсальной выгрузкой-загрузкой не перенести. И при этом нужно именно ссылки чтобы точно были перенесены - для возможности некоторых сверок со второй базой. |
|||
17
KonstantinK90
16.11.16
✎
17:26
|
о спасибо за помощь завтра по пробую! если что отпишусь!
|
|||
18
Skylark
16.11.16
✎
17:28
|
(17) УнИд = новый УникальныйИдентификатор(ГуидИзXML);
Вот здесь у тебя сразу же будет ошибка, если параметр как у тебя без дефисов. |
|||
19
KonstantinK90
16.11.16
✎
17:29
|
вот вот я как раз хотел написать про это
|
|||
20
KonstantinK90
16.11.16
✎
17:29
|
xnj vyt ltkfnm&
|
|||
21
youalex
16.11.16
✎
17:29
|
(14) представление типа a763cfbbf94f4c678e130e96a3a7f353
соотносится с представлением типа a763cfbb-f94f-4c67-8e13-0e96a3a7f353 т.е. блоки a763cfbb, f94f и т.д. - находятся на определенных позициях в представлении без дефисов можно визуально эти позиции найти, взяв любую ссылку, и получить ее уид (Строка(Ссылка.УникальныйИдентификатор()) и внутр. представление : ЗначениеВСтрокуВнутр(Ссылка) |
|||
22
KonstantinK90
16.11.16
✎
17:30
|
ой вот вот я как раз хотел на писать про этот момент
|
|||
23
1c_July
16.11.16
✎
17:30
|
Может быть убого получилось, но ничего лучше не придумала, когда обнаружила, что при подключении через COM ко второй базе никак не могу в результате запроса ссылку получить, чтобы сопоставлять сразу с объектами первой базы. Сравнение по кодам, наименованиям и проч. - не подходило, т.к. наплодили дубликатов в справочнике, бардачок-с.
И, кстати, хотела спросить уже в новой ветке, но может быть тут кто-то увидит и ответит - и правда никак нельзя выбирая запросом ссылки во второй базе получить их как при обмене через xml (то, что получается через чтение-запись XMLЗначение)? |
|||
24
youalex
16.11.16
✎
17:30
|
(21) + по сути это всё - представления типа binary (как оно в базе лежит)
|
|||
25
KonstantinK90
16.11.16
✎
17:32
|
вот про этот момент можно по подробнее?
|
|||
26
KonstantinK90
16.11.16
✎
17:33
|
как мне вот эту строку a763cfbbf94f4c678e130e96a3a7f353 (из xml) перевести вот в такой формат a763cfbb-f94f-4c67-8e13-0e96a3a7f353
|
|||
27
1c_July
16.11.16
✎
17:34
|
(18) в моем примере ГуидИзXML - это то, что было записано в файл как:
Файл.ЗаписатьАтрибут("ЯчейкаСсылка",XMLСтрока(стр.ЯчейкаСсылка)); и потом прочитано через ЧтениеXML.ПрочитатьАтрибут() ... ЧтениеXML.Значение Т.е. то, что при использовании XMLЗначение(Тип("СправочникСсылка.МестаХранения"),ГуидИзXML) дает сразу ссылку на объект в 1с, если он есть, или же пишет "Объект не найден" Извините, пишу в спешке |
|||
28
Skylark
16.11.16
✎
17:34
|
(23) Через СОМ когда обращаешься:
СтрУИД = XMLСтрока(СОМ.Ссылка.УникальныйИдентификатор()); получишь строку вида a763cfbb-f94f-4c67-8e13-0e96a3a7f353 и по ней уже в базе-приемнике можешь создать УИД и по нему искать ссылки УИД = Новый УникальныйИдентификатор(СтрУИД ); Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД); |
|||
29
Mauser
16.11.16
✎
17:35
|
Интересно, а вот название секции "Убийцы 1С" - оно к программам относится, или к программистам?
|
|||
30
youalex
16.11.16
✎
17:36
|
(26) ну смотри внимательно:
у тебя здесь похоже, просто дефисы убраны накой-то. Добавь дефисы по формату гуида |
|||
31
Skylark
16.11.16
✎
17:37
|
(29) Я в шоке, как люди с таким стажем в таких вещах не рубят от слова вообще.
|
|||
32
Skylark
16.11.16
✎
17:38
|
(26) Ты про функции работы со строками знаешь? ЛЕВ, ПРАВ, СРЕД - вот это вот всё...
|
|||
33
KonstantinK90
16.11.16
✎
17:39
|
да знаю
|
|||
34
KonstantinK90
16.11.16
✎
17:40
|
ну ладно спасибо завтра по пробую если что отпишусь
|
|||
35
trdm
16.11.16
✎
17:46
|
А секция "Убийцы 1С" поставлена с целью намека на то, что кривые руки сами подорвут престиж 1С-а? :)
|
|||
36
1c_July
17.11.16
✎
14:12
|
(28) Посмотрела еще раз под отладкой обработку запроса.
Смотрите, подключение ко второй базе, в нем выполняется запрос, одно из полей - ссылка по справочнику номенклатуры. При обходе результата запроса отладка показывает, что текстр.СсылкаНоменклатура - это COMОбъект, текстр.СсылкаНоменклатура.УникальныйИденификатор() - тоже COMОбъект, и, соответственно XMLСтрока от всего этого дает ошибку. Ни одно из свойств COMОбъекта не похоже на возможность связи с ун.ид-ром. (Т.е. используется Запрос = Соединение.NewObject("Запрос");) Единственное, может нужно было полностью процедуру во второй базе сделать, возвращающую нужные данные с уже преобразованными в строки ссылками и при подключении ее вызывать, а не создавать запрос. Вы это имели в виду? |
|||
37
Garykom
гуру
17.11.16
✎
14:14
|
будет особенно интересно когда полученные из XML "уникальные идентификаторы" - уникальны только в пределах файла/выгрузки ))
|
|||
38
1c_July
17.11.16
✎
14:31
|
(37) в моем случае - (выгруженные как XMLСтрока ссылки и загруженные через XMLЗначение) - точно такого не было.
Специально проверяла на тот случай, если из-за сбоя не все с первого раза загрузится, чтобы при повторной попытке не дублировалось. Ну и в противном случае не вышло бы сопоставление с уже существующими записями в справочнике. Т.е. по одному и тому же гуиду всегда четко получается один и тот же идентификатор и соответственно по нему - ссылка. Но это при заранее известном типе объекта, по которому получаем идентификатор. Ну и оговорюсь опять же, а то сбивчиво как-то вчера писала - вторая база у меня копия первой + несколько новых записей, которые требовалось перетащить (соответственно я полагаюсь на то, что ссылки старых записей одинаковые), может у автора совсем другая цель этих преобразований. |
|||
39
1c_July
17.11.16
✎
14:53
|
(38) Но это при заранее известном типе объекта, по которому получаем идентификатор.
Тут, конечно, имеется в виду при известном типе объекта, ссылку на который "вычисляем" по идентификатору |
|||
40
1c_July
17.11.16
✎
15:01
|
(26) а насчет дефисов (только вот нашлось время вникнуть в написанное об этом в ветке) что хотела спросить - а откуда Вы эту строку без дефисов взяли? Не из представления ли битой ссылки, наподобие такого:
<Объект не найден> (114:80f40cc47a4f042511e69b40d4d7ea66) ? Если да, то правильно тут писали - это совсем не тоже что гуид, по которому можно получить идентификатор и насильно присвоить новому создаваемому объекту через метод УстановитьСсылкуНового. Т.е. наверное по этой строке ид-р сгенерить-то можно, но в итоге точно такой же ссылки у нового объекта не получится. Я тоже сначала, увидев такие битые ссылки при подтягивании информации из второй базы, подумала, что нужно как-то по вот по этому коду, который после двоеточия, создавать объекты. Но затем увидела, что сохраненный в файле гуид (там он как раз с дефисами), который при загрузке преобразуется в такую битую ссылку из-за отсутствия объекта - отличается не только дефисами, там вообще цифры другие. Т.е. один из другого подстановкой/убиранием дефисов не получить. А как по вот именно этим цифрам из визуального представления битой ссылки получить уд.идентификатор как объект, чтобы подставить в создаваемый элемент справочника, чтобы получилась такая же ссылка - вот это не знаю.. Если это в принципе возможно, тоже с интересом почитаю. (фух, что не пишу, все время "дом, который построил Джек" выходит :) ) |
|||
41
1c_July
17.11.16
✎
15:12
|
(40)+ ну если это не так, стоит задуматься над самыми первыми ответами в теме - действительно ли это то, из чего надо получить именно ун.идентификтор как специальный объект 1с и привязывать к нему создаваемую запись. Или все же это некий доп. идентификатор (для обмена или еще чего), который надо именно отдельным полем держать (как есть в виде этой строки из файла).
|
|||
42
1c_July
17.11.16
✎
15:30
|
(21) youalex, наверное глупый вопрос, но может поясните - если у автора не то, что я нафантазировала в (40), а действительно как-то сохранены гуиды без дефисов, то, если сделать, как Вы написали:
"можно визуально эти позиции найти, взяв любую ссылку, и получить ее уид (Строка(Ссылка.УникальныйИдентификатор()) и внутр. представление : ЗначениеВСтрокуВнутр(Ссылка)" позиции дефисов гарантировано будут одинаковые? по любой ссылке любого объекта, или только в пределах определенного типа объектов (справочника номенклатуры в данном случае)? это имеет объяснение или какую-то мат.часть нужно почитать? |
|||
43
1c_July
17.11.16
✎
15:50
|
(42) блин, и правда глупый вопрос :) Как-то не приходилось задумываться, что разделение дефисами всегда одинаковое, если есть
|
|||
44
Garykom
гуру
17.11.16
✎
15:54
|
||||
45
EvgeniuXP
17.11.16
✎
16:04
|
(32) для новичков самое то - заодно в конфигураторе посидят чуть подольше
|
|||
46
Skylark
17.11.16
✎
16:04
|
(36) XMLСтрока 100% работает - позволяет получить УИД в виде строки через СОМ.
Если так ошибка СтрУИД = XMLСтрока(СОМ.Ссылка.УникальныйИдентификатор()); то попробуй СтрУИД = СОМ.XMLСтрока(Ссылка.УникальныйИдентификатор()); |
|||
47
1c_July
17.11.16
✎
16:04
|
(44) спасибо. мда, читалось когда-то, но вылетело совсем из головы, уникальный да и ладно :)
|
|||
48
Skylark
17.11.16
✎
16:05
|
СтрУИД = Соедиение.XMLСтрока(Соединение.Ссылка.УникальныйИдентификатор());
|
|||
49
Skylark
17.11.16
✎
16:05
|
ну в общем XMLСтрока применить "там" а не "здесь"
|
|||
50
1c_July
17.11.16
✎
16:42
|
(49) йоу, получилось :)
и так: соединение.XMLСтрока(соединение.справочники.склады.найтипокоду("О00000024")) и так: соединение.XMLСтрока(текстр.ссылкаНоменклатура) (здесь текстр из таблички-результата запроса) В обоих случаях то, что в аргументе - COMОбъект, а вызванная XMLСтрока через соединение нормально его "глотает" и возвращает строку-гуид. Для себя усвоила, что если надо что-то получить от COMОбъекта, полученного из соединения, надо и методы соответствующие вызывать "у соединения". Только все же, поскольку мы не имеем ссылки как таковой (она имеет смысл только в контексте текущей базы), функцию УникальныйИдентификатор() использовать не получится, его можно потом уже в текущей базе по гуид создать, и по нему уже искать в ней ссылку. Спасибо! |
|||
51
Вафель
17.11.16
✎
16:47
|
Можно и
соединение.String() |
|||
52
1c_July
17.11.16
✎
16:53
|
(51) вот видела это в справке (единственное что там есть, кроме NewObject), но как-то без примера не дошло сразу как использовать.
Где-то читала бегло, что даже кусок кода можно написать и его в соединении выполнить (в смысле не каждый оператор через соединение), но вникать времени не было. |
|||
53
Skylark
17.11.16
✎
17:06
|
(50)
> Только все же, поскольку мы не имеем ссылки как таковой (она имеет смысл только в контексте текущей базы), функцию УникальныйИдентификатор() использовать не получится, его можно потом уже в текущей базе по гуид создать, и по нему уже искать в ней ссылку. Этот вот пассаж я не понял. Когда мы в базе-приемнике получили СтрУИД из базы источника в виде строки мы можем: УИД = Новый УникальныйИдентификатор(СтрУИД); Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД); Если ОбщегоНазначения.СсылкаСущестует(Ссылка) Тогда НоменклатураОбъект = Ссылка.ПолучитьОбъект(); Иначе НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент(); НоменклатураОбъект.УстановитьСсылкуНового(Ссылка); КонецЕсли; |
|||
54
Skylark
17.11.16
✎
17:09
|
И обратно как-то вроде этого:
СомСсылка = Соединение.Справочники.Номенклатура.ПолучитьСсылку(NewObject("УникальныйИдентификатор", СтрУИД)); |
|||
55
1c_July
17.11.16
✎
17:32
|
(53) да, все так, а пассаж вкратце о том, что функцией УникальныйИдентификатор() как в (48) (просто через точку от ссылки) не воспользоваться, а надо делать именно как Вы написали в (53)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |