Сложное - это очень просто!



Posted by Анатолий Анимица on June 24, 1999 at 12:23:20:

In Reply to: Простое делается просто, а как со сложным то быть posted by Рустем Мухаметшин on June 24, 1999 at 12:07:14:

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



* АЗС сменный отчет файл-коэффициент с выводом ПД
* (c) ФБПА
co=[strip [cp [co],1,32]] комментарий
so=co
m2=[strip [stamp 2]];m3=[strip [stamp 3]] штампы 2..3
TM=[strip TM]
m4=[strip [cp m2,5,2]]+':'+[strip [cp m2,7,2]] время чч:мм из штампа 2
si=m3+'si' индекс сигнатуры=штамп+si
sj=[strip [ged si]] сигнатура в extrd.dat
eq=(sj=m2) признак неизменности сигнатуры
db=[n1 $D];kr=[n1 $K] дебет и кредит
sv=[ro 0.5] cервер=1, ultra=0
$=0
vk=V1
call fcit вызов расчета и проводок
call dout тест и вызов вывода
stop
***********************************************************************************************
*************
:dout тест вывода
*if (sj=m2) return;endif не изменено, выход
dt=[dt dc,mc] дата
ff=[ch 12];fi=[dir 0] директория
if (sv|([length m3]>=2))|1
fi=fi+'txa\'+m3+'.txa' в сервере и штампованные ultra
else fi=fi+'report.aaa' в ultra без штампа
lg=fi+' '+dt;if [length m3]>=2 lg=m3+' '+dt;endif
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^lg >> file fi
endif
*[sed si,m2] запомнить новую сигнатуру
call printpr
return
***********************************************************************************************
***
:fcit сменный отчет
* подпрограмма извлекает значения входящих уровней и значений ТРК, входящих прочих даннных по
* смене, формирует итог смены, выполняет проводки, выдает сменный отчет и приходный ордер.
* в случае изменения цен отпуска в течение смены необходим промежуточный сменный отчет с
* установкой в качестве принимающего текущего оператора.
eu=[get %%,'eunorm'] норма естественной убыли %
ol=[get %%,'floatoper'] сдающий оператор
[set %%,'floatoper',op] принимающий оператор
if [length TM]<4 TM=m4;endif время
fact azop ol,'it',V1,V2,V3,V4,TM,op,0,0,0,0,0,0,0 факт сменный отчет
* сдающий оператор итог в кассу, выручка фас.ГСМ,выручка прочая,передано по смене,смену принял
fact smazs ol,op,tm,0,m2,m3,co факт смена АЗС
* сдал принял время резерв штамп2 штамп3 комментарий к операции итог смены
v5=[get %%,'persm'];[set %%,'persm',V4] передано по смене
pm=mc;pd=dc;call prevd вычислим дату вчера
* вычисление реализации по ведомостям (количества списанного ГСМ) за смену
# GSM
gv=[n1 #];[set *gv,'qrv',0] сброс счетчиков объема реализации по ведомостям в 0
[set *gv,'rrv',0] рубли
#
:nerit
nerase azotpgsv ol,?x2,?x3,?x4,?x5,?x6,?x7,?x8,?x9,?xa,?xb,?xc,0,0 факт
* op V D G Q pr cs gn nn t2 t3 co it 0
if [success]
*[ir [intsn dc]+'.'+[intsn mc]+'-'+op+'-'+V+'-'+D+'-'+G+'-'+[intsn [fact_d]]+'.'+[intsn
[fact_m]]+' ',x5,0] тест
fact azotpgsv ol,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb,xc,1,0 тот же факт, но отмечен
* azotpgsv op,V, D, G, Q,pr,cs,gn,nn,t2,t3,co,it факт как он есть
[plus *x4,'qrv',x5] добавили к-во проданного по ведомостям
[plus *x4,'rrv',x5*x7]
goto nerit
endif
* вычисление входящего и исходящего уровня и объема
R1=0;Y1=0;U1=0;R2=0;Y2=0;U2=0;R3=0;Y3=0;U3=0;R4=0;Y4=0;U4=0
nerase azop ol,'ur',?R1,?Y1,?U1,?R2,?Y2,?U2,?R3,?Y3,?U3,?R4,?Y4,?U4,0
if [success]
fact azop ol,'ur',R1,Y1,U1,R2,Y2,U2,R3,Y3,U3,R4,Y4,U4,1
if [ex *R1] [set *R1,'inur',Y1];[set *R1,'outur',U1];endif
if [ex *R2] [set *R2,'inur',Y2];[set *R2,'outur',U2];endif
if [ex *R3] [set *R3,'inur',Y3];[set *R3,'outur',U3];endif
if [ex *R4] [set *R4,'inur',Y4];[set *R1,'outur',U4];endif
endif
* вычисление входящего и исходящего счетчиков ТРК
R1=0;Y1=0;U1=0;R2=0;Y2=0;U2=0;R3=0;Y3=0;U3=0;R4=0;Y4=0;U4=0
*fact azop op,'tr',R1,Y1,U1,R2,Y2,U2,R3,Y3,U3,R4,Y4,U4,0
*fact azop op,'tc',R1,P1,R2,P2,R3,P3,R4,P4,0,0,0,0,0
nerase azop ol,'tr',?R1,?Y1,?U1,?R2,?Y2,?U2,?R3,?Y3,?U3,?R4,?Y4,?U4,0
if [success]
fact azop ol,'tr',R1,Y1,U1,R2,Y2,U2,R3,Y3,U3,R4,Y4,U4,1
if [ex *R1] [set *R1,'intr',Y1];[set *R1,'outtr',U1];endif
if [ex *R2] [set *R2,'intr',Y2];[set *R2,'outtr',U2];endif
if [ex *R3] [set *R3,'intr',Y3];[set *R3,'outtr',U3];endif
if [ex *R4] [set *R4,'intr',Y4];[set *R4,'outtr',U4];endif
endif
* вычисление приема ГСМ
as=[as GSM]
for sa=1 to as
ll=0
n1=[sa GSM,sa]
:nxpri
nerase azpr ol,?tn,?am,?po,n1,?lt,?tt,?wt,?u1,?u2,?lf,?lc,?tr,?tm,?so
if [success]&(~[ps '++',[strip so]])
ll=ll+lf
fact azpr ol,tn,am,po,n1,lt,tt,wt,u1,u2,lf,lc,tr,tm,[strip so]+'++'
goto nxpri
endif
[set *n1,'priem',ll]
endfor
* вычисление реализации за наличный расчет
*return
E1=0;E2=0;E3=0;E4=0;E5=0
if [ex *R1] qv=[get *R1,'qrv'];E1=qv;pr=[get *R1,'rr/l']*(U1-Y1-qv)
oq=[get *R1,'qty'];os=[get *R1,'sum'];oc=0;if oq<>0 oc=os/oq;endif
pk=qv*oc; [set *R1,'qrv',0]
E5=E5+pr
-62-0 46-2 (pr) розничная реализация
-46-2 41-3 (pk) списание покупной стоимости с НДС НГСМ
-41-3 68-02 (pk*0.2)
-41-3 68-05 (pk*0.25)
-46-2 41-3 (pk*0.45)
endif
if [ex *R2] qv=[get *R2,'qrv'];E2=qv;pr=[get *R2,'rr/l']*(U2-Y2-qv)
oq=[get *R2,'qty'];os=[get *R2,'sum'];oc=0;if oq<>0 oc=os/oq;endif
pk=qv*oc;[set *R2,'qrv',0]
E5=E5+pr
-62-0 46-2 (pr)
-46-2 41-3 (pk)
-41-3 68-02 (pk*0.2)
-41-3 68-05 (pk*0.25)
-46-2 41-3 (pk*0.45)
endif
if [ex *R3] qv=[get *R3,'qrv'];E3=qv;pr=[get *R3,'rr/l']*(U3-Y3-qv)
oq=[get *R3,'qty'];os=[get *R3,'sum'];oc=0;if oq<>0 oc=os/oq;endif
pk=qv*oc;[set *R3,'qrv',0]
E5=E5+pr
-62-0 46-2 (pr)
-46-2 41-3 (pk)
-41-3 68-02 (pk*0.2)
-41-3 68-05 (pk*0.25)
-46-2 41-3 (pk*0.45)
endif
if [ex *R4] qv=[get *R4,'qrv'];E4=qv;pr=[get *R4,'rr/l']*(U4-Y4-qv)
oq=[get *R4,'qty'];os=[get *R4,'sum'];oc=0;if oq<>0 oc=os/oq;endif
pk=qv*oc;[set *R4,'qrv',0]
E5=E5+pr
-62-0 46-2 (pr)
-46-2 41-3 (pk)
-41-3 68-02 (pk*0.2)
-41-3 68-05 (pk*0.25)
-46-2 41-3 (pk*0.45)
endif
fact azop ol,'rv',R1,E1,R2,E2,R3,E3,R4,E4,0,0,0,0,0 не обработан итогом
-50-101 62-0 (E5)
-50-1 50-101 (V1)
return
***********************************************************************************************
*
* сменный отчет - документ
:printpr
sm=' ';sa=[sa 51,1];na=[strip [ged sa+'+name']] наименование предприятия
if [length na]<2 na='ТОО ТАНТ';endif
az=[sa AZS,1];a2=[n2 *az] наименование АЗС
> file fi
^^^^^^^^^^^^^^^^^^^^^^^^^^na СМЕННЫЙ ОТЧЕТ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^a2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^dt >> file fi
news smazs ?o1,?o2,?t1,?n1,?n2,?n3,?cn
if [success]
fg=[fact_d]+[fact_m]/100
*^fg^^ ^^^^^^^o1 ^^^^^^^o2 ^^^^^^^^^^^t1 ^^^^^^^^^^^^^n1 ^^^^^^^^^^^^n2 ^^^^^^^^^^^^^^^^n3
^^^^^^^^^^^^^^^^^^^^^^^^^^^cn >> file fi
endif
oo=' ';if [ex *ol] oo=[n2 *ol];endif
tp=pd+pm/100;tf=dc+mc/100
Оператор ^^^^^^^^^^^^^^^^^^^^^^^^^oo Смена c ^tp^^ по ^tf^^
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^>> file fi
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^>> file fi
----------T------------T-------T---------------------T------------------T------T---------------
-------------------------------------¬>> file fi
¦ ГСМ ¦ Остаток на ¦ Прием ¦ Показания сч. ТРК, л¦Ост.на кон. см., л¦излиш.¦
Расшифровка реализации ¦>> file fi
¦резервуар¦начало смены¦ за
+-------T-------T-----+------T-----T-----+недос.+------T--------------T--------------T---------
------+>> file fi
+---------+------T-----+ смену ¦на нач.¦на кон.¦Расх.¦ h, ¦ л ¦ л ¦(+/-) ¦ цена ¦ нал.
расчет ¦безнал. расчет¦всего(вкл.скид)¦>> file fi
¦ ¦ ¦ ¦ ¦смены ¦смены ¦ по ¦ ¦ ¦ ¦
¦реализ+-----T--------+-----T--------+-----T---------+>> file fi
¦ N ТРК ¦ см ¦ л ¦ л ¦ ¦ ¦ ТРК ¦ см ¦факт.¦ ТРК ¦ л ¦ руб/л¦ л ¦
руб. ¦ л ¦ руб. ¦ л ¦ руб. ¦>> file fi
+---------+------+-----+-------+-------+-------+-----+------+-----+-----+------+------+-----+--
------+-----+--------+-----+---------+>> file fi
iv=0;ir=0;w1=0;w2=0;w3=0;w4=0;w5=0;w6=0;w7=0;w8=0;w9=0
eu=[get %%,'eunorm']
for sa = 1 to [as GSM]
n1=[sa GSM,sa]
rv=[get *n1,'qrv']
vv=[get *n1,'rrv']
w5=w5+vv
y1=[get *n1,'inur'];u1=[get *n1,'outur']
k1=[get *n1,'intr'];k2=[get *n1,'outtr']
ip=[get *n1,'priem']
if=~(rv=0)|~(y1=0)|~(u1=0)|~(k1=0)|~(k2=0)|~(ip=0)
if if
iv=iv+rv;
v0=[get *n1,'ur'+[intsn [tr y1]]];v2=[get *n1,'ur'+[intsn [tr y1]+1]];v1=v0+(v2-v0)*[ce y1]/100
v0=[get *n1,'ur'+[intsn [tr u1]]];v2=[get *n1,'ur'+[intsn [tr u1]+1]];v2=v0+(v2-v0)*[ce u1]/100
cr=[get *n1,'rr/l']
kk=k2-k1;while kk<0 kk=kk+100000;endwhile
w2=w2+kk
ln=kk-rv;lr=ln*cr;ir=ir+lr
w4=w4+ln
tl=ln+rv
w6=w6+tl
tr=lr+vv
w7=w7+tr
ko=v1+ip-kk
ka=v2-ko
w3=w3+ka
w1=w1+ip
w8=w8+ka*cr
w9=w9+tr*eu/100
¦^^^^^^^n1¦^^^y1^¦^^^v1¦^^^^ip^¦^^^^^k1¦^^^^^k2¦^^^kk¦^^^u1^¦^^^v2¦^^^ko¦^^^ka^¦^^cr^^¦^^^ln¦^^
^^lr^^¦^^^rv¦^^^^vv^^¦^^^tl¦^^^^^tr^^¦>> file fi
+---------+------+-----+-------+-------+-------+-----+------+-----+-----+------+------+-----+--
------+-----+--------+-----+---------+>> file fi
endif
endfor
¦ Итого ¦ ¦ ¦^^^^w1^¦ ¦ ¦^^^w2¦ ¦ ¦ ¦^^^w3^¦
¦^^^w4¦^^^^ir^^¦^^^iv¦^^^^w5^^¦^^^w6¦^^^^^w7^^¦>> file fi
L---------+------+-----+-------+-------+-------+-----+------+-----+-----+------+------+-----+--
------+-----+--------+-----+---------->> file fi
Выручка за смену (наличные деньги) ^^^^^^ir^^ руб. >> file fi
Принято от пред. смены наличных денег ^^^^^^v5^^ руб. >> file fi
Сдано в кассу ^^^^^^vk^^ руб. >> file fi
>> file fi
Принял кассир __________________________________________ >> file fi
подпись, фамилия и.о. >> file fi
S=V4
call wnf
B='('+wn+')'
Передано по смене ^^^^^^^^S^^ руб.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^B >> file fi
ne=ir+v5-vk-v4
Недостача наличных денег по смене (с учетом сдачи в кассу и переходящего остатка) ^^^^^ne^^
руб. >> file fi
ru=w8-ne
rt=0
if ru<-0.01
er=w6*eu/100
естественная убыль (норма ^^eu^^ %) ^^^^er^ л на сумму ^^^^^^w9^^ руб >> file fi
ru=-ru-w9
rt=ru
К удержанию с материально ответственного лица (оператора) ^^^^^^ru^^ руб. >> file fi
endif
-----------------------------------------------------------------------------------------------
------------------------------------->> file fi
>> file fi
Отчет составил и смену сдал Отчет проверил и смену
принял >> file fi
>> file fi
>> file fi
>> file fi
l2=[n2 *ol];p2=[n2 *op]
__________________ ^^^^^^^^^^^^^^^^^^^^^^^^^^l2 ___________________
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^p2 >> file fi
подпись подпись >> file
fi
^ff >> file fi
fact juro ol,w7,ne,rt
call pko
return
***********************************************************************************************
****************
:pko
Q=[ged 'pko']+1
LS=[intsn Q]
z=[sed 'pko',Q]
if ~[ex *ol] ol=[sa OPER,[as OPER]];endif
oo=[strip [n2 *ol]] имя оператора
ld=[length oo]
l2=[cp oo,ld-1,2]
if l2='на' oo=[cp oo,1,ld-2]+'ной';goto fok;endif
if l2='ва' oo=[cp oo,1,ld-2]+'вой';endif
:fok
yz=' '
S=vk
ce=[ce S]
kp=[intsn ce]
if ce<9.99 kp='0'+kp;endif
B=[wn [tr S]]+'руб. '+kp+' коп.'
B1=[cp B,1,32]
B2=' '
B3=' '
if [length B]>32 B2=[strip [cp B,33,32]];endif
if [length B]>64 B3=[cp B,65,32];endif
U=[tr S]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^na¦^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^na >>
file fi
¦ >> file fi
¦ Квитанция к приходному >> file fi
¦ кассовому ордеру N ^^^LS >> file fi
ПРИХОДНЫЙ КАССОВЫЙ ОРДЕР N ^^LS ¦ >> file fi
¦ Пpинято от ^^^^^^^^^^^^^^^^^^^^^^^^^^^oo >>
file fi
^^^^^^^^^^^^^^^^^^^^dt ¦ >> file fi
¦ >> file fi
------------T----------T----------T----------¬¦ >> file fi
¦Коррpеспон-¦Шифp ана-¦ Сумма ¦Шифp целе-¦¦ Oснование >> file fi
¦ диpующий ¦литическо-¦ ¦вого наз- ¦¦ Выручка АЗС >> file fi
¦ счет ¦го учета ¦ ¦начения ¦¦ >> file fi
+-----------+----------+----------+----------+¦ >> file fi
¦ 46 ¦ ¦ ^^^^^S^^ ¦ ¦¦ >> file fi
L-----------+----------+----------+-----------¦ >> file fi
¦ >> file fi
Пpинято от ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^oo ¦ Сумма прописью >> file fi
¦ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^B >>
file fi
Основание Выручка АЗС ¦ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>
file fi
¦ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>
file fi
Сумма прописью ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^B¦ >> file fi
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^¦ >> file fi
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^¦ М.П. >> file fi
Приложение ________________________________ ¦ Главный (стаpший) >> file fi
Главный (стаpший) бухгалтеp _______________ ¦ бухгалтеp _____________________________ >> file
fi
¦ >> file fi
Получил кассиp ___________________________ ¦ Кассиp _____________________________ >> file
fi
¦ >> file fi
---------------------------------------------+---------------------------------------- >> file
fi
^ff >> file fi
return
:prevd вчера вход pm месяц pd день сегодня выход тот же
if pd>1 pd=pd-1;return;endif
if pm=1 pd=0;return;endif
mo=[intsn pm-1]+'/';pd=[ep *mo];pm=pm-1
return
:wnf
kp=[tr [ce S]+0.5];rb=[tr S];kc='00';ss=[wn rb] коп.руб.коп.симв.руб.прописью
if ~rb
ss='Ноль '
endif меньше рубля
if kp in 9.999..99.999 kc=[sn kp,2,0]
elseif kp in 1..9 kc='0'+[sn kp,1,0] копейки символьно
endif
ru='рублей ';cs=[tr [ce rb/100]+0.5] падежи рубля
if cs in 0.9999..1.0001 ru='рубль '
elseif cs in 1.999..4.0001 ru='рубля '
elseif [ce cs/10]/10 in 0.9999..1.0001 ru='рубль '
elseif [ce cs/10]/10 in 1.9999..4.0001 ru='рубля '
endif
ko='копеек'
if kp in 0.999..1.001 ko='копейка' падежи копейки
elseif kp in 1.999..4.001 ko='копейки'
elseif [ce kp/10]/10 in 0.999..1.001 ko='копейка'
elseif [ce kp/10]/10 in 1.999..4.001 ko='копейки'
endif
wn=ss+ru +kc +' '+ko сумма прописью
return


AAA




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