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

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

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 13.01.2014, 13:22  
БАЗИС 8 - Скрипты
 
Аватар для Igor_482
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174

Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Версия для печати Отправить по электронной почте
Igor_482 Igor_482 вне форума 13.01.2014, 13:22
Рейтинг: ()

ВНИМАНИЕ! Правила выкладывания скриптов.

1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.

2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.


Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.

__________________________________________________ _______________

Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.

Новое в скриптописании для БМ:

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

while (true)
Вот полный список новшеств, добавленных в скрипты с момента их выхода:

14 декабря 2014

Добавлена поддержка эластичных блоков

List3D : {
IsElastic: new HDefinition("?Boolean:", 'Являетсяли объект эластичным'),
ElasticResize: new HDefinition("?Vector:newSize", 'Растянуть объект до требуемых размеров'),
}

27 ноября 2014

Вспомогательные геометрические алгоритмы, реализованы в глобальном объекте geometry

geometry : new HDefinition("Geometry2D", 'Вспомогательные геометрические функции'),

Geometry2D : {
Intersect: new HDefinition("?Array.<Point>:elem1,elem2", 'Вычислить точки пересечения двухмерных элементов'),
Compare: new HDefinition("?Boolean:elem1,elem2", 'Сравнить элементы'),
Distance: new HDefinition("?Number:elem1,elem2", 'Найти кратчайшее расстояние между элементами'),
Area: new HDefinition("?Number:contour", 'Найти площадь контура')
}

17 ноября 2014

Работа с пользовательскими свойствами

Object3 : {
UserPropCount: new HDefinition("Number", 'Количество пользовательских свойств'),
UserProperty: new HDefinition('Array.<Object>', 'Значение свойства по его имени или индексу'),
UserPropertyName: new HDefinition('Array.<String>', 'Названия свойств')
}

Новые элементы управления на панели свойств

ScriptProperty: {
NewColor: new HDefinition("?ScriptColorProperty:'Название'", 'Создать свойство типа цвет'),
NewSeparator: new HDefinition("?ScriptProperty", 'Создать разделитель')
}

ScriptColorProperty: {
Value: new HDefinition("Number")
},

----------------------------------------------------------------------------------------------------
29 сентября 2014

system.apiVersion = 90 -> Bazis9
system.apiVersion = 85 -> Bazis8

----------------------------------------------------------------------------------------------------
15 сентября 2014

Contour2D : {
Min: new HDefinition("Point", 'Левый нижний угол охватывающего прямоугольника'),
Max: new HDefinition("Point", 'Правый верхний угол охватывающего прямоугольника'),
AddEquidistant : new HDefinition("?undefined:contour,offset,false,false", 'Добавить эквидистанту контура. Последние 2 параметры отвечают за направление и скругление')
}

ScriptProperty: {
OnDeactivate : new HDefinition("Function", 'Обработчик деактивации свойства или меню'),
OnValueValidate : new HDefinition("Function", 'Проверка корректности значения'),
ValueValid: new HDefinition("Boolean", 'Флаг корректности введенного значения, выставляется обработчиком OnValueValidate'),
Validate: new HDefinition("?Boolean:", 'Проверить значение свойства и вложенных свойств')
}

----------------------------------------------------------------------------------------------------
2 сентября 2014

ScriptProperty: {
NameEditable: new HDefinition("Boolean", 'Разрешить редактирование имени (для создания таблиц)'),
NewSeparator: new HDefinition("?ScriptProperty", 'Создать разделитель')
}

----------------------------------------------------------------------------------------------------
9 августа 2014

Добавлены подменю в кнопки

InButton : {
NewSubMenu : new HDefinition('?InButton:"Меню"', 'Создать подменю'),
Combo: new Definition("Boolean", 'Отдельная стрелка для подменю')
},

Добавлены всплывающие меню и цвет фона для всех свойств. Созданы обработчики активации и изменения свойства.
Прежнее событие OnChange срабатывало не только при изменении самого параметра, но и при изменении дочерних свойств.
OnValueChange срабатывает только при изменении значения свойства.

ScriptProperty: {
BackColor: new HDefinition("Number", 'Цвет фона'),
PopupMenu: new HDefinition("ScriptMenu", 'Всплывающее меню'),
OnActivate : new HDefinition("Function", 'Обработчик активации свойства пользователем'),
OnValueChange : new HDefinition("Function", 'Обработчик изменения свойства')
Tag: new HDefinition("Number", 'Пользовательское число'),
}

Добавлено выпадающее меню:

ScriptProperty: {
DropDownMenu: new HDefinition("ScriptMenu", 'Выпадающее меню')
}

----------------------------------------------------------------------------------------------------
21 апреля 2014:

Добавлены свойства и методы:

ScriptMaterialProperty: {
Width: new HDefinition("Number", "Ширина листа"),
}

ScriptButtProperty: {
Thickness: new HDefinition("Number", "Толщина кромки"),
Width: new HDefinition("Number", "Ширина ленты"),
}

Contour2D : {
IsPointInside: new HDefinition("?Boolean:x,y", "Находится ли точка внутри контура?"),
IsInContour: new HDefinition("?Boolean:contour", "Находится ли контур внутри другого?"),
IsClosedContour: new HDefinition("?Boolean:", "Является ли контур замкнутым?"),
IsContourRectangle: new HDefinition("?Boolean:", "Является ли контур прямоугольным?"),
OrderContours: new HDefinition("?Boolean:true", "Упорядочить элементы контура в одном направлении")
}


----------------------------------------------------------------------------------------------------
6 февраля 2014

Реализовано подключение и вызов функций COM и OLE объектов

ScriptProperty : {
Expanded: new HDefinition("Boolean", 'Развернуты ли вложенные свойства')
}

Добавлен метод:
NewCOMObject: new HDefinition("?IDispatch:'CLSID'", 'Создать новый COM объект по его типу')
[свернуть]

Нажмите на изображение для увеличения
Название: Базис.jpg
Просмотров: 1497
Размер:	36.4 Кб
ID:	86248

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


Последний раз редактировалось systland; 26.12.2017 в 11:52.. Причина: Добавил объявление.
Просмотров: 1389935
Ответить с цитированием Вверх
6 пользователя(ей) сказали cпасибо:
Старый 02.04.2019, 09:14   #1101
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

А вот округляет..... Доберусь до компа - скину. Это были боковины и горизонтали шкафа - одна глубина.
И да - первые 3 символа.
Ozimko вне форума   Ответить с цитированием Вверх
Старый 02.04.2019, 13:16   #1102
Ovsyanicov
Местный
 
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 734
Сказал(а) спасибо: 1,529
Поблагодарили 884 раз(а) в 376 сообщениях
Вес репутации: 403
Ovsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Ozimko Посмотреть сообщение
А вот округляет..... Доберусь до компа - скину.
Только не забудьте, пожалуйста. Очень хочется проверить.

Цитата:
Сообщение от Ozimko Посмотреть сообщение
И да - первые 3 символа.
Изменения:
- добавлена возможность сокращать наименования панелей до определенного количества знаков;
- поля ввода и выбора значений активируются только после включения соответствующего чекбокса;
- последние введенные значения сохраняются в файл props.xml и в последующем считываются оттуда.
PHP код:
// Разделитель между наименованием и позицией
const separator '';

function 
CheckObject(obj) {
    switch (
processingType.ItemIndex) {
        case 
0:
            return 
true;
        case 
1:
            return 
obj.Selected;
        case 
2:
            return 
obj.Selected && obj.List;
    }
}

// Функция обхода всех объектов в блоке и вызова переданной функции для их
// обработки
function forEachInList(list, func) {
    if (!
func)
        return;
    for (var 
0< list.Counti++) {
        var 
obj = list.Objects[i];
        if (
CheckObject(obj)) {
            
func(obj);
            if (
obj.List) {
                
forEachInList(obj.AsList(), func);
            }
        }
    }
}

//функция вывода размеров панелей, с учетом заданной точности
function GetObjSize(size){
    switch (
sizeAccuracy.ItemIndex)  {
        case 
0:
            return 
Math.round(size);
        case 
1:
            return 
Math.trunc(Math.round(size 10)) / 10;
        case 
2:
            return 
Math.trunc(Math.round(size 100)) / 100;
        case 
3:
            return 
Math.trunc(Math.round(size 1000)) / 1000;
    }
}

//функция вывода наименования панелей
function GetObjName(namestrLength){
    if(!
shortenName.Value || strLength >= name.length || strLength == 0){
        return 
name;
    } else if(
shortenName.Value){
        return 
name.slice(0strLength);
    }
}

function 
AdditionalInfo(obj){
    var 
result '';
    if (
addSize.Value){
        
result += ' ' GetObjSize(obj.GSize.x) + '*' GetObjSize(obj.GSize.y) + '*' GetObjSize(obj.GSize.z);
    }
    return 
result;
}

// имя в поз
function NameToPos(obj) {
    
obj.ArtPos GetObjName(obj.NamenameLength.Value) + AdditionalInfo(obj);
}
// поз в имя
function PosToName(obj) {
    
obj.Name obj.ArtPos AdditionalInfo(obj);
}
// имя и поз
function NameAndPos(obj) {
    var 
value GetObjName(obj.NamenameLength.Value) + separator obj.ArtPos AdditionalInfo(obj);
    
obj.Name value;
    
obj.ArtPos value;
}
// вызов продолжения скрипта после того, как весь код отработает.

Action.Continue();
// Комбобокс для выбора типа выполнения скрипта
var combo Action.Properties.NewCombo('Тип',
    
'Наименование в поз.\nПоз. в наименование\nОбъединить наименование и поз.');
var 
shortenName Action.Properties.NewBool('Сократить наименование');
    
shortenName.OnValueChange = function(){nameLength.Enabled = !nameLength.Enabled}
var 
nameLength Action.Properties.NewNumber('Количество символов наименования');
    
nameLength.Enabled false;
var 
addSize Action.Properties.NewBool('Добавлять размеры');
    
addSize.OnValueChange = function(){sizeAccuracy.Enabled = !sizeAccuracy.Enabled}
var 
sizeAccuracy Action.Properties.NewCombo('Точность размеров''0\n1\n2\n3');
    
sizeAccuracy.Enabled false;
var 
processingType Action.Properties.NewCombo('Тип обработки',
    
'Все объекты\nВыделенные объекты\nВыделенные блоки');
Action.Properties.Load('props.xml');
// Кнопка запуска основного кода скрипта
Action.Properties.NewButton('Применить').OnClick = function () {
    
// переменная для хранения функции, которая будет обрабатывать объекты
    
var func;
    
// Запись в историю, что скрипт собирается менять модель и все объекты,
    // находящиеся в ней
    
Undo.RecursiveChanging(Model);
    
// В зависимости от выбранного типа назначаем нужную функцию для обработки
    // объектов
    
switch (combo.ItemIndex) {
        case 
0:
            
func NameToPos;
            break;
        case 
1:
            
func PosToName;
            break;
        case 
2:
            
func NameAndPos;
            break;
    }
    
// запускаем обход всех объектов в модели с нужной функцией обработки
    
forEachInList(Modelfunc);
    
// Вызов завершения скрипта
    
Action.Properties.Save('props.xml');
    
Action.Finish();

Ovsyanicov вне форума   Ответить с цитированием Вверх
16 пользователя(ей) сказали cпасибо:
Старый 03.04.2019, 06:42   #1103
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

Мистика какая-то..... сегодня с округлением все ок. И не знаю на что грешить..... Может, после окошка с ошибкой в программе все-таки нужно ее перезагружать? Я иногда это не делаю, если базис не настаивает.....Но сегодня все ок, проверил и на 326,3 и на 326,6. Огромное спасибо за скрипт!
Ozimko вне форума   Ответить с цитированием Вверх
Старый 03.04.2019, 13:53   #1104
shapori
Пользователь
 
Аватар для shapori
 
Регистрация: 18.08.2009
Адрес: Санкт-Петербург
Сообщений: 30
Сказал(а) спасибо: 10
Поблагодарили 165 раз(а) в 12 сообщениях
Вес репутации: 215
shapori - весьма и весьма положительная личностьshapori - весьма и весьма положительная личность
По умолчанию

А возможно ли добавить, перенос в позиции только размеры деталей, без названия?
shapori вне форума   Ответить с цитированием Вверх
Старый 03.04.2019, 15:34   #1105
Ozimko
VIP
 
Аватар для Ozimko
 
Регистрация: 11.07.2008
Сообщений: 1,019
Сказал(а) спасибо: 261
Поблагодарили 314 раз(а) в 143 сообщениях
Вес репутации: 356
Ozimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючекOzimko как роза среди колючек
По умолчанию

Да, легко.
obj.ArtPos = obj.ArtPos + AdditionalInfo(obj);


вроде так
Ozimko вне форума   Ответить с цитированием Вверх
Старый 04.04.2019, 10:50   #1106
Vladren
Пользователь
 
Аватар для Vladren
 
Регистрация: 14.07.2009
Адрес: Киев
Сообщений: 91
Сказал(а) спасибо: 78
Поблагодарили 47 раз(а) в 19 сообщениях
Вес репутации: 198
Vladren на пути к лучшему
По умолчанию

А есть скрипт на расстановку ГОРИЗОНТАЛЕЙ? По полка все работает ок!
Но часто надо расставить именно жесткие горизонты....
Vladren вне форума   Ответить с цитированием Вверх
Старый 04.04.2019, 11:31   #1107
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 166
Сказал(а) спасибо: 57
Поблагодарили 244 раз(а) в 46 сообщениях
Вес репутации: 139
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию Полки

Если правильно понял то такой скрипт. Делал для себя

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

PHP код:
SetCamera(p3dFront);
Left GetObject("Укажите левую панель");
Right GetObject("Укажите правую панель");
Top GetEdge('Укажите верхнюю границу'AxisX).First.y;
Bottom GetEdge('Укажите нижнюю границу'AxisX).First.y;
SetCamera(p3dLeft);
SetCamera(p3dFront);

FileOptions 'SaveShelf.xml';
MakeProperties();
Action.Properties.Load(FileOptions);
Action.OnFinish = function() {
    
Action.Properties.Save(FileOptions);
}

NewBtn NewButtonInput('Закончить');
NewBtn.OnChange = function() {
    
Action.Commit();
    
Action.Finish();
}

function 
MakeProperties() {
    
prop Action.Properties;
    
shelfCount prop.NewNumber('Количество полок',0);
    
blockMat shelfCount.NewMaterial('Материал полок');
    
butt shelfCount.NewButt('Кромка полок');
    
shelfSide shelfCount.NewNumber ('Отступ с боков',0);
    
shelfFurn shelfCount.NewFurniture('Полкодержатели');
    
shelfFront =  shelfCount.NewNumber ('Заглубление',10);
    
FurnVis shelfCount.NewCombo('Видимость крепежа','Слева\nСправа\nНа обоих\nНет на обоих');    
    
blockFurn shelfCount.NewFurniture('Крепеж видимый');
    
furnBlock shelfCount.NewFurniture('Крепеж не видимый');
    
inFurnVis shelfCount.NewCombo('Система крепежа','Произвольно\nОт центра 32\nОт края 32');
    
inFurn shelfCount.NewNumber ('Отступ фурнитуры',50);//Или как минимум для системы 32
    
prop.OnChange = function() {
    
MakeShelf();
    }
}
MakeShelf();

function  
MakeShelf(){
    
DeleteNewObjects();
    
blockMat.SetActive();
    
thick ActiveMaterial.Thickness;
    if (
Left.GabMax.Right.GabMax.|| Left.GabMax.== Right.GabMax.z){
        
pan Right;
    }else{
        
pan Left;
    }
    if(
shelfCount.Value ){
        
//формула вычесления растояния полок
        
fshelf Math.round(((Bottom Top) - thick thick shelfCount.Value )/(+shelfCount.Value 1));
        
shelfY Top;
            for (var 
0shelfCount.Valuek++){
                
shelfY += fshelf thick;
                
shelf AddHorizPanel(Left.GabMax.shelfSide.Value ,Left.GabMin.shelfSide.ValueRight.GabMin.shelfSide.Value,pan.GabMax.shelfFront.ValueshelfY );
                
ShelfFurn (shelf);
                
shelf.Build();
            }
    }
}

function 
ShelfFurn (s) {
        
s.TextureOrientation ftoHorizontal;
        if(
inFurnVis.ItemIndex == 0){
            
inFB inFF inFurn.Value;
        }else if(
inFurnVis.ItemIndex == 1){
            
inFB inFF =(s.GabMax.- (Math.floor(Math.floor((s.GabMax.32 inFurn.Value 2)/32))*32))/;
        }else{
            
inFB Math.ceil(inFurn.Value/32)*32;
            
inFF s.GabMax.Math.floor((s.GabMax.inFurn.Value)/32)*32;
        }            
        if (
shelfSide.Value == 0){
            switch(
FurnVis.ItemIndex){
                case 
0:
                    
sFl blockFurn.Value;
                    
sFR furnBlock.Value;                    
                break;
                case 
1:
                    
sFl furnBlock.Value;
                    
sFR blockFurn.Value;
                break;
                case 
2:
                    
sFl blockFurn.Value;
                    
sFR blockFurn.Value;
                break;
                case 
3:
                    
sFl furnBlock.Value;
                    
sFR furnBlock.Value;
                break;
            }
            
            
s.Name 'Полка';
            
s.AddButt(butt2);
        }
        else {
            
sFl sFR shelfFurn.Value;
            
s.Name 'Полка съем';
            
s.AddButt(butt0);
            
s.AddButt(butt1);
            
s.AddButt(butt2);
            
s.AddButt(butt3);
        }
        
sFl.Mount(sLeftLeft.GabMax.s.GabMin.thick/2s.GabMin.inFB );
        
sFl.Mount(sLeftLeft.GabMax.xs.GabMin.thick/2,s.GabMax.inFF);
        
sFR.Mount(sRightRight.GabMin.s.GabMin.thick/2s.GabMin.inFB);
        
sFR.Mount(sRightRight.GabMin.s.GabMin.thick/2,s.GabMax.inFF);

}

Action.Continue(); 
[свернуть]


Добавлено через 4 минуты
Цитата:
Сообщение от Vladren Посмотреть сообщение
А есть скрипт на расстановку ГОРИЗОНТАЛЕЙ? По полка все работает ок!
Но часто надо расставить именно жесткие горизонты....
Угловые радиусные полки
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
anb (04.04.2019), andronf (04.04.2019), Letos (04.04.2019), PravCom (08.11.2021), Vladren (04.04.2019)
Старый 04.04.2019, 12:57   #1108
Vladren
Пользователь
 
Аватар для Vladren
 
Регистрация: 14.07.2009
Адрес: Киев
Сообщений: 91
Сказал(а) спасибо: 78
Поблагодарили 47 раз(а) в 19 сообщениях
Вес репутации: 198
Vladren на пути к лучшему
По умолчанию

Вообщето я имел ввиду простые горизонтали в прямой шкаф. Горизонтальная панель между двух боковин. Две, три и т.д. боковин равнораспределенных. Так, как в скрипте по расстановке полок. Но на жесткий крепеж без зазоров - на конферматы или рафиксы... Не угловые и не радиусные. Но СПАСИБО, в любом случае)
Vladren вне форума   Ответить с цитированием Вверх
Старый 04.04.2019, 13:05   #1109
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 166
Сказал(а) спасибо: 57
Поблагодарили 244 раз(а) в 46 сообщениях
Вес репутации: 139
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию

Цитата:
Сообщение от Vladren Посмотреть сообщение
Вообщето я имел ввиду простые горизонтали в прямой шкаф. Горизонтальная панель между двух боковин. Две, три и т.д. боковин равнораспределенных. Так, как в скрипте по расстановке полок. Но на жесткий крепеж без зазоров - на конферматы или рафиксы... Не угловые и не радиусные. Но СПАСИБО, в любом случае)
В ответе есть простые горизонтали. Откройте споллер.
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
Старый 04.04.2019, 14:11   #1110
Vladren
Пользователь
 
Аватар для Vladren
 
Регистрация: 14.07.2009
Адрес: Киев
Сообщений: 91
Сказал(а) спасибо: 78
Поблагодарили 47 раз(а) в 19 сообщениях
Вес репутации: 198
Vladren на пути к лучшему
По умолчанию

Ну я затестил. Спрашивает одну боковую панель и одну боковую границу. Крепеж с одной стороны. Но панель рисует если не указать срез прамоугольную. Или я чтото не понял и не разобрался?
Vladren вне форума   Ответить с цитированием Вверх
Ответ

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1442 04.04.2024 11:28
БАЗИС 9 nayrogi Базис-мебельщик 9 785 01.10.2022 23:13
БАЗИС-ЧПУ 8 chingisnah Базис-мебельщик 8 119 21.12.2017 22:04
Заявки на скрипты dr_john Система БАЗИС 37 01.03.2016 10:36
Базис-7,"Народный Базис"и Windows-8 sergeyzak18 "НАРОДНЫЙ" базис 23 16.01.2014 00:37


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


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

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