Имя: Пароль:
1C
 
Как проще всего получить контрольную сумму
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
так понятнее?
Arg2 = Число(Цел(Arg1/2), ?(Цел(Arg1/2) = (Arg1/2), "0", "1") + Arg2);
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 большие числа получаются. способ оригинальный, респект что в тему.