Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Аленка
Зарегистрирован: 08.04.2011 Сообщения: 64 Откуда: Оттуда
|
Добавлено: Ср Апр 13, 2011 13:58 Заголовок сообщения: Как обработать изменение значения поля, подскажите. |
|
|
Нужно отловить изменение значения поля с календарем диалога, в процедуре tab по idField не получается, подскажите, пожалуйста. |
|
Вернуться к началу |
|
 |
RVV Большой шоколадный орден

Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Ср Апр 13, 2011 16:27 Заголовок сообщения: |
|
|
Это высший пилотаж
Для примера можно посмотреть диалог:
hr_dlg_rep_d1
hr_dlg_structs_list
обратите внимание на выставленные "галки" у поля ... |
|
Вернуться к началу |
|
 |
Аленка
Зарегистрирован: 08.04.2011 Сообщения: 64 Откуда: Оттуда
|
Добавлено: Ср Апр 13, 2011 17:37 Заголовок сообщения: |
|
|
RVV
А у меня их нет, может скините сюда какой-нибудь код? |
|
Вернуться к началу |
|
 |
Mike Большой шоколадный орден

Зарегистрирован: 07.04.2011 Сообщения: 255
|
Добавлено: Ср Апр 13, 2011 18:11 Заголовок сообщения: |
|
|
Процедура TAB hr_dlg_structs_list
if DLGFIELD[''] == '-1' then {
LOCAL _dlgname_ := DLGNAME;
if @@id_firm <> 0 then DISFIELD DLGNAME, id_firm;
}; -- -1
if DLGFIELD[''] == 'id_firm' then {
Let @@id_firm := DLGNAME:id_firm;
}; -- id_firm
if DLGFIELD[''] == 'd_from' then {
if ISDATE(CONVERT(varchar,DLGNAME:d_from[''])) = 0
then { Let DLGNAME:d_from := @@d_from;
drawfield DLGNAME, d_from; }
else { Let @@d_from := DLGNAME:d_from['']; };
}; -- d_from
Msg 2141, @pr_lst_structs_tree;
Let _where_structs := '';
Msg 2041, @pr_lst_structs;
alias _seek = 0x2000;
Процедура TAB hr_dlg_rep_d1
if DLGFIELD[''] == '-1' then {
LOCAL _dlgname_ := DLGNAME;
if @@id_firm <> 0 then {
DISFIELD DLGNAME, id_firm;
ALIAS _where_setup := AND ACVW_SETUP.id_firm = @@id_firm;
};
}; -- -1
if DLGFIELD[''] == 'id_firm' then {
Let @@id_firm := DLGNAME:id_firm;
if @@id_firm <> 0
then { ALIAS _where_setup := AND ACVW_SETUP.id_firm = @@id_firm; }
else { LET _where_setup := ''; };
}; -- id_firm
if DLGFIELD[''] == 'd_from' then {
if ISDATE(CONVERT(varchar,DLGNAME:d_from[''])) = 0
then { Let DLGNAME:d_from := @@d_from;
drawfield DLGNAME, d_from; }
else { Let @@d_from := DLGNAME:d_from['']; };
}; -- d_from
execute hr_prc_review_list;
alias _seek = 0x2000;
--------------------------------------------------------------------------------
d_from - как раз дата
галочка в поле d_from - стоит "не проверять" |
|
Вернуться к началу |
|
 |
RVV Большой шоколадный орден

Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Чт Апр 14, 2011 11:06 Заголовок сообщения: |
|
|
Поле на диалоге должно быть не EDIT, а LOOKUP
- поставить галку "не проверять" - это отрисует календарь
- поставить @ в "SQL выражение"
То, что написал Mike к делу не относится.
В секции TAB указывается обработка события ...
if DLGFIELD[''] == 'ТАБЛИЦА_ЗАПРОСА.поле' then {
}; |
|
Вернуться к началу |
|
 |
Аленка
Зарегистрирован: 08.04.2011 Сообщения: 64 Откуда: Оттуда
|
Добавлено: Чт Апр 14, 2011 17:01 Заголовок сообщения: |
|
|
RVV
Спасибо, попробую. По выполнению отпишусь. |
|
Вернуться к началу |
|
 |
Аленка
Зарегистрирован: 08.04.2011 Сообщения: 64 Откуда: Оттуда
|
Добавлено: Пт Апр 15, 2011 10:59 Заголовок сообщения: |
|
|
RVV писал(а): | Поле на диалоге должно быть не EDIT, а LOOKUP
- поставить галку "не проверять" - это отрисует календарь |
1. Галка не помогла, календарь на LookUp-e не отрисовался.
2. С чего-то вдруг начала выскакивать ошибка - ругань на кнопку переключателя.
RVV писал(а): | В секции TAB указывается обработка события ...
if DLGFIELD[''] == 'ТАБЛИЦА_ЗАПРОСА.поле' then {
}; |
Не получилось, пробовала вывести месседж, но в событие не попадала.
Что я делаю не так?
Вот секция SQL
Код: | @period_flt
SELECT * From
(SELECT isnull((select wdate from #period),_wdate)
as pDay,
(SELECT id_prices
FROM client.dbo.V_PERIOD_onType
WHERE v_prd=1 and _wDate between begdate AND enddate
) as pMonth,
(SELECT id_prices
FROM client.dbo.V_PERIOD_onType
WHERE v_prd=2 and _wDate between begdate AND enddate
)
as pQuart
,
(SELECT id_prices
FROM client.dbo.V_PERIOD_onType
WHERE v_prd=3 and _wDate between begdate AND enddate
)
as pYear
,
(SELECT isnull((select bDate from #period),_bDate))
as bDate
,
(SELECT isnull((select eDate from #period),_eDate))
as eDate
,_TypePeriod as TypePeriod) t |
Вот так в табе
Код: | if DLGFIELD[''] == 'Т.pDay' then
{@@{msg '11111'};
}; |
|
|
Вернуться к началу |
|
 |
RVV Большой шоколадный орден

Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Пт Апр 15, 2011 11:15 Заголовок сообщения: |
|
|
Вы просто не умеете их готовить
Пишите проще.
Такой SQL в запросе диалога - БРЕД.
Дизайнер просто подавился ....
Диалог предполагает в секции FROM имя таблицы ... одной
А поле должно быть datetime ... тогда Дизайнер все поймет .. он умный
В вашем случае можно написать примитивный запрос от фиктивной таблицы (или вообще без таблицы)
@hr_dlg_rep_d
Select
0 as struct_code
, cast('1900-01-01' as datetime) as d_from
, 0 as id_firm
, а то что вы нагородили вынести в
начальное присвоение значений. |
|
Вернуться к началу |
|
 |
Аленка
Зарегистрирован: 08.04.2011 Сообщения: 64 Откуда: Оттуда
|
Добавлено: Пт Апр 15, 2011 12:48 Заголовок сообщения: |
|
|
RVV
Дык, я же предупреждала, что я-чайник, с Дизайнером общаюсь только пару недель.
Изначально мой селект выглядел как ваш. Потом начались непонятки с типом datetime, в результате чего получился такой изврат.
В коде инициализации стоит Set dateformat YMD;
Глобально заданы три переменные _wdate,_bdate,_edate, все as Date.
Тем не менее после пересвоения _wdate, на окне появлялось немылимая дата, что-то из 1905 года... ее так cast интерпретировал.
Пришлось изгаляться и сначала загонять даты во временную таблицу с полями типа datetime, считывать их оттуда, тогда все отображалось правильно.
Понимаю, что слишком все мудрено и наверное, все можно делать проще... но я изучаю Босс Дизайнер в основном методом тыка, поскольку техническое описание на него та еще конфетка! |
|
Вернуться к началу |
|
 |
RVV Большой шоколадный орден

Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Пт Апр 15, 2011 13:51 Заголовок сообщения: |
|
|
Обратитесь к разработчикам за консультациями,
и узнайте когда очередные курсы по Дизайнеру.
PS: Пишите проще |
|
Вернуться к началу |
|
 |
|