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

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

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 21.03.2018, 14:48  
Обсуждение скриптов в Системе Базис
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555

Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Версия для печати Отправить по электронной почте
Letos Letos вне форума 21.03.2018, 14:48
Рейтинг: ()

Если вы не знаете, или не уверены, куда задавать вопрос по скриптам в Системе Базис, то эта тема для вас.
Просмотров: 235644
Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
PravCom (28.07.2021), Максим Геннадьевич (08.06.2018)
Старый 28.05.2018, 09:30   #51
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
вот что нашёл может у кого то быстрее получится
https://www.npmjs.com/package/node-firebird
Заглядывался на этот модуль, но он асинхронный. А у Базиса с асинхронностью в скриптах проблемы - даже банальный fs.writeFile() асинхронный не работает после того, как основное тело скрипта выполнилось. Сейчас рассматриваю вариант от Igor_482: http://promebelclub.ru/forum/showthr...068#post379068, но он более замороченный, на мой взгляд.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (28.05.2018)
Старый 28.05.2018, 10:21   #52
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 190
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 195
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

Letos, посмотри http://www.cyberforum.ru/nodejs/thre...l#post12428359

все выходные ломал голову
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 28.05.2018, 11:40   #53
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
Letos, посмотри http://www.cyberforum.ru/nodejs/thre...l#post12428359

все выходные ломал голову
Насчет Promise ничего не могу сказать - старался избегать их.
А по поводу того вопроса такое решение может помочь:

Код:
var funcResult;
Firebird.attach(options, function(err, db) {
 
    if (err)
        throw err;
   
    db.query('select *   from MATERIAL', function(err, result) {
      funcResult = result;
      db.detach();
    });
   
  });
НО: и attach и query - асинхронные функции, которые выполняются "в фоне", и когда они выполнятся - неизвестно, поэтому это решение "грязное", ибо может породить кучу ошибок (большая вероятность того, что если в следующей после attach строке будет обращение к funcResult, то его еще не успеют присвоить). Результат (result) лучше всего обрабатывать там, где он пришел (в функции, которая является параметром функции query).

И еще: в обработчиках событий асинхронность уже не работает. Вот простой пример:
Код:
var b = Action.Properties.NewBool('b');
b.OnValueChange = ()=>{
    require('timers').setTimeout(function (msg){
        alert(msg);
    }, 1000, 'hello, world!');    
}

require('timers').setTimeout(function (msg){
    alert(msg);
}, 3000, 'hello, world!');
// alert(345);
Action.Continue();
По коду:
1. Создается булевое свойство.
2. Ему назначается обработчик в котором таймер: через секунду алертом вывести сообщение.
3. В основном теле таймер: через 3 секунды алертом вывести сообщение (примечание - на эти 3 секунды Базис виснет, но скрипт работу продолжает.)
4. Если раскомментарить алерт, то при выполнении скрипта можно увидеть, что 3 секунды таймера отсчитываются асинхронно "в фоне", а скрипт продолжает работу и вызывает алерт.
5. Вызов Action.Continue(), чтобы скрипт продолжил работать дальше.

По итогам:
1. Таймер в основном цикле отрабатывает.
2. Если у булевого свойства поменять значение, то таймер уже не сработает.
Отсюда вывод, что асинхронные функции работают только в основном теле скрипта. Но даже там они могут представлять опасность обычному пользователю. Вот потенциально опасный скрипт:
Код:
require('timers').setInterval(function (msg){
    alert(msg);
}, 3000, 'hello, world!');
Этот код запускает не одноразовый таймер, а интервал - то есть, алерт будет каждые три секунды после окончания предыдущего интервала. Проблема Базиса в том, что он ждет окончания всех асинхронных функций, а интервал будет идти бесконечно, и такое же время будет висеть Базис. И запустив такой скрипт, завершить его можно лишь вырубив процесс Базиса.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (15.02.2020)
Старый 28.05.2018, 12:01   #54
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
вот что нашёл может у кого то быстрее получится
https://www.npmjs.com/package/node-firebird
wizardpnz, этот вариант пакета не рассматривался?
https://www.npmjs.com/package/firebird

Он вроде синхронный, думаю, постабильнее будет (и помедленнее, скорее всего. По крайней мере для чистого NodeJS).
Letos вне форума   Ответить с цитированием Вверх
Старый 28.05.2018, 16:44   #55
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 190
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 195
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

я не смог его подключить через npm

собственно расскажу что я делаю
собираю в цикле объекты со сцены и записываю это в excel лист
и столкнулся с тем что нужны также данные из базы материалов
смог записать данные из базы в эксель внутри промиса
копаю дальше)))
расковырял где лежит соответствия материалов и их свойства из базы материалов

ATTEND_MAT_MAT таблица соответствий
MATERIAL таблица материалов вес цена артикул
MATERIAL_ADVANCE доп свойства материалов размер толщина и тд

выводит массу детали умножает площадь на массу из базы материалов
надо nodejs и установить модуль node-firebird и базис 10

Код:
var Firebird = require('node-firebird');


var options = {};
 
options.host = '127.0.0.1';
options.port = 14357;
options.database = 'D:/BAZIS10.fdb';//с кириллицей не разобрался
options.user = 'SYSDBA';
options.password = 'masterkey';
options.lowercase_keys = false; // set to true to lowercase keys
options.role = null;            // default
options.pageSize = 4096;        // default when creating database
 

Model.forEachPanel(function(panel) { 



  MaterialName = panel.MaterialName;
  MaterialArt = "";
  if (MaterialName.indexOf("\r") > 0) {
      MaterialArt = MaterialName.split("\r")[1];
      MaterialName = MaterialName.split("\r")[0]
  };

  panelS = panel.Contour.Width * panel.Contour.Height * 0.000001;
  panelS = panelS.toFixed(3)





Firebird.attach(options, function(err, db) {
 
  if (err) throw err;
 
db.query("select * from MATERIAL WHERE NAME_MAT = '" + MaterialName + "' AND ARTICLE = '" + MaterialArt + "'", function(err, result) {
    db.detach();
     system.log(MaterialName + ' ' + panelS * result[0].WEIGHT);
  });

});

});

system.log("+");
делаем всё что нужно внутри асинхронной функции
wizardpnz вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Letos (28.05.2018), Ovsyanicov (28.05.2018), Vogel (25.12.2019)
Старый 28.05.2018, 17:00   #56
Uncle
VIP
 
Аватар для Uncle
 
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,022 раз(а) в 6,492 сообщениях
Вес репутации: 5256
Uncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспорима
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
выводит массу детали умножает площадь на массу из базы материалов
Это уже должно работать? То есть в окне редактора скриптов в Базисе этот текст можно вставить, сохранить и будет работать?
__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
Uncle вне форума   Ответить с цитированием Вверх
Старый 28.05.2018, 17:05   #57
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 190
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 195
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

теперь можно сделать базис смету свою)))
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 28.05.2018, 17:37   #58
Uncle
VIP
 
Аватар для Uncle
 
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,022 раз(а) в 6,492 сообщениях
Вес репутации: 5256
Uncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспоримаUncle репутация неоспорима
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
надо nodejs и установить модуль node-firebird
Что это ? Где его взять? Куда положить?... Или все вышеизложенное обсуждение вариантов решения задачи - это так, такой себе "междусобойчик" гуру скрипта?
__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
Uncle вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
vevolas (28.01.2022)
Старый 29.05.2018, 10:42   #59
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Uncle Посмотреть сообщение
Это уже должно работать?
Оформил скрипт от wizardpnz в "портативную версию". Вот Ссылка на гугл диск. Как им пользоваться:
1. Скачать и распаковать в нужную папку.
2. В файле db.js у переменной options.database изменить значение на путь к нужной базе.
3. Запустить db.js.
В папке node_modules хранятся дополнительные модули для работы скрипта. Nodejs устанавливать не нужно
Letos вне форума   Ответить с цитированием Вверх
9 пользователя(ей) сказали cпасибо:
Старый 29.05.2018, 19:08   #60
Tehnik
Местный
 
Аватар для Tehnik
 
Регистрация: 11.08.2012
Адрес: Киев
Сообщений: 936
Сказал(а) спасибо: 5,370
Поблагодарили 3,884 раз(а) в 874 сообщениях
Вес репутации: 1098
Tehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспоримаTehnik репутация неоспорима
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
Оформил скрипт
Скрипты с нодами зто не для БМ9, да?
Tehnik вне форума   Ответить с цитированием Вверх
Ответ

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обсуждение готовых скриптов Letos Базис-мебельщик. Скрипты 492 04.03.2024 11:42
БАЗИС 8 - общее обсуждение DTioutiou Базис-мебельщик 8 2092 15.08.2023 01:44
БАЗИС 8 - Фурнитура, обсуждение nayrogi Базис-мебельщик 8 1390 16.04.2022 22:47
MasterBox 7. Работа с ящиками в системе БАЗИС Daddy Базис-мебельщик 7 605 13.11.2019 11:13
Общие вопросы по системе БАЗИС 7.0 COBA Базис-мебельщик 7 904 24.08.2016 19:16


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


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

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