|
|
|
|
|
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..
|
Просмотров: 993878
|
Пользователь сказал cпасибо:
|
|
26.05.2016, 20:29
|
#1091
|
Местный
Регистрация: 03.01.2016
Адрес: Украина. Харьков
Сообщений: 481
Сказал(а) спасибо: 316
Поблагодарили 507 раз(а) в 200 сообщениях
Вес репутации: 250
|
Цитата:
Сообщение от v22884
ставит разную фурнитуру в разные ряды
|
Спасибо за труд, интересное добавление функционала, но хотелось немного другого...
Первый скрипт отлично ставит ножки и до сих пор, а на счет клипс я имел ввиду добавить выбор дополнительной фурнитуры на первый ряд, а не увеличить фурнитуру для замены. При таком раскладе мне на первый ряд либо ножки сиавить либо клипсы (без ножек)
|
|
|
26.05.2016, 21:03
|
#1092
|
VIP
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,026 раз(а) в 6,492 сообщениях
Вес репутации: 5258
|
Цитата:
Сообщение от тех.нолог
При таком раскладе мне на первый ряд либо ножки сиавить либо клипсы
|
Ну можно проще - создать составную фурнитуру "Опора кухонная с клипсой". На второй ряд ставите Опора кухонная, а на первый - Опора кухонная с клипсой или любую другую опору..
__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
|
|
|
Пользователь сказал cпасибо:
|
|
27.05.2016, 05:36
|
#1093
|
Местный
Регистрация: 03.01.2016
Адрес: Украина. Харьков
Сообщений: 481
Сказал(а) спасибо: 316
Поблагодарили 507 раз(а) в 200 сообщениях
Вес репутации: 250
|
Uncle, спасибо, я это и так прекрасно понимаю, хотелось просто чистый скрипт... Все равно спасибо за труды, буду ставить отдельно клипсу как и ранее... не надорвусь
|
|
|
27.05.2016, 10:59
|
#1094
|
VIP
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,026 раз(а) в 6,492 сообщениях
Вес репутации: 5258
|
Цитата:
Сообщение от тех.нолог
хотелось просто чистый скрипт... Все равно спасибо за труды, буду ставить отдельно клипсу как и ранее... не надорвусь
|
Не, просто когда у меня был выбор как лучше организовать установку клипс, я предпочел сделать опору с клипсой в сборе. Мне показалось что ставить отдельно клипсы более заморочно чем сразу готовую опору в сборе..
__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
|
|
|
27.05.2016, 11:44
|
#1095
|
Местный
Регистрация: 03.01.2016
Адрес: Украина. Харьков
Сообщений: 481
Сказал(а) спасибо: 316
Поблагодарили 507 раз(а) в 200 сообщениях
Вес репутации: 250
|
Возможно и так, только вся моя работа основана на подготовке модулей для Салона, а составная ножка там не прокатит... при замене на другую ножку клипса "слетит". Вся заменяемая фурнитура должна быть отдельно.
|
|
|
27.05.2016, 14:02
|
#1096
|
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
|
Назначить материал панели без заведения его в БД.
Скрипт позволяет редактировать наименования материалов и его параметры на выделенных или на всех панелях (на кромках панелей), профилей активной модели. Скрипт применим при построении деталей мебели состоящих из нескольких панелей (различной формы и размеров) требующих обработки после их сборки (склейки). В таком случае скрипт используется для разделения заготовок таких деталей и готовых деталей по материалу без необходимости заведения нового ("несуществующего") материала детали в БД.
Для работы скрипта необходим установленный ODBC драйвер FireBird и файл "ADODB.ini" с настройками соединения к БД в папке со скриптом.
ADODB.ini
[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
[свернуть]
Скрипт
Код HTML:
var Controls = Action.Properties;
var Items = new Array();
var Selection = new Array();
var RepMat = /(\s*) \(Артикул ([^(Артикул )]*)\)/;
var Objects = {
Panels: new Object(),
Butts: {
Items: new Object(),
Owners: new Object()
}
};
var MainForm = NewForm();
MainForm.Width = 400;
MainForm.Height = 41;
MainForm.Caption = 'Редактировать наименование';
MainForm.Resizable = false;
MainForm.Dockable = false;
function ReadIniFile(FileName) {
var Data = system.readTextFile(FileName);
var Regex = {
Section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
Param: /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/,
Comment: /^\s*;.*$/
};
var Value = {};
var Lines = Data.split(/\r\n|\r|\n/);
var 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;
};
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'];
var Query = "Select\n" +
" IIf(MATERIAL_ADVANCE.LABEL_EDGE Is Null, '', MATERIAL_ADVANCE.LABEL_EDGE) As LABEL_EDGE,\n" +
" MATERIAL.NAME_MAT\n" +
"From\n" +
" MATERIAL_ADVANCE Inner Join\n" +
" MATERIAL On MATERIAL.ID_M = MATERIAL_ADVANCE.ID_M";
var Connection = NewCOMObject('ADODB.Connection');
var Recordset = NewCOMObject('ADODB.Recordset');
try {
Connection.Open(ConnectionString);
Recordset.ActiveConnection = Connection;
Recordset.Open(Query);
} catch(Error) {
Recordset.Close;
Connection.Close;
alert(decodeURIComponent(escape(Error.message)));
Action.Cancel();
};
function SetSelection(List) {
Model.UnSelectAll();
for (var i = 0; i < List.length; i++) {
List[i].Selected = true;
};
};
function EqualsMaterial(A, B) {
if (A.MaterialName == B.MaterialName &&
A.MaterialWidth == B.MaterialWidth &&
A.Thickness == B.Thickness) {
return true;
};
return false;
};
function EqualsButts(A, B) {
if (A.Material == B.Material &&
A.Width == B.Width &&
A.Thickness == B.Thickness &&
A.Sign == B.Sign) {
return true;
};
return false;
};
function ListToArray(List) {
var Result = new Array();
for (var i = 0; i < List.Count; i++) {
if (List[i].List === true) {
Result = Result.concat(ListToArray(List[i]));
} else {
Result.push(List[i]);
};
};
return Result;
};
function SetMaterials(Control) {
system.log('SetMaterials');
Panels = Objects.Panels[Control.Name];
for (var i = 0; i < Panels.length; i++) {
StartEditing(Panels[i]);
Panels[i].MaterialName = Control.Value;
if (!(Panels[i] instanceof T2DTrajectoryBody)) {
Panels[i].Thickness = Control[1].Value;
} else {
system.log('T2DTrajectoryBody');
};
Panels[i].MaterialWidth = Control[2].Value;
Panels[i].Build();
};
};
function SetButts(Control) {
system.log('SetButts');
Butts = Objects.Butts.Items[Control.Name];
Owners = Objects.Butts.Owners[Control.Name];
for (var i = 0; i < Owners.length; i++) {
StartEditing(Owners[i]);
};
for (var i = 0; i < Butts.length; i++) {
Butts[i].Material = Control.Value;
Butts[i].Thickness = Control[1].Value;
Butts[i].Width = Control[2].Value;
Butts[i].Sign = Control[3].Value;
};
for (var i = 0; i < Owners.length; i++) {
Owners[i].Build();
};
};
function EditMaterialName(Control) {
MainForm.String = MainForm.Properties.NewString('', Control.Value);
MainForm.String.SetLayout(0, 0, MainForm.Width, 22);
MainForm.String.OnValueChange = function() {
Control.Value = MainForm.String.Value;
};
MainForm.OnClose = function() {
MainForm.Properties.Clear();
};
MainForm.Show(WindowPosition.Default);
};
function GetSign(Control) {
system.log('GetSign');
var Result = new String();
Recordset.Filter = "(NAME_MAT = '" + Control.Value.split(/\r/)[0] + "')";
while (Recordset.EOF == 0) {
Result = Recordset.Fields.Item('LABEL_EDGE').Value;
Recordset.MoveNext();
};
return Result;
};
Action.OnFinish = function() {
system.log('OnFinish');
SetSelection(Selection);
try {
Recordset.Close;
Connection.Close;
} catch(Error) {
alert(decodeURIComponent(escape(Error.message)));
};
};
if (Model.Selected) {
for (var i = 0; i < Model.SelectionCount; i++) {
Selection.push(Model.Selections[i]);
if (Model.Selections[i].List === true) {
Items = Items.concat(ListToArray(Model.Selections[i]));
} else {
Items.push(Model.Selections[i]);
};
};
} else {
if (confirm('Редактировать все панели модели?')) {
Items = ListToArray(Model);
} else {
Action.Cancel();
};
};
for (var i = 0; i < Items.length; i++) {
var j = new Number();
var Key = new String();
switch (true) {
case (Items[i] instanceof TFurnPanel):
case (Items[i] instanceof TExtrusionBody):
case (Items[i] instanceof T2DTrajectoryBody):
if (Items[i].MaterialName) {
j = 0;
Key = Items[i].MaterialName.split(/\r/)[0] + '#' + j;
while (Objects.Panels[Key] != undefined &&
!EqualsMaterial(Items[i], Objects.Panels[Key][0])) {
j++;
Key = Items[i].MaterialName.split(/\r/)[0] + '#' + j;
};
if (Objects.Panels[Key] == undefined) {
Objects.Panels[Key] = new Array();
};
Objects.Panels[Key].push(Items[i]);
};
if (Items[i].Butts) {
for (var k = 0; k < Items[i].Butts.Count; k++) {
j = 0;
Key = Items[i].Butts[k].Material.split(/\r/)[0] + '#' + j;
while (Objects.Butts.Items[Key] != undefined &&
Objects.Butts.Owners[Key] != undefined &&
!EqualsButts(Items[i].Butts[k], Objects.Butts.Items[Key][0])) {
j++;
Key = Items[i].Butts[k].Material.split(/\r/)[0] + '#' + j;
};
if (Objects.Butts.Items[Key] == undefined &&
Objects.Butts.Owners[Key] == undefined) {
Objects.Butts.Items[Key] = new Array();
Objects.Butts.Owners[Key] = new Array();
};
Objects.Butts.Items[Key].push(Items[i].Butts[k]);
Objects.Butts.Owners[Key].push(Items[i]);
};
};
break;
};
};
var i = new Number();
for (var Key in Objects.Panels) {
Controls.NewSelector(Key, Objects.Panels[Key][0].MaterialName).CanClear = false;
Controls[i].Expanded = false;
Controls[i].NewMaterial('Материал:').Visible = false;
Controls[i].NewNumber('Толщина:', Objects.Panels[Key][0].Thickness);
Controls[i].NewNumber('Ширина:', Objects.Panels[Key][0].MaterialWidth);
Controls[i].PopupMenu.NewButton('Править: наименование');
eval(
'Controls[' + i + '].OnClick = function() { \n' +
' Controls[' + i + '][0].Click(); \n' +
'}; \n' +
'Controls[' + i + '].PopupMenu[0].OnClick = function() { \n' +
' EditMaterialName(Controls[' + i + ']); \n' +
'}; \n' +
'Controls[' + i + '][0].OnValueChange = function() { \n' +
' Controls[' + i + '].Value = Controls[' + i + '][0].ValueToString().\n' +
' replace(RepMat, "$1\\r$2"); \n' +
' Controls[' + i + '][1].Value = Controls[' + i + '][0].Thickness; \n' +
' Controls[' + i + '][2].Value = Controls[' + i + '][0].Width; \n' +
'}; \n' +
'Controls[' + i + '].OnChange = function() { \n' +
' SetMaterials(Controls[' + i + ']); \n' +
'}; \n' +
'Controls[' + i + '].OnActivate = function() { \n' +
' SetSelection(Objects.Panels[Controls[' + i + '].Name]); \n' +
'}; \n' +
'Controls[' + i + '][1].OnActivate = function() { \n' +
' SetSelection(Objects.Panels[Controls[' + i + '].Name]); \n' +
'}; \n' +
'Controls[' + i + '][2].OnActivate = function() { \n' +
' SetSelection(Objects.Panels[Controls[' + i + '].Name]); \n' +
'}; '
);
i++;
};
for (var Key in Objects.Butts.Items) {
Controls.NewSelector(Key, Objects.Butts.Items[Key][0].Material).CanClear = false;
Controls[i].Expanded = false;
Controls[i].NewButt('Кромка:').Visible = false;
Controls[i].NewNumber('Толщина:', Objects.Butts.Items[Key][0].Thickness);
Controls[i].NewNumber('Ширина:', Objects.Butts.Items[Key][0].Width);
Controls[i].NewString('Обозначение:', Objects.Butts.Items[Key][0].Sign);
Controls[i].PopupMenu.NewButton('Править: наименование');
eval(
'Controls[' + i + '].OnClick = function() { \n' +
' Controls[' + i + '][0].Click(); \n' +
'}; \n' +
'Controls[' + i + '].PopupMenu[0].OnClick = function() { \n' +
' EditMaterialName(Controls[' + i + ']); \n' +
'}; \n' +
'Controls[' + i + '][0].OnValueChange = function() { \n' +
' Controls[' + i + '].Value = Controls[' + i + '][0].ValueToString().\n' +
' replace(RepMat, "$1\\r$2"); \n' +
' Controls[' + i + '][1].Value = Controls[' + i + '][0].Thickness; \n' +
' Controls[' + i + '][2].Value = Controls[' + i + '][0].Width; \n' +
' Controls[' + i + '][3].Value = GetSign(Controls[' + i + ']); \n' +
'}; \n' +
'Controls[' + i + '].OnChange = function() { \n' +
' SetButts(Controls[' + i + ']); \n' +
'}; \n' +
'Controls[' + i + '].OnActivate = function() { \n' +
' SetSelection(Objects.Butts.Owners[Controls[' + i + '].Name]); \n' +
'}; \n' +
'Controls[' + i + '][1].OnActivate = function() { \n' +
' SetSelection(Objects.Butts.Owners[Controls[' + i + '].Name]); \n' +
'}; \n' +
'Controls[' + i + '][2].OnActivate = function() { \n' +
' SetSelection(Objects.Butts.Owners[Controls[' + i + '].Name]); \n' +
'}; \n' +
'Controls[' + i + '][3].OnActivate = function() { \n' +
' SetSelection(Objects.Butts.Owners[Controls[' + i + '].Name]); \n' +
'}; '
);
i++;
};
Controls.NewButton('Завершить').OnClick = function() {
Action.Commit();
Action.Finish();
};
Action.Continue();
[свернуть]
Последний раз редактировалось Igor_482; 28.05.2016 в 00:15.
|
|
|
9 пользователя(ей) сказали cпасибо:
|
|
30.05.2016, 16:30
|
#1097
|
Местный
Регистрация: 30.03.2010
Адрес: Минск
Сообщений: 291
Сказал(а) спасибо: 1,884
Поблагодарили 226 раз(а) в 96 сообщениях
Вес репутации: 246
|
Подскажите, пож-та, как выделить скриптом панели с пазом, с пластиком? Можно ли только на выделенных панелях расставить позиции скриптом?
|
|
|
30.05.2016, 17:33
|
#1098
|
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
|
Цитата:
Сообщение от andronf
Подскажите, пож-та, как выделить скриптом панели с пазом, с пластиком?
|
решение:
PHP код:
Model.forEachPanel(function(Panel) {
if (Panel.Plastics.Count) {
Panel.Selected = true;
};
if (Panel.Cuts.Count) {
Panel.Selected = true;
};
});
[свернуть]
Цитата:
Сообщение от andronf
Можно ли только на выделенных панелях расставить позиции скриптом?
|
расстановка позиций возможна на все объекты модели без исключений.
|
|
|
8 пользователя(ей) сказали cпасибо:
|
|
31.05.2016, 08:30
|
#1099
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Цитата:
Сообщение от Igor_482
расстановка позиций возможна на все объекты модели без исключений.
|
я бы попробовал скопировать в буфер не выд., удалить не выд., расставить поз. на выд., вставить из буфера.
а если с точки зрения задачи допустимо, вообще поставить позиции вручную: Panel.ArtPos = '1'. Если надо, сравнивать панели самостоятельно.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
31.05.2016, 11:30
|
#1100
|
Местный
Регистрация: 30.03.2010
Адрес: Минск
Сообщений: 291
Сказал(а) спасибо: 1,884
Поблагодарили 226 раз(а) в 96 сообщениях
Вес репутации: 246
|
Была идея не выделенное объединить в сборку, расставить позиции, потом разрушить сборку.
|
|
|
Пользователь сказал cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 09:44. Часовой пояс GMT +3.
|