Имя: Пароль:
1C
1С v8
Можно ли создать элемент справочника с нужным идентификатором?
0 Икогнито
 
16.03.12
12:53
Есть GUID "b6b60de1-8b63-11e0-ab89-001e0bdd2030", возможно ли в 1С 8.2 создать элемент справочника Контрагенты с таким ИД?
1 Ненавижу 1С
 
гуру
16.03.12
12:53
да
2 Икогнито
 
16.03.12
12:54
(1) помоги пожалуйста, как?
3 Икогнито
 
16.03.12
12:54
+(2) и к чему может привести нарушение стандартного порядка генерации идентификаторов системой?
4 Wobland
 
16.03.12
12:54
Попытка
       GUID = Новый УникальныйИдентификатор(СтрокаДляGUID);
       Отказ = ЛОЖЬ;
   Исключение
       Отказ = Истина;
       Возврат;
   КонецПопытки;
   
   док=Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(GUID);
5 Живой Ископаемый
 
16.03.12
12:57
2(3) Ни к чему страшному.. при попытке создать элемент с уидом, который уже есть в базе в данной таблице (одинаковые уиды в разных таблицах могут быть) - будет выдано сообщение, что сделать этого нельзя.
6 Рэйв
 
16.03.12
12:57
(3)Ты ее не нарушишь.Если подсунешь существующий гуид новому элементу, он просто перезпишет существующий
7 Ненавижу 1С
 
гуру
16.03.12
12:59
UIDD=Новый УникальныйИдентификатор("b6b60de1-8b63-11e0-ab89-001e0bdd2030");
Ссылка=Справочника.Контрагенты.ПолучитьСсылку(UIDD);

НовыйОбъект=Справочники.Контрагенты.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(Ссыл);
...
НовыйОбъект.Записать();
8 Икогнито
 
16.03.12
13:08
(7) не работает.
Тест: созданный ИД 67e558f3-902f-11e0-8cb5-001e0bdd2030, нужен был ИД 67e558f3-902f-11e0-8cb5-001e0b

Код:

СтрокаДляGUID = "67e558f3-902f-11e0-8cb5-001e0bdd2030";
   
   Попытка
       GUID = Новый УникальныйИдентификатор(СтрокаДляGUID);
       Спр = Справочники.Контрагенты.ПолучитьСсылку(GUID);
       
       
       ОбъектСпр = Справочники.Контрагенты.СоздатьЭлемент();
       ОбъектСпр.УстановитьСсылкуНового(Спр);
       
       ОбъектСпр.Наименование = "Тест: ";
       ОбъектСпр.Записать();
       
       СтрокаИД = СокрЛП(ОбъектСпр.Ссылка.УникальныйИдентификатор());
       ОбъектСпр.Наименование = ОбъектСпр.Наименование + "созданный ИД "+СтрокаИД+ ", нужен был ИД "+СтрокаДляGUID;
       ОбъектСпр.Записать();
   Исключение
       ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
       Возврат;
   КонецПопытки;
9 PVV65
 
16.03.12
13:11
(8) Ну ты гонишь.

Тест: созданный ИД 67e558f3-902f-11e0-8cb5-001e0bdd2030

СтрокаДляGUID = "67e558f3-902f-11e0-8cb5-001e0bdd2030";
10 Ненавижу 1С
 
гуру
16.03.12
13:11
значит с таким UUID уже есть запись
11 Sammo
 
16.03.12
13:11
12 Икогнито
 
16.03.12
13:11
(9) крышняк рвет, почему тогда изменилось значение СтрокаДляGUID
13 PVV65
 
16.03.12
13:12
(12) Ты ж написал - не я.
14 Sammo
 
16.03.12
13:13
Имхо, или нарушение правил 2 и 5
Или размер (точнее длина) не имеет значения...
15 PVV65
 
16.03.12
13:17
(13) наверное наименование ограничилось 100 символами.
16 Kashemir
 
16.03.12
13:18
(12) СтрокаДляGUID - строковый реквизит небось, с фиксированной длиной.
17 Икогнито
 
16.03.12
13:22
(13) Спасибо.
Просто метод меняет значение переменной СтрокаДляGUID
18 PVV65
 
16.03.12
13:25
(17) см.(15)
19 Икогнито
 
16.03.12
13:28
Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдентификаторБПВрем))

1. В случае если есть в БД элемент с таким идентификатором - возвращается ссылка на конкретный элемент.

2. В случае если нет в БД с таким идентификатором - возвращается битая ссылка. Как определить, что она битая?
20 Живой Ископаемый
 
16.03.12
13:29
Попытка
Справочники.Контрагенты.ПолучитьОбъект()
21 Рэйв
 
16.03.12
13:29
(19)Обратись в попытке к коду элемента
22 Икогнито
 
16.03.12
13:30
(21) Спасибо
23 Ненавижу 1С
 
гуру
16.03.12
13:31
(19) запросом
24 Живой Ископаемый
 
16.03.12
13:31
тьфу, то есть
Попытка
Справочники.Контрагенты.ПолучитьССылку(Новый УникальныйИдентификатор(ИдентификаторБПВрем)).ПолучитьОбъект()
25 Икогнито
 
16.03.12
13:32
(24) и тебе спасибо :)
26 Песец
 
16.03.12
13:45
(24) Если Справочники.Контрагенты.ПолучитьССылку(Новый УникальныйИдентификатор(ИдентификаторБПВрем)).ПолучитьОбъект() = Неопределено Тогда
сообщить("нет с таким идентификатором, можно созадавать");
КонецЕсли;
27 Песец
 
16.03.12
13:48
или проще и быстрее
...
Если Найти(Строка(Справочники.Контрагенты.ПолучитьССылку(Новый УникальныйИдентификатор(ИдентификаторБПВрем))),"Объект не найден")>0 Тогда
...

Но тогда надо учитывать,  что язык может быть не русский.
28 Икогнито
 
16.03.12
14:25
(24) Там не Попытка-Исключение нужна, а сравнение с Неопределено

  ИдентификаторБПВрем = ИдентификаторБПСтрока;
 
  //найдем в БД, существует ли
  КонтрагентОбъект = Справочники.Контрагенты.ПолучитьССылку(Новый УникальныйИдентификатор(ИдентификаторБПВрем)).ПолучитьОбъект();
 
  Если КонтрагентОбъект = Неопределено Тогда
     
         Если ЭтоГруппа Тогда
              НовыйКонтрагентОбъект = Справочники.Контрагенты.СоздатьГруппу();
         Иначе
              НовыйКонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
         КонецЕсли;
       
       НовыйКонтрагентОбъект.УстановитьСсылкуНового(Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдентификаторБПСтрока)));
       
       КонтрагентОбъект = НовыйКонтрагентОбъект;
     
   Иначе
       КонтрагентОбъект = Справочники.Контрагенты.ПолучитьССылку(Новый УникальныйИдентификатор(ИдентификаторБПСтрока));
  КонецЕсли;
 
  Возврат КонтрагентОбъект;
29 Икогнито
 
16.03.12
14:26
(27) ага, еще создадут элемент с таким наименованием - получишь нехилый гембель :)
30 Живой Ископаемый
 
16.03.12
14:34
м... да, наверное.
31 Песец
 
16.03.12
14:39
(29) Можно сначала проверить есть ли контрагент с таким названием, получить битую ссылку и запомнить что вней написано.
Через ПолучитьОбъект имхо надежнее и универсальнее, если быстродействие не критично лучше его и использовать.
32 Икогнито
 
16.03.12
19:04
пасаны, спасибо вам огромное еще раз, так клево
33 Икогнито
 
16.03.12
19:05
+(32) только почему-то это дольше работает, чем получение идентификатора в регистре соответствий