Имя: Пароль:
IT
 
Генерация кода товара
0 zenik
 
15.06.15
11:45
Доброго времени суток, форумчане.
Давайте поразмышляем над такой задачей: два справочника (номенклатура и характеристики). надо из кодов элементов этих двух справочников "состряпать" 3-й - который передать на кассу. Код для кассы = число до 10 разрядов. код справочника характеристик для каждого товара до 2-х разрядов. На номенклатуру берем что останется. код должен иметь возможность обратного преобразования
Первое что приходит в голову - конкатенация :)
Но хочу элегантное решение... С применением математики (не сложной) закодировать два числа с возможностью обратного кодирования. Естественно должна сохраняться уникальность, что бы раскодирование не давала две другие пары кодов. И еще один момент - код у характеристик может отсутствовать, т.е. = 0.
Есть варианты?
1 Рэйв
 
15.06.15
11:47
КодХарактеристики+"/"+КодНоменклатуры

Обратно разпарсить думаю труда не составит
2 МаксимМП23
 
15.06.15
11:48
(0) Только регистр со связями. Ибо с уникальностью поиметь проблем потом сможешь.
3 zenik
 
15.06.15
11:51
(1) ды вот обратно то как раз будет проблема, ибо
0 / любое число = 0 :)
4 Garykom
 
гуру
15.06.15
11:53
(0) 3-й справочник "НоменклатураКасса" с длиной кода 10 и 2 реквизитами "Номенклатура" и "Характеристика"

ЗЫ представим вариант смены программы, там другие длины кодов и что потом делать?
5 DirecTwiX
 
15.06.15
11:53
(3) Там строка, а не число)
6 zenik
 
15.06.15
11:55
Блин, ребят, ну условия описаны же:
1. Код для кассы = число до 10 разрядов
7 zenik
 
15.06.15
11:55
2. Конкатенация - я понимаю... но хочу МАТЕМАТИКУ :)
8 oslokot
 
15.06.15
11:56
(7) xor? :)
9 icipher
 
15.06.15
11:57
КодНоменклатуры * 100 + КодХарактеристики
:)
10 Рэйв
 
15.06.15
11:58
(7)Зачем множить лишние сущности?
11 zenik
 
15.06.15
12:01
(10) 1300000012 - смотрится по меньшей мере убого :) то ли дело 65535 :)
12 тарам пам пам
 
15.06.15
12:02
(7) Математика тебе говорит, что в 10 разрядов нельзя запихать число в 10 разрядов и еще одно число в 2 разряда в общем случае. Разве что если сделаешь код для кассы строковым - тогда можно.
13 zenik
 
15.06.15
12:02
(12) а где я сказал, что у номенклатуры 10 разрядов?
14 Рэйв
 
15.06.15
12:02
>>1300000012 - смотрится по меньшей мере убого

Да ты эстет, я смотрю:-)
Код как код...
15 zenik
 
15.06.15
12:03
(14) оценил, спасибо :)
16 Рэйв
 
15.06.15
12:03
(11)Ну переводи в hex тогда, чтобы было красивее:-)
17 DirecTwiX
 
15.06.15
12:04
(11) Перегоняй в шестнадцатеричную систему
18 zenik
 
15.06.15
12:05
(17) тама буквы... нада цифры
19 тарам пам пам
 
15.06.15
12:05
(13) невнимательно прочитал... Тогда тупо конкатенация, если не нравится код 1300000012, то прибавляй код характеристики справа - будет 0000001213.
20 zenik
 
15.06.15
12:06
(19) - сразу налетаем на код номенклатуры с нулевой характеристикой
21 fisher
 
15.06.15
12:08
(11) Уже советовали. Делай XOR с красивой константой.
22 Мыш
 
15.06.15
12:12
Вспоминается классик: "Взволновалося синее море" )))
23 zenik
 
15.06.15
12:13
XOR что то мне не очень нравится.
Получится сделать что то на подобии кодирования двоички?
аля 2*код+4*код... только естественно с моими числами:
N*КодНоменклатуры + 10*КодХарактеристики.
Сколько надо брать N, что бы мало не показалось?
24 Мыш
 
15.06.15
12:14
(23) N в степени N
25 Salimbek
 
15.06.15
12:18
(7) Типа сказал волшебное слово "хочу математику" и оно тебе все организовалось? Странный такой...
Если что, то любая такая задача в первую очередь опирается на статистику. Сказать "хочу математику" чтобы осуществлять быстрый поиск по отпечаткам пальцев - значит не сказать ничего.
26 zenik
 
15.06.15
12:18
(24) это больше доступной разрядности :(
27 zenik
 
15.06.15
12:22
(25) ну условия я привел доступные и понятные. требовалась формула, которая способна закодировать два числа разрядность которых в сумме не превышает разрядности получаемого числа. Народ здесь тусит умный, вот и думал, что у кого-то будет элегантное решение :) Если такого нет, то возьму лежащую на поверхности конкатенацию. Я же ничего не от кого не требую :)
28 fisher
 
15.06.15
12:22
(23) Простой читаемый штрих-код тебе не нравится. Бывает. Может, это твое последнее внедрение и ты хочешь осложнить всем жизнь напоследок. Но чем же тебе xor "не очень нравится"? Простотой? Надо позаковыристей, чтобы увеличить количество страданий?
29 zenik
 
15.06.15
12:28
Ок. понял что хочу странного. пойду конкатенацию делать...
з.ы. для (28) 12-й год тут работаю, думаю что не последнее внедрение :)
30 fisher
 
15.06.15
12:35
(29) Сочувствую.
Кстати, я когда-то давно поразился, что на банальном xor базируется единственный алгоритм шифрования, который невозможно взломать в принципе и это математически доказано. Всё предельно банально, конечно, до смешного. Но когда вообще не касался темы криптографии и все уши прожужжали тем, что взломать можно любой код - было как-то неожиданно об этом услышать.
31 ЧеловекДуши
 
15.06.15
12:51
(6) Используй 36-ти-ричное число исчисление.
32 zenik
 
15.06.15
12:51
(30) зато интересно наблюдать как оно все меняется :) пока я сидел в своем кресле в своем кабине поменялось 5 генеральных, порядка 4-х гл. бухов. Да что там говорить, даже фирма уже разок поменялась, причем не просто по документам, а реально со сменой собственника. А я все сижу и пишу программки :)
33 zenik
 
15.06.15
12:51
(31) Да ладно, замяли уже :)
34 ЧеловекДуши
 
15.06.15
12:54
(33) Замяли, таки и замяли. :)
А так, Справочник + Характеристика, напрашивается некий элементарный генератор числа под средством записи элемента справочника или неким регламентным заданием.
...простая нумерация от 1 до 9999999999 элементов...
35 m1_1976
 
15.06.15
12:56
я делал подобное. Почти конкатенация, у меня правда было десятичное число. Работает мгновенно. Получение кода товара или кода характеристики - тоже очень быстро.
Функции есть математические.

тогда получается элементарно - до запятой - код товара, после запятой код Характеристики. Любой вариант, включая НУЛИ дает тебе уникальное число. Можешь с ним, как с числом делать что хочешь...
например

366,25
0,25
366,00
36 тарам пам пам
 
15.06.15
12:59
(20) и что? ну получится у тебя 0000001200 - все замечательно раскодируется обратно.
37 zenik
 
15.06.15
13:01
(35) идея интересная. Я прям что то подобное и ждал. надо будет подумать над таким вариантом. Спасибо!!!

(36)... я теперь понял твой вариант, после 35 :)
38 ЧеловекДуши
 
15.06.15
13:03
(37) А какое ограничение в Коде у Кассы?
Вы подумали об этом? :)
39 ЧеловекДуши
 
15.06.15
13:04
+(38) Я бы использовал еще перевод в 36-ти-ричное исчисление.
Если Код на кассе допускает применение в коде Алфавит :)
40 zenik
 
15.06.15
13:04
(38) в 0 написано, что число в 10 разрядов... Это, мать его, миллиард товаров :)
41 ЧеловекДуши
 
15.06.15
13:04
+ Для быстроты сего хранения полученного коду, можно состряпать Регистр сведений
42 ЧеловекДуши
 
15.06.15
13:05
(40) Для 10-ти ричного исчисления, поверь, при использование характеристик, может быть так, что будет мало :)
43 ЧеловекДуши
 
15.06.15
13:07
+(40) 1 товар + характеристика или Характеристики, в зависимости от испорченности фантазии Операторов или кто там у вас :)
44 zenik
 
15.06.15
13:09
(42) в характеристики пока только обувь. пока перевалили 27к наименований... перевалят мильен - удалим старые наименования :)

Спасибо всем. Прям от души. Прям вот доволен аки слон :)
45 delavar
 
15.06.15
13:25
Надо код товара и код характеристики закодировать простыми числами. и итоговый код сделать произведением - тут и математика и интересно и гемор - короче то, что нужно автору
46 Salimbek
 
15.06.15
14:00
(45) Гы...
47 Злопчинский
 
15.06.15
14:10
(1) Не знаю как там в снеговике, но использование слеша в - есть бяка, ибо он использовался в ПолноеНаименование()/ПолныйКод()