|
v7: Как хранить историю изменения справочника(с периодическим очищением этой истори) | ☑ | ||
---|---|---|---|---|
0
vova1122
11.01.14
✎
11:32
|
Есть самописная конфигурация. В ней одновременно работает несколько пользователей.
Нужно куда-то записывать лог изменения элементов справочника. Потом периодически (скажем каждый час) эту историю выгружать для последующей обработки (в другой программе). А в 1С эту историю очистить, и начинать писать с "чистого листа". мои соображения: 1. Писать во внешний файл (для каждого пользователя свой). Каждый час (программно) данные из этих файлов записывать в отдельный файл, а в самих файлах данные удалять. Недостаток: во время удаления данных пользователь может делать запись. 2. Писать в глобальную таблицу значений. Каждый час выгружать из ТЗ во внешний файл. Саму ТЗ очищать. А дальше как в п. 1. 3. Другой вариант.... Что посоветуете? |
|||
1
viktor_vv
11.01.14
✎
11:36
|
По второму пункту, при выходе пользователя ТЗ уничтожится, данные выгружены не были.
|
|||
2
alex74
11.01.14
✎
11:38
|
Сделай таблицу(цы) в нормальной СУБД и пиши туда.
|
|||
3
viktor_vv
11.01.14
✎
11:38
|
По первому пункту во время записи элемента можно же проверять есть ли возможность писать в файл.
|
|||
4
viktor_vv
11.01.14
✎
11:40
|
(2)+1. Оно в принципе и на дбф можно свои таблицы создать.
|
|||
5
viktor_vv
11.01.14
✎
11:42
|
И таки необязательно прямо после выгрузки историю чистить. Добавь в файл/таблицу поле дата время, выгружай по условию, чистить можно и ночью.
|
|||
6
vova1122
11.01.14
✎
11:45
|
(1) можно дописать ПриЗавершенииРаботы() выгрузку
(3) мугут потерятся данные.... (5) читать нужно каждый час Что посоветуете, как лучше и надёжнее сделать (чтоб ничего не потерялось) |
|||
7
alex74
11.01.14
✎
11:47
|
(6) я бы привязался к другой программе, откуда ей удобно читать данные - туда бы и писал.
|
|||
8
viktor_vv
11.01.14
✎
11:55
|
(6) я к тому, что если файл недоступен для записи в момент очищения не давать записывать и сам элемент, пока не попустит.
Читай файл каждый час с выборкой с условием по периоду времени, а очищай ночью. |
|||
9
Torquader
11.01.14
✎
12:04
|
У меня изменение всего и вся просто пишется в журнал регистрации в виде "Поле:СтароеЗначение=>НовоеЗначение" (конечно, всё преобразовано в строки).
Читать журнал можно будет с того места, где закончили в прошлый раз. |
|||
10
temsa
11.01.14
✎
12:07
|
(0) Создай служебный справочник. Дешовый и без проблем.
|
|||
11
Mikeware
11.01.14
✎
12:12
|
В поиск...
Все придумано еще году в 2002... |
|||
12
vova1122
11.01.14
✎
12:22
|
(7) Неважно. Может читать и з *.txt.
(8) много телодвижений (9) журнал регистрации думаю может подойти как промежуточный этап. (10) Думал об этом. но как очищать справочник. (к тому же размер dbf этого справочника будет расти как в сказке "не по годам..." (11) иногда приходится изобретать велосипед. так как этого изобретения не нашёл.... |
|||
13
alex74
11.01.14
✎
12:23
|
(12) тогда лучше пиши в базу, с которой можно работать запросами и которая сама разрулит коллизии.
|
|||
14
vova1122
11.01.14
✎
12:34
|
(13) не катит.
Объясню подробнее задачу. Нужно в другой базе периодически обновлять данные (колонки: Элемент справочника из 1С, и несколько других реквизитов которые вычисляются запутанной обработкой) Конешно можно каждый раз выгружать весь справочник (но вычисление нужных реквизитов для выгрузки всего справочника занимает много времени (примерно 10-15 мин.) Поэтому я хочу ускорить выгрузку (выгружая только те элементы справочника которые изменились). |
|||
15
vova1122
11.01.14
✎
12:38
|
+(14) ещё придумал такой вариант. В сам справочник писать признак изменения (например 1). И после выгрузки менять его на "0". В обработку выгрузки брать только те что с "1"
|
|||
16
alex74
11.01.14
✎
12:40
|
(14) програмное изменение справочника как собираешься отслеживать?
|
|||
17
vova1122
11.01.14
✎
12:43
|
(16) есть только одна обработка, которая создаёт / изменяет элемент справочника. в ней дописать установки признака изменения. Остальные обработки никак на это не влияют
|
|||
18
sapphire
11.01.14
✎
13:24
|
(0) Если тип СУБД - MS SQL не ниже 2008, то можно использовать
Data Change Tracking ну или, в общем случае включить distrdb.dll и для справочника настроить обмен, правда таблицу изменений придется чистить, но это совсем не сложно. |
|||
19
monsterZE
11.01.14
✎
13:55
|
(15) чтобы забрать только обновленный элементы таблицы - можешь добавить новое поле "ДатаПослИзмен" и писть туда время в секундах, относительно какой-то начальной даты. Выгружать все, что больше, чем твое последнее время выгрузки.
База СКЛ? |
|||
20
Mikeware
11.01.14
✎
14:06
|
хосспадя....
это уже не 10 дней пить надо, а пару месяцев... |
|||
21
Torquader
11.01.14
✎
18:34
|
Конечно, можно перевести 1С в режим распределённой базы и радостно получать сообщения обмена.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |