Имя: Пароль:
1C
1С v8
как заменить ссылку+гуид на простое число?
,
0 vde69
 
10.02.22
16:35
сейчас в базе в качестве образователя партии используется комбинация ссылка+гуид (документ оприходывания + гуид из табличной части этого документа), для программы такая комбинация нормально работает.

Но пользователи хотят простой числовой номер для партии, с соответствующим поиском. Первое, что приходит на ум - генерить элементы справочника, но тут и вопросы быстродействия и проблеммы с удалением не нужных и еще куча нюансов, короче идея со справочником рабочая, но я ищу способ попроще...

есть ли какой относительно простой способ программной генерации числового кода по гуид+ссылка?


ps
поймал себя, на мысли, что хотел добавить что-то тапа "мой гений дарит Вам гуру тест" :) пора в отпуск :)
1 Бизон
 
10.02.22
16:38
НомерСтроки + Ссылка
2 DrShad
 
10.02.22
16:38
в любом случае получится очень длинное число и визуально его не воспринять
3 vde69
 
10.02.22
16:41
(1) не катит, в документе могут сортировку изменить и все...
(2) ну например можно пробовать что-то вроде - CRC, там не такое и большое будет.
4 H A D G E H O G s
 
10.02.22
16:44
Base64Строка() от md5 хеша
5 Бизон
 
10.02.22
16:47
Да ну нах, нумеруешь строки например при первой записи и все, хоть сортируй хоть не сортируй
6 acht
 
10.02.22
16:48
(4) А обратно в ссылку + гуид брутфорсом превращать? =)
7 Ёпрст
 
10.02.22
16:50
(0) текущаядата числом + номер строки
8 H A D G E H O G s
 
10.02.22
16:55
(6) Да, затупил.
9 pechkin
 
10.02.22
16:59
только регистр или справочник соотвествий. ибо пользователям нужны небольшие числа максимум 5-6 знаков
10 1Сергей
 
10.02.22
16:59
а базу данных простых чисел где брать будете?

ЗЫ
шутка)
11 vde69
 
10.02.22
17:09
(9) у меня есть некий аналог "доп реквизитов", по этому такой номер я могу хранить сразу там, он связан с гуидом. Весь вопрос в генерации номера. Блокировать таблицу и искать максимальный а потом добавлять 1 не очень хорошо.

Вот я и ищу варианты генерации без блокировки...
12 vde69
 
10.02.22
17:11
(11) может можно как-то использовать момент времени документа?
13 pechkin
 
10.02.22
17:14
сделай номер документа + код строки (не путать с гуидом строки и номером строки)
14 Irbis
 
10.02.22
17:14
Преврати гуид в число, но его длина пользюкам не понравится
15 H A D G E H O G s
 
10.02.22
17:15
base64 будет самый короткий в возможностях 1С. Если просто число - то это будет примерно вот такое на один UID
340282366920938000000000000000000000000
16 H A D G E H O G s
 
10.02.22
17:15
А у тебя будет 2 таких числа
17 H A D G E H O G s
 
10.02.22
17:15
В виде base64 будет примерно так
U7yYVX30EeyWhuDVXoOOIQ==;NfoLMIJxQ/KYsI/9Z4+oyw==
18 pechkin
 
10.02.22
17:16
а сами партии - это какая сущность?
19 H A D G E H O G s
 
10.02.22
17:16
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.Идентификатор=Новый УникальныйИдентификатор;
КонецПроцедуры

Функция УникальныйИдентификаторВBase64(Идентификатор)
    ИдентификаторСтрокой=Строка(Идентификатор);
    ИдентификаторСтрокой=СтрЗаменить(ИдентификаторСтрокой,"-","");
    
    ИдентификаторДвоичныеДанные=ПолучитьДвоичныеДанныеИзHexСтроки(ИдентификаторСтрокой);
    ИдентификаторBase64=Base64Строка(ИдентификаторДвоичныеДанные);
    Возврат ИдентификаторBase64;
КонецФункции

&НаКлиенте
Процедура ВЧисло(Команда)
    
    СсылкаBase64=УникальныйИдентификаторВBase64(Объект.Ссылка.УникальныйИдентификатор());
    ИдентификаторBase64=УникальныйИдентификаторВBase64(Объект.Идентификатор);
    Объект.Результат=СсылкаBase64+";"+ИдентификаторBase64;
КонецПроцедуры
20 pechkin
 
10.02.22
17:17
(19) ты увлекся. Цель показать читабельное число
21 H A D G E H O G s
 
10.02.22
17:22
(20) Да никак не показать без регистра соответствий
22 vde69
 
10.02.22
17:23
а гуиды если их отсортировать в SQL сортируются по моменту времени когда они были созданы?
23 pechkin
 
10.02.22
17:24
(22) а обменов нет?
24 Irbis
 
10.02.22
17:27
(22) не факт, нужно смотреть что там в первой группе цифр, может тип/вид объекта
25 acht
 
10.02.22
17:27
(22) Это как сгенерируешь. Если как новый уникальный идентификатор, то нет. Ессли через получение ссылки нового, то да, но в пределах какой-то пачки.
1С для этого биты в гуиде и переставляет, чтобы кластерный индекс не рвался.
26 vde69
 
10.02.22
17:27
(23) для этих гуидов - нет
27 Ёпрст
 
10.02.22
17:53
(26) чем (7) не устраивает ?
28 Ёпрст
 
10.02.22
17:54
количество миллисекунд у тебя даёт первую часть твоего числа, номер строки - вторую.
В любом доке будешь иметь уникальные числа всегда.
29 Ёпрст
 
10.02.22
17:54
ну и.. короткие они, хоть в ean 13 пихай.
30 mistеr
 
10.02.22
17:59
(0) А в какой ситуации пользователям нужен поиск *по номеру партии*?
31 Buster007
 
10.02.22
18:34
(28) ага, 20 раз провел документ, 20 раз появилась новая партия.
32 rudnitskij
 
10.02.22
18:51
(0) сделай справочник партий и показывай им код элемента
33 rudnitskij
 
10.02.22
18:54
(0) "короче идея со справочником рабочая, но я ищу способ попроще..." - а проще нет. Рег сведений сложнее. Таблицы СКЛ те же самые, только код, дающий партии уник номер, тее придется писать самому, а код справочника генерит сама база
ЗЫ. А зачем "удалять ненужные"? Ненужных тут нет. Или вы удаляете документы оприходования "ненужных" партий?
34 pechkin
 
10.02.22
18:57
(33) строки можно удалять
35 Йохохо
 
10.02.22
19:03
кстати юзеры прекрасно диктуют русские буквы, по основанию 40 будет короче
36 mistеr
 
10.02.22
19:12
(33) Проблема с "удалением ненужных" реальна. Не так давно разгребал такое.

Ненужные образуются, например, когда набили приход, что-то там у них не так село, и решили "перебить".  А старый док на удаление. Иногда вплоть до новой номенклатуры. И потом хрен удалишь с перекрестными ссылками.
37 Irbis
 
10.02.22
19:14
с этой точки зрения не ссылочный тип удобнее
38 Serg_1960
 
10.02.22
20:05
(0)Дата из GUIDа документа с миллисекундами + КлючСтроки из ТЧ документа. Пример: 10022022.001.001
39 Serg_1960
 
10.02.22
20:10
(38) Упс, Акелла промахнулся :) "38 - 10.02.22-20:05" --> 100222.2005.000.038
40 Конструктор1С
 
10.02.22
20:53
(0) заведи служебный справочник с автонумерацией и числовым кодом. В реквизиты справочника пихай ссылку на документ и гуид. Программно всё это разруливай и будет тебе щасте
41 pechkin
 
10.02.22
21:44
(36) это решается 1 подпиской при записи документа удалять все лишние партии
42 mistеr
 
10.02.22
23:26
(41) При каждой записи глобальный поиск по ссылкам? Так себе идея. Особенно если при записи тех ссылок в доке уже нет.
43 Ryzeman
 
11.02.22
06:59
(0) GUID можешь преобразовывать как ШК форм в типовых - очищаешь от пробелов и конвертируешь в десятиричное число. Ссылку - сам придумывай как преобразовывать)
44 Pprog151713
 
11.02.22
07:09
(4) Слушай, а на кой ты переводишь двоичные данные в Base64Строка? У меня тут контроллер есть, я им двоичные данные гоняю. А ты большой специалист. Для чего это?
45 breezee
 
11.02.22
07:21
(0) Может номер + "_" + дата + "_" + номерСтроки ?
Просто и понятно
46 Pprog151713
 
11.02.22
07:31
(0) Номер, дата без секунд, номер строки, какие проблемы.
47 Ненавижу 1С
 
гуру
11.02.22
07:37
Ссылка + Гуид это фактически два гуида, то есть 2*128=256 бит
Нормальных чисел таких нет, поэтому ничего не вижу плохого в справочнике (это кстати снова ссылка-гуид) ключей партий
Представление справочника уже можно сделать более человеческим
48 Гений 1С
 
гуру
11.02.22
08:10
(0) До гения тебе еще дядя... как мне до коттеджа в Светлогорске. Т.е. совсем ничего.
49 dmt
 
11.02.22
08:27
(0) оставить Ссылка + Гуид, а выводить пользователю (принимать для ввода) Номер оприходования + "/" номер строки.
Если документ оприходования не блокируется и порядок строк может быть изменен - добавить в ТЧ колонку КодСтроки и нумеровать программно.
50 Pprog151713
 
11.02.22
08:59
(49) Это вообще норм. )
51 Ёпрст
 
11.02.22
10:52
(31) код заполняется один раз.