Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Создание динамических диалогов

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 года"...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU