![]() |
![]() |
![]() |
|
Как проще всего получить контрольную сумму | ☑ | ||
---|---|---|---|---|
0
YHVVH
25.07.08
✎
10:03
|
Вопросец, есть строка (длинна разная) нужно получить контрольную сумму из нее число integer.
Нашел вроде код на 1с которая преобразует строку в чексумм но не понятно что за функция в ней используется Arg2 = LongInt(int(Arg1/2), ?(int(Arg1/2) = (Arg1/2), "0", "1") + Arg2); 1с ругается на LongInt Взел отттуда http://www.gr13.ru/old/1c/download/program.htm И вообще мне не понравился код, может кто делал по проще? |
|||
1
Garykom
гуру
25.07.08
✎
10:11
|
(0) А шо такое в вашем понимании контрольная сумма?
CRC32, MD5 или еще что то? |
|||
2
YHVVH
25.07.08
✎
10:17
|
вообщем я понимаю число определенного размера которое получается (ПО БАРАБАНУ каким способом ) из строки примерной длинны (100-200) и для каждой разновидности такой строки будет уникальным с наибольшой вероятностей.
Грубо говоря хочу синхранизировать справочники, и чтоб знать что элемент справочника изменился (и требьует изменения в другой базе), я формирую чексумм по полям которые должны обновляться и там и там, и если чексум расходиться то я данные обнавляю. Только не надо обсуждать мой вариант синхронизации, надо просто если можете помочь с функцией. |
|||
3
Дядя Васька
25.07.08
✎
10:17
|
так понятнее?
|
|||
4
YHVVH
25.07.08
✎
10:19
|
не пнятно , функция Число имеет один аргумент!
|
|||
5
Дядя Васька
25.07.08
✎
10:19
|
(2) "Только не надо обсуждать мой вариант синхронизации" - ага, ЩАЗ! ))
|
|||
6
YHVVH
25.07.08
✎
10:20
|
(5) просто щас начнут а ты ни так делаешь делай так, вообщем как всегда на форумах.
|
|||
7
Дядя Васька
25.07.08
✎
10:21
|
(4) LongInt это длинное целое, то же что и int только побольше. Т.е. точнее так даже: Arg2 = Цел(Цел(Arg1/2), ?(Цел(Arg1/2) = (Arg1/2), "0", "1") + Arg2);
а к чему второй аргумент хз.. Больше кода |
|||
8
Дядя Васька
25.07.08
✎
10:22
|
(6) А если и правда не так? Для синхронизации уникальный идентификатор нужен, а у тебя "с большой долей вероятности"...
|
|||
9
Дядя Васька
25.07.08
✎
10:24
|
+(8) Т.е. если есть вероятность что контрольная сумма повторится, значит рано или поздно так и будет. И впендюришь в элемент совершенно не его строку.
|
|||
10
YHVVH
25.07.08
✎
10:25
|
не впендюрь а перепишу данные, контрольна сумма для того чтоб понять данные обновились или нет, а синхронизация по коду будет.
|
|||
11
YHVVH
25.07.08
✎
10:28
|
Вот не пойму Вы советуете не понятные вещи, у Цел один вх параметр. Что Цел что Число входящий один параметр, и 1с ругается на П = Цел(1,2);
|
|||
12
Rovan
гуру
25.07.08
✎
10:28
|
(9) Рез = 0;
Множитель = 1; Для н = 1 по СтрДлина( ВхСтр ) Цикл Рез = Рез + Множитель * КодСимв( Сред( ВхСтрока ), н, 1 )); Множитель = Множитель * 128; КонецЦикла; *** вроде как не повторится ..... вопрос выдерждит ли размерность числа :-) |
|||
13
Дядя Васька
25.07.08
✎
10:31
|
(10) Так проще все... Сделай тз с колонками Код, ТвояСтрока и КоличествоСовпадений. В Код и ТвояСтрока сваливаешь оба справочника, КоличествоСовпадений заполняешь единицами, затем ТЗ.Свернуть("Код,ТвояСтрока", "КоличествоСовпадений"). Где двойки получились, там не менялось, где единицы переписывай.
|
|||
14
Дядя Васька
25.07.08
✎
10:33
|
(11) Вот не пойму что тебе это даст... Одинэска переменные так хранит, что сравнить два числа вряд ли быстрее будет чем две строки, а (13) реальный прирост даст по скорости ;)
|
|||
15
Мартиция
25.07.08
✎
10:35
|
Завести реквизит дату и время изменения, по нему и сравнивать.
|
|||
16
FN
25.07.08
✎
10:38
|
(15) красиво...
|
|||
17
Дядя Васька
25.07.08
✎
10:39
|
(15) Если пользователей до фига может одинаковое получиться.
|
|||
18
YHVVH
25.07.08
✎
10:51
|
Вот смотри:
Есть 1с база справочник Код Наименование артикул Кладовщик Цена ЧекСумм от этой строки будет число далее его кладу в SQL потом с другой базы подцепляю его далее его сранвиаю с имеющемся, если расходиться то обновляю справочник по ОЛЕ из первой базы ты мне предлогаешь пихать в SQL суммарную строку всех реквизитов справочника? В этом случае в результате иммем 1. Объем данных не нужных и тормоза работы БД SQL 2. Сложный алгоритм синхроницации |
|||
19
Дядя Васька
25.07.08
✎
10:53
|
(18) А нафик вообще что-то ложить в sql? Из одной базы цепляйся по OLE к другой и тяни напрямую...
|
|||
20
YHVVH
25.07.08
✎
10:55
|
Оле работает медленно, поэтому и делаю поля чексумм чтоб меньше запросов было через него, используя чексумм даёт прирост произвождительности и простоту использования.
|
|||
21
smaharbA
25.07.08
✎
10:54
|
Как страшно жить...(с)
|
|||
22
YHVVH
25.07.08
✎
10:55
|
предстовляешь документ 100-200 позиций 500 штук в день ?
|
|||
23
YHVVH
25.07.08
✎
10:57
|
фактически SQL нужен не для синхронизации справочников а для синхронизации работы склада и офиса.
|
|||
24
Дядя Васька
25.07.08
✎
10:58
|
(20) Да ну? Ты просто не умеешь его готовить... ВыбратьЭлементы(); Пока ПолучитьЭлемент()=1 Цикл работает с одной и той же скоростью, как в родной базе, так и в олешной...
|
|||
25
YHVVH
25.07.08
✎
10:59
|
просто придумываем блок отдельный 1с для управление динамического хранения товра, который позволяет цеплятся к люой 1с торговли.
|
|||
26
YHVVH
25.07.08
✎
11:00
|
Эх Васька Васька....... твоими устами мед бы пить.
P.S. посовету по теме ченибудь не будем спорить. |
|||
27
YHVVH
25.07.08
✎
11:01
|
Че за ЛонгИнт так я и не понял
|
|||
28
Serjant
25.07.08
✎
11:19
|
(0) Каким боком контрольная сумма может помочь для контроля изменений не поятно. Обработай файл монитора и получишь измененные элементы, туда попадают все элементы записанные интерактивно. Ну если уж так охота контроль, дублируй справочник и храни в нём все нужные реквизиты, это хоть корректно работать будет :)
|
|||
29
YHVVH
25.07.08
✎
11:29
|
Всем спасибо тема закрыта.
ТУ Rovan большие числа получаются. способ оригинальный, респект что в тему. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |