|
ЗначениеВСтрокуВнутр -> УникальныйИдентификатор | ☑ | ||
---|---|---|---|---|
0
totparen
07.12.16
✎
22:51
|
Нет ли у кого готовых функций преобразований внутреннего кода объекта 7.7 в уникальный идентификатор 8.х и обратно?
|
|||
1
Torquader
07.12.16
✎
22:59
|
Внутренний код 7.7 - это два числа - код вида и код элемента, а GUID - это уникальное 16-байтное значение.
Как вы представляете себе преобразование одного в другое ? |
|||
2
Mauser
07.12.16
✎
23:00
|
(1) Это второй вопрос. Ты функцию готовую давай, чо непонятного?
|
|||
3
totparen
07.12.16
✎
23:08
|
(2) Точняк! Дайте готовый код. Если придется делать, обязательно выложу.
|
|||
4
Torquader
07.12.16
✎
23:10
|
ПЕРЕМ мсоотПреобразование;
Функция Ид1СВГуид(пстрИдНаВходе) Если ТипЗнч(мсоотПреобразование)<>Тип("Соответствие")Тогда мсоотПреобразование=Новый Соответствие; КонецЕсли; лРезультат=мсоотПреобразование.Получить(пстрИдНаВходе); Если лРезультат=НЕОПРЕДЕЛЕНО Тогда лРезультат=Новый УникальныйИдентификатор; мсоотПреобразование.Вставить(пстрИдНаВходе,лРезультат); КонецЕсли; Возврат лРезультат; КонецФункции |
|||
5
totparen
07.12.16
✎
23:15
|
(4) не подходит ))
Из 7.7 хочется выгрузить ссылку, конвернув ее в уникальный идентификатор, который можно записать в 1с 8 Ну и обратно, если из 1с 8 получить ссылку, ранее выгруженную из 7.7 , конвертнуть ее сразу в значение. Без всяких вспомогательных хранилищ данных. |
|||
6
youalex
07.12.16
✎
23:22
|
(5) в 77 - ссылка это не уид, а инкремент (в 36-ичной системе). Преобразовать в гуид на лету - не получится.
|
|||
7
Torquader
07.12.16
✎
23:25
|
(6) Я ему об этом уже в (1) говорил, но он хочет - "чтобы работало".
(5) Или сохранять таблицу преобразований или собирать GUID из каких-то кусков, что может привести к пересечению с уже существующими в базе. Теоретически, GUID-ы можно получать пулом - если элементов какого-то справочника в 7.7 меньше, чем пул GUID-ов, то в код можно вставить один GUID, а остальные получать по идентификатору (номеру по порядку) элемента. |
|||
8
totparen
07.12.16
✎
23:26
|
(6) думаю этот "инкремент" по определенным правилам можно преобразовать в гуид. И обратно.
|
|||
9
youalex
07.12.16
✎
23:27
|
(8) конечно. Через таблицу соответствий- пожалуйста.
|
|||
10
youalex
07.12.16
✎
23:34
|
Нет, конечно, наверное, можно перевести id 77 из 36-теричной системы счисления в гексовый уид, не забыв при этом, что ид в 77 может в себя включать идентификатор УРБД, например, но, имхо, соотвествие и проще (для отладки в т.ч.), и нагляднее.
|
|||
11
Torquader
07.12.16
✎
23:38
|
(10) С учётом того, что и КД хранит соответствия GUID-ов друг другу - то это единственно правильный путь.
|
|||
12
totparen
08.12.16
✎
07:53
|
(11) КД хранит ГУИД, лишь в некоторых случаях. Если объект создаётся в процессе обмена, то соответствия не используются.
Пока не нашёл никаких проблем преобразовать {"O","0","0","0","0","0"," 1611 2232069TG "} {"O","0","0","0","0","0"," 2457 2233888ЦБ "} {"B","0","0","0","0","0"," 172 6111ЦБ "} В идентификатор вида "o0000000-1611-0000-0000-2232069000tg" |
|||
13
Mauser
08.12.16
✎
07:56
|
>"...tg"
Спасибо за отличное настроение! |
|||
14
totparen
08.12.16
✎
07:57
|
(13) )) точно...
|
|||
15
totparen
08.12.16
✎
07:57
|
Нужно будет учесть..
|
|||
16
Адинэснег
08.12.16
✎
08:10
|
(12) ёёёёёёёё-мммм-оооо-ёёёё-0017315582
|
|||
17
Это_mike
08.12.16
✎
08:31
|
ТС продолжает веселить...
|
|||
18
totparen
09.12.16
✎
10:42
|
Вот функция кодирования:
Функция ПолучитьУникальныйИдентификатор(пСсылка) // На выходе должна получиться строка вида "XXYYYYZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ" // X - тип ссылка (справочник, документ). Символ в HEX // Y - вид (номенклатура, реализация). Число, 4-ре цифры. // Z - ИД объекта. Строка в HEX // {"B","0","0","84","0","0"," 1 "} лВнутрСтрока = ЗначениеВСтрокуВнутр(пСсылка); // "B","0","0","84","0","0"," 1 " лСтрокаСРазделителями = Сред(лВнутрСтрока,2,СтрДлина(лВнутрСтрока)-2); лСписок = СоздатьОбъект("СписокЗначений"); лСписок.ИзСтрокиСРазделителями(лСтрокаСРазделителями); НеВажно = ""; лТип = лСписок.ПолучитьЗначение(1,НеВажно); // "B" лВид = лСписок.ПолучитьЗначение(4,НеВажно); // "84" - предполагается, что это всегда число, 4-ре цифры. лИДОбъекта = лСписок.ПолучитьЗначение(7,НеВажно); // " 1 " // Преобразование только типизированных значений. // Длина идентификатора должна быть равной 13 символов. Если СтрДлина(лИДОбъекта) <> 13 Тогда ош = 1/0; // Ошибка! Длина идентификатора ожидается 13 символов. КонецЕсли; // "42008420202020202020202031202020" лРезультат = СтрокуВХекс(лТип) + Формат(лВид,"Ч(0)4") + СтрокуВХекс(лИДОбъекта); // "42008420-2020-2020-2020-202031202020" лРезультат = Лев(лРезультат,8) + "-" + Сред(лРезультат,9,4) + "-" + Сред(лРезультат,14,4) + "-" + Сред(лРезультат,19,4) + "-" + Прав(лРезультат,12); Сообщить(лРезультат); Возврат лРезультат; КонецФункции // ПолучитьУникальныйИдентификатор |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |