|
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
|
а вообще тута Книга знаний: Получение GUID в 1С
|
|||
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(СЗ.ПолучитьЗначение(СЗ.РазмерСписка())); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |