Книга знаний

1С:Предприятие / Приемы программирования / Внешние компоненты

Перехват API-вызовов и альтернативные плагины для 1С:Предприятие

Автор статьи: romix | Редакторы:
Последняя редакция №4 от 13.10.06 | История
URL: http://kb.mista.ru/article.php?id=277

Адрес для скачивания:
http://x-romix.narod.ru/MD_CHANGER.rar
(86К, скачивать левой кнопкой мыши)

Приведен исходный код (компилятор - Delphi 6).


Установка




1) Скопировать в папку 1cv7\Bin файл Hook_1C.dll, файл patch_Hook_1C.exe и папку Plugins.

2) Запустить программу-патчер patch_Hook_1C.exe

3) В файле Hook_1C.ini указать, какие плагины требуется загружать.
Ненужные плагины можно закомментировать символом ';'

Описание плагинов содержится в файлах readme.txt.

Тестовая конфигурация для демонстрации их использования находится в папке v77.


MD_CHANGER


Плагин позволяет заменять конфигурацию без выхода всех пользователей из 1С.
Выйти и войти должны будут только те пользователи, которым нужны изменения.


В каталоге информационной базы, где вы хотите заменить конфигурацию, создайте папку MD_CHANGER.

В ней создайте файл md_changer.ini

Его структура:


[Настройки]
НоваяКонфигурация=New2
;ЗапретЗагрузки=Производится обновление конфигурации 1С. Пожалуйста, подождите до 14:00



Параметр НоваяКонфигурация - задает папку (относительно MD_CHANGER), где лежит обновленный 1cv7.md

Параметр ЗапретЗагрузки - это дополнительная (необязательная) возможность - позволяет установить запрет пользователям на вход в 1С.



Не рекомендуется держать каталог MD_CHANGER открытым на всеобщую запись.


Информационная база с "замененной" конфигурацией недоступна для входа в нее конфигуратором
(программа выдаст соответствующее предупреждение). Необходимо отключить замену в файле ini.

MD_FREE


Плагин предназначен для принудительного завершения работы пользователей в 1С.
Чтобы завершить работу пользователей, необходимо создать в подпапке MD_FREE каталога информационной базы файл stop.txt
(содержимое этого файла не имеет значение - плагин проверяет только его наличие).
Завершение работы происходит "жестко" - если в это время велась какая-то работа, то она будет аварийно прекращена.

Sleep_DBF


Плагин предназначен для снижения нагрузки на сервер при ожидании блокировки.
25 релиз 1С:Предприятие для DBF.

Плагин перехватывает неудачную попытку заблокировать файл и вставляет паузу sleep.
Это позволяет разгрузить сервер (особенно терминальный) и дать пользователям возможность
нормально работать.

Плагин перехватывает блокировку файла 1SJOURN.DBF - блокировка других файлов не отслеживается.

Параметры в файле plugin_sleep_dbf.ini (его надо положить в ту же папку, что и DLL):


Пауза=1024
Сообщения=1
Зацикливание=1
СигнальныйФайл=c:\romix.sig


Пауза - это значение паузы в миллисекундах. Фактически пауза будет нарастать от 1 до 1024 (в данном примере)
миллисекунд с множителем 2: 1,2,4,8,...1024.


Сообщения - показывать сообщения в трее (1=да). Сообщение появится только при наличии паузы более 250 мс.

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

СигнальныйФайл - если указать файл, то плагин будет его создавать. Цель этого файла -
дать различным "роботам" (которые, например, восстанавливают последовательность документов) знать,
что кто-то пытается провести документ. Это позволяет остановить массовую обработку (может быть, даже на
середине большого документа) и подождать, пока пользователь не выполнит свою задачу.

Робот должен сам удалить сигнальный файл.

Сигнальный файл появится только при достижении паузой значения 1024 (в данном примере) мс.

См. также:
Книга знаний: Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировки

LOG_ERT


Плагин ведет журнал обращений к файлам ert (помогает выявить неиспользуемые или редко используемые внешние отчеты и обработки).
В файле ini необходимо указать каталог, где будет вестись журнал, например:
Каталог=c:\log_ert


После этого в данном каталоге будут появляться записи наподобие следующих:
05.10.2006 19:15:15; user=romix; comp=ROMIX; E:\MD_CHANGER\Hook_1C\Plugins\v77\ExtForms\test_log_ert.er


Каждая запись находится в файле с именем файл.ert.log, который соответствует ert.
Все записи выровнены на длину 200 символов, поэтому по длине файла можно судить о количестве обращений к файлу ert.

plugin_mxl_doctor



Плагин лечит проблему с длительным сохранением длинных MXL-файлов в XLS.
Также позволяет очистить HTML и поюзать CSS при сохранении MXL->HTML.

Плагин протестирован только для 25 релиза 1С:Предприятие (на других релизах плагин, скорее всего, выдаст предупреждение и откажется работать,
т.к. я использую фиксированный адрес для патчинга ошибки). Велика вероятность, что ошибку с длительным сохранением исправит сама фирма 1С в
следующих релизах.

Параметры в файле INI:
ПатчитьДлительноеСохранение=1
ИспользоватьCSS=1

Эти параметры могут принимать значения 1 (включено) или 0 (выключено).

Для тестирования плагина запустите обработку Test_MXL.
Она создает большой файл MXL (65000 строк) и сохраняет его сначала в XLS, а потом - в HTML.


При включенном использовании CSS я вычищаю из HTML следующие подстроки:

    ' BORDERCOLOR=#ffffff'

    ' ALIGN=LEFT'
    ' SIZE=2'
    '<FONT>...'


Сам файл CSS лежит рядом с плагином и называется plugin_mxl_doctor.css.

Те же действия выполняет внешняя компонента по ссылке
Книга знаний: Исправление ошибки при экспорте в Excel (патчинг Moxel.dll)

Balloon


Заменяет диалоговые окна предупреждения "Недостаточно прав доступа!" и
"Реорганизация информации закончена!" на сообщения (tooltips) в трее.
Плагин являеется, скорее, примером для реализации плагинов подобного рода.

Test, TestThread


Простые (нексколько строк кода) плагины для тестирования работоспособности перехвата.
TestThread показывает возможность многопоточной работы. Для демонстрации, что поток работает, издает периодический звуковой сигнал


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика