![]() |
![]() |
|
"Контрольная сумма" объекта | ☑ | ||
---|---|---|---|---|
0
Diter
29.12.05
✎
11:50
|
Задумался, как бы к своему обменнику прикрутить нечто вроде "тригеров" (тут на днях товарищь про них рассказывал).
Подумал, что не добавляя никаких реквизитов в документы и справочники, и не правя модули сделать так определяется правило формирования некой контрольной суммы для объекта 1С (элемент справочника, документ, операция). При формировании списка объектов для выгрузки при первой отправки объекта расчитывается его контрольную сумму и помещает в некую таблицу (файл или справочник) данные о внутреннем ID объекта и его "контрольной сумме". При последующих выгрузках программа сравнивает текущую контрольную сумму с уже записанной и принимает решение о повторной выгрузке объекта. Чего вы думаете по этому поводу? Какую схему формирования "контрольной суммы" можно предложить для разных объектов? |
|||
1
Дяпти
29.12.05
✎
11:57
|
крутота :-)
любой алгоритм хеширования а ваще то в любой таблице справочников и документов есть поле кажись называется VERSTAMP - это типа количество раз записи элемента. Можно вполне ориентироваться по нему. |
|||
2
Rick
29.12.05
✎
11:58
|
была аналогичная идея, но как-то замялась. Фунцию вычисления контрольной суммы, думаю, можно придумать. Только в чем проблема поставить на в обработку записи выгрузку в тот же файл номеров измененных элементов?
|
|||
3
Diter
29.12.05
✎
11:59
|
(1) Круто А теперь можно без общих фраз и применительно к 1С?
|
|||
4
Diter
29.12.05
✎
12:00
|
*2( ТОлько в том, что мой обменник работает с минимальным вмешательством в конфигурацию - общие реквизиты добавляются автоматом (без моего участия). А так - нужно править все процедуры "ПриЗаписи"
|
|||
5
Diter
29.12.05
✎
12:02
|
А кто модер секции "Интеграция"? Почему моя ветка не там?
|
|||
6
GrayT
29.12.05
✎
12:03
|
(5)Ромикс
|
|||
7
Rick
29.12.05
✎
12:03
|
эх-х-х нет у меня с собой хорошей книжки ,а то я бы написал какую-нить простенькую но эффективную формулу :))
(4) все правильно. А у меня условие выгрузки только при проведении документа, поэтому повесил на обработку проведения в глобальном модуле .. а вообще, эту идею (0) надо реализовать. Красивая вещь получится ... Постараюсь вечером предложить хеш-функцию. Остается определиться что будем пересчитывать: сроковые представления реквизитов - это как-то банально ... |
|||
8
NS
29.12.05
✎
12:03
|
ТЕБЕ нужна функция нормально вычисляющая КС?
|
|||
9
NS
29.12.05
✎
12:05
|
||||
10
Diter
29.12.05
✎
12:05
|
(7) Кстати, это не обязательно можеть быть именно сумма (число в смысле) - это может быть и строка
(8) Ага - хотелось бы глянуть... |
|||
11
Гламурный Подонок
29.12.05
✎
12:05
|
Я делал такой механизм для выгрузки из ТиС в бухгалтерию. Для вычисления хеш-функции использовал ВК v7Crypt.
|
|||
12
Diter
29.12.05
✎
12:05
|
(7) Кроме документов ещё и справочники гонять надо. Да и ручные операции тоже как то нужны...
|
|||
13
NS
29.12.05
✎
12:05
|
(10) Получаемое число можешь преобразовать в строку...
|
|||
14
Diter
29.12.05
✎
12:06
|
(11) ВК не кинешь с описанием на ящик?
|
|||
15
Diter
29.12.05
✎
12:06
|
(13) Хотелось бы алгоритм увидеть...
|
|||
16
Diter
29.12.05
✎
12:08
|
(13) расскажи ка мне использовать этот алгоритм применительно к документу а не к строке?
|
|||
17
NS
29.12.05
✎
12:10
|
(16) Преобразуй документ к строке...
|
|||
18
Rick
29.12.05
✎
12:10
|
(13) правильно-правильно .. как работать с объектом в-целом
и еще, что меня смущает: это надо постоянно хранить во внешнем файле таблицу со списком номеров документов и их КС? |
|||
19
Гламурный Подонок
29.12.05
✎
12:11
|
(14)Ушло.
|
|||
20
NS
29.12.05
✎
12:11
|
ВыгрузитьТабличнуючасть,
ЗначениеВСтрокуВнутр()... Для а=1 по Документ.РеквизитШапки() цикл ... и т.д. Неужели непонятно? |
|||
21
Diter
29.12.05
✎
12:12
|
(18) А чем тебя это смущает? Ну не хочешь во внешнем - храни в справочнике...
(20) Понятно конечно. Что же ты меня - совсем за лоха держишь? |
|||
22
Rick
29.12.05
✎
12:16
|
(21)в справочнике - это опять же изменять конфу, что не-здорово ... надо хранить во внешнем файле. А если документов будет много-много-много .. то вариант не совсем подходящий. С другой стороны, вообще не трогаем конфу ..
|
|||
23
Diter
29.12.05
✎
12:19
|
Я почему про строку говорю - в строке можно даже извернуться и поставть инфу что и как изменилось. И тогда качать можно не весь документ например а только изменения. И в базе-получателе не пересоздавать документ а именно изменять. Трафик сразу ументшается...
(23) Справочник можно автоматом добавить. Всё равно конфа чуть чуть правится. У меня добавляется штук пять общих реквизитов и два справочника. |
|||
24
NS
29.12.05
✎
12:19
|
(21) Короче - для документа - создаешь пустую строку
стр=""; Потом добавляешь ДатуДок и НомерДок стр=стр+ЗначениеВСтрокуВнутр(Док.ДатаДок)+ЗначениеВСтрокуВнутр(док.НомерДок); Потом Добавляешь реквизиты шапки Для а=1 по метаданные.Документ(Док.Вид()).РеквизитШапки() цикл стр=стр+значениеВСтрокуВнутр(док.ПолучитьАтрибут(метаданные.Документ(Док.Вид()).РеквизитШапки(а).Идентификатор)); КонецЦикла; // потом общие реквизиты. // потом значениевстрокувнутр() - табличную часть (выгрузитьТабличнуюЧасть()) .... Вот и получил строку... По справочнику проще - родитель, владелец, код, наименование и реквизиты.... |
|||
25
NS
29.12.05
✎
12:20
|
А чем не подходит для этого использование механизмов УРБД?
|
|||
26
Diter
29.12.05
✎
12:20
|
(24) Да не, на самом деле про строку всё понятно... только вот (23) уже не реализуешь
|
|||
27
VadimG
29.12.05
✎
12:21
|
(0) Не заморачивайся =) Гемор гарантирую 100%. Цель оправдывает средства?
|
|||
28
Diter
29.12.05
✎
12:22
|
(25) Я усовершенствую свой обменник. УРБД - дополнительные деньги клиентов. Да и не всегда подходит этот механизм. Частенько его функционала не хватает
(27) Точнее наоборот - средства наверняка оправдают цели. Уже сейчяас несколько фирм отказались от МОДа и поставили мой обменник. не хватает самой малости - автоконтроля изменений |
|||
29
NS
29.12.05
✎
12:26
|
(28) УРБД можно использовать не для обмена, а только для фиксации изменений в базе.
|
|||
30
Diter
29.12.05
✎
12:27
|
(29) Тоже интересная идея... надо будет покопаться в УРБД...
|
|||
31
NS
29.12.05
✎
12:27
|
(28) А автоконтроль изменений делается проще.
В приЗаписи() везде - если Модифицированность()=1 тогда .... |
|||
32
у лю 427
29.12.05
✎
12:28
|
а править процедуры ПриЗаписи придется...
в противном случае при выгрузке для поиска измененных нужно каждый раз будет лапать все хранимые данные, чтобы определить, не менялись ли они... При базе метров в 500 и скорости лапанья... будет просто сказка... |
|||
33
Diter
29.12.05
✎
12:30
|
(32) Есть несколько замечаний - лопатить все данные нет сымсла. Данные выбираются для выгрузки за период - вот за этот период и будут отслуживаться изменения уже выгруженных данных. Это конечно не полный автоконтроль - но всё-таки. И потом - если юзер настроился выгрузить изменения то в любом случае это будет быстрее чем сейчас - они перезваниваются и руками переправляюи\т данные или делают повторную выгрузку...
(31) В существующие на момент установки МОДа процедуры добавить три строки 0 не проблема. Inserter рулит. А вот если новый документ создадут? |
|||
34
Diter
29.12.05
✎
12:34
|
(+33) Можно конечно при старте системы определять появился ли новый объект метаданных и автоматом вставлять эти строки... не знаю - может так и сделаю...
|
|||
35
NS
29.12.05
✎
12:35
|
(34) А инстукцию для тех, кто ковыряется в метаданных слабо написать?
|
|||
36
Diter
29.12.05
✎
12:36
|
(35) Да нет конечно. Не слабо....тут срабатывает человеческий фактор - не сделает пришлый программер и всё...
|
|||
37
УРБД для фиксации
29.12.05
✎
14:16
|
(29) Можно осветить подробнее: "УРБД можно использовать не для обмена, а только для фиксации изменений в базе"?
Т.е. напрямую работать с таблицами УРБД: сканировать 1SUPDTS и имитировать обмен, изменяя 1SDWNLDS? Или что-то проще? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |