Имя: Пароль:
1C
1C 7.7
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С в режим распределённой базы и радостно получать сообщения обмена.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс