Показать сообщение отдельно
Старый 16.03.2019, 07:09   #1426
АлКузнецов
Местный
 
Аватар для АлКузнецов
 
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 212
АлКузнецов как роза среди колючекАлКузнецов как роза среди колючекАлКузнецов как роза среди колючек
По умолчанию нужен HELP

Цитата:
Сообщение от 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 
0< List.lengthi++) {
    List[
i].Selected true;
  };
};

function 
SetParameter(Control) {
  var List = 
Objects[Control.Name];
  for (var 
0< List.lengthi++) {
    
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 
= new Number();
for (var 
Key in Objects) {
  var 
NewSelector =
  
'Selector' '= Action.Properties.NewSelector(Key, Key);\n' +
  
'Selector' '.CanClear = false;                        \n' +
  
'Selector' '.OnActivate = function() {                \n' +
  
'  SetSelection(Selector' ');                         \n' +
  
'};                                                         \n' +
  
'Selector' '.OnClick = function() {                   \n' +
  
'  GetFBDBDialog(Selector' ');                        \n' +
  
'};                                                         \n' +
  
'Selector' '.OnValueChange = function() {             \n' +
  
'  SetParameter(Selector' ');                         \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]
перепробовал с индексами и без -- не помогает. Реально чем-нить заменить?
__________________
С уважением Кузнецов Александр

Последний раз редактировалось АлКузнецов; 07.05.2021 в 16:41.
АлКузнецов вне форума   Ответить с цитированием Вверх