|
Журналирование измененных документов 7.7 - ПОЛУЧИЛОСЬ | ☑ | ||
---|---|---|---|---|
0
romix
модератор
16.10.06
✎
04:44
|
Достигнут новый рубеж в тяжелом одинэсо-строении!
А именно, приделан перехват событий записи или изменения документов. В 1С:Предприятие 7.7 нельзя "просто так" поставить перехватчик на событие записи: нет глобального перехватчика "ПриЗаписи" и "ПриПроведении", и - самое главное - вообще нет перехвата программных событий, таких как док.Записать(). Для обмена с другими базами (не обязательно 1С) надо знать: а какие же документы были изменены? Так что я засел за SoftICE... Вахта великого почина 1С: Книга знаний: Лог измененных документов (программно или интерактивно) |
|||
2
nicxxx
16.10.06
✎
05:52
|
папка BASE_SQL пуста, это подразумевает что неважно на какой платформе запускать компоненту?
|
|||
3
nicxxx
16.10.06
✎
05:56
|
круто! работает :)
давно хотелось чего-то подобного, а то делал логирование на ДБФ базе через такие дебри шо писец. как бы теперь клиентов убедить что им надо логирование переписать :) |
|||
4
Морозов Александр
16.10.06
✎
06:01
|
(3)болезнь?
|
|||
5
SSkripagan
16.10.06
✎
06:08
|
Ромиксу риспект. Многие разработки вызвали глубочайший интерес и неподдельное уважение к светлой голове данного человека. Данная разработка в их числе. Спасибо.
|
|||
6
Подполковник
16.10.06
✎
07:47
|
кто пробовал? реальная вещь?
|
|||
7
Obed
16.10.06
✎
07:54
|
(0) Особый респект!
(3) Превед! Когда пить будем? |
|||
8
aka Любитель XML
16.10.06
✎
08:34
|
мда... посмотрел обработку по парсингу mlg - имхо жесть...
|
|||
9
smaharbA
16.10.06
✎
08:56
|
(0) когда логон нНТ-евый будет ?
|
|||
10
GrayT
16.10.06
✎
09:32
|
(8)Иногда лучше промолчать
|
|||
11
aka Любитель XML
16.10.06
✎
09:44
|
(10) что значит лучше промолчать? Я думал книге знаний хотя бы код нормальный будет... а там... Ну хотя бы для приличия колонки создавали не в Сформировать(), а ПриОткрытии().
|
|||
12
GrayT
16.10.06
✎
10:11
|
О каких колонках и каком Сформировать речь? (Поиск по всей конфе "Сформировать" ни чего не дал)
И где ты парсинг mlg узрел? |
|||
13
aka Любитель XML
16.10.06
✎
10:13
|
(12) в ссылке (0) есть Книга знаний: Парсинг файла MLG (журнал регистрации 1С:Предприятие 7.7)
|
|||
14
GrayT
16.10.06
✎
10:16
|
Гы. Надо было еще и по поводу УРБД пройтись, в таком разе.... тоже ссылка есть :)
|
|||
15
АЛьФ
16.10.06
✎
10:18
|
2(0) Мой тебе совет: скачай исходники 1С++, подучи немного VC++. И тебе будет НАМНОГО проще разбираться в движке 1С. Многое из того, на что ты тратишь кучу времени и сил давно уже описано в исходниках 1С++.
|
|||
16
GrayT
16.10.06
✎
10:25
|
(15)Ты как то хотел статью про Радугу написать - забил или времени нет?
Подучи... легко сказать - я тут два дня в дебрях MFC покопался - чую шарики за роликами застряли.... |
|||
17
skunk
16.10.06
✎
10:25
|
прикольные статьи... может мне тоже таких парочку написать
|
|||
18
StranNik1С
16.10.06
✎
10:31
|
Задача: перехватить момент записи дока или справочника для вызова удаленной процедуры на сторонней базе.
Возможно решить без изменения конфигурации с помощью этой компоненты? |
|||
19
АЛьФ
16.10.06
✎
10:32
|
2(16) Времени нет.
Не надо лезть в дебри. Надо определенную задачу перед собой поставить и учить в рамках этой задачи. |
|||
20
romix
модератор
16.10.06
✎
13:30
|
(2) Да, работает и для SQL (тестил и под ним тоже).
(5) :-) (6) Планируется на работе ее поюзать, пока еще не вставляли. (9) ОК, попробую. Глядишь, преимуществ у V8 не останется. :-) (11) Хочешь - правь, там открыто... (15) Я могу распространять свою ВК в комплекте 1С++... На чем делать мне по большому счету все равно (особенно если кто-то может подсказывать). (18) А поподробнее можно? |
|||
21
romix
модератор
17.10.06
✎
03:02
|
(16) Я вот думаю можно относительно легко сделать логгер вызовов MFC, если поюзать исходники (которые идут в комплекте VC). Может у кого-то уже есть готовый? Или отладчик VC все показывает?
|
|||
22
spock
18.10.06
✎
18:53
|
(21)а ты случаем decorated имена функций, которые за запись справочников отвечают, не нашел?
А то у меня из-за этого процесс стопорится :) |
|||
23
Таня
18.10.06
✎
19:12
|
ура, мне оно тоже надо :)
спасибо (0) |
|||
24
TSerge
18.10.06
✎
19:35
|
(0) Круто! Пригодится! Очередной респект!
|
|||
25
insider
18.10.06
✎
19:46
|
(0) отличная штука, но если не затруднит, не мог бы перехватывать непосредственное удаление программное и через "удаление помеченных объектов" - вопрос не праздный и очень нужная штука вышла бы.
ну и спасибо за твои изыскания, молодец! |
|||
26
romix
модератор
18.10.06
✎
23:12
|
(22) Со справочниками там сложнее... Наверное можно, но явных функций наподобие WriteDocFromContext для документов я там не разглядел.
Скорее всего, при реализации обмена потребуется передавать все элементы справочников, которые повстречались в измененных документах. |
|||
27
romix
модератор
18.10.06
✎
23:23
|
(25) Непосредственное удаление тоже перехватывается:
---------- Объект={"O","0","0","0","0","0"," 26 62193797 "} <Объект не найден>(62193797/) Действие=УдалениеДокументаПрограммно User=romix Comp=ROMIX Время=18.10.2006, 23:05:26 |
|||
28
acsent
18.10.06
✎
23:26
|
(0) Может тебе влиться в команду разработчиков 1С++?
|
|||
29
insider
18.10.06
✎
23:40
|
(27) в случае, если юзер ткнет в "удаление помеченных объектов" - тоже?
и я так понимаю, что раз есть исходники, то писать не обязательно в mlg, а с небольшой переделкой можно писать и куда-нить еще, верно? если все так - ну тогда вообще супер, если сделаешь такое же для справочников - тогда самописную полноценную УРБД будет весьма просто написать :) |
|||
30
romix
модератор
18.10.06
✎
23:44
|
(25) Интерактивное (если его разрешить) удаление тоже перехватывается.
Удаление помеченных объектов не регистрируется. Щас попробую посмотреть этот случай. (28) Возможно, они реализуют этот режим у себя - инфу я там всю расписал... Если у кого-то будут вопросы, то я часто отвисаю в аське... |
|||
31
insider
18.10.06
✎
23:45
|
+29 насчет "объект не найден" не совсем понятно, нельзя ли сохранять старый ID удаленного объекта? ну очень хочется :)
(30) удаление помеченных вообщем-то и нужно больше всего - то, что программно ну никак не отслежу :( |
|||
32
romix
модератор
18.10.06
✎
23:48
|
(29) А все элементы справочников же можно передавать, которые засветились в документах...
Насчет mlg не понял - я не туда пишу... А в свой лог. Удаление помеченных щас посмотрю... |
|||
33
Aldour
18.10.06
✎
23:50
|
(0) ЭЭХ.. Классно конечно, но на месяц пораньше бы..:( Мне не пришлось бы с триггерами на SQL возиться...
|
|||
34
insider
18.10.06
✎
23:51
|
(32) в принципе - да, справочники не особенно важны, так и делаю, т.е. передаются только те, что в документах прошли
мне показалось насчет mlg, т.е. почему-то так понял, сорри (33) ну триггеры ты здорово сделал и имхо для скуля - самое оно, вопрос вообщем-то меня для dbf интересует, для скуля - неактуально :) |
|||
35
romix
модератор
19.10.06
✎
00:25
|
Изловил непосредственное удаление:
BkEnd!?JustDeleteDoc@@ Ссылка на док - в первом параметре по смещению 158 Еще там осталось включение-выключение операций изловить.... |
|||
36
romix
модератор
19.10.06
✎
00:37
|
Включение и выключение проводок:
BkEnd!?OnOffProvs Ссылка на док: dd*(esi+158h) |
|||
37
romix
модератор
19.10.06
✎
00:38
|
Щас вставлю...
|
|||
38
romix
модератор
19.10.06
✎
00:40
|
(33) Ну да :-)
|
|||
39
Злопчинский
19.10.06
✎
00:40
|
Зашибись! то что надо! теперь всякую хрень не надо будет в код пихать..
буду смотреть подробнее - но навскидку вопрос: а можно ли значение дока писать не только в виде строки, но и как-то расшифровывать... т.е. например как получить документ из лога, если его(документа) уже в базе нет...? или я что не понял...? |
|||
40
nicxxx
19.10.06
✎
01:30
|
(4) какая болезнь? причем тут болезнь? кто болен? просто бабла хочу срубить
(7) не пью я, ты же знаешь :) |
|||
41
romix
модератор
19.10.06
✎
03:02
|
Добавил перехват удаления помеченных доков и перехват включения-выключения проводок.
Также я добавил методы для чтения и очистки журнала с необходимыми блокировками (см. образчик конфигурации, процедура глОбработкаОжидания). |
|||
42
romix
модератор
19.10.06
✎
03:17
|
(39) Я предлагаю хранить в отдельной таблице (например, справочнике) идентификатор документа (ЗначениеВСтрокуВнутр) и присваивать каждому доку GUID, и там же, в отдельном поле, его хранить.
Это решит сразу несколько проблем, таких как изменение номера и/или даты документа, а также непосредственное удаление документа. См. в Книге знаний, как сгенерировать GUID. |
|||
43
romix
модератор
19.10.06
✎
03:21
|
||||
44
zxcvb
19.10.06
✎
03:27
|
(0)
Ты молодец! Крайне полезная либа, пригодитсяв скором времени.:) |
|||
45
romix
модератор
19.10.06
✎
03:28
|
Таблица гуидов должна иметь два индексированных поля - это позволит находить по гуиду объект и, наоборот - по объекту - гуид.
Объект можно хранить в форме ЗначениеВСтрокуВнутр. Если не юзать гуиды, то непонятно, на какие идентификаторы ориентироваться при обмене (если юзера свободно меняют НомерДок и ДатаДок), а также непонятно, а что же посылать в другую базу, если док был непосредственно удален. |
|||
46
romix
модератор
19.10.06
✎
03:29
|
(44) :-)
|
|||
47
romix
модератор
19.10.06
✎
03:53
|
Поправил: теперь делается закрытие log-файла при ошибке.
|
|||
48
romix
модератор
19.10.06
✎
05:07
|
Генерацию GUIDа наверное добавлю до кучи.
|
|||
49
romix
модератор
19.10.06
✎
20:38
|
Добавил генерацию GUID, а также УРБД-подобную регистрацию изменений.
|
|||
50
romix
модератор
19.10.06
✎
20:52
|
Следующим на очереди будет выгрузка измененных доков в XML...
|
|||
51
VVVV
19.10.06
✎
22:55
|
ОТлично, Роман! Спасибо и успехов!
|
|||
52
VVVV
19.10.06
✎
23:05
|
(0) "Для первого запуска компоненты требуются права администратора или привилегированного пользователя Windows." - а VKLoader нельзя использовать для загрузки?
|
|||
53
romix
модератор
20.10.06
✎
00:49
|
(18) Теперь я думаю можно - объект для чтения логов в ВК (0) можно юзать отдельно.
(52) Да, я думаю что можно. Хочу во все свои разработки воткнуть вызов VKLoader. |
|||
54
VVVV
20.10.06
✎
09:22
|
(53) РОман - непонятки:
---------- Объект={"O","0","0","0","0","0"," 19 62193818 "} Новый1 20 {"O","0","0","0","0","0"," 19 62193818 "} Действие=УдалениеДокумента Время=20.10.2006, 09:20:22 ---------- Объект={"O","0","0","0","0","0"," 19 62193818 "} Новый1 20 {"O","0","0","0","0","0"," 19 62193818 "} Действие=УдалениеДокумента Время=20.10.2006, 09:20:35 =============================== 1 действие - пометка на удаление, 2-е - снятие пометки на удаление. А сообщение - одинаковое. Почему? |
|||
55
VVVV
20.10.06
✎
09:26
|
{"O","0","0","0","0","0"," 19 62193803 "}
---------- Объект={"O","0","0","0","0","0"," 19 62193803 "} Новый1 5 {"O","0","0","0","0","0"," 19 62193803 "} Действие=ЗаписьДокументаПрограммно Время=20.10.2006, 09:23:48 ---------- Объект={"O","0","0","0","0","0"," 19 62193803 "} Новый1 5 {"O","0","0","0","0","0"," 19 62193803 "} Действие=Проведение Время=20.10.2006, 09:23:48 ===================================================== Действие - реально Запись программно, откуда еще второе сообщение? Да еще о проведении? |
|||
56
romix
модератор
20.10.06
✎
12:29
|
(54) Удаление так вызывается в действительности. Что само удаление, что его отмена - одна и та же функция... Та же картина кстати в штатной процедуре гл. модуля ПриУдаленииДокумента. Способ отличить одно событие от другого - посмотреть текущее состояние документа.
|
|||
57
romix
модератор
20.10.06
✎
12:31
|
(55) Они так вызываются в действительности... Это легко проверить, вставив в модуль проведения отладочную печать...
|
|||
58
VVVV
20.10.06
✎
12:35
|
значит, на корректное отображение событий расчитывать не приходится.
|
|||
59
romix
модератор
20.10.06
✎
12:41
|
(58) Проведение отображается корректно (в том виде, в котором оно есть).
Удаление можно смотреть по факту: удалено там или снята пометка. |
|||
60
romix
модератор
20.10.06
✎
14:22
|
Добавил метод
Аналогично похожему методу УРБД. Чтобы можно было перепроводить доки обработкой, и при этом не регистрировать изменения. Метод действует только для одного документа, до его перепозиционирования. |
|||
61
romix
модератор
20.10.06
✎
14:32
|
Добавил отключение компоненты через файл ini
Чтобы отключить перехват функций 1С, надо поместить в файл vk_log_write_doc.ini в том же каталоге, что и vk_log_write_doc.dll строку Disable=1 Опрос файла ini - при старте 1С. |
|||
62
romix
модератор
20.10.06
✎
18:24
|
Поменял алгоритм чтения лога.
Теперь для чтения лога надо поюзать: имяф=vk_log_write_doc.ПереименоватьЛогФайл(); Лог будет переименован, и его можно юзать по имени имяф. Чтение внутри блокировки я убрал от греха подальше, чтобы не блокировать на долгое время других пользователей. Для блокировки при совместном доступе я использую файл .lck |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |