|
v8: GUID свой собственный - чем дело кончилось? | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
15.07.11
✎
12:21
|
Здесь GUID свой собственный тема, которая очень меня волнуют - нужен алгоритм формирования GUID по 6-ти значному коду (артикулу). Есть такой?
В качестве бэк-офиса УПП1.3 - УТ10.3 - УТ11 (последняя на обкатке), фронт-офис - СуперМАГ. Все начинается с заявок от магазинов, идентификация товара по артикулу СуперМАГ. Надо сделать так, чтобы куда из 3-х баз заявка не попала, сформировался GUID однозначно. Чтобы при обменах УПП1.3 - УТ10.3 - УТ11 это был один и тот же товар. |
|||
1
le_
15.07.11
✎
12:27
|
А зачем формировать GUID? Пользуйся артикулом.
|
|||
2
Fragster
гуру
15.07.11
✎
12:27
|
не нужно.
|
|||
3
Mikhail Volkov
15.07.11
✎
12:47
|
(1) Не весь товар идет в розничную сеть, не у всех присвоены артикулы. Бывает так, товар в розницу не идет, но когда срок реализации кончается, его толкают в наши магазины, только тогда присваивают артикул...
|
|||
4
Lama12
15.07.11
✎
12:50
|
(3) Вам сюда wiki:Хеш-сумма
|
|||
5
Aleksey
15.07.11
✎
12:52
|
(0) И в чем проблема? У меня уже год так работает, т.е. сам формирую ГУИД для товара и клиентов. Проблем нет
|
|||
6
Defender aka LINN
15.07.11
✎
13:11
|
СтрокаИД = "00000000-0000-0000-0000-000000" + Артикул;
ИД = Новый УникальныйИдентификатор(СтрокаИД); |
|||
7
Mikhail Volkov
15.07.11
✎
19:55
|
(6) Хм, так посто? Это проверено?
(5) Код засвети? |
|||
8
PR
15.07.11
✎
20:12
|
(6) И что, можно в строку любое количество символов передавать?
|
|||
9
DGorgoN
15.07.11
✎
20:13
|
В чем проблема сформировать гуид?
Артикул + СлучайноеЧисло(1) + СлучайноеЧисло(2) + ... |
|||
10
Mikhail Volkov
15.07.11
✎
20:13
|
(6) Не, мне надо чтобы ГУИД остался "00000000-0000-0000-0000-000000" формата
|
|||
11
DGorgoN
15.07.11
✎
20:14
|
+(9) Ну там еще можно привязку ко времени и т.п., ошибся - вместо 1 - 9 надо поставить..
|
|||
12
PR
15.07.11
✎
20:16
|
И какой ГУИД должен быть у пустого артикула?
|
|||
13
Mikhail Volkov
15.07.11
✎
20:20
|
(11) Не надо ко времени, надо чтобы во всех базах формировался ГУИД по артикулу одинаково - однозначно
|
|||
14
PR
15.07.11
✎
20:27
|
(13) Так что насчет (12)?
И (1). |
|||
15
Aleksey
15.07.11
✎
22:21
|
(7) Код чего? У меня простои источник база на 7-ке с модом, и в качестве ГУИД у меня IDD справочника из 7-ки
|
|||
16
Aleksey
15.07.11
✎
22:24
|
(14) Ну смотри к примеру нужно из источника загрузить в приемник. Причем приемники соединены в УРИБ, т.е. между ними типовые обмены по ГУИД. При этом один и тот же товар одновременно может быть загружен и создан в несколько источников. Что станет номенклатурой после обмена? Будет куча дублей.
А так, если преобразовать артикул в гуид, то после обмена все будет хорошо (12) Например добавить к артиклю код из источника и запретить код менять. |
|||
17
Mikhail Volkov
15.07.11
✎
22:27
|
(15) Как из IDD МОДа формируешь ГУИД?
|
|||
18
Aleksey
15.07.11
✎
22:30
|
(17) Насколько фантазии хватит. Дело в том что IDD - 17 символов, гуид 32. Так что как придуамаешь так и будет
|
|||
19
Aleksey
15.07.11
✎
22:30
|
Например у меня так
Функция ПолучитьГуид(ИДД) //17->32 НовСтрока=""; Для й=1 по 14 Цикл КС=КодСимв(сред(ИДД,й,1)); КС=?(КС>128,КС-848,КС);//перевод Юникод в не Юникод НовСтрока=НовСтрока+Прав("0"+СокрЛП(Из_10_В_Любую(КС,16)),2); КонецЦикла; НовСтрока="F"+Лев(НовСтрока,7)+"-"+Сред(НовСтрока,8,4)+"-"+Сред(НовСтрока,12,4)+"-"+Сред(НовСтрока,16,4)+"-"+Сред(НовСтрока,20,9)+Прав(ИДД,3); Возврат ""+НовСтрока+""; КонецФункции |
|||
20
Aleksey
15.07.11
✎
22:34
|
Т.е. я беру код символа, перевожу его из 10 системы в 16 и получаю код для символа гуид
Т.е. каждый символ МОД преобразовываю в 2 символа ГУИД, только я не все 17 символов а только первые 14, остальные 3 беру как есть, ну и чдля разнообразия и для отличия пишу первый символ "F" |
|||
21
Mikhail Volkov
15.07.11
✎
22:40
|
(20) Для ясности, можно Из_10_В_Любую(КС,16)?
|
|||
22
Aleksey
15.07.11
✎
22:48
|
Функция Из_10_В_Любую(Знач Значение=0,Нотация=36) Экспорт
Если Нотация<=0 Тогда Возврат("") КонецЕсли; Значение=Число(Значение); Если Значение<=0 Тогда Возврат("0") КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции |
|||
23
Mikhail Volkov
15.07.11
✎
22:49
|
(20) Я правильно понял, МОД распространил объект по всем 1С базам, и Функция ПолучитьГуид(ИДД) создала всем один и тот же ГУИД?
|
|||
24
Aleksey
15.07.11
✎
22:52
|
Мод был в 7-ке. И да справочники были общие для всех баз (миграция с помощью При выгрузки в 8-ку я врусную формировал гуид и создавал в 8-ке уже объекты с сформированным гуидом.
А так как ИДД у во всех базах в 7-ке у одного элемента был одинаков, то при выгрузки этого элемента из любой базы 7-ки в в любую 8-ную базу формировался одинаковый ГУИД, т.е. после УРИЮ обмена элементы не задваивались (максимум мог поменяться код, я его не переношу, а формируется автоматом) |
|||
25
Aleksey
15.07.11
✎
22:53
|
Собственно тебе проще. У тебя везде 8-ки, поэтому Функция ПолучитьГуид(ИДД) тебе не нужна, у тебя ГУИД и так уже есть
|
|||
26
Aleksey
15.07.11
✎
22:53
|
просто бери и используй его
|
|||
27
Mikhail Volkov
15.07.11
✎
23:19
|
(14) Этот случай не рассматривается, ГУИД формируется обычным путем.
(25) Важный момент - УТ11 на обкатке, пока у меня нет (у 1С тоже) ПКО сверху вниз от УТ11 к УТ10.3 и УПП1.3, только наоборот - снизу вверх. Оптовые фирмы компании работают в УТ10.3 частично "на сторону", частично на нашу розничную сеть магазинов. В УТ11 работает фирма РЦ - распределительный центр, распределяет по магазинам. Пока наша розница (СуперМАГ - не 1С) не заказала товар из опта, он без артикула. Заказывает, прежде всего, в РЦ - УТ11, и тогда там артикул появляется. Но УТ10.3 и УПП об этом не знают. По цепочке заказ розницы с артикулами доходит до УТ10.3, надо чтобы по артикулу сформировался точно такой же ГУИД как в УТ11. |
|||
28
Mikhail Volkov
16.07.11
✎
07:43
|
(26) Твоя и идея верная, только не в плане размазывания IDD - 17 символов до размера GUID - 32 символа, а в аналогии конструкции. Прекрасно помню МОД http://www.pb.ru/ по 1С 7.7. Первые 7 символов (цифр) IDD - это IDD базы данных, остальные 10 - объекта. Для IDD объекта у меня 6 цифр артикула из СуперМАГ, ну добавлю еще 14 (или только 8) - дата-время от туда же (вроде для товара так же не изменяемый параметр в СуперМАГе). Итого для объекта - 20 символов. Остается задать 12 символов для идентификации базы. Вот об этой части идентификатора и речь!
По началу Билл Гейтс для этой части идентификатора использовал мак-адрес компьютера. 1С согласно их определения: УникальныйИдентификатор (UUID) - Предназначен для создания и хранения глобального уникального идентификатора GUID. Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: UUID т.е. идентификатор базы данных. Как его определить? У нас консолидирующая база - УПП, она скоро умрет, но она родитель всех остальных баз - УТ10.3, УТ11, а теперь еще БП2.0... Как выделить ее базовую часть в GUID, чтобы по ней создавать свои GUID-ы для сохранения наследственных признаков? |
|||
29
PR
16.07.11
✎
10:14
|
(16) А, ну тогда (16), в котором из строки пустого ГУИДа вычитается 6 символов, они берутся из артикула.
|
|||
30
Aleksey
16.07.11
✎
10:26
|
(28) Забудь про била. Для 1С это просто уникальный набор цифр в 16-ном формате. Какой идентификатор базы данных ты хочешь найти? Зачем он тебе.
|
|||
31
Mikhail Volkov
16.07.11
✎
11:31
|
(30) Такой же как в МОД Константа.IDD в формуле (9). Только в этой формуле не все СлучайноеЧисло(), Дата-время точно есть. В общем, хочу знать все составляющие ГУИДа
|
|||
32
Aleksey
16.07.11
✎
11:36
|
(31) Еще раз ГУИД от 1С к ГУИД от била имеет отдаленое отношения
|
|||
33
Aleksey
16.07.11
✎
11:37
|
GUID 1С формирует не по правилам Microsoft, а инкрементно.
В начале сеанса формируется стартовый GUID, r примеру 6F9619FF-8B86-D011-B42D-00CF4FC964F0 (c) v8: Где взять описание GUID, который в 1С 8? |
|||
34
Aleksey
16.07.11
✎
11:40
|
Нету в GUID даты, нету. В 1C ом GUID нету.
Создайте новую конфу. Создайте в ней справочник. Заведите в справочнике пару элементов. Выведите их "GUID" Выйдите из 1С. зайдите в 1С создайте 1 элемент покурите создайт 2 ой элемент Выведите 'GUiD'ы Сожалею.. (c) v8: GUID и вычисление(восстановление) даты из него |
|||
35
Aleksey
16.07.11
✎
11:44
|
1С при начале работы берет и генерит GUID.
При записи нового объекта записывает этот объект с этом ГУИД-ом. Дальше он инкрементирует GUID. В области времени. (c) v8: Диапазон идентификаторов (GUID) элементов справочника |
|||
36
Mikhail Volkov
16.07.11
✎
12:28
|
(35) Спс, почитал по твоим ссылкам... остается верить, что GUID 1С - чисто случайное число. Мне это не подходит. Мне надо наоборот, исключить всякую случайность. К примеру, 12 символов - константа идентификации СуперМАГ + 20 цифр Артикул-дата-время. Чтобы заявки пришедшие одновременно из СуперМАГ с новым товаром в УТ10.3 и УТ11 сгенерировали один GUID! Свой GUID не 1С! Тема то как называется!? Надеялся продолжить, узнать мнение уважаемого Вуглускр1991.
Кстати, где на ИТС функция формирования GUID, на свежих дисках убрали чоли? |
|||
37
Mikhail Volkov
16.07.11
✎
12:46
|
+ из СуперМАГ еще штрих-код можно брать к Артикул-дата-время. Не суть конечно, но главное исключить СлучайноеЧисло() из GUID. Жду критики...
|
|||
38
Mikhail Volkov
16.07.11
✎
13:13
|
А если окажется "случайность - не понятая закономерность", и в составе GUID есть аналог IDD базы?
|
|||
39
Aleksey
16.07.11
✎
13:27
|
(380 Плохо значит читал. Ищи, пока никто не нашел.
Еще раз 1С гуид - это просто идентификатор, который формируется один раз при начале работы. Дальше он тупо увеличивается на 1. И там нет аналога IDD базы Что будет в версии 1С 9.0 - никто не знает, может что-то и поменяеться, а пока это просто НАБОР цифр в 16ти ричной системе P.S. Интересно что ты хочешь услышать? Тебе длень делать, и ждешь когда скажут что так делать нельзя? |
|||
40
Aleksey
16.07.11
✎
13:32
|
(37) - "СуперМАГ еще штрих-код можно брать к Артикул-дата-время."
Тебе что нужно просто уникальное число? Тогда есть функция для этого Или тебе нужно чтобы при выгрузки гуид всегда был одинаковый у одной и той же позиции. Тогда дата и время каким боком? Если у тебя артикул цифровой, и к примеру 6 символов,, то можешь просто написать 00000000-0000-0000-000-00000ХХХХХХ, где ХХХХХХ артикул Можешь преобразовать посимвольно в код символа и писать коды символов В любом случае 1С все равно что ты напишешь, главное чтобы уникальность, а на остальное 1С плевать P.S. И какая разница как 1С формирует символ, для 1С это просто первичный ключ, который должен быть уникальный. Никаких проверок на формат этого ключа нет в 1С |
|||
41
Mikhail Volkov
16.07.11
✎
13:54
|
(40) Да, ты абсолютно прав. Нашел в своих архивах по 7.7:
// глСоздатьИдентификатор() // // Параметры: // Нет // // Возвращаемое значение: // Идентификатор (строка GUID) // // Описание: // Возвращает новый Идентификатор (GUID) // Функция глСоздатьИдентификатор() Экспорт Если ЗагрузитьВнешнююКомпоненту("V7Plus.dll") <> 1 Тогда Сообщить("Ошибка загрузки компоненты V7+"); КонецЕсли; НТТРСистИнформ = СоздатьОбъект("AddIn.V7SysInfo"); Возврат СокрЛП(НТТРСистИнформ.СоздатьGUID()); КонецФункции // глСоздатьИдентификатор() Входных параметров действительно нет! Сомнения одалели... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |