|
|
|
|
|
13.01.2014, 13:22
|
|
БАЗИС 9 - Скрипты
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
13.01.2014, 13:22
Рейтинг:
()
ВНИМАНИЕ! Правила выкладывания скриптов.
1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.
2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.
Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.
__________________________________________________ _______________
Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.
Для работы скриптов от Igor_482 необходим установленный ODBC драйвер FireBird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX, MSCOMCTL.OCX и MSSTDFMT.DLL ( сообщение с описанием установки этих модулей в ОС, ссылка на модули и исходник "FBDBDialog.dll") а так же файл "ADODB.ini" с настройками соединения к БД в папке со скриптом.
ADODB.ini
[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
----------------------------------------------
Переменные .ini:
FDBServ - имя ПК на котором находится сервер FireBird с используемой БД (если локально, то параметр: localhost или 127.0.0.1);
FBSPort - в настройке не нуждается (по умолчанию: 14357);
FDBFile - локальный путь к БД на сервере FireBird;
FBCFile - путь к файлу "fbclient.dll" (находится в корневой папке программы Базис).
[свернуть]
Последний раз редактировалось systland; 23.09.2016 в 11:52..
|
Просмотров: 994451
|
Пользователь сказал cпасибо:
|
|
17.04.2018, 11:44
|
#1421
|
Пользователь
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 0
|
1. просто панели (на данный момент нужда только в этом)
2. да, сжать контур по сторонам на 1 мм ( позже в редакторе скрипта смогу подредактировать размер обрезки )
|
|
|
17.04.2018, 14:19
|
#1422
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Kartuz
1. просто панели (на данный момент нужда только в этом)
2. да, сжать контур по сторонам на 1 мм ( позже в редакторе скрипта смогу подредактировать размер обрезки )
|
Вот пример. Запускаете скрипт, выбираете панель - она сжимается. На данный момент проверить в 9 версии нет возможности, делал в 10. Возможно, в 9 версии нет функции Fit у контура - тогда придется попотеть и придумывать костыли для сжатия контура. И проверял быстро, на прямоугольных панелях, поэтому утверждать работоспособность у панелей со сложным контуром не берусь.
Код:
NewButtonInput('Закончить').OnChange = function (){
Action.Finish();
}
while (true){
var panel = GetPanel('Укажите панель');
if (panel){
Undo.Changing(panel);
var cnt = panel.Contour;
var min = cnt.Min;
var max = cnt.Max;
cnt.Fit(min.x + 1, min.y + 1, max.x - 1, max.y - 1);
panel.Build();
}
else
break;
}
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
17.04.2018, 15:59
|
#1423
|
Пользователь
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 0
|
Вот я пень. Забыл, что для 8 базиса нужно было указать. Включил 9 демку, там всё работает. Добавьте, если не трудно для нескольких панелей, а то по одной тыкать долговато
|
|
|
17.04.2018, 16:15
|
#1424
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
|
Цитата:
Сообщение от Kartuz
Вот я пень. Забыл, что для 8 базиса нужно было указать. Включил 9 демку, там всё работает. Добавьте, если не трудно для нескольких панелей, а то по одной тыкать долговато
|
А он и так должен для нескольких работать из-за цикла while (true). Указываете одну панель, следом другую, третью и так далее.
P.S. Про девятую версию я подумал исхода из названия темы.
|
|
|
08.03.2019, 09:33
|
#1425
|
Местный
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
|
как переименовать кромку на панели не заводя новый материал в базе?
|
|
|
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 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]
|
перепробовал с индексами и без -- не помогает. Реально чем-нить заменить?
__________________
С уважением Кузнецов Александр
Последний раз редактировалось АлКузнецов; 07.05.2021 в 16:41.
|
|
|
18.03.2019, 00:00
|
#1427
|
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
|
Цитата:
Сообщение от АлКузнецов
проблема исполнения скрипта
|
в
Цитата:
Сообщение от АлКузнецов
Базисе 10
|
для него другой
код
Код HTML:
function ReadIniFile(FileName) {
var Data = system.readTextFile(FileName),
Regex = {
Section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
Param: /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/,
Comment: /^\s*;.*$/
},
Value = {},
Lines = Data.split(/\r\n|\r|\n/),
Section = null;
Lines.forEach(function(Line) {
if (Regex.Comment.test(Line)) {
return;
} else if (Regex.Param.test(Line)) {
var Match = Line.match(Regex.Param);
if (Section) {
Value[Section][Match[1]] = Match[2];
} else {
Value[Match[1]] = Match[2];
};
} else if (Regex.Section.test(Line)) {
var Match = Line.match(Regex.Section);
Value[Match[1]] = {};
Section = Match[1];
} else if (Line.length == 0 && Section) {
Section = null;
};
});
return Value;
};
ListToArray = function(List) {
var Result = new Array();
for (var i = 0; i < List.Count; i++) {
var Item = List.Objects[i];
switch (Item.List) {
case true:
Result.push(Item);
Result = Result.concat(ListToArray(Item));
break;
default:
Result.push(Item);
break;
};
};
return Result;
};
if (!system.fileExists('ADODB.ini')) {
alert('Не найден файл (ADODB.ini) с настройками для подключения к БД!');
Action.Cancel();
} else {
var IniFile = ReadIniFile('ADODB.ini');
if (!system.fileExists(IniFile['General']['FBCFile'])) {
alert('Настройки подключения к БД указанные в файле (ADODB.ini)' +
' не являются верными!');
Action.Cancel();
};
};
var ConnectionString = 'Driver={Firebird/InterBase(r) driver};' +
'Dbname=' + IniFile['General']['FDBServ'] + '/'
+ IniFile['General']['FBSPort'] + ':'
+ IniFile['General']['FDBFile'] + ';' +
'CHARSET=NONE;' +
'PWD=masterkey;' +
'UID=SYSDBA;' +
'Client=' + IniFile['General']['FBCFile'];
try {
var FBDB = NewCOMObject('FBDBDialog.FBDB');
} catch (Error){
alert('Для регистрации FBDBDialog.dll в зависимости от установленной ' +
'версии ОС Windows необходимо выполнить одну из следующих команд:\n' +
'WinX32: regsvr32 %windir%\\System32\\FBDBDialog.dll\n' +
'WinX64: regsvr32 %windir%\\SysWOW64\\FBDBDialog.dll\n\n' +
decodeURIComponent(escape(Error.message)));
Action.Cancel();
};
var Objects = new Object(),
Application = Action.Control.Owner.Owner.Owner,
VTModelTree = Application.FindComponent('FormMain').FindComponent('dpModelTree').FindComponent('FrmModelTree').FindComponent('VTModelTree'),
List = new Array();
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;
};
VTModelTree.Refresh();
};
function GetFBDBDialog(Control) {
var Result = FBDB.Dialog(ConnectionString);
if (Result) {
switch (true) {
case Result.split('\r')[1] != '':
Control.Value = Result;
break;
default:
Control.Value = Result.split('\r')[0];
break;
};
};
};
List = ListToArray(Model);
for (var i = 0; i < List.length; i++) {
var Object = List[i];
if (( RegExp(/^\[object TFurnAsm\].*$/i).test(Object) ||
RegExp(/^\[object TAsmKit\].*$/i).test(Object)) &&
(!RegExp(/^\[object TFurnAsm\].*$/i).test(Object.Owner) &&
!RegExp(/^\[object TAsmKit\].*$/i).test(Object.Owner))) {
var Name = Object.Name.split('\r')[0];
if(typeof(Objects[Name]) == 'undefined') {
Objects[Name] = new Array();
};
Objects[Name].push(Object);
};
};
var i = new Number();
for (var Key in Objects) {
var NewSelector =
'Selector' + i + '= Action.Properties.NewSelector(Key, Objects[Key][0].Name);\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();
[свернуть]
для работы данного кода, так же необходим ini файл с настройками
FBDBDialogEXE.exe - скрипту ненужен, это приложение использовалось для отладки FBDBDialog.dll
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
30.09.2020, 20:33
|
#1428
|
Пользователь
Регистрация: 03.01.2016
Сообщений: 32
Сказал(а) спасибо: 3
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
|
Доброго времени суток. Не смог найти ответ. Поэтому суть вопроса. Добавляю фронтальную панель от начала координат с размерами х = 200, у = 500 (для примера). Хочу повернуть панель вокруг оси ОХ (или ОУ или OZ), проходящей через начало координат (0,0,0) на определенный угол (пусть 45 град.). Поворот происходит вокруг оси, параллельной ОХ и проходящей через точку (200, 500, 0). Как сделать так, чтобы поворот был все-таки вокруг оси ОХ ГСК?
Скрытый текст
p = AddFrontPanel(200, 500);
p.Rotate(AxisX, 45) [свернуть]
|
|
|
01.10.2020, 08:17
|
#1429
|
Пользователь
Регистрация: 17.12.2016
Сообщений: 89
Сказал(а) спасибо: 27
Поблагодарили 50 раз(а) в 30 сообщениях
Вес репутации: 108
|
Цитата:
Сообщение от const
Доброго времени суток. Не смог найти ответ. Поэтому суть вопроса. Добавляю фронтальную панель от начала координат с размерами х = 200, у = 500 (для примера). Хочу повернуть панель вокруг оси ОХ (или ОУ или OZ), проходящей через начало координат (0,0,0) на определенный угол (пусть 45 град.). Поворот происходит вокруг оси, параллельной ОХ и проходящей через точку (200, 500, 0). Как сделать так, чтобы поворот был все-таки вокруг оси ОХ ГСК?
Скрытый текст
p = AddFrontPanel(200, 500);
p.Rotate(AxisX, 45) [свернуть]
|
Если я правильно понял вопрос, то попробуйте задавать координаты панели полностью:
p = AddFrontPanel(0,0,200,500);
p.Rotate(AxisX, 45)
P.S. Единственный нюанс - при таком повороте ближнее нижнее горизонтальное ребро панели будет уходить ниже плоскости, то есть координата Y будет меньше нуля.
Поэтому надо будет задавать в данном случае координаты Y со смещением (вычисляя через sin или cos угла).
С Уважением, Михаил.
|
|
|
Пользователь сказал cпасибо:
|
|
01.10.2020, 17:54
|
#1430
|
Пользователь
Регистрация: 03.01.2016
Сообщений: 32
Сказал(а) спасибо: 3
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
|
Огромное спасибо за ответ, Михаил. Это то что мне нужно. Обидно, что найти эту информацию почему-то трудно. Еще раз спасибо!
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 05:58. Часовой пояс GMT +3.
|