Ставим компонент OCX/DLL на клиентскую машину прямо из Navision
Один из эффективных способов расширить функциональность Microsoft Business Solutions–Navision — использовать внешние компоненты OCX/DLL. Однако, прежде чем начать использовать компоненты, их необходимо установить на все клиентские машины, которые подключены к системе. Например, если какой-то пользователь отсутствует в офисе в то время, когда вы их устанавливаете, то на следующий день Navision встретит его радостным сообщением об ошибке :-)
Microsoft Business Solutions-Navision
---------------------------
This message is for C/AL programmers:
Could not create an instance of the OLE control or Automation server identified by
GUID={506B4C1F-587D-4CD3-94A3-00354CF6EFEF} 1.0;
{B0A632A5-B0D1-41E8-A84A-A502B3341363}:Unknown Automation Server.Unknown Class.
Check that the OLE control or Automation Server is correctly installed and registered.
---------------------------
ОК
---------------------------
Сообщение означает всего лишь, что нужный OCX/DLL не найден на компьютере. Пользователь этого, скорее всего, не знает, сообщения испугается :-)
А что делать, если машина вообще находится вне офиса?
Решение есть. Ставить OCX-компоненты в режиме Run-time.
Вам необходимо выяснить имя OCX/DLL, который используется в программе (пускай это будет «Navision pad21.dll») и скопировать его с компьютера, где он УЖЕ установлен, на тот, где его нет. Вообще-то не имеет значения, куда вы решите поместить файл, но хорошим тоном считается класть его либо в папку Navision (где находятся файлы fin.exe/finsql.exe), либо в папку \Program Files\Common Files\Navision. Затем надо запустить режим командной строки (cmd.exe), и использовать утилиту regsvr32.exe, чтобы зарегистрировать компонент в реестре Windows:
regsvr32 "navision pad21.dll"
Если регистрация компонента прошла успешно, на экран будет выведено следующее сообщение:
RegSvr32
---------------------------
DllRegisterServer in navision pad21.dll succeeded.
---------------------------
ОК
---------------------------
С этого момента, данный OCX/DLL можно использовать в вашем Navision-приложении.
Существует способ сделать то же самое, но прямо в коде Navision. Сперва в коде идет проверка, установлен ли уже необходимый OCX/DLL на клиентской машине. Если нет, то файл OCX/DLL (который мы импортируем в BLOB-поле таблицы базы данных) копируется на клиентскую машину. Затем вызывается regsvr32 для регистрации компонента.
Набор функций, которые можно использовать, ниже.
Для корректной работы вам необходимо создать таблицу OCX/DLL Setup – которая будет хранить компонент, и кодеюнит для регистрации компонента.
{
FIELDS
{
{ 1;Primary Key ;Code10 }
{ 2;Notepad DLL ;BLOB }
{ 3;Notepad Name ;Text30 }
{ 4;Notepad Registry Name;Text100 }
{ 5;Notepad Version ;Text30 }
}
}
OBJECT Codeunit 50000 OCX/DLL Check/Import
VAR
recOcxDllSetup : Record 50000;
OnRun()
fctStart;
PROCEDURE fctImportOCXDLL();
BEGIN
WITH recOcxDllSetup DO BEGIN
IF NOT(GET) THEN
INSERT;
"Notepad DLL".IMPORT('navision pad21.dll',TRUE);
"Notepad Name" := 'navision pad21.dll';
"Notepad Registry Name" := 'Navpad20';
"Notepad Version" := '1.0';
MODIFY;
END;
END;
PROCEDURE fctIsOcxDllInstalled( ptxtRegistryName : Text[100]; ptxtVersion : Text[30]) : Boolean;
VAR
lrecAutServers : Record 2000000046; // Automation Servers
BEGIN
lrecAutServers.SETRANGE(Name, ptxtRegistryName);
lrecAutServers.SETRANGE(Version, ptxtVersion);
EXIT(lrecAutServers.FIND('-'));
END;
PROCEDURE fctInstallOcxDll();
VAR
ltxtFile : Text[250];
lintReturn : Integer;
BEGIN
WITH recOcxDllSetup DO BEGIN
GET;
CALCFIELDS("Notepad DLL");
IF NOT("Notepad DLL".HASVALUE) THEN
ERROR('Не могу найти %1 in %2', "Notepad DLL", TABLECAPTION);
ltxtFile := 'С:\Program Files\Common Files\Navision\' + "Notepad Name";
"Notepad DLL".EXPORT(ltxtFile, FALSE);
lintReturn := SHELL('regsvr32.exe /s ' + '"' + ltxtFile + '"');
IF lintReturn <> 0 THEN
ERROR('Unable to register %1', ltxtFile);
END;
END;
PROCEDURE fctStart();
BEGIN
IF NOT(recOcxDllSetup.GET) THEN
fctImportOcxDll;
IF NOT(fctIsOcxDllInstalled(recOcxDllSetup."Notepad Registry Name",
recOcxDllSetup."Notepad Version")) THEN
fctInstallOcxDll;
END;
Статья – вольный перевод статьи
Скачать архив с примером можно

Автор: Андрей Стрельников
В области Navision - с 2003 года. Профессиональные интересы: NAV, MS SQL, .NET, BPMN, IT-менеджмент. Предметная область: логистика, финансы, склады, 3PL.
Количество статей, опубликованных автором: 86.
Сивка-Бурка (русская сказка). Жил-был старик, и было у него три сына. Младшего все Иванушкой-дурачком звали. … Я тебе за это великую службу сослужу. — Хорошо, – отвечает Иванушка, – отпущу, да как я тебя потом найду? — А ты выйди в чистое поле, в широкое раздолье, свистни три раза молодецким посвистом, гаркни богатырским покриком: «Сивка-бурка, вещий каурка, стань передо мной, как лист перед травой!» – я тут и буду.