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