Цитата:
Сообщение от Igor_482
Ниже приведен код скрипта для замены номенклатурных наименований сборок. Скрипт использует написанный на VB6 ActiveX модуль (FBDBDialog.dll) который реализует связь с БД через ODBC драйвер Firebird и представляет собой диалоговое окно для выбора номенклатуры (окно подобно стандартному диалогу Базиса "Выбор материала и комплектующих").
Вложение 109799
Скрытый текст
PHP код:
var FDBServ = 't001'; //Сервер FireBird var FBSPort = '14357'; //Порт FireBird var FDBFile = 'D:\\DBBM\\Библиотека\\БД\\BMDB09.FDB'; //БД var FBCFile = 'C:\\Windows\\System32\\FBCLIENT.DLL'; //FBCLIENT.DLL (в корневой папке программы Базис)
var ConnectionString = 'Driver={Firebird/InterBase(r) driver};' + 'Dbname=' + FDBServ + '/' + FBSPort + ':' + FDBFile + ';' + 'CHARSET=NONE;' + 'PWD=masterkey;' + 'UID=SYSDBA;' + 'Client=' + FBCFile + ';';
var FBDB = NewCOMObject('FBDBDialog.FBDB'); var Objects = new Object();
function SetSelection(Control) { var List = Objects[Control.Name]; UnSelectAll(); for (var i = 0; i < List.length; i++) { List[i].Selected = true; }; };
function SetParameter(Control) { var List = Objects[Control.Name]; for (var i = 0; i < List.length; i++) { Undo.Changing(List[i]); List[i].Name = Control.Value; }; };
function GetFBDBDialog(Control) { var Result = FBDB.Dialog(ConnectionString); if (Result != '') { Control.Value = Result; }; };
Model.forEach(function(Object) { if ((Object == '[object TFurnAsm]' || Object == '[object TAsmKit]') && (Object.Owner != '[object TFurnAsm]' && Object.Owner != '[object TAsmKit]')) { var ObjectName = Object.Name.split('\r')[0]; if(typeof(Objects[ObjectName]) == 'undefined') { Objects[ObjectName] = new Array(); }; Objects[ObjectName].push(Object); }; });
var i = new Number(); for (var Key in Objects) { var NewSelector = 'Selector' + i + '= Action.Properties.NewSelector(Key, Key);\n' + 'Selector' + i + '.CanClear = false; \n' + 'Selector' + i + '.OnActivate = function() { \n' + ' SetSelection(Selector' + i + '); \n' + '}; \n' + 'Selector' + i + '.OnClick = function() { \n' + ' GetFBDBDialog(Selector' + i + '); \n' + '}; \n' + 'Selector' + i + '.OnValueChange = function() { \n' + ' SetParameter(Selector' + i + '); \n' + '}; '; eval(NewSelector); i++; };
Action.Properties.NewButton('Завершить').OnClick = function() { Action.Finish(); };
Action.Continue();
[свернуть]
Для работы скрипта необходим установленный ODBC драйвер Firebird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX и MSCOMCTL.OCX, а так же настройка переменных FDBServ, FDBFile и FBCFile в самом скрипте.
VB6 исходник ActiveX модуля FBDBDialog.dll, сам модуль и необходимые *.OCX для его работы: ссылка
ODBC драйвер для работы с БД Firebird: страница оф. сайта для загрузки драйвера
Стандартное место хранения модулей MSCOMCTL.OCX и MSDATGRD.OCX:
для Windows x64 -: %windir%\SysWOW64, для Windows x32 - %windir%\System32
При отсутствии модулей в системе их необходимо скопировать и зарегистрировать. Для регистрации необходимо запустить командную строку (cmd.exe) и выполнить команду - пример: regsvr32 %windir%\SysWOW64\FBDBDialog.dll
|
Игорь пожалуйста помогите разобраться, где может крыться проблема исполнения вашего скрипта
Все DLL и OCX скачал, установил зарегистрировать (на экселе проверил подключение - работает)
Запускаю скрипт - "тишина", в логе пусто, в свойствах Базиса 10 только кнопка [закончить].
ИМХО подозреваю что пропущена строка, где должно запускается приложение FBDBDialogEXE.exe
Пытался запустить скрипт редактирования парного крепежа. Ругается на 67 строку
Цитата:
var VTModelTree = Action.Control.Owner.Owner.dpModelTree.Components[3].VTModelTree;
|
отчет FindComponent() не выдает ничего похожего на
Components[3] Вообще. Самое близкое
Цитата:
Application[-1].dpModelTree[533].FrmModelTree[3].VTModelTree[1]
Application[-1].dpModelTree[533].VTModelTree[1]
Application[-1].dpModelTree[533].FrmModelTree[3].VTModelTree[1]
|
перепробовал с индексами и без -- не помогает. Реально чем-нить заменить?