Имя: Пароль:
1C
1С v8
Получение UUID через COM-соединение
0 Dark_Warrior
 
28.02.13
12:38
Доброго всем дня. Прошу подсказки. Ситуация такая - 1с8, нужно через СОМ-соединение получить гуид реквизита Комментарий справочника СерииНоменклатуры (реквизит имеет тип СправочникСсылка.ВидыПроизводителей). Гуид элемента самого справочника СерииНоменклатуры я получил в выборке с помощью команды
СтрокаТЗ_ЗаменяемыеЗначения.ГуидСерии = ИБ_УТ.String(Выборка_Номенклатура.Ref.UUID());
Для реквизита хотел сделать так - СтрокаТЗ_ЗаменяемыеЗначения.ГуидПроизводителя = ИБ_УТ.String(Выборка_Номенклатура.Комментарий.Ref.UUID());
но в ответ получил кучу нулей. Подскажите, в чем ошибка? И какой правильный вариант?
1 Wobland
 
28.02.13
12:39
уид реквизита? что это?
2 Cube
 
28.02.13
12:40
(0) Куча нулей - пустая ссылка.
3 ssh2006
 
28.02.13
12:40
"Комментарий" ссылочного типа?
4 Dark_Warrior
 
28.02.13
12:42
(3) Да, это и стало причиной всей работы. Кто-то решил что производителя надо вносить в реквизит Комментарий.
(1) Ну я посчитал что Уникальный Номер это и есть UUID. Я был не прав?
5 ssh2006
 
28.02.13
12:43
(4) тогда (2)
6 Dark_Warrior
 
28.02.13
12:44
(5) что же не так?
7 ssh2006
 
28.02.13
12:45
(6) комментарий не заполнен просто
8 Dark_Warrior
 
28.02.13
12:48
(7) Пустая ссылка выдается у всех элементов, хотя комментарий заполнен практически у всех
9 ssh2006
 
28.02.13
12:49
(8) это уже другой вопрос, нежели <Получение UUID через COM-соединение >.
Выполни запрос не в коме, а в базе в консоли, проверь выводимое
10 Mordor_1C
 
28.02.13
12:50
(9) А ты точно комментарий серии номенклатуры получаешь, а не комментарий самой номенклатуры.
11 hhhh
 
28.02.13
12:56
(8) а почему ВЫборка_НОменклатура? ДОлжна же быть выборка детальных записей.
12 Mordor_1C
 
28.02.13
12:57
(10) к (8)
13 Dark_Warrior
 
28.02.13
12:57
(9) оп, отмена. был прописан путь не к той базе. в этой действительно не заполнен реквизит Комментарий. Большое спасибо за советы.
И можно попутно еще один вопрос?)
   Ошибка при вызове метода контекста (ПолучитьСсылку)
   СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(СтрокаТЗ.ГуидСерии);
по причине:
Несоответствие типов (параметр номер '1')
Вылазит когда я пытаюсь из заполненной ТЧ взять гуид и по нему получить ссылку на объект в текущей базе
14 Dark_Warrior
 
28.02.13
12:57
(10) Да, точно. Эта проблема уже решена
15 GenV
 
28.02.13
12:59
(13) Объект УникальныйИдентификатор должен быть создан по строке в той же базе, где получаешь ссылку.
16 Dark_Warrior
 
28.02.13
13:01
(15) можно немного подробнее?
17 andreymongol82
 
28.02.13
13:01
СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(новый УникальныйИдентификатор(СтрокаТЗ.ГуидСерии));
18 Kashemir
 
28.02.13
13:01
(16)  ИБ_УТ.CreateObject("УникальныйИдентификатор", СтрокаТЗ.ГуидСерии)
19 Kashemir
 
28.02.13
13:02
+(18) т.е. NewObject
20 Mordor_1C
 
28.02.13
13:02
СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТЗ.ГуидСерии));

так попробуй
21 Mordor_1C
 
28.02.13
13:02
(17) Опередил ))
22 Dark_Warrior
 
28.02.13
13:03
(20) {Форма.Форма.Форма(65)}: Ошибка при вызове конструктора (УникальныйИдентификатор)
       СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(новый УникальныйИдентификатор(СтрокаТЗ.ГуидСерии));
по причине:
Недопустимое значение параметра (параметр номер '1')
23 Kashemir
 
28.02.13
13:05
(22) Значит твой гуид вовсе не гуид.
24 Dark_Warrior
 
28.02.13
13:05
(23) То есть? а что он тогда?
25 Kashemir
 
28.02.13
13:06
(24) Откуда ж я знаю что ты там подсунул. Гуид 1С - 36 строка определенного формата.
26 andreymongol82
 
28.02.13
13:06
(21) Я нечаяно. )
(24) УникальныйИдентификатор (UUID)
Из строки
Синтаксис:

Новый УникальныйИдентификатор(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Строка GUID. Строка задается в виде "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где Х - символы обозначающие шестнадцатеричное число.
Описание:

Создает уникальный идентификатор из указанной строки GUID. Уникальность полученного таким образом идентификатора определяется уникальностью строки и поэтому не гарантирована.
Пример:

СтрокаGUID = "a763cfbb-f94f-4c67-8e13-0e96a3a7f353";
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);
27 Dark_Warrior
 
28.02.13
13:09
(26) Получается я взял не то? Если тупо поменять в коде UUID на GUID то получается
{Форма.Форма.Форма(53)}: Метод объекта не обнаружен (GUID)
28 andreymongol82
 
28.02.13
13:17
(27) Как бы получать гуид нужно методом объекта УникальныйИдентификатор();
29 andreymongol82
 
28.02.13
13:18
+ он же по аглицки UUID()
30 andreymongol82
 
28.02.13
13:19
У тебя вот здесь что-то не строка в виде 36-ричного числа
31 andreymongol82
 
28.02.13
13:19
СтрокаТЗ.ГуидСерии
32 Dark_Warrior
 
28.02.13
13:21
(29) Так все же гуид и есть UUID, и все было правильно?
33 Dark_Warrior
 
28.02.13
13:24
(30) Что там может быть не то?
34 andreymongol82
 
28.02.13
13:25
(32) да
(33) не знаю, но не строка вида "a763cfbb-f94f-4c67-8e13-0e96a3a7f353"
35 Dark_Warrior
 
28.02.13
13:27
(34) нужно представить число в виде строки?
36 Reset
 
28.02.13
13:29
(34) Это он пример из СП привел. В СП неправильная строка, да? Вот засланцы :)
37 andreymongol82
 
28.02.13
13:30
Еще раз из СП
Строка GUID. Строка задается в виде "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где Х - символы обозначающие шестнадцатеричное число.
(36) Спасибо. ))
38 Dark_Warrior
 
28.02.13
13:33
Вот участок поиска и записи:

Для Каждого СтрокаТЗ Из ЗаменяемыеЗначения    
   Цикл  
       СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(СтрокаТЗ.ГуидСерии);
       СсылкаПроизводитель = Справочники.СписокПроизводителей.ПолучитьСсылку(СтрокаТЗ.ГуидПроизводителя);
   
   
       ОбъектСерииНоменклатуры = СсылкаСерииНоменклатуры.ПолучитьОбъект();
       ОбъектСерииНоменклатуры.Комментарий = СсылкаПроизводитель;
   
         ОбъектСерииНоменклатуры.Записать();
   КонецЦикла;

косяк в данный момент тут. я нуб, и понять в чем дело не могу.

{Форма.Форма.Форма(68)}: Ошибка при вызове метода контекста (ПолучитьСсылку)
       СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(СтрокаТЗ.ГуидСерии);
по причине:
Несоответствие типов (параметр номер '1')
39 andreymongol82
 
28.02.13
13:36
(38) Хорошо.

СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(СтрокаТЗ.ГуидСерии);
       СсылкаПроизводитель = Справочники.СписокПроизводителей.ПолучитьСсылку(СтрокаТЗ.ГуидПроизводителя);

Эти две строки нужно заменить
Используя совет в (17) и в (20)
40 andreymongol82
 
28.02.13
13:38
При этом в СтрокаТЗ.ГуидПроизводителя и СтрокаТЗ.ГуидСерии должны быть строки длиной 36 символов, непустые и вида
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
41 Dark_Warrior
 
28.02.13
13:38
(39) В таком случае получается
{Форма.Форма.Форма(68)}: Ошибка при вызове конструктора (УникальныйИдентификатор)
       СсылкаСерииНоменклатуры = Справочники.СерииНоменклатуры.ПолучитьСсылку(новый УникальныйИдентификатор(СтрокаТЗ.ГуидСерии));
по причине:
Недопустимое значение параметра (параметр номер '1')
42 andreymongol82
 
28.02.13
13:38
сейчас в СтрокаТЗ.ГуидСерии там что?
43 andreymongol82
 
28.02.13
13:38
Какое значение?
44 Dark_Warrior
 
28.02.13
13:41
(43) хм... там гуид, но укороченный. косяк - неправильно заданные параметры ячейки
45 Serginio1
 
28.02.13
13:43
УИД=Сервер.XMLСтрока(Сервер.NewObject("УникальныйИдентификатор","22151195-0def-11e2-b65b-c86000c70663"));
46 Dark_Warrior
 
28.02.13
13:44
(45) Это что и как?
47 hhhh
 
28.02.13
13:44
(24) надо не string, а XMLString имхо. string представление дает. Наверняка с черточками и прочей лабудой.
48 andreymongol82
 
28.02.13
13:47
(46) Так копец запутали.
Справочники.СерииНоменклатуры.ПолучитьСсылку - это COM или родной объект?
49 hhhh
 
28.02.13
13:47
(47) ну, например Строка(ПКО) вам даст "Приходный кассовый ордер". А надо "ПриходныйКассовыйОрдер"
50 Reset
 
28.02.13
13:54
(47) не, string дает "правильное" представление guid, в формате (26)
51 Reset
 
28.02.13
13:55
(50) "правильное" - по есть пригодное для обратного пребразования.
52 Reset
 
28.02.13
13:55
Соль видимо в (44).
Где-то оттяпало кусок строки у него)
53 Dark_Warrior
 
28.02.13
17:18
Всем огромное спасибо, все заработало)
(52) да,именно неправильное ограничение в ячейке не давало коду работать нормально
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший