|   |   | 
| 
 | Уникальный идентификатор | ☑ | ||
|---|---|---|---|---|
| 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)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |