Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 14.09.2019, 00:17  
БАЗИС 11-2023 - Скрипты
 
Аватар для AlexBolton
AlexBolton
Модератор
Регистрация: 19.02.2008
Адрес: www
Сообщений: 3,971

Сказал(а) спасибо: 7,296
Поблагодарили 16,954 раз(а) в 3,222 сообщениях
Версия для печати Отправить по электронной почте
AlexBolton AlexBolton вне форума 14.09.2019, 00:17
Рейтинг: ()

Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.

Новшества Базис Мебельщик версии 11:
.....
6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....

Новшества Базис Мебельщик версии 2021:

16. Отладчик скриптов.



VISUAL CODE

Код:
Примеры скриптов из видео

Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
node.js обновился с 7.0.0 до 8.11.3

Напиши себе Базис или Моя первая тумбочка 2
Комплект - руководство+ файлы+ скрипт

Обратите внимание на полезные ответы в этой теме!

__________________
.
▓▒░ Халявы не бывает ░▒▓

[ Как правильно задавать вопросы на форумах ] | [ Как просто, быстро и правильно опубликовать фото и файлы в сообщении 28.03.2024]

[ USDownloader - удобно и безопасно скачиваем с файлообменников 31.03.2024] | [ Обходим блокировки сайтов, торрентов, месенджеров, ФО - RU - UA]


Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д. >сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...

Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
Просмотров: 612453
Ответить с цитированием Вверх
14 пользователя(ей) сказали cпасибо:
Старый 28.12.2019, 12:47   #91
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
Мне необходимо адаптировать скрипты под БМ 11.

1. официально отладчик из VSCODE для БМ11 сейчас существует?
2. настроил конфиг от Letos. он работает только с запуском новой сессии Базиса, к существующей у меня не коннектится. в чем м.б. проблема?
(мне необходимо чтобы коннектилось к открытому БМ).
3. файлы определений судя по Github обновлялись последний раз в 2018.
эм. почему они не обновляются? планируется ли вообще и когда?
1. Официального отладчика на данный момент нет.
2. Я в том сообщении писал, что с подключением к уже запущенному базису проблемы. сейчас проверил на демке - у меня первый запуск как и раньше (не обращает внимания на точки останова), на следующий запуск - аксесс и программа схлопывается.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
IStiv (03.01.2020)
Старый 03.01.2020, 11:39   #92
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию async

Всем привет.
need help.
код ниже в 10 работал в 11 перестал.
код создает пустой Excel файл в папке со скриптом с помощью библиотеки excel4node.

однако если добавить alert в конце кода , работает и в 11.
прошу пояснить происходящее (почему не работает в 11) и каким образом сделать чтобы работало без alert?

подозреваю что это связанно с реализацией асинхронности в БМ.

Скрытый текст


PHP код:
// npm i excel4node

var fs = require('fs');
var 
path = require('path');
var 
xl = require('excel4node');

var 
wb = new xl.Workbook();
var 
ws wb.addWorksheet('Sh_1');

var 
nm "test.xlsx";
var 
fillPath path.join(process.cwd(),nm);

//or
wb.write('ExcelFile.xlsx');
//or 
wb.writeToBuffer().then(function(buffer) {
    
fs.writeFileSync(fillPath,buffer);
});
alert("123");// убрать алерт и не работает. 
[свернуть]
IStiv вне форума   Ответить с цитированием Вверх
Старый 09.01.2020, 09:40   #93
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
Всем привет.
need help.
код ниже в 10 работал в 11 перестал.
код создает пустой Excel файл в папке со скриптом с помощью библиотеки excel4node.

однако если добавить alert в конце кода , работает и в 11.
прошу пояснить происходящее (почему не работает в 11) и каким образом сделать чтобы работало без alert?

подозреваю что это связанно с реализацией асинхронности в БМ.

Скрытый текст


PHP код:
// npm i excel4node

var fs = require('fs');
var 
path = require('path');
var 
xl = require('excel4node');

var 
wb = new xl.Workbook();
var 
ws wb.addWorksheet('Sh_1');

var 
nm "test.xlsx";
var 
fillPath path.join(process.cwd(),nm);

//or
wb.write('ExcelFile.xlsx');
//or 
wb.writeToBuffer().then(function(buffer) {
    
fs.writeFileSync(fillPath,buffer);
});
alert("123");// убрать алерт и не работает. 
[свернуть]
Асинхронные функции теперь обрабатываются после выполнения основного тела скрипта. Без алерта программа выполняет последнюю строчку основного тела скрипта и завершает выполнение скрипта. С алертом программа выполняет последнюю строчку (алерт) и во время показа сообщения алерта программа находится в "режиме ожидания" - обменивается виндовыми сообщениями. В это время и выполняется результат асинхронного вызова.
Самое логичное решение, на мой взгляд - в скрипте с асинхронными функциями вызывать Action.Continue(), который после выполнения основного тела скрипта переведёт программу в "режим ожидания", а в конце выполнения асинхронной функции вызвать Action.Finish().
В случае с большим количеством асинхронных функций, где неясно, кто когда завершается, можно сделать функцию, которая будет увеличивать счётчик выполненных функций, и когда значение счётчика будет равно количеству выполненных функций, завершать скрипт.
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
IStiv (10.01.2020), Ovsyanicov (09.01.2020)
Старый 10.01.2020, 19:03   #94
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию async

Цитата:
Сообщение от Letos Посмотреть сообщение
Асинхронные функции теперь обрабатываются после выполнения основного тела скрипта
ок, так работает.

Скрытый текст


PHP код:
// npm i excel4node

var fs = require('fs');
var 
path = require('path');
var 
xl = require('excel4node');

var 
wb = new xl.Workbook();
var 
ws wb.addWorksheet('Sh_1');

var 
nm "test.xlsx";
var 
fillPath path.join(process.cwd(),nm);

wb.writeToBuffer().then(function(buffer) {
    
fs.writeFileSync(fillPath,buffer);
    
Action.Finish();
});
Action.Continue(); 
[свернуть]


тема несколько сложна для меня.
1. Какая конкретно функция асинхронна в коде выше? запись данных в буфер?
2. я много использую штатный модуль 'fs'. и синхронные варианты функций. к примеру
PHP код:
fs.writeFileSync() 
если написано что функция синхронна движок ее выполнит последовательно без всяких "но"?
3. все функции БМ синхронны? там есть очень ресурсо- емкие штуки типа
PHP код:
Action.ArrangePositions(0Model); 
IStiv вне форума   Ответить с цитированием Вверх
Старый 10.01.2020, 20:30   #95
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию

4.
Цитата:
Сообщение от Letos Посмотреть сообщение
В случае с большим количеством асинхронных функций, где неясно, кто когда завершается, можно сделать функцию, которая будет увеличивать счётчик выполненных функций, и когда значение счётчика будет равно количеству выполненных функций, завершать скрипт.
заколхозил код , может кому сгодиться. @Letos так имели ввиду?

Скрытый текст


PHP код:
// npm i excel4node

var fs = require('fs');
var 
path = require('path');
var 
xl = require('excel4node');

var 
wb = new xl.Workbook();
var 
ws wb.addWorksheet('Sh_1');

var 
nm_1 "test_1.xlsx";
var 
nm_2 "test_2.xlsx";
var 
pth_1 path.join(process.cwd(),nm_1);
var 
pth_2 path.join(process.cwd(),nm_2);

var 
allFunc 2;
var 
cntFunc 0;// счетчик выполненных функций

wb.writeToBuffer().then(function(buffer) {
    
fs.writeFileSync(pth_1,buffer);
    
cntFunc ++;
    
finishScript(allFunc,cntFunc);
});

wb.writeToBuffer().then(function(buffer) {
    
fs.writeFileSync(pth_2,buffer);
    
cntFunc ++;
    
finishScript(allFunc,cntFunc);
});
Action.Continue();


function 
finishScript(allFcntF) {
    if (
allF == cntF) {
        
Action.Finish();
    }

[свернуть]

P.S.единственное что я иногда не знаю сколько изначально вызовов будет, их тоже надо как то считать..
IStiv вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Letos (13.01.2020), Oldman (12.01.2020), Ovsyanicov (11.01.2020)
Старый 13.01.2020, 10:12   #96
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
4.
заколхозил код , может кому сгодиться. @Letos так имели ввиду?
Да, так, но я бы ещё немного подправил (т.к. переменные глобальны, не имеет смысла передавать их в функции):
PHP код:
function finishScript() {
    if (
allFunc == cntFunc) {
        
Action.Finish();
    }

Цитата:
Сообщение от IStiv Посмотреть сообщение
P.S.единственное что я иногда не знаю сколько изначально вызовов будет, их тоже надо как то считать..
В конкретно вашем случае с модулем, всё writetoBuffer() возвращает промис. Можно попробовать через Promise.all() решить проблему с неизвестным количеством вызовов:

Код

PHP код:
var allPromises = [];

var 
prom wb.writeToBuffer();
allPromises.push(prom);
prom.then(function(buffer) {
    
fs.writeFileSync(pth_1,buffer);
    
cntFunc ++;
    
finishScript(allFunc,cntFunc);
});

Promise.all(allPromises).then(values=>{
    
Action.Finish();
}) 
[свернуть]

Сразу оговорюсь: я это бегло нагуглил и в работе код не проверял.
Основная ссылка на Promise.all()

Также есть сайт, который показывает, какой функционал стандартов JS поддерживается в конкретной версии NodeJs: https://node.green/
На данный момент в основе БМ лежит нода версии 8.11.3 (если я правильно понял, то ей соответствует столбец 9.11.2 в вышеуказанном сайте).
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
IStiv (13.01.2020), Ovsyanicov (13.01.2020)
Старый 13.01.2020, 10:30   #97
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
тема несколько сложна для меня.
1. Какая конкретно функция асинхронна в коде выше? запись данных в буфер?
Да, wb.writeToBuffer() возвращает Promise (про него подробнее можно почитать здесь)

Цитата:
Сообщение от IStiv Посмотреть сообщение
2. я много использую штатный модуль 'fs'. и синхронные варианты функций. к примеру
PHP код:
fs.writeFileSync() 
если написано что функция синхронна движок ее выполнит последовательно без всяких "но"?
Да, функции nodejs с окончанием Sync выполняются синхронно, в основном потоке.

Цитата:
Сообщение от IStiv Посмотреть сообщение
3. все функции БМ синхронны? там есть очень ресурсо- емкие штуки типа
PHP код:
Action.ArrangePositions(0Model); 
Да, функции БМ синхронны, кроме Action.AsyncExec (который, кстати, как и асинхронные функции, не сработает без Action.Continue()).
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
IStiv (13.01.2020), Ovsyanicov (13.01.2020)
Старый 13.01.2020, 17:53   #98
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Можно попробовать через Promise.all() решить проблему
@Let0s спасибо за ответы, теперь логика происходящего понятна.
варианта с Promise.all() если запилю - отпишусь о работе.
пока alert() в конце завершает все вызовы, это конечно не красиво , но быстро и работает.
IStiv вне форума   Ответить с цитированием Вверх
Старый 13.01.2020, 18:57   #99
mihey2011
Новичок
 
Регистрация: 19.04.2017
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
mihey2011 пока не определено
По умолчанию Условие задачи

Подскажите, в скриптах не силен, но очень нужно прописать условие в базис смета, подскажите знающие люди.
Условие задачи:
Если в названии модели есть слово (например "Кубик"), то сквозное отверстие D=7 мм сверлится по другому (руками, дрелью (например)
Может быть получится как-то сколхозить из кода подсчета веса изделия?
Код HTML:
den =0;
if (Panel)
{
    if (Panel.MaterialName.indexOf("ДСП") >= 0)
    {
        den = 800;
    } else
        {
        if (Panel.MaterialName.indexOf("ДВП") >= 0){
            den = 350;
        }else
        {
        if (Panel.MaterialName.indexOf("МДФ") >= 0){
            den = 900;
        }
        }
    }
}

Result = GetParam('(51)Площадь контура готовой детали') * GetParam('(20)Толщина панели') *  den;
mihey2011 вне форума   Ответить с цитированием Вверх
Старый 14.01.2020, 09:01   #100
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от mihey2011 Посмотреть сообщение
Подскажите, в скриптах не силен, но очень нужно прописать условие в базис смета, подскажите знающие люди.
Условие задачи:
Если в названии модели есть слово (например "Кубик"), то сквозное отверстие D=7 мм сверлится по другому (руками, дрелью (например)
Меня немного смутила фраза "в названии модели". Учитывая, что весь код относится к панели, я решил, что имелась в виду панель. Для панели проверка имени на наличие ключевого слова будет выглядеть так:
PHP код:
var keyword 'КУБИК';
if (
Panel.Name.indexOf(keyword) >= 0){
    
// Сюда приходит, если имя панели содержит ключевую фразу

Letos вне форума   Ответить с цитированием Вверх
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 10 - Скрипты systland Базис-мебельщик. Скрипты 715 14.04.2024 07:03
V-Ray в Базис Мебельщик 11/2023 nayrogi Система БАЗИС 73 12.04.2024 17:08
Базис ЧПУ 2021/2024 AlexBolton Базис-мебельщик 2021-2024 137 11.04.2024 13:16
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1442 04.04.2024 11:28
БАЗИС 8 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1525 30.03.2024 15:03


Текущее время: 12:33. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL

џндекс.Њетрика