Уникальный идентификатор #785280


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

В этой группе 1С