Страница 2 из 3

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

Добавлено: 18 июн 2003, 14:30
klimin_a_s
Новое в Support 4.35.18

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

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

:o

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

Добавлено: 18 июн 2003, 14:40
ecasoft
Лучше бы они в таблицу журнала добавили нужные индексы для поиска..по тем, что есть ничего найти невозможно.

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

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

Добавлено: 18 июн 2003, 18:04
DarkGreen
2 Автор: Косякин Игорь
Дата: 18-06-03 14:40 MSK+2

В Первасиве есть возможность создать внешние индексы

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

Добавлено: 18 июн 2003, 19:18
ecasoft
Да она и в ВИПе есть такая возможность :) Так что создать можно..конечно потом могут быть проблемы с Галактикой (уже писал ранее, что добавление индексов может привести к проблемам с интерфейсами отчетами конвертером).НО дел то не в этом..я о штатной версии. Я чего..всем клиентам буду делать декомпиляцию словаря?

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

Добавлено: 19 июн 2003, 06:48
DarkGreen
2 Автор: Косякин Игорь
Дата: 18-06-03 14:40 MSK+2

В Первасиве есть возможность создать внешние индексы

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

Добавлено: 19 июн 2003, 09:44
IgorA
Если добавят индексы на журнал, то он будет дольше записываться.
А т.к. запись идет постоянно, а просмотр журнала - это исключение, то малое число индексов, на мой взгляд, вполне оправданно.

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

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

И во вторых,можно не увеличивать число индексов, а просто сделать индексы сегментными. Время добавления такого индекса увеличивается несущественно, польза очевидна.

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

Добавлено: 20 июн 2003, 13:33
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

Добавлено: 03 июл 2007, 15:35
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: Подскажите, где я ошибся?....

Добавлено: 05 июл 2007, 03:48
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('!!!');
}

Добавлено: 05 июл 2007, 09:13
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('!!!');
}
И ничего бы не получилось..... :-)

Добавлено: 05 июл 2007, 10:37
ira
Почему бы не получилось?. Не поленилась, написала vip-ку, работает. Мож я чего-то не понимаю. Могу прислать по почте весь код.

Добавлено: 05 июл 2007, 12:01
Galex
ira, версия Галактики какая стоит?... Атлантис и Галактика с патчами или без?.. Я понимаю, что, быть может, у вас работает!.. Но у меня ничего не выходит... Значения обеих переменных просто совпадают... Быть может есть какие-нибудь официальные замечания по использованию этих функций..... :-?

Добавлено: 05 июл 2007, 12:19
ira
у нас Атлантис 3.03, Гал-ка 7.12 - патчи почти все :-). А в support в журнале точно есть записи модификации с разными значениями статусов?

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