|
|
|
|
|
21.03.2018, 14:48
|
|
Обсуждение скриптов в Системе Базис
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
21.03.2018, 14:48
Рейтинг:
()
Если вы не знаете, или не уверены, куда задавать вопрос по скриптам в Системе Базис, то эта тема для вас.
Обратите внимание на полезные ответы в этой теме!
|
Просмотров: 257445
|
2 пользователя(ей) сказали cпасибо:
|
|
13.04.2018, 13:37
|
#21
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 170
Сказал(а) спасибо: 57
Поблагодарили 248 раз(а) в 46 сообщениях
Вес репутации: 141
|
Редактирование контура скриптом
Не могу понять как редактировать панель через скрипт.
Выделить и определить какую сторону сделал, а как редактировать не пойму. В справке пример брал, но у меня выдает ошибку по функции.
Спасибо
|
|
|
13.04.2018, 14:57
|
#22
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Максим Геннадьевич
Не могу понять как редактировать панель через скрипт.
Выделить и определить какую сторону сделал, а как редактировать не пойму. В справке пример брал, но у меня выдает ошибку по функции.
Спасибо
|
День добрый. Осмелюсь предположить, что редактировать надо контур. Для этого используется свойство Contour у панели. Но все равно не понятно, как в вашем понятии надо редактировать (растянуть, добавить какие-то элементы, сделать вырез или еще что). И еще хотелось бы узнать, какую ошибку выдает.
|
|
|
Пользователь сказал cпасибо:
|
|
13.04.2018, 17:26
|
#23
|
Пользователь
Регистрация: 04.04.2018
Адрес: Санкт-Петербург
Сообщений: 34
Сказал(а) спасибо: 18
Поблагодарили 18 раз(а) в 3 сообщениях
Вес репутации: 0
|
Добрый день. В форме имею
Window1.Material1 = Props.NewMaterial("1я ДВЕРЬ");
и числовое окно,значение которого предполагалось будет зависеть от
Window1.Material1.SetActive();
Window1.ThickMaterial1=Window1.AktiveMaterial.Thic kness;
if(Window1.ThickMaterial1.Value==10){
Window1.BNapl1.Value=Window1.LGProf.Value+15;
не получается.(не считает)
Добавлено через 12 минут
Другими словами, для выбора формулы мне нужно привязаться к толщине материала
Спасибо.
|
|
|
13.04.2018, 17:47
|
#24
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Guamoko
Добрый день. В форме имею
Window1.Material1 = Props.NewMaterial("1я ДВЕРЬ");
и числовое окно,значение которого предполагалось будет зависеть от
Window1.Material1.SetActive();
Window1.ThickMaterial1=Window1.AktiveMaterial.Thic kness;
if(Window1.ThickMaterial1.Value==10){
Window1.BNapl1.Value=Window1.LGProf.Value+15;
не получается.(не считает)
Добавлено через 12 минут
Другими словами, для выбора формулы мне нужно привязаться к толщине материала
Спасибо.
|
Если я вас правильно понял, то ранее это уже обсуждалось. В формах обновление полей работает, мягко говоря, паршиво. Поэтому после того, как изменили значение, нужно вручную заставить компонент обновиться, например так:
Код:
Window1.BNapl1.Layout.Top = Window1.BNapl1.Layout.Top
По сути, строка является бредовой и не меняет ничего, но где-то внутри базиса запускается обновление поля и новое значение должно корректно отобразиться.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
15.04.2018, 07:03
|
#25
|
Пользователь
Регистрация: 04.04.2018
Адрес: Санкт-Петербург
Сообщений: 34
Сказал(а) спасибо: 18
Поблагодарили 18 раз(а) в 3 сообщениях
Вес репутации: 0
|
Прошу прощения, еще раз прошу помощи.
Для выбора формулы мне нужно считать толщину активного материала из таблицы "используемый материал".При смене материала на материал с другой толщиной меняется формула.
Добавлено через 4 минуты
В моем коде
Window1.Material1.OnChange=function(){
Window1.Material1.SetActive();
Window1.ThickMaterial1=Window1.ActiveMaterial.Thic kness;
if(Window1.ThickMaterial1.Value==10){
Window1.BNapl1.Value=Window1.LGProf.Value+15;
Window1.BNapl1.Layout.Top=Window1.BNapl1.Layout.To p;
};
}
указывает на ошибку в 3й строке
Спасибо.
Добавлено через 2 минуты
Но, наверное,мой код вообще не то.
|
|
|
16.04.2018, 09:54
|
#26
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Guamoko
Прошу прощения, еще раз прошу помощи.
Для выбора формулы мне нужно считать толщину активного материала из таблицы "используемый материал".При смене материала на материал с другой толщиной меняется формула.
Добавлено через 4 минуты
В моем коде
Window1.Material1.OnChange=function(){
Window1.Material1.SetActive();
Window1.ThickMaterial1=Window1.ActiveMaterial.Thic kness;
if(Window1.ThickMaterial1.Value==10){
Window1.BNapl1.Value=Window1.LGProf.Value+15;
Window1.BNapl1.Layout.Top=Window1.BNapl1.Layout.To p;
};
}
указывает на ошибку в 3й строке
Спасибо.
Добавлено через 2 минуты
Но, наверное,мой код вообще не то.
|
У объекта Window1 нет свойства ActiveMaterial (только если вы его не создавали). Если вы хотите получить доступ к текущему активному материалу, строка должна выглядеть так:
Window1.ThickMaterial1 = ActiveMaterial.Thickness;
И еще одна странная вещь в вашем коде. Это как раз то же самое присвоение. Судя по коду, Window1.ThickMaterial1 - это числовое поле. Но в "ошибочной" строке вы пытаетесь записать толщину материала в переменную этого поля, из-за чего скрипт будет работать неверно.
Подробное пояснение, почему
После выполнения присвоения в третьей строке, в переменной Window1.ThickMaterial1 будет находиться число (16, например). Следующим шагом идет проверка на равенство значений Window1.ThickMaterial1.Value (то есть 16.Value) и 10. У переменной Window1.ThickMaterial1 числовое значение, у которого, в свою очередь, свойство Value отсутствует. В итоге Window1.ThickMaterial1.Value вернет undefined и условие будет выглядеть так:
if (undefined == 10).
В итоге, это условие не будет никогда верным, но из-за особенностей JS, оно не является ошибочным, поэтому скрипт продолжит работу.
[свернуть]
Выход из этой ситуации следующий: третью строку необходимо исправить, чтобы она выглядела так:
Window1.ThickMaterial1.Value = ActiveMaterial.Thickness;
P.S На будущее: если скрипт выдает ошибку, связанную с вашим вопросом, неплохо было бы и текст ошибки тоже добавлять, ведь в ней сказано почти все, что нужно для поиска ошибки и причин ее возникновения.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
17.04.2018, 04:46
|
#27
|
Пользователь
Регистрация: 04.04.2018
Адрес: Санкт-Петербург
Сообщений: 34
Сказал(а) спасибо: 18
Поблагодарили 18 раз(а) в 3 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Letos
У объекта Window1 нет свойства ActiveMaterial (только если вы его не создавали). Если вы хотите получить доступ к текущему активному материалу, строка должна выглядеть так:
Window1.ThickMaterial1 = ActiveMaterial.Thickness;
И еще одна странная вещь в вашем коде. Это как раз то же самое присвоение. Судя по коду, Window1.ThickMaterial1 - это числовое поле. Но в "ошибочной" строке вы пытаетесь записать толщину материала в переменную этого поля, из-за чего скрипт будет работать неверно.
Подробное пояснение, почему
После выполнения присвоения в третьей строке, в переменной Window1.ThickMaterial1 будет находиться число (16, например). Следующим шагом идет проверка на равенство значений Window1.ThickMaterial1.Value (то есть 16.Value) и 10. У переменной Window1.ThickMaterial1 числовое значение, у которого, в свою очередь, свойство Value отсутствует. В итоге Window1.ThickMaterial1.Value вернет undefined и условие будет выглядеть так:
if (undefined == 10).
В итоге, это условие не будет никогда верным, но из-за особенностей JS, оно не является ошибочным, поэтому скрипт продолжит работу.
[свернуть]
Выход из этой ситуации следующий: третью строку необходимо исправить, чтобы она выглядела так:
Window1.ThickMaterial1.Value = ActiveMaterial.Thickness;
P.S На будущее: если скрипт выдает ошибку, связанную с вашим вопросом, неплохо было бы и текст ошибки тоже добавлять, ведь в ней сказано почти все, что нужно для поиска ошибки и причин ее возникновения.
|
Добавлено через 29 минут
Спасибо большое. С Вашими поправками
Цитата:
Сообщение от Guamoko
Window1.ThickMaterial1.Value = ActiveMaterial.Thickness;
|
заработало,но только после того,
Цитата:
Сообщение от Guamoko
И еще одна странная вещь в вашем коде. Это как раз то же самое присвоение. Судя по коду, Window1.ThickMaterial1 - это числовое поле.
|
как я создал поле и присвоил ему значение Window1.ThickMaterial1.Value= ActiveMaterial.Thickness;
Вообще-то, мне это поле не нужно и в своем варианте
Window1.ThickMaterial1.=ActiveMaterial.Thickness;
я предполагал, что ThickMaterial1-переменная, принимающая значение толщины активного материала.А уже от этой переменной зависило
if(Window1.ThickMaterial1.Value==10){
Window1.BNapl1.Value=Window1.LGProf.Value+15;
Window1.BNapl1.Layout.Top=Window1.BNapl1.Layout.To p;
Возможно ли обойтись без поля? Если нет,я его скрою, присвоив Visible-false
Еще раз позволю себе повторить задачу,которую хотелось бы решить.
1)Объявить переменную,принимающую значение толщины активного материала.
2)при изменении материала,если толщина активного материала=10,запустить формулу
Window1.BNapl1.Value=Window1.LGProf.Value+15;
Window1.BNapl1.Layout.Top=Window1.BNapl1.Layout.To p;
которая выводит результат вычисления в окно BNapl1.
Последний раз редактировалось Guamoko; 17.04.2018 в 09:34.
|
|
|
17.04.2018, 09:28
|
#28
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Guamoko
Возможно ли обойтись без поля?
|
Конечно можно. Но если вам переменная нужна только для этого случая, то лучше и назвать ее покороче и отделить от объекта Window1. Например так:
Код:
var thick = ActiveMaterial.Thickness;
if (thick == 10)
//и дальше по коду
И еще немного теории: если переменную создавать в объекте Window1, то она будет существовать в этом объекте, пока тот не будет уничтожен (предположительно, до завершения скрипта). А если объявить переменную как на примере выше, то она будет существовать в пределах блока, в котором объявлена (то есть, по завершении обработчика события, переменная будет уничтожена, а память освобождена). Применительно к скриптам, это, скорее, "правило хорошего тона". За все время пользования скриптами я еще ни разу не видел скрипта, который бы замедлял работу Базиса из-за использования большого количества переменных. Из ощутимых плюсов я могу назвать наверное только упрощение работы в отладчике - меньше лишних переменных отображается.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
17.04.2018, 09:45
|
#29
|
Пользователь
Регистрация: 04.04.2018
Адрес: Санкт-Петербург
Сообщений: 34
Сказал(а) спасибо: 18
Поблагодарили 18 раз(а) в 3 сообщениях
Вес репутации: 0
|
Спасибо огромное. Все заработало как хотелось.
Теорию я читаю,не просто тупо прошу выдать ответ.Просто доходит не так быстро как хотелось бы. Еще раз спасибо. Удачи.
|
|
|
18.04.2018, 10:13
|
#30
|
Новичок
Регистрация: 29.11.2014
Сообщений: 6
Сказал(а) спасибо: 2
Поблагодарили 4 раз(а) в 1 сообщении
Вес репутации: 0
|
Добрый день.
Есть ли возможность имортировать через скрипт в Базис 8 данные из формата csv, например
артикул1;длина1;ширина1;колво1
артикул2;длина2;ширина2;колво2
...
После импорта будут созданы панели с этими параметрами.
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 00:20. Часовой пояс GMT +3.
|