Возможно кого-нибудь заинтересует...



Posted by Владимир, Вологда on February 25, 2000 at 00:41:08:


Представляю фрагмент настроек с использованием возможностей Клиента-2000.
Данная настройка напоминает о зарегистрированных сообщениях в определенное
время при загрузке клиента и дает возможность выполнения отчетных форм,
связанных с сообщением.
Буду рад, если кого-нибудь это заинтересует.

--------------------------------------------------
ФАЙЛ DEL_MES.RPT
--------------------------------------------------
* Удаление сообщения
ko=[is ' Код ','',8]
rewind facts
search Сообщение ?st дата ?dt напоминание ?so команда ?fr доступ ?ds КО ko автор ?av текст ?tx
if [success]=0
Error Указанное сообщение не найдено...
endif
if st=0 однократное, просто удалим
N:AUTO:d ^^^^^^ko
N:ENTER:#CLOSE

Нажмите ENTER или ESC для закрытия окна...
stop
elseif st=1 goto E_M ежемесячное
elseif st=2 goto E_K ежеквартальное
elseif st=3 goto E_N еженедельное
endif
* ------------------------------------
: E_M
dd=[cp dt,1,2] день события
ys=[vl [cp dt,7,4]] год события
ms=1+[vl [cp dt,4,2]] увеличим месяц события
if ms=13 ms=1; ys=ys+1; endif
ms=[intsn ms]; ys=[intsn ys]
while [length ms]<2 ms='0'+ms; endwhile
dt=dd+'.'+ms+'.'+ys
goto R_O
* ------------------------------------
: E_K
dd=[cp dt,1,2] день события
ys=[vl [cp dt,7,4]] год события
ms=3+[vl [cp dt,4,2]] увеличим месяц события
if ms in 13..15 ms=ms-12; ys=ys+1; endif
ms=[intsn ms]; ys=[intsn ys]
while [length ms]<2 ms='0'+ms; endwhile
dt=dd+'.'+ms+'.'+ys
goto R_O
* ------------------------------------
: E_N
dd=[da [vl [cp dt,1,2]],[vl [cp dt,4,2]],[vl [cp dt,7,4]]]+7 от события
dd=[antida dd]
dd=[strip [sn dd,10,2]]
ys=[cp dd,1,4]
ms=[cp dd,5,2]
dd=[cp dd,8,2]
dt=dd+'.'+ms+'.'+ys
*-------------------------------------------------
: R_O
ss='N:AUTO:o PD=0 DC='+[intsn dr]+' MC='+[intsn mr]+' ·регистрация·сообщения··тип·'+[intsn st]
ss=ss+'··дата·'+dt+'··сообщение·'+[intsn so]+'··форма·'+fr
ss=ss+'··доступ·'+[intsn ds]+'···'+tx+'·'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ss
N:AUTO:d ^^^^^^ko
N:ENTER:#CLOSE

Нажмите ENTER или ESC для закрытия окна...
stop
--------------------------------------------------
ФАЙЛ FK_MES.RPT
--------------------------------------------------
* Создание факта сообщения
fact Сообщение st дата dt напоминание so команда fr доступ ds КО [stamp 3] автор [stamp 1] текст [co]
$=0
--------------------------------------------------
ФАЙЛ MESSAGE.RPT
--------------------------------------------------
* Сообщения
gg=0
N:ENTER:r #2
N:F8:r del_mes ·#1·
N:F7:r new_mes
N:F9:d #1
Код Форма Дата Текст сообщения Автор
rewind facts
: BEGIN
search Сообщение ?st дата ?dt напоминание ?so команда ?fr доступ ?ds КО ?ko автор ?av текст ?tx
if [success]=1
call PRINT
goto BEGIN
endif
if gg=0
Нет сообщений...
endif
_ ENTER - выполнить форму F7 - новое F8 - удалить
stop
*-%-------------------------------------%-
: PRINT
ll=0
us=[user]
if ds=1 goto ALL; endif Сообщение для всех
if ds=0 goto P_AV; endif Сообщение личное, проверим автора
if [type ds]=0 goto ALL; endif Другое число, считаем что сообщение для всех
* Сообщение для себя и еще одного клиента
ds=[strip ds]
if [user]=av ll=1; endif Форму исполняет автор
if [user]=ds ll=1; endif Форму исполняет клиент, для кого предназначено сообщение
if ll=0 return; else goto ALL; endif
: P_AV
if [user]<>av return; endif Форму исполняет не автор этого сообщения
: ALL
d1=[da dr,mr,yr]+so от сегодня
d2=[da [vl [cp dt,1,2]],[vl [cp dt,4,2]],[vl [cp dt,7,4]]] от события
if d1>=d2
^^^^^^^^ko¦^^^^^^^^^fr¦^^^^^^^^^^dt¦^^^^^^^^^^^^^^^^^^^^^^^^^^^^^tx¦^^^^^^^^^^av
gg=1
endif
return
--------------------------------------------------
ФАЙЛ NEW_MES.RPT
--------------------------------------------------
* Создание нового сообщения
[s 1,0,1,2,3]
s0=' Тип сообщения '
s1=' Однократное '
s2=' Ежемесячное '
s4=' Еженедельное '
s3=' Ежеквартальное '
st=[im s0,s1,s2,s3,s4]
st=[s st]
[s 1,0,1,2]
s0=' Доступ к сообщению '
s1=' Личное '
s2=' Общее '
s3=' Себе + еще один клиент '
ds=[im s0,s1,s2,s3]
ds=[s ds]
if ds=2
ds=[is 'Введите имя еще одного клиента ','',10]
call DS__
endif
dt=[is 'Дата сообщения (ДД.ММ.ГГГГ) ','',10]
if dt<=' '
Error Я не понял, когда нужно сообщить об этом событии?
endif
fr=[is 'Присоединенная форма ','NO',8]
tx=[is 'Текст сообщения ','',29]
if tx<=' '
Error О чем же все-таки сообщать?
endif
so=[ir 'За сколько дней сообщить? ',3,0]
if [type ds]=0 ds=[intsn ds]; endif
ss='N:AUTO:o PD=0 DC='+[intsn dr]+' MC='+[intsn mr]+' ·регистрация·сообщения··тип·'+[intsn st]
ss=ss+'··дата·'+dt+'··сообщение·'+[intsn so]+'··форма·'+fr
ss=ss+'··доступ·'+ds+'···'+tx+'·'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ss
N:AUTO:#CLOSE
stop
* ----------------------------
: DS__
if ds<=' ' ds=0
else ds=[strip ds]
endif
return
--------------------------------------------------
ФАЙЛ NO.RPT
--------------------------------------------------
* Нет присоединенной формы
К этому сообщению форма не присоединена...
stop
--------------------------------------------------
ФРАГМЕНТ ФАЙЛА PROTO.RPT
--------------------------------------------------
* Прототипы фактов
Сообщение % дата % напоминание % команда % доступ % КО % автор % текст %
--------------------------------------------------
ФРАГМЕНТ ФАЙЛА USERS.RPT
--------------------------------------------------
* Загрузка
N:r message
--------------------------------------------------
ФРАГМЕНТ ФАЙЛА CAS.RUL
--------------------------------------------------
Деpево видов опеpаций
+--регистрация
+--сообщения
+--? st тип
+--? dt дата
+--? so сообщение
+--? fr форма
+--? ds доступ
_ RUN FILE fk_mes
--------------------------------------------------

С уважением, Владимир

P.S. В ACNT, естественно, должны быть RUN и FILE



Пpишедшие ответы: