Фильтр на журнал

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

klimin_a_s
Постоянный гость
Сообщения: 69
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Фильтр на журнал

Сообщение klimin_a_s »

Новое в Support 4.35.18

Журнализация

Обеспечена возможность поиска в журнале по содержимому информации, занесенной в журнал. Поиск возмо-жен не только по полям таблицы X$JOURNAL, но и по memo-полям, в которых содержится информация о произведенных изменениях в базе данных.

:o
С уважением,
Климин Андрей
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

Re: Фильтр на журнал

Сообщение ecasoft »

Лучше бы они в таблицу журнала добавили нужные индексы для поиска..по тем, что есть ничего найти невозможно.

На самое деле нужна прикладная отчетность по журналу, а не системная и не таблицам, а по документам. Типа..какие изменения были в приходных накладных за период...... каким пользователем...По изменненым сказать, кто ввел эти записи первый раз, когда..сколько раз и кто правил и опять НЕ ТАБЛИЦЫ, а ДОКУМЕНТЫ. В принципе написать такое не сложно и код небольшой, но просто Галактика почему то не хочет, а у меня нет такого крутого клиента, чтобы был готов такое оплатить. Видимо не сильно нужно..и так находят. Вот когда будет пользователей человек 100, когда видимо без этого вообще не обойтись. Да и такая огромная тыблица за неделю на 100 пользователей, что ее надо периодически копировать в отдельный файл, а текущую чистить. При этом вся прикладная журнализация должна уметь работать, при необходимости, и с архивом журнала (т.е. сразу со множеством таблиц журнала!). А по полям искать, находящемся в мемо - это для маленькой организации и не нужно, а для большой - будешь сидеть день, чтобы понять всю картину исправлений задним числом в базе.
Некоммерческое общение в форуме
DarkGreen
Постоянный гость
Сообщения: 89
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Казахсктан Аксуский завод ферросплавов
Контактная информация:

Re: Фильтр на журнал

Сообщение DarkGreen »

2 Автор: Косякин Игорь
Дата: 18-06-03 14:40 MSK+2

В Первасиве есть возможность создать внешние индексы
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

Re: Фильтр на журнал

Сообщение ecasoft »

Да она и в ВИПе есть такая возможность :) Так что создать можно..конечно потом могут быть проблемы с Галактикой (уже писал ранее, что добавление индексов может привести к проблемам с интерфейсами отчетами конвертером).НО дел то не в этом..я о штатной версии. Я чего..всем клиентам буду делать декомпиляцию словаря?
Некоммерческое общение в форуме
DarkGreen
Постоянный гость
Сообщения: 89
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Казахсктан Аксуский завод ферросплавов
Контактная информация:

Re: Фильтр на журнал

Сообщение DarkGreen »

2 Автор: Косякин Игорь
Дата: 18-06-03 14:40 MSK+2

В Первасиве есть возможность создать внешние индексы
IgorA
Постоянный обитатель
Сообщения: 192
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярск

Re: Фильтр на журнал

Сообщение IgorA »

Если добавят индексы на журнал, то он будет дольше записываться.
А т.к. запись идет постоянно, а просмотр журнала - это исключение, то малое число индексов, на мой взгляд, вполне оправданно.
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

Re: Фильтр на журнал

Сообщение ecasoft »

По-моему, об эффективности журнализации никто не думал. Иначе в журнал не попадали бы просто пустые записи :) Вы можете просто зайти в интерфес и выйти и уже буду записи в журнале. Так что никакого глубокого смысла там нет. И вообще, исторя написания журнализации идет от корпоративного обмена. Журнал был нужен именно для него и появился для него. Потом уже по нему сделали маленькие интерфейсы просмотра. ПОэтому и индексы там сделаны были для корпоративного обмена - просто отслеживание измененей таблиц. А задача контроля за пользователями при этом вообще не ставилась. Так что отсутствие индексов для контроля - это скорее исторические корни, чем какае-то логика эффективности.

И во вторых,можно не увеличивать число индексов, а просто сделать индексы сегментными. Время добавления такого индекса увеличивается несущественно, польза очевидна.
Некоммерческое общение в форуме
IgorA
Постоянный обитатель
Сообщения: 192
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярск

Re: Фильтр на журнал

Сообщение IgorA »

Получил, наконец, то, что хотел.
Спасибо всем за помощь, особая благодарность Косякину Игорю.

Если кому интересно, высылаю пример ARD-отчета:
(все лишнее убрал, что бы была видна логика)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ф-ия GetNewFieldValueFromJournal(p1,p2,p3,p4,p5)
! p1 - поле, которое нужно вытащить
! p2 - число - берется из X$FILES.XF$RECORDFIXED для нужной таблицы
! p3 - X$JOURNAL.DATAREC - мемо поле
! p4 - X$JOURNAL.Operation
! p5 - переменная, в которую пишется результат(того же типа, что и поле)
!
! В данном примере, показываю даты проводок
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.Form 'Журнализация'
.ard
.var pNew, pOld: Date;
nr: Comp;
.endvar

.create view t1 as
select DATAREC, Operation, nrec, TABLENREC
from X$JOURNAL
where ((9011==TABLECODE));
.fields
TABLENREC
pNew
pOld
.endfields

.begin
nr := -1;
GetFirst X$JOURNAL;
end.
-----------------------------------------------
| nrec | Дата нов. | Дата старая
-----------------------------------------------
.{WHILE nr <> X$JOURNAL.NREC
.begin
GetNewFieldValueFromJournal(OBOROT.DATOB,566 , DATAREC, Operation, pNew);
GetOldFieldValueFromJournal(OBOROT.DATOB,566 , DATAREC, Operation, pOld);
end.
^ ^ ^
.begin
nr := X$JOURNAL.NREC;
GetNext X$JOURNAL;
end.
.}
.endform
Galex
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 29 июн 2006, 14:39
Контактная информация:

Сообщение Galex »

Разрешите вернуться к теме... Уже второй день мучаюсь и ничего не могу поделать... Вот кусок кода:

Код: Выделить всё

_loop X$Journal where ((Word(25043) == X$Journal.TableCode)) {
    if (X$Journal.Operation = Word(4)) {
      if (not GetOldFieldValueFromJournal(TitleDoc.wStatus, Word(271), X$Journal.DataRec, X$Journal.Operation, wOld)) Message('Old!!!');
      if (not GetNewFieldValueFromJournal(TitleDoc.wStatus, Word(271), X$Journal.DataRec, X$Journal.Operation, wNew)) Message('New!!!');
      if (wOld <> wNew) Message('!!!');
    }
  }
 
Соотвественно, при выполнении ни одно сообщение не появляется... Просматривается около 4000 тыс. записей, среди которым полно модификаций поля TitleDoc.wStatus, но сообщения Message('!!!') все равно нет!... :sad: Подскажите, где я ошибся?....
ira
Посетитель
Сообщения: 47
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение ira »

Я делала подобный отчет, все работает, тока очень меделенно при большом журнале.
не нашла X$Journal.Operation = Word(4)

X$Journal.Operation = 0 - Добавление
X$Journal.Operation = 1 - Модификация
X$Journal.Operation = 2 - Удаление

Из доки:
GetOldFieldValueFromJournal-
Возвращается значение поля ДО изменения (параметр value). Функция возвращает true, если операция прошла успешно, иначе возвращается false. Аналогично GetNewFieldValueFromJournal, только ПОСЛЕ.

я бы так написала :
_loop X$Journal where ((Word(25043) == X$Journal.TableCode)) {
GetOldFieldValueFromJournal(TitleDoc.wStatus, Word(271), X$Journal.DataRec, X$Journal.Operation, wOld);
GetNewFieldValueFromJournal(TitleDoc.wStatus, Word(271), X$Journal.DataRec, X$Journal.Operation, wNew);
if (wOld <> wNew) Message('!!!');
}
Galex
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 29 июн 2006, 14:39
Контактная информация:

Сообщение Galex »

я бы так написала :
_loop X$Journal where ((Word(25043) == X$Journal.TableCode)) {
GetOldFieldValueFromJournal(TitleDoc.wStatus, Word(271), X$Journal.DataRec, X$Journal.Operation, wOld);
GetNewFieldValueFromJournal(TitleDoc.wStatus, Word(271), X$Journal.DataRec, X$Journal.Operation, wNew);
if (wOld <> wNew) Message('!!!');
}
И ничего бы не получилось..... :-)
ira
Посетитель
Сообщения: 47
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение ira »

Почему бы не получилось?. Не поленилась, написала vip-ку, работает. Мож я чего-то не понимаю. Могу прислать по почте весь код.
Galex
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 29 июн 2006, 14:39
Контактная информация:

Сообщение Galex »

ira, версия Галактики какая стоит?... Атлантис и Галактика с патчами или без?.. Я понимаю, что, быть может, у вас работает!.. Но у меня ничего не выходит... Значения обеих переменных просто совпадают... Быть может есть какие-нибудь официальные замечания по использованию этих функций..... :-?
ira
Посетитель
Сообщения: 47
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение ira »

у нас Атлантис 3.03, Гал-ка 7.12 - патчи почти все :-). А в support в журнале точно есть записи модификации с разными значениями статусов?
Galex
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 29 июн 2006, 14:39
Контактная информация:

Сообщение Galex »

А в support в журнале точно есть записи модификации с разными значениями статусов?
Не статусов, а операций... Статус (поле X$JOURNAL.STATUS) у всех записей журнала равен 1. А с разными операциями их полно!
Просматривается около 4000 тыс. записей, среди которым полно модификаций поля TitleDoc.wStatus, но сообщения Message('!!!') все равно нет!...
Ответить