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

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

Меню

Маркет


беспроводные выключатели для мебели
Ответ
 
Опции темы Опции просмотра
Старый 05.05.2020, 20:37   #1
Скрипты и функции для МПЛ и Б-Салона 10-11
 
Аватар для АлКузнецов
АлКузнецов
Местный
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104

Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Версия для печати Отправить по электронной почте
АлКузнецов АлКузнецов вне форума 05.05.2020, 20:37
Рейтинг: ()

Доброго дня коллеги.
Как показала практика применения скриптов для Б-Салона v10-11 имеет свои особенности написания и нюансы отладки.

Предлагаю использовать эту ветку для обмена опытом и готовыми решениями.

Добавлено через 15 минут

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

Необходимые функции для работы
PHP код:

  
function okrugl(chn) {
  
// функция округления числа с заданной точностью
  // ch - число
  // n - количество знаков
    
if(isNaN(ch) || isNaN(n)) return false;
    var 
Math.pow(10,n);
  return 
Math.round(ch*m)/m;
}

/** цикл перебора всех элементов модели
 * @param {List3D} list
 * @param {(obj: Object3)=>{}} func
 */
function forEachInList(list, func){
    if (!
func)
        return;
    for (var 
0< list.Counti++){
        var 
obj = list.Objects[i];
        
func(obj);
        if (
obj.List){
            
forEachInList(obj.AsList(), func);
        }
    }

[свернуть]


PHP код:

/*
Функция определяет левое или правое исполнения модуля, которому в МПЛ разрешена симметрия.
Для работы нужен список названий деталей, которые функция определяется как "левая боковина".
*/
function razvorot()
{
var 
0;
var 
pp 0;
forEachInList(TovarItems.TovarModel, function(obj)
{
        switch (
true)
        {
        case 
obj.Name == 'Бок левый':
        
//alert(obj.Name + '' + obj.GMin.x);
        
obj.GMin.x/100;
        
pp okrugl(p0); //устраняем погрешность установки
        
break;
        case 
obj.Name == 'Бок_Б':
        
//alert(obj.Name);
        
obj.GMin.x/100;
        
pp okrugl(p0);    //устранением погрешность установки
        
break;
        }
});
  var 
usl pp == 0;
  
//alert(usl);
 
if(pp == 0)
 {
//alert("L");
 
return "L";}
 else
 {
//alert("R");
 
return "R";}
}

//alert( razvorot()+ " проверен"); //тест функции 
Добавлено через 10 минут
Генерируя артикулы "резиновых" модулей, постоянно требуется не только выбор высоты, но и набор свойств ( в том числе логических) позволяющий подобрать ближайший больший артикул штатный из множества имеющихся

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

высота модуля
PHP код:

/*
функция определения высоты модуля
входящий параметр hY необязателен дает поправку в см на высоту модуля при подборе артикула
Возвращает объект со свойствами
{
chek: true,        // совпадение значения со штатной сеткой размеров
n_: 24,            // назначенная штатная высота 
h_: "X",               // обозначение штатной высоты
rem: ''            // пояснение к артикулу высоты
}

*/
function yM(hY)
{     
//yM: ['X', 'Y', 'Z', 'E', 'B', 'C', 'F', 'G', 'H'];
if (hY<0||hY>0) {var lY hY*1;} else {var lY 0;}   //если у фукции не будет аргумента она равна 0
//alert(lY);
var y_M = {chekfalsen_0h_''rem''};

if (
lY==0){
lY Math.round((TovarItems.TovarModel.GSize.y)/10); // габарит модулия по высоте в см
}else{
lY    lY Math.round((TovarItems.TovarModel.GSize.y)/10); // габарит модуля по высоте в см
}


    switch (
lY){
        case 
24:
        return 
y_M = {chektruen_24h_"X"rem''};
    break;
        case 
36:
        return  
y_M = {chektruen_36h_"Y"rem''};
    break;
        case 
48:
        return 
y_M = {chektruen_48h_"Z"rem''};
    break;
        case 
60:
        return 
y_M = {chektruen_60h_"E"rem''};
    break;
        case 
72:
        return  
y_M = {chektruen_72h_"B"rem''};
    break;
        case 
96:
        return  
y_M = {chektruen_96h_"C"rem''};
    break;
        case 
120:
       return  
y_M = {chektruen_120h_"F"rem''};
    break;
        case 
132:
        return  
y_M = {chektruen_132h_"G"rem''};
    break;
        case 
204:
        return 
y_M = {chektruen_204h_"H"rem''};
    break;
    default:
            switch (
true)
        {
            case 
lY 24:
                return 
y_M = {chekfalsen_24h_"X"rem' уменьшение высоты X'};
            break;
            case 
lY 24 && lY 36:
                return 
y_M = {chekfalsen_36h_"Y"rem' уменьшение высоты Y'};
            break;
            case 
lY 36 && lY 48:
                return 
y_M = {chekfalsen_48h_"Z"rem' уменьшение высоты Z'};
            break;
            case 
lY 48 && lY 60:
                return 
y_M = {chekfalsen_60h_"E"rem' уменьшение высоты E'};
            break;
            case 
lY 60 && lY 72:
                return 
y_M = {chekfalsen_72h_"B"rem' уменьшение высоты B'};
            break;
            case 
lY 72 && lY 96:
                return 
y_M = {chekfalsen_96h_"C"rem' уменьшение высоты C'};
            break;
            case 
lY 96 && lY 120:
                return 
y_M = {chekfalsen_120h_"F"rem' уменьшение высоты F'};
            break;
            case 
lY 120 && lY 132:
                return 
y_M = {chekfalsen_132h_"G"rem' уменьшение высоты G'};
            break;
            case 
lY 132 && lY 204:
                return 
y_M = {chekfalsen_204h_"H"rem' уменьшение высоты H'};
            break;
            default:
            
alert("высота " lY +" технически невыполнима");
        }
    break;
    }

}

//alert("высота " + yM(-2).n_ + " штатная " + " " + yM(-2).h_+  yM(-2).chek + " " +yM(-2).rem ); 
[свернуть]


функция подбора ширины

PHP код:

/*
функция определения ширины модуля
входящий параметр lX необязателен дает поправку в см на ширину модуля при подборе артикула
Возвращает объект со свойствами
{
chek: true,        // совпадение значения со штатной сеткой размеров
n_: 0,            // назначенная штатная ширина 
rem: ''            // пояснение к артикулу ширины
}

*/

function xM(lX)
{     
// xM: [15, 20, 24, 25, 30, 35, 40, 45, 60, 80, 90, 100, 105, 110, 120]
if (lX<0||lX>0) {var __x  lX*1;} else {var __x 0;}   //если у фукции не будет аргумента она равна 0
var x_M = {chekfalsen_0rem''};

if (
__x==0){
__x Math.round((TovarItems.TovarModel.GSize.x)/10); // габарит модулия по ширине в см
}else{
__x    __x Math.round((TovarItems.TovarModel.GSize.x)/10); // габарит модуля по ширине в см
}

    switch (
__x){
        case 
15:
        return 
x_M = {chektruen_15rem''};
    break;
        case 
20:
        return  
x_M = {chektruen_20rem''};
    break;
        case 
24:
        return 
x_M = {chektruen_24rem''};
    break;
        case 
25:
        return 
x_M = {chektruen_25rem''};
    break;
        case 
30:
        return  
x_M = {chektruen_30rem''};
    break;
        case 
35:
        return  
x_M = {chektruen_35rem''};
    break;
        case 
40:
       return  
x_M = {chektruen_40rem''};
    break;
        case 
45:
        return  
x_M = {chektruen_45rem''};
    break;
        case 
60:
        return 
x_M = {chektruen_60rem''};
    break;
        case 
80:
        return 
x_M = {chektruen_80rem''};
    break;
        case 
90:
        return  
x_M = {chektruen_90rem''};
    break;
        case 
100:
        return 
x_M = {chektruen_100rem'?'};
    break;
        case 
105:
        return 
x_M = {chektruen_105rem''};
    break;
        case 
110:
        return  
x_M = {chektruen_110rem''};
    break;
        case 
120:
        return  
x_M = {chektruen_120rem''};
    break;
    default:
            switch (
true)
        {
            case 
__x 15:
                return 
x_M = {chekfalsen_15rem' уменьшение ширины ' +15};
            break;
            case 
__x 15 && __x 20:
                return 
x_M = {chekfalsen_20,  rem' уменьшение ширины'+20};
            break;
            case 
__x 20 && __x 25:
                return 
x_M = {chekfalsen_25rem' уменьшение ширины '+25};
            break;
            case 
__x 25 && __x 30:
                return 
x_M = {chekfalsen_30rem' уменьшение ширины '+30};
            break;
            case 
__x 30 && __x 35:
                return 
x_M = {chekfalsen_30rem' уменьшение ширины '+35};
            break;
            case 
__x 35 && __x 40:
                return 
x_M = {chekfalsen_40rem' уменьшение ширины '+40};
            break;
            case 
__x 40 && __x 45:
                return 
x_M = {chekfalsen_45rem' уменьшение ширины '+45};
            break;
            case 
__x 45 && __x 60:
                return 
x_M = {chekfalsen_60rem' уменьшение ширины '+60};
            break;
            case 
__x 60 && __x 80:
                return 
x_M = {chekfalsen_80rem' уменьшение ширины '+80};
            break;
            case 
__x 80 && __x 90:
                return 
x_M = {chekfalsen_90rem' уменьшение ширины '+90};
            break;
            case 
__x 90 && __x 100:
                return 
x_M = {chekfalsen_100rem' уменьшение ширины '+100};
            break;
            case 
__x 100 && __x 120:
                return 
x_M = {chekfalsen_120rem' уменьшение ширины '+120};
            break;
            default:
            
alert("ширина " __x +" техниески невыполнима");
        }
    break;
    }

}

//alert("ширина " + xM(0).n_ + " штатная " + " " +  xM(0).chek + " - " +xM(0).rem ); //тест функции 
[свернуть]


Функция подбора глубины



/*
функция определения глубины модуля
входящий параметр lZ необязателен дает поправку в см на ширину модуля при подборе артикула
Возвращает объект со свойствами
{
chek: true, // совпадение значения со штатной сеткой размеров
n_: 0, // назначенная штатная глубина
rem: '' // пояснение к артикулу глубины
}

*/
function zM(lZ)
{ //zM: [31, 33, 38, 40, 43, 45, 50, 54, 55, 57, 58, 59, 60, 65];
if (lZ<0||lZ>0) {var __z = lZ*1;} else {var __z = 0;} //если у фукции не будет аргумента она равна 0
var z_M = {chek: false, n_: 0, rem: ''};

if (__z==0){
__z = Math.round((TovarItems.TovarModel.GSize.z)/10); // габарит модулия по глубине в см
}else{
__z = __z + Math.round((TovarItems.TovarModel.GSize.z)/10); // габарит модулия по глубине в см
}

switch (__z){
case 31:
return z_M = {chek: true, n_: 31, rem: ''};
break;
case 33:
return z_M = {chek: true, n_: 33, rem: ''};
break;
case 38:
return z_M = {chek: true, n_: 38, rem: ''};
break;
case 40:
return z_M = {chek: true, n_: 40, rem: ''};
break;
case 43:
return z_M = {chek: true, n_: 43, rem: ''};
break;
case 45:
return z_M = {chek: true, n_: 45, rem: ''};
break;
case 50:
return z_M = {chek: true, n_: 50, rem: ''};
break;
case 54:
return z_M = {chek: true, n_: 54, rem: ''};
break;
case 55:
return z_M = {chek: true, n_: 55, rem: ''};
break;
case 57:
return z_M = {chek: true, n_: 57, rem: ''};
break;
case 58:
return z_M = {chek: true, n_: 58, rem: ''};
break;/**/
case 59:
return z_M = {chek: true, n_: 59, rem: ''};
break;
case 60:
return z_M = {chek: true, n_: 60, rem: ''};
break;
case 65:
return z_M = {chek: true, n_: 65, rem: ''};
break;
default:
switch (true)
{
case __z < 31:
return z_M = {chek: false, n_: 31, rem: ' уменьшение глубины ' +31};
break;
case __z > 31 && __z < 33:
return z_M = {chek: false, n_: 33, rem: ' уменьшение глубины'+33};
break;
case __z > 33 && __z < 45:
return z_M = {chek: false, n_: 45, rem: ' уменьшение глубины '+45};
break;
case __z > 45 && __z < 59:
return z_M = {chek: false, n_: 59, rem: ' уменьшение глубины '+59};
break;
case __z > 59 && __z < 65:
return z_M = {chek: false, n_: 65, rem: ' уменьшение глубины '+65};
break;
default:
alert("глубина " + __z +" каталогом не предусморенна");
}
break;
}

}

//alert("глубина " + zM().n_ + " штатная " + " " + zM().chek + " - " +zM().rem ); //тест функции
[свернуть]
__________________
С уважением Кузнецов Александр
Просмотров: 12238
Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
AlexBolton (05.05.2020), bars73 (26.06.2020), Letos (06.05.2020), PravCom (19.11.2021), SaNeK11 (18.05.2020)
Старый 19.11.2021, 09:01   #2
Vanya2012
Новичок
 
Регистрация: 25.10.2016
Адрес: Люберцы
Сообщений: 4
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
Vanya2012 пока не определено
По умолчанию

Почему эта тема пустая? Что ни кого не волнует Салон?
Vanya2012 вне форума   Ответить с цитированием Вверх
Старый 19.11.2021, 09:28   #3
bars73
Новичок
 
Регистрация: 19.08.2012
Адрес: Ульяновск
Сообщений: 6
Сказал(а) спасибо: 85
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
bars73 пока не определено
По умолчанию

Мы работаем в нём. По всем интересующим нас вопросом общаемся с ТП.
__________________
С наилучшими пожеланиями bars73
bars73 вне форума   Ответить с цитированием Вверх
Старый 22.12.2021, 16:05   #4
3Dkrevetka
Новичок
 
Регистрация: 23.09.2021
Сообщений: 5
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
3Dkrevetka пока не определено
По умолчанию

Всем привет.
Я немного переделал под себя скрипт, прописывающий размеры изделия.
Все бы хорошо, но мне нужно указывать глубину корпуса изделия, а не его общую глубину.
Заднюю стенку и фасад я могу вычесть без проблем, поскольку это фиксированное число.
Но что делать с ручками? Они все разного размера.
Я вижу два пути (конкретно в моем случае):
1) Вычислять габариты ручек и потом вычитать их глубину из общей глубины изделия;
2) Просто указывать глубину самого корпуса (он у меня отдельным блоком настроен).
3Dkrevetka вне форума   Ответить с цитированием Вверх
Старый 22.12.2021, 16:48   #5
zorro
VIP
 
Аватар для zorro
 
Регистрация: 18.01.2008
Сообщений: 1,047
Сказал(а) спасибо: 2,864
Поблагодарили 1,852 раз(а) в 435 сообщениях
Вес репутации: 695
zorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущее
По умолчанию

Посмотрите этот скрипт. Обратите внимание на расчет габаритов изделия без учета фурнитуры (ручек, навесов и т.д.) function GetGabLoc(obj)
Там считаются габариты только панелей типа TFurnPanel.


Может это поможет.
Вложения
Тип файла: rar Создание размеров.rar (1.1 Кб, 37 просмотров)
zorro на форуме   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
3Dkrevetka (22.12.2021)
Старый 22.12.2021, 21:55   #6
АлКузнецов
Местный
 
Аватар для АлКузнецов
 
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 211
АлКузнецов как роза среди колючекАлКузнецов как роза среди колючекАлКузнецов как роза среди колючек
Смех новогодние подарки

ссылка на архив примеров функций для МПЛ

rtz пример оперативный массив базы материалов с доп. свойствами (и вообще подключаемого массива данных конвертируемой из exel-таблицы ).

причина написания


Пробовал создавать массив через SQL-запрос к базе:
возникает проблемма отладки: В МПЛ работает, но.. уже в Б-Салоне лично у меня, SQL-запрос — не работает. Вообще. Причину так и не понял.
С чем столкнулся истользуя такие эрзац-таблицы материалов:
  1. если в модели попадается отсуствующий в базе материал — уходит в бесконечный цикл.
  2. даже если все материалы 100% есть в базе, но модель большая и тяжелая... при запросе иногда виснет (наглухо). Ставте логи и таймер остановки скрипта.
  3. с "обрубком" базы в виде "bdMat[++id] ={}"если id меньше 255, скрипт в 99,9% случаев просто летает и стабильно работает. Если id больше 255 немного "тупит", но в любом случае работает.

мой ВЫВОД (как практика, могу быть неправ):
Для использования в Б-Салоне и МПЛ, проще и надёжнее подготовить подключаемый файл js выгрузкой exel-таблицы по образцу, чем через SQL-запрос. К тому же некоторые свойства материала нельзя получить из БМ-Сметы "*.FDB" (например: "плотность", или "Модуль упругости" для прочностных расчётов).
[свернуть]


raschetNST функция расчёта стоимости нестандартного изделия изменённого или собранного из "полуфабрикатов" в редакторе Б-Салона.

применение

Считает подетальную стоимость и массу изделия из модели прайс менеджера. Применяется при "ручном" изменении материалов модели. Может применяться в Б-Мебельщике (нужно заменить "TovarItems.TovarModel"* на "Model")
Готовые результаты использовались на производстве через экспортируемые XLS-файлы.
пример работы — картинки в рахиве raschetNST.note1.jpg и raschetNST.note2.jpg


[свернуть]


PriceList пример подключаемого прайс-листа изделий.

применение


, например: есть утверждённый каталог "стандартных модулей", а вшитый через МПЛ скрипт изделия должен назначить изделию (эластичному модулю растянутому за флажки), цену — ориентируясь на данный прайс-лист и сгенерированный "артикул изделия".
  1. "ручная цена" эластичных модулей. Необходим,к огда цены модулей назначены политической волей руководства компании, согласно понятным для отдела продаж правилам и алгоритмам ценообразования.
    (С ценами рассчитанными по смете, они не совпадают, как вариант — по политическим мотивам).
  2. цена изделия в зависимости от ( набора материалов, комплекта фурнитуры, образца покраски, дилерской скидке —*т.д. и т.п. (нужное вписать)) имеет несколько комбинаций "стандартной стоимости".
  3. Секретность. Можно легко передать на торговую точку один зашифрованный файл (по №ключа), чтобы обновить цены.
    Кража файла прайс-листа '*.bmz' для Б-салона уже ничего не даёт.
[свернуть]


usefully_MPL — подключаемый сборник полезных функций для МПЛ, чтобы не писать "километровые" скрипты в каждое конкретное изделие. Упрощает отладку усложняет воровство готовых кодов.
Все вопросы "зачем?" и "для чего?" используется та или иная функция — в личку.
// все важные шаги закомментированы (орфографию и громатику пояснений не проверял)

D..._...[...]L пример скрипта для МПЛ записываемый в конкретное изделие

что делает

  1. генерирует артикул изделия, ориентируясь на габарит растянутого за флажки модель изделия.
  2. ведёт "историю надругательств продавца над изделием" в графе "комментарий" .
  3. если артикул стандартный назначает стандартную цену.
  4. пересчитывает цену изделия, если материалы панелей или фурнитура заменялись на более дорогие.
  5. пересчитывает цену изделия, если изделие нестандартное
PS. (важно) для работы модуля нужны все указанные выше файлы.* Проверенные и настроенные
[свернуть]
__________________
С уважением Кузнецов Александр

Последний раз редактировалось АлКузнецов; 22.12.2021 в 22:35.
АлКузнецов вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
LeoAN (24.12.2021), PEHAT (24.12.2021)
Старый 22.01.2023, 22:27   #7
bazis_noob
Новичок
 
Регистрация: 18.12.2020
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
bazis_noob пока не определено
По умолчанию

а как запустить скрипт в салоне? например перебрать все панели в модели.
bazis_noob вне форума   Ответить с цитированием Вверх
Ответ

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

Метки
базис-салон, менеджер прайс-листов, отладка, скрипты

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 11-2023 - Скрипты AlexBolton Базис-мебельщик. Скрипты 968 23.03.2024 13:39
БАЗИС 10 - Скрипты systland Базис-мебельщик. Скрипты 714 06.03.2024 09:09
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1441 27.02.2024 10:48
Прифуговка - каков эффект? и другие полезные/бесполезные функции-опции авт кромочника dr_ugoff Кромление 34 02.05.2016 14:48


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


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

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