Имя: Пароль:
1C
1C 7.7
v7: UUID в 1С 7.7
,
0 andkr
 
24.11.11
14:26
Подскажите, может кто сталкивался...
Есть задача... Выгрузить из 1С 7.7 данные в XML файл.
И в нем нужно указывать UUID объектов (документа, контрагента, договора)
по шаблону:
[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}
В 8-ке можно использовать метод УникальныйИдентификатор()
А вот как получить эту штуку в 7.7 не могу сообразить...
Пробовал метод v77:
ПреобразоватьВ_ИД(ЗначениеВСтрокуВнутр(Объект)),
но она возвращает строку не в том формате :(
1 ДенисЧ
 
24.11.11
14:26
в 77 у элементов нет гуида.
Если тебе очень надо, добавь свой реквизит и пропиши им туда уникальные значения.
2 andkr
 
24.11.11
14:32
Я думал об этом... Но я себе плохо представляю, как этот UUID формируется. И боюсь, что при считывании идентификация объекта может быть не верной.
Т.е. мне нужно выгрузить документы в xml в систему для электронного обмена данных между предприятиями.
3 povar
 
24.11.11
14:36
(2) "что при считывании идентификация объекта может быть не верной." что бы это значило ?
4 zladenuw
 
24.11.11
14:36
function глмбПолучитьНовыйИДД() export
   
   V7SysInfo = CreateObject("AddIn.V7SysInfo");
   return TrimAll(V7SysInfo.СоздатьGUID());
   
endfunction
5 zladenuw
 
24.11.11
14:37
6 andkr
 
24.11.11
15:31
"что при считывании идентификация объекта может быть не верной." что бы это значило ?

Я думаю о том, что если в UUID есть отражение типа объекта, то сформированный новый GUID может быть не распознан при загрузке, как UUID определенного типа.
Ведь GUID никак не связан с объектом для которого я его создаю.

Раньше с этим дело не имел. Пытаюсь проверить опытным путем.
Спасибо за подсказки!
7 ProxyInspector
 
24.11.11
15:47
Я сейчас как раз занимаюсь такой же задачей.
Если ты будешь переность данные с помощью "Конвертации Данных", тогда там будет небольшая засада. Которая впрочем преодолима.
 Если проблема просто получить GUID из ЗначениеВСтрокуВнутр(Объект))
 то я планирую использовать следующую конструкцию (для бухгалтерии):

   ННН = Лев(Константа.ИННОрганизации, 10);                      
   КПП = Сред(Константа.ИННОрганизации, 12, 9);
   ТекСтрока=Инн+Кпп;
   CRC32=ОбъектCRC.GetStringCRC(ТекСтрока);
   ТекИдентификаторИсточника="хххххххх-0000-0000-0000-000011111111";
   ТекИдентификаторИсточника=СтрЗаменить(ТекИдентификаторИсточника,"хххххххх",CRC32);
   ТекИдентификаторИсточника=СтрЗаменить(ТекИдентификаторИсточника,"11111111","хххххххх");

   ТекСтрока=СокрЛП(ЗначениеВСтрВнутр(Источник));
   CRC32=ОбъектCRC.GetStringCRC(ТекСтрока);
   GUID=СтрЗаменить(ИдентификаторИсточника,"хххххххх",CRC32);        //Уникальный идентификатор

 Здесь ОбъектCRC - это компонента, которая умеет считать CRC32.
8 andkr
 
24.11.11
15:50
ProxyInspector -
идея интересная, попробую. Спасибо!
9 ProxyInspector
 
24.11.11
16:00
Потом расскажи, что получиться. У меня-то я надеюсь получиться минут через 20.
 А самый простой способ - дополнительные реквизиты в справочник, общий реквизит в документы, подправить процедуры ВводНового() не забыть про Копирование. И далее см (5)
10 Aleksey
 
24.11.11
16:11
(7) А зачем компонента?

Пока СтрДлина(ИНН)<12 цикл ИНН="0"+ИНН; конецЦикла
Пока СтрДлина(КПП)<10 цикл КПП="0"+КПП; конецЦикла

ТекИдентификаторИсточника="АААААААА-"+Лев(ИНН,4)+"-"+Сред(ИНН,5,4)+"-"+Прав(ИНН,4)+"-BB"+КПП;
11 Aleksey
 
24.11.11
16:12
И странный механизм поиска ИНН/КПП. А если ИП у которого ИНН - 12 символов, КПП нет?
12 ProxyInspector
 
24.11.11
16:28
Можно и так. Такой странный механизм поиска ИНН/КПП в типовых правилах переноса из бух 77 в бух 82. Меня он устраивает.
13 andkr
 
24.11.11
18:43
Попробовать - попробовал. GUID создается.
Только вот когда я в систему обмена доками загружаю свой xml - система выдает ошибку. И никак не говорит, что именно ей не нравиться. Очень надеюсь, что теперь уже не в идентификаторе дело.
Завтра буду звонить в местную тех. поддержку, чтобы мне сказали в чем же именно я не прав :)
Спасибо всем за помощь!
14 Mnemonic1C
 
24.11.11
19:13
Разве GUID это не стандарт? По идее пример в (4) должен правильно отрабатывать. Другое дело что 1С использует "свой" гуид
15 Aleksey
 
24.11.11
19:15
(13) Как ГУИД формируешь? Там 16-ная система, т.е. если в гуид будут символы типа "/" то естественно ей это не понравится
16 Mikeware
 
24.11.11
19:18
как вариант,
использовать гомнокод
Функция глОбъекта_ГУИД(Объект)
   стр23=глMDW.ЗначениеВСамуюДлиннуюСтрокуБД();
   ТипСтр=Лев(стр23,2);
   ВидСтр=Сред(стр23,3,4);
   ИдБезСигна=Сред(стр23,7,6);
   сигн=Сред(стр23,12,3);
   стр32=Лев(""+Лев(_StrToId(ТипСтр)+"000",3)+Лев(_StrToId(ВидСтр)+"00000",6)+Лев(_StrToId(ИдБезСигна)+"0000000000",10)+Лев(_StrToId(сигн)+"000000000",5)+"00000000000000000",32);
   гуид=Сред(стр32,1,8)+"-"+Сред(стр32,9,4)+"-"+Сред(стр32,13,4)+"-"+Сред(стр32,16,4)+"-"+Сред(стр32,20,12);
   Возврат гуид;
КонецФункции

В случае чего, до объекта в семерке достучаться можно будет.
17 andkr
 
24.11.11
19:32
Я формирую функцией:

function глмбПолучитьНовыйИДД() export
   V7SysInfo = CreateObject("AddIn.V7SysInfo");
   return TrimAll(V7SysInfo.СоздатьGUID());
endfunction

Поскольку при загрузке все UUID проверяются на соответствие шаблону:
[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}

И если есть несоответствие - сразу ругается.
18 ProxyInspector
 
25.11.11
11:45
(16) Прикольно. В этом что-то есть. Самое приятное, что можно обратно достучаться.
19 Mikeware
 
28.11.11
13:39
(18) Собственно, для того и делалось.
только вместо 1с++овского объекта Метаданные достаточно использовать "типпоштатный метод" через ВСтрокуВнутр()
20 Aleksey
 
28.11.11
14:10
Функция ПолучитьID(Ссылка)
   Перем Стр;
   Стр=ЗначениеВСтрокуВнутр(Ссылка);
   СЗ=СоздатьОбъект("СписокЗначений");
   СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2));
   Возврат  _IdToStr(СЗ.ПолучитьЗначение(СЗ.РазмерСписка()));
КонецФункции
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс