Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 09.01.2024 в 11:56..
1. официально отладчик из VSCODE для БМ11 сейчас существует?
2. настроил конфиг от Letos. он работает только с запуском новой сессии Базиса, к существующей у меня не коннектится. в чем м.б. проблема?
(мне необходимо чтобы коннектилось к открытому БМ).
3. файлы определений судя по Github обновлялись последний раз в 2018.
эм. почему они не обновляются? планируется ли вообще и когда?
1. Официального отладчика на данный момент нет.
2. Я в том сообщении писал, что с подключением к уже запущенному базису проблемы. сейчас проверил на демке - у меня первый запуск как и раньше (не обращает внимания на точки останова), на следующий запуск - аксесс и программа схлопывается.
Всем привет.
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");// убрать алерт и не работает.
Всем привет.
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().
В случае с большим количеством асинхронных функций, где неясно, кто когда завершается, можно сделать функцию, которая будет увеличивать счётчик выполненных функций, и когда значение счётчика будет равно количеству выполненных функций, завершать скрипт.
тема несколько сложна для меня.
1. Какая конкретно функция асинхронна в коде выше? запись данных в буфер?
2. я много использую штатный модуль 'fs'. и синхронные варианты функций. к примеру
PHP код:
fs.writeFileSync()
если написано что функция синхронна движок ее выполнит последовательно без всяких "но"?
3. все функции БМ синхронны? там есть очень ресурсо- емкие штуки типа
В случае с большим количеством асинхронных функций, где неясно, кто когда завершается, можно сделать функцию, которая будет увеличивать счётчик выполненных функций, и когда значение счётчика будет равно количеству выполненных функций, завершать скрипт.
заколхозил код , может кому сгодиться. @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;// счетчик выполненных функций
4.
заколхозил код , может кому сгодиться. @Letos так имели ввиду?
Да, так, но я бы ещё немного подправил (т.к. переменные глобальны, не имеет смысла передавать их в функции):
PHP код:
function finishScript() {
if (allFunc == cntFunc) {
Action.Finish();
}
}
Цитата:
Сообщение от IStiv
P.S.единственное что я иногда не знаю сколько изначально вызовов будет, их тоже надо как то считать..
В конкретно вашем случае с модулем, всё writetoBuffer() возвращает промис. Можно попробовать через Promise.all() решить проблему с неизвестным количеством вызовов:
Также есть сайт, который показывает, какой функционал стандартов JS поддерживается в конкретной версии NodeJs: https://node.green/
На данный момент в основе БМ лежит нода версии 8.11.3 (если я правильно понял, то ей соответствует столбец 9.11.2 в вышеуказанном сайте).
Можно попробовать через Promise.all() решить проблему
@Let0s спасибо за ответы, теперь логика происходящего понятна.
варианта с Promise.all() если запилю - отпишусь о работе.
пока alert() в конце завершает все вызовы, это конечно не красиво , но быстро и работает.
Подскажите, в скриптах не силен, но очень нужно прописать условие в базис смета, подскажите знающие люди.
Условие задачи:
Если в названии модели есть слово (например "Кубик"), то сквозное отверстие 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;
Подскажите, в скриптах не силен, но очень нужно прописать условие в базис смета, подскажите знающие люди.
Условие задачи:
Если в названии модели есть слово (например "Кубик"), то сквозное отверстие D=7 мм сверлится по другому (руками, дрелью (например)
Меня немного смутила фраза "в названии модели". Учитывая, что весь код относится к панели, я решил, что имелась в виду панель. Для панели проверка имени на наличие ключевого слова будет выглядеть так:
PHP код:
var keyword = 'КУБИК';
if (Panel.Name.indexOf(keyword) >= 0){
// Сюда приходит, если имя панели содержит ключевую фразу
}