ПОЛЕЗНЫЕ МЕЛОЧИ
В данном разделе я постараюсь собрать и рассказать о полезных вспомогательных процедурах, функция и инклюд-файла, применяемых в АБС Бисквит.
message - выводит окно сообщения в центре экрана, альтернативное стандартному (функция message).
Синтаксис:
{message <Текст сообщения>}
или
{message
&text=<Текст сообщения>
&color=<Цвет окна>
&alert-box=<MESSAGE,QUESTION,INFORMATION,ERROR или WARNING>
&buttons=<ok или yes-no>
&title=<Заголовок окна>
&beep=<Звуковой сигнал при появлении окна (yes/no)>
&update=<логич. переменная>
}
messmenu - выводит сообщение с пунктами меню под ним.
{messmenu
&choices=<список заголовков пунктов меню, разделитель запятая>
&text=<текст сообщения>
&title=<заголовок сообщения>
&row=<номер строки с которой будет выводится сообщение>
&update=<номер пункта меню по умолчанию>
}
Порядковый номер выбранного пункта меню записывается в глобальную переменную pick-value.
{justasec} и {justamin} - выводят сообщения "Секундочку..." и "Минуточку..." соответственно в нижнем левом углу окна.
tmprecid.def - создает временную таблицу tmprecid с ссылками на отмеченные записи в браузерах.
Аргументы:
&NSH=YES - таблица объявляется как NEW SHARED;
&SH=YES - таблица объявляется как SHARED;
&NGSH=YES - таблица объявляется как NEW GLOBAL SHARED.
Пример:
{tmprecid.def}
FOR EACH tmprecid,
FIRST cust-corp WHERE RECID(cust-corp) EQ tmprecid.id NO-LOCK:
DISPL cust-corp.short-name.
END.
calend.p - осуществляет вывод экранной формы календаря для выбора даты.
{globals.i}
DEFINE VARIABLE iDate AS DATE FORMAT "99/99/9999" NO-UNDO.
DEFINE FRAME frame1 iDate LABEL "ДАТА"
WITH SIDE-LABELS CENTERED OVERLAY TITLE COLOR brigth-white "Выберите дату".
iDate:SCREEN-VALUE = STRING(TODAY).
ON "F1" OF iDate DO:
RUN calend.p.
IF (LASTKEY = 10 OR LASTKEY = 13) AND pick-value <> ? THEN
SELF:SCREEN-VALUE = pick-value.
RETURN NO-APPLY.
END.
ENABLE ALL WITH FRAME frame1.
WAIT-FOR LEAVE OF iDate.
getdate.i - вызывает диалог запроса даты.
{getdate.i
&DateLabel=<метка даты>
&DateHelp=<текст подсказки даты внизу окна>
&AddPostUpd=<программный код, выполняемый после присвоения значения>
}
&AddPostUpd можно использовать для контроля введенного значения даты. Например, если необходимо запретить пользователю указать дату позднее текущий.
{getdate.i
&AddPostUpd="IF end-date > TODAY THEN
DO:
MESSAGE 'Дата не может быть позднее текущей'
VIEW-AS ALERT-BOX.
UNDO, RETRY.
END.
"
}
Таким образом, при попытке пользователя указать дату позднее текущей ему будет выведено сообщение с предупреждением о невозможности такого действие, после чего пользователь будет возвращен обратно для корректного указания даты.
Результат записывается в переменную end-date типа DATE
getdates.i - вызывает диалог запроса периода.
{getdates.i
&BegLabel=<метка даты начала периода>
&BegHelp=<текст подсказки даты начала периода>
&EndLabel=<метка даты окончания периода>
&EndHelp=<текст подсказки даты окончания периода>
&TitleLabel=<заголовок окна>
}
Результат записывается в:
beg-date - Дата начала периода;
end-date - Дата конца периода;
beg-date, end-date - тип DATE.
{empty <table_name>} - очищает таблицу с именем <table_name>
additem.i - формирует список с разделителем запятая.
Аргументы:
{1} - список;
{2} - добавляемый элемент в список.
additem2.i - формирует список с указанным разделителем.
Аргументы:
{1} - список;
{2} - добавляемый элемент в список;
{3} - разделитель.
additem3.i - формирует список с указанным по ASCII коду разделителем.
Аргументы:
{1} - список;
{2} - добавляемый элемент в список;
{3} - ASCII код разделителя.
delitem.i - удаляет элемент из списка с разделителем запятая. Требует предварительного объявления переменной counter
DEF VAR counter AS INT NO-UNDO.
Аргументы:
{1} - список;
{2} - удаляемый элемент из списка .
delitems.i - удаляет элемент из списка с указанным разделителем.
Аргументы:
{1} - список;
{2} - удаляемый элемент из списка;
{3} - разделитель списка.
x-amtstr.p (Amt, ccode, IsRub, IsCop, OUTPUT AmtStr, OUTPUT IsCop) - сумма прописью.
- Amt - сумма, тип DECIMAL;
- ccode - код валюты,тип CHAR;
- IsRub - флаг для добавления "рублей/долларов/Евро" в конце выходной строки, тип LOGICAL;
- IsCop - флаг для добавления "копеек/центов/евроцентов". При значении ? копейки выводятся прописью, тип LOGICAL;
- AmtStr - cтрока суммы прописью, тип CHAR;
- DecStr - cтрока кол-во копеек цифрами, тип CHAR.
Пример:
DEF VAR iNum AS DEC NO-UNDO.
DEF VAR chNum AS CHAR NO-UNDO.
DEF VAR vAmtStr AS CHAR NO-UNDO.
DEF VAR vDecStr AS CHAR NO-UNDO.
iNum = 10.58.
RUN x-amtstr.p (iNum,
"840",
TRUE,
TRUE,
OUTPUT vAmtStr,
OUTPUT vDecStr).
chNum = vAmtStr + ", " + vDecStr.
DISPL chNum FORMAT "x(78)".
Результат: Десять долларов США, 58 центов
procprop.p (iNum, OUTPUT chProc) - процент прописью.
- iNum - число процентов, тип DECIMAL;
- chProc - проценты прописью, тип CHAR.
Пример:
DEF VAR chProc AS CHAR NO-UNDO.
RUN procprop.p (10.85,
OUTPUT chProc).
DISPL chProc FORMAT "x(78)".
Результат: Десять целых восемьдесят пять сотых процента