Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Eng Site Admin
Зарегистрирован: 13.05.2008 Сообщения: 160
|
Добавлено: Пн Май 26, 2008 21:25 Заголовок сообщения: Создание динамических диалогов |
|
|
Хочу обратить внимание на динамическое построение диалогов, думаю многим, особенно начинающим, данная возможность будет интересна.
Для построения диалога нужно не так и много
STABLE - позволяет определить значения по умолчанию для полей диалога, в принципе это можно сделать и при вызове, но на мой взгляд так проще и понятнее.
Для определения размеров диалога, его полей и их координат используется переменная
alias _dlgresource={ };
все коды для полей можно найти в документации к дизайнеру.
Ну и для вызова диалога используется команда DIALOG
Например для того, чтобы запросить у пользователя дату, необходимо написать следующее:
Код: | STABLE @XName SELECT getdate();
alias _dlgresource={
(0,0,240,100,0);
e,(20,20,80,20, 0x10),'Дата',(110,20,80,20,0x100),1;
};
DIALOG @XName,,'~Введите дату' ;
Let data := @XName:1 as date;
DESTROY @XName;
if _Result <> 10 then error; -- отказ -> выход иначе делаем все, что ниже
return data;
ALIAS :_Result=-1; |
Можно объеденить данный код с тем, который приведен здесь и тогда получится отчет на указанную дату:
Код: | STABLE @XName SELECT getdate();
alias _dlgresource={
(0,0,240,100,0);
e,(20,20,80,20, 0x10),'Дата',(110,20,80,20,0x100),1;
};
DIALOG @XName,,'~Введите дату' ;
Let data := @XName:1 as date;
DESTROY @XName;
if _Result <> 10 then error; -- отказ -> выход иначе делаем все, что ниже
BROWSER
{
SELECT
P.NUM_TAB[]"ТАБ. НОМЕ",
C.FULL_NAME[]"ФИО",
A.NAME_APPOINT[]"ДОЛЖНОСТЬ",
S.STRUCT_NAME[]"ПОДРАЗДЕЛЕНИЕ",
SPARENT.STRUCT_NAME[]"РОД. ПОДРАЗДЕЛЕНИЕ",
P.IN_DATE[dd.mm.yyyy]"ДАТА ПРИЕМА",
PR.DATE_TRANS[dd.mm.yyyy]"ДАТА НАЗНАЧЕНИЯ"
FROM PEOPLE P, CARD C, PR_CURRENT PR, STRUCTS S,
STRUCTS SPARENT,APPOINTMENTS A
WHERE P.ID_FIRM = @@ID_FIRM -- ГЛОБАЛЬНАЯ СИСТЕМНАЯ ПЕРЕМЕННАЯ ВОЗВРАЩАЕТ КОДА ФИРМЫ С КОТОРОЙ ОТКРЫЛИ МОДУЛЬ
AND P.AUTO_CARD=C.AUTO_CARD
AND PR.PID=P.PID
AND PR.Date_trans <= data
AND Date_depart > data
--AND PR.FLAG_LAST='*' -- ПОСЛЕДНЕЕ НАЗНАЧЕНИЕ
AND S.STRUCT_CODE=PR.CODE_STRUCT_NAME
AND S.STRUCT_PARENT=SPARENT.STRUCT_CODE
AND A.CODE_APPOINT=PR.CODE_APPOINT
AND C.AUTO_CARD=P.AUTO_CARD
AND P.IN_DATE<= data
AND P.OUT_DATE> data
ORDER BY 2;
},,'~Отчет по сотрудникам на data';
ALIAS :_Result=-1; |
|
|
Вернуться к началу |
|
 |
Mila
Зарегистрирован: 28.05.2009 Сообщения: 44 Откуда: СПб
|
Добавлено: Пн Авг 17, 2009 14:35 Заголовок сообщения: |
|
|
Почему в моем примере вместо текта и чисел вводятся "звезды"??? Что я делаю не так?
Код: |
STABLE @XName SELECT GetDate() as User_DateOrder_, -- дата приказа
'' as User_NumOrder_, -- номер приказа
GetDate() as User_DateOrder_, -- дата протокола
'' as User_NumProtl_, -- номер протокола
convert(char(2), Month(GetDate()),9) as User_tMonth_, -- текущий месяц
'0' as User_Amount_;
alias _dlgresource={(0,0,400,190,0);
e,(30,20,150,20, 0x28),'Дата приказа: ',(180,20,70,20, 0x100),1;
e,(30,40,150,20, 0x28),'Приказ №: ',(180,40,90,20, 0x20),2;
e,(30,60,150,20, 0x28),'Дата протокола:',(180,60,70,20, 0x100),3;
e,(30,80,150,20, 0x28),'Протокол №: ',(180,80,90,20, 0x20),4;
e,(30,100,150,20, 0x28),'Месяц:',(180,100,90,20,0x4),2,{Select line, line, text From pr_month},0,2,5;
e,(30,120,150,20, 0x28),'Сумма:',(180,120,90,20, 0x20),6;
};
DIALOG @XName,,'~Введите параметры для приказа' ;
if _Result <> 10 then {DESTROY @XName; break;}; -- отказ -> выход
Let User_DateOrder_ = @XName:1;
Let User_NumOrder_ = @XName:2;
Let User_DateProtl_ = @XName:3;
Let User_NumProtl_ = @XName:4;
Let User_tMonth_ = @XName:5;
Let User_Amount_ = @XName:6;
DESTROY @XName;
|
Заранее благодарю. |
|
Вернуться к началу |
|
 |
Vitaly Большой шоколадный орден

Зарегистрирован: 29.07.2008 Сообщения: 281 Откуда: Санкт-Петербург
|
Добавлено: Пн Авг 17, 2009 16:06 Заголовок сообщения: |
|
|
E,(x,y,dx,dy,options_text),'text_label',(x,y,dx,dy,options),name_field,{sql},lf,draw,data; - поле редактирования, включая lookup. Для опций заголовка (options_text) используйте обработку переменной xte, для опций поля (options) редактирования используйте обработку переменной xed, для опций lookup’а используйте переменную xlu. lf - поле связки, draw - что рисовать, data - что подставлять.
Options для поля редактирования:
0x0001 – погасить;
0x0002 – создать History;
0x0004 – поле подстановки (Lookup);
0x0008 – не выбирать (фокус ввода не устанавливается);
0x0010 – не редактировать(имеет смысл для History или Lookup);
0x0020 – не отображать вводимые символы;
0x0040 – задать рамку;
0x0080 – не перерисовывать связанные поля;
0x0100 – иконка Даты и Калькулятора;
0x0200 – не выбирать при UPDATE;
0x0400 – фото;
0x0800 - не добавлять стандартный поиск.
Options для поля LookUp:
0x0001 – погасить;
0x0002 - (зарезервировано);
0x0004 – поле подстановки (Lookup);
0x0008 – не выбирать;
0x0010 – не редактировать;
0x0020 – проверка нулевого символа;
0x0040 – задать рамку;
0x0080 – не перерисовывать связанные поля;
0x0100 – не проверять;
0x0200 – не выбирать при UPDATE;
0x0400 – фото;
0x0800 - не добавлять стандартный поиск.
Код: |
STABLE @XName SELECT GetDate(), -- дата приказа
'', -- номер приказа
GetDate(), -- дата протокола
'', -- номер протокола
Month(GetDate()), -- текущий месяц
0.00;
alias _dlgresource={(0,0,400,190,0);
e,(30,20,150,20, 0x28),'Дата приказа: ',(180,20,70,20, 0x100), 1;
e,(30,40,150,20, 0x28),'Приказ №: ',(180,40,90,20, 0x0080),2;
e,(30,60,150,20, 0x28),'Дата протокола:',(180,60,70,20, 0x100), 3;
e,(30,80,150,20, 0x28),'Протокол №: ',(180,80,90,20, 0x0080),4;
e,(30,100,150,20, 0x28),'Месяц:',(180,100,90,20,0x4),5,{Select line, text[] "месяц" From pr_month},0,2,1;
e,(30,120,150,20, 0x28),'Сумма:',(180,120,90,20, 0x0080),6;
};
DIALOG @XName,,'~Введите параметры для приказа' ;
if _Result <> 10 then {DESTROY @XName; break;}; -- отказ -> выход
Let User_DateOrder_ = @XName:1;
Let User_NumOrder_ = @XName:2;
Let User_DateProtl_ = @XName:3;
Let User_NumProtl_ = @XName:4;
Let User_tMonth_ = @XName:5;
Let User_Amount_ = @XName:6;
DESTROY @XName;
|
|
|
Вернуться к началу |
|
 |
Mila
Зарегистрирован: 28.05.2009 Сообщения: 44 Откуда: СПб
|
Добавлено: Пн Авг 17, 2009 17:45 Заголовок сообщения: |
|
|
Пасиба!
А как передать текстовое значение выбранного месяца, а не его номер в переменную User_tMonth_? |
|
Вернуться к началу |
|
 |
Vitaly Большой шоколадный орден

Зарегистрирован: 29.07.2008 Сообщения: 281 Откуда: Санкт-Петербург
|
Добавлено: Вт Авг 18, 2009 09:56 Заголовок сообщения: |
|
|
А зачем текстовое значение, удобнее код использовать ?... Переопределите переменную...
Код: | Select text InTo :User_tMonth_ From pr_month Where line=User_tMonth_; |
|
|
Вернуться к началу |
|
 |
Mila
Зарегистрирован: 28.05.2009 Сообщения: 44 Откуда: СПб
|
Добавлено: Вт Авг 18, 2009 10:18 Заголовок сообщения: |
|
|
Спасибки, я собственно так и сделала, думала это можно сделать как-то при описании поля.
Удобнее... может быть, просто у меня текст в приказе, например, "выдать за август 2009 года"... |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|