Код: Выделить всё
/* */
Function XLCREATEMATRIX(longint, longint) : boolean; external;
Function XLCLEARMATRIX : boolean; external;
Function XLFREEMATRIX : boolean; external;
Function XLSTWRITETOMATRIX(longint, longint, string) : boolean; external;
Function XLDOWRITETOMATRIX(longint, longint, double) : boolean; external;
Function XLREADFROMMATRIX(longint, longint, var AnyType) : boolean; external;
Function XLWRITEMATRIXTOEXCEL(longint, longint) : boolean; external;
Function XLREADMATRIXFROMEXCEL(longint, longint, longint, longint) : boolean; external;
Const
#INCLUDE excel.inc
ColorSysBlack = 46;
ColorSysBlue = 58;
xlColorBlack = 0;
xlColorWhite = 16777215;
End;
Interface _gt_premexel_kor 'Расчет премии по менеджерам' escclose;
//show at(,,35,);
show at(,,33,);
create view
var
t1,t2:time
dat1:date
dat2:date
date1:date
date2:date
days:longint
delta:longint
//proc,tekplat,sum:double;
proc,tekplat,tekplatnds,sum:double;
formula:string;
StrCount, ColCount, HeaderStrCount : LongInt;
XlRes : Boolean;
aFileName : String;
i, j, l, r, u, b, k : longint;
as
Select *
From
usertune
, x$users
, katorg katorg1
, katcity katcity1
, basedoc basedoc1
, tdolg
, basefin
, kathozd
, stepdoc
, spstep
, katmc
Where
((
usertune.ownname/==x$users.xu$loginname(noindex)
and word(1)==basefin.direct
and dat1<<=basefin.ddoc
and dat2>>=basefin.ddoc
and word(1)==kathozd.sysnum
//and basefin.tipdoc==kathozd.tidk
and basefin.tidkgal==kathozd.tidk
and basefin.cbasedoc==basedoc.nrec
and word(201)==basedoc.viddoc (noindex)
and usertune.descr==basedoc.descr (noindex)
and basedoc.corg==katorg.nrec
and katorg.ccity==katcity.nrec
and basedoc.nrec == stepdoc.cbasedoc
and stepdoc.nrec == spstep.cstepdoc
and spstep.cmcusl == katmc.nrec
and tdolg.cbasedoc==basedoc1.nrec
and basedoc1.corg==katorg1.nrec
and katorg1.ccity==katcity1.nrec
));
Form prem ('out\dolg.out');
//**********************************************************************
procedure PrintHeader(var i:longint);
{
xlSTWriteToMatrix (i,1,'Вид док.');
xlSTWriteToMatrix (i,2,'Дата');
xlSTWriteToMatrix (i,3,'№');
xlSTWriteToMatrix (i,4,'Сумма');
xlSTWriteToMatrix (i,5,'Контрагент');
xlSTWriteToMatrix (i,6,'Город');
xlSTWriteToMatrix (i,7,'Дата ДО');
xlSTWriteToMatrix (i,8,'№ ДО');
xlSTWriteToMatrix (i,9,'Получ.');
xlSTWriteToMatrix (i,10,'Сумм.ДО');
xlSTWriteToMatrix (i,11,'Дни');
xlSTWriteToMatrix (i,12,'%');
xlSTWriteToMatrix (i,13,'Премия');
i:=i+1;
}
procedure PrintSpecHeader (var i : longint);
{
xlSTWriteToMatrix(i, 1,'Наименование МЦ');
xlSTWriteToMatrix(i, 2,'Кол-во');
xlSTWriteToMatrix(i, 3,'Цена');
xlSTWriteToMatrix(i, 4,'Сумма');
xlSTWriteToMatrix(i, 5,'Производитель');
xlSTWriteToMatrix(i, 6,'НДС');
xlSTWriteToMatrix(i,10,'Всего');
xlSTWriteToMatrix(i,12,'%%');
xlSTWriteToMatrix(i,13,'Премия');
i:=i+1;
}
procedure PrintTekPlat (var i:longint);
{
xlSTWriteToMatrix(i,1,kathozd.name); //Вид
xlSTWriteToMatrix(i,2,DateToStr(basefin.ddoc,'DD.MM.YY')); //Дата оплаты
xlSTWriteToMatrix(i,3,basefin.nodoc); //№ плат.док.
xlDOWriteToMatrix(i,4,basefin.summa); //Сумма платежа
xlSTWriteToMatrix(i,5,katorg.name); //Контрагент
xlSTWriteToMatrix(i,6,katcity.name); //Город
xlSTWriteToMatrix(i,7,DateToStr(basedoc.ddoc,'DD.MM.YY')); //Дата ДО
xlSTWriteToMatrix(i,8,basedoc.nodoc); //№ ДО
xlSTWriteToMatrix(i,9,DateToStr(add_day(basedoc.ddoc,delta),'DD.MM.YY')); //Дата получ
xlDOWriteToMatrix(i,10,basedoc.total); //Сумма по ДО
xlSTWriteToMatrix(i,11,String(days)); //Дни
i:=i+1;
}
Procedure PrintTekSpec(var i:longint);
{
var X1,X2,X3,K1,K2,K3,B1,B2,B3:string;
var xx1,xx2,xx3,b:double;
xlSTWriteToMatrix(i, 1,katmc.name);
xlDOWriteToMatrix(i, 2,spstep.kol);
xlDOWriteToMatrix(i, 3,if(basedoc.vHodNal=1,spstep.price-spstep.nds/spstep.kol,spstep.price));
xlDOWriteToMatrix(i, 4,if(basedoc.vHodNal=1,spstep.summa-spstep.nds,spstep.summa));
xlSTWriteToMatrix(i, 5,katmc.remmc);
xlDOWriteToMatrix(i, 6,spstep.nds);
xlDOWriteToMatrix(i, 10,if(basedoc.vHodNal=1,spstep.summa,spstep.nds+spstep.summa));
Proc:=0;
if katorg.name='Дальсибфармация ЗАО'
or katorg.name='Амурфармация ОАО'
or katorg.name='Фарм-СКД ООО'
or katorg.name='Экс-Мар ЗАО'
or katorg.name='Эко-Хим ООО'
then
{
if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0
then B1:='2,076'
else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0
then {B1:='2,491';
if InStr('ТУБ',upcase(katmc.name)) >0
then B1:='4,152';
}
else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then
B1:='0,9936';
else B1:='2,106';
if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
then B1:='4,152';
if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0 then
{ if(InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0)
then
{
B1:='4,152';
}
else{ B1:='2,076';
}
formula:=B1;
}
else
formula:=B1;
}
// перенесено из расчёта премии Москва по заявке Свинцовой 27.11.07
else if pos('СИА ИНТЕР', upcase(katorg.name)) > 0 then
{
X1:='100';
X2:='140';
if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0 then
{
B1:='1,6608';
B2:='5,8128';
K2:='-0,04152';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
}
else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0 then
{
B1:='2,196';
B2:='7,686';
K2:='-0,0549';
if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
then
{
B1:='3,66';
B2:='12,81';
K2:='-0,0915';
}
if InStr('ТУБ',upcase(katmc.name)) >0
then
{B1:='3,66';
B2:='12,81';
K2:='-0,0915';
}
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
}
else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 then
{
B1:='1,1592';
K1:='-0,01932';
Formula:='=ЕСЛИ(K'+String(j)+'<60;'+B1+K1+'*K'+String(j)+';0)';
}
else if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0 then
{
if InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0 then
{ B1:='3,66';
B2:='12,81';
K2:='-0,0915';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
}
else {B1:='1,6608';
B2:='5,8128';
K2:='-0,04152';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
}
}
else {
B1:='2';
B2:='7';
K2:='-0,05';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
}
}
else if katorg.name='ЗАО НПК "Катрен"' or katorg.name='Россиб Фармация , ЗАО' or katorg.name='РОСТА, ЗАО (консигнация)'
then
{
X1:='100';
X2:='140';
if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0
then
{
B1:='1,6608';
B2:='5,8128';
K2:='-0,04152';
}
else
if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0
then
{
B1:='2,196';
B2:='7,686';
K2:='-0,0549';
if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
then
{
B1:='3,66';
B2:='12,81';
K2:='-0,0915';
}
if InStr('ТУБ',upcase(katmc.name)) >0
then
{B1:='3,66';
B2:='12,81';
K2:='-0,0915';
}
}
else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then
{
B1:='0,6624';
B2:='2,3184';
K2:='-0,01656';
}
else if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0 then
{
if InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0 then
{ B1:='3,66';
B2:='12,81';
K2:='-0,0915';
}
else {B1:='1,6608';
B2:='5,8128';
K2:='-0,04152';
}
}
else
{
B1:='2';
B2:='7';
K2:='-0,05';
}
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';0))';
}
else if katorg.name='РОСТА, ЗАО' then {
xx1:=130;
xx2:=170;
// xx1:=100;
// xx2:=140;
X1:=replace(string(xx1), '.', ',');
X2:=replace(string(xx2), '.', ',');
// X1:=doubletostr(xx1,'66666666,8888');
// X2:=doubletostr(xx2,'66666666,8888');
// более 170 штраф 1.5%
// формула для расчёта исходя из общей y-y0 = k (x-x0) приведённая к y = kx + b
//
// K2 = - B1 / (X2 - X1)
// B2 = B1 * X2 / (X2 - X1)
if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0 then {
b:=1.6608;
// B1:='1,6608';
// B2:='5,8128';
// K2:='-0,04152';
}
else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0 then
{
b:=2.196;
// B2:='12,8128';
// K2:='-0,09152';
if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
then
{
b:=3.6608;
// B2:='12,8128';
// K2:='-0,09152';
}
if InStr('ТУБ',upcase(katmc.name)) >0
then
{b:=3.66;
//B2:='12,8128';
//K2:='-0,09152';
}
}
else if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then {
b:=0.6624;
// B1:='0,6624';
// B2:='2,3184';
// K2:='-0,01656';
}
else if InStr('ЛАЙФФЕРОН',upcase(katmc.name))>0 then
{
if InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name))>0 then
{ b:=3.6608;
// B1:='3,66';
// B2:='12,8128';
// K2:='-0,09152';
}
else {b:=1.6608;
// B1:='1,6608';
// B2:='5,8128';
// K2:='-0,04152';
}
}
else {
b:=2;
// B1:='2';
// B2:='7';
// K2:='-0,05';
}
// B1:=replace(string(B1), '.', ',');
// B2:=replace(string(b*xx2/(xx2-xx1)), '.', ',');
// K2:=replace(string(-b/(xx2-xx1)), '.', ',');
B1:=doubletostr(b,'66666666,8888');
B2:=doubletostr(b*xx2/(xx2-xx1),'66666666,8888');
K2:=doubletostr(b/(xx1-xx2),'66666666,8888');
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+'-'+K2+'*K'+String(j)+';0 ))';
// message('X1='+X1+' X2='+X2+' B1='+B1+' B2='+B2+' K2='+ K2 + Formula);
}
else {
X1:='20';
X2:='40';
X3:='60';
if (InStr('РИДОСТИН',upcase(katmc.name)) or InStr('РЕАФЕРОН-ЕС',upcase(katmc.name)) )>0 and InStr('ЛИПИНТ',upcase(katmc.name))=0
then
{
B1:='2,5';
B2:='2,514';
B3:='5,79';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,0965';
}
else if InStr('ИНФАГЕЛЬ',upcase(katmc.name)) >0 or InStr('ЛИПИНТ',upcase(katmc.name)) >0
then
{
B1:='3';
B2:='3,014';
B3:='7,29';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,1215';
if InStr('ТУБ',upcase(katmc.name)) >0
then
{
B1:='5';
B2:='5,014';
B3:='13,29';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,2215';
}
if (Instr('ЛИПИНТ 0,25',upcase(katmc.name))>0 or Instr('ЛИПИНТ 1,0',upcase(katmc.name))>0)
then
{
B1:='5';
B2:='5,014';
B3:='13,29';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,2215';
}
}
else
if InStr('СЛОВЕНИЯ',upcase(katmc.remmc))>0 or InStr('ГЕДЕОН',upcase(katmc.remmc))>0 or InStr('РИХТЕР',upcase(katmc.remmc))>0 or InStr('ЯНССЕН',upcase(katmc.remmc))>0 or InStr('СИЛАГ',upcase(katmc.remmc))>0 then
{
B1:='1,196';
B2:='1,21';
B3:='1,878';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,0313';
}
else
{
B1:='2,536';
B2:='2,55';
B3:='5,898';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,0983';
}
// Входные данные
// X1 - кол-во Дни первого "скачка" - по умолчанию 20
// X2 - кол-во Дни второго "скачка" - по умолчанию 40
// K1, B1 - коэффициент и смещение для периода Дни от 0 до X1
// K2, B2 - коэффициент и смещение для периода Дни от X1 до X2
// K3, B3 - коэффициент и смещение для периода Дни от X2 до X3
if(InStr('ЛАЙФФЕРОН',upcase(katmc.name)) >0)
then{
B1:='2,5';
B2:='2,514';
B3:='5,79';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,0965';
if(InStr('ЛАЙФФЕРОН РАСТВОР',upcase(katmc.name)) >0)
then{
B1:='5';
B2:='5,014';
B3:='13,29';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,2215';
}
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';0)))';
}
else{
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';0)))';
}
}
if (InStr('СТОПСОРИЯ',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ',upcase(katmc.name)) >0 or InStr('ЛИПРИНА',upcase(katmc.name)) >0 or InStr('ТРИС КАЛОРИ',upcase(katmc.name)) >0 or InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 )
then {
X1:='20';
X2:='40';
X3:='52';
B1:='3';
B2:='3,014';
B3:='7,29';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,1215';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0))))';
if ( InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ 850',upcase(katmc.name)) >0 )
then {
X1:='20';
X2:='40';
X3:='56';
B1:='5';
B2:='5,014';
B3:='13,29';
K1:='-0,0139';
K2:='-0,0146';
K3:='-0,2215';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+K1+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<='+X2+';'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<'+X3+';'+B3+K3+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0))))';
}
if katorg.name='РОСТА, ЗАО' then {
xx1:=130;
xx2:=170;
b:=2.196;
B1:=doubletostr(b,'66666666,8888');
B2:=doubletostr(b*xx2/(xx2-xx1),'66666666,8888');
K2:=doubletostr(b/(xx1-xx2),'66666666,8888');
Formula:='=ЕСЛИ(K'+String(j)+'<131;'+B1+';ЕСЛИ(K'+String(j)+'<=151;'+B2+'-'+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0) ))';
if ( InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ 850',upcase(katmc.name)) >0 )
then {
xx1:=130;
xx2:=170;
b:=3.66;
B1:=doubletostr(b,'66666666,8888');
B2:=doubletostr(b*xx2/(xx2-xx1),'66666666,8888');
K2:=doubletostr(b/(xx1-xx2),'66666666,8888');
Formula:='=ЕСЛИ(K'+String(j)+'<131;'+B1+';ЕСЛИ(K'+String(j)+'<=159;'+B2+'-'+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0) ))';
}
}
else
if( pos('СИА ИНТЕР', upcase(katorg.name)) > 0 or katorg.name='ЗАО НПК "Катрен"' or katorg.name='Россиб Фармация , ЗАО' or katorg.name='РОСТА, ЗАО (консигнация)' )then
{
X1:='100';
X2:='140';
B1:='2,196';
B2:='7,686';
K2:='-0,0549';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<=121;'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0)))';
if ( InStr('СОФТБЕНЕР',upcase(katmc.name)) >0 or InStr('РИНФОЛТИЛ 850',upcase(katmc.name)) >0 )
then {
X1:='100';
X2:='140';
B1:='3,66';
B2:='12,81';
K2:='-0,0915';
Formula:='=ЕСЛИ(K'+String(j)+'<'+X1+';'+B1+';ЕСЛИ(K'+String(j)+'<=129;'+B2+K2+'*K'+String(j)+';ЕСЛИ(K'+String(j)+'<360;1;0)))';
}
}
xlDOWriteToMatrix(i, 14, 0);
}
if (InStr('ФЛ',upcase(basedoc.nodoc)) >0 ) xlDOWriteToMatrix(i, 14, 1);
xlSTWriteToMatrix(i, 12,Formula);
TekPlat:=basefin.summa*if(basedoc.vHodNal=1,spstep.summa-spstep.nds,spstep.summa)/basedoc.total;
xlSTWriteToMatrix(i, 13,'=RC[-1]*'+DoubleToStr(TekPlat,'66666666666,8888')+'/100');
xlSTWriteToMatrix(i, 15, '=ЕСЛИ(RC[-1]=1;RC[-2];0)');
//xlSTWriteToMatrix(i, 16, '=ЕСЛИ(RC[-2]=1;RC[-12]+RC[-10];0)');
TekPlatNDS:=basefin.summa*if(basedoc.vHodNal=1,spstep.summa,spstep.summa+spstep.nds)/basedoc.total;
xlSTWriteToMatrix(i, 16, '=ЕСЛИ(RC[-2]=1;'+DoubleToStr(TekPlatNDS,'66666666666,8888')+';0)');
i:=i+1;
}
screen params show at(,,,4);
fields date1:,noprotect;
date2:,noprotect;
buttons
cmOK, default;
cmCancel;
<<
c .@@@@@@@@@@ по .@@@@@@@@@@
<.Формировать.> <. Закрыть .>
>>
end;
panel P1
show at(1,5,32,);
//show at(,5,,);
browse Bro1
table UserTune;
fields
UserTune.Descr 'Дескриптор':[5],protect;
UserTune.FIO 'Фамилия Имя Отчество':[30],protect;
end;
end;
handleevent
cmInit:
{
date1:=DATE(1,1,YEAR(Cur_Date));
date2:=Cur_Date;
}
cmOK:
{
var s:longint;
var myorg:string;
var uslov:string;
myorg := sGetTune('MyOrg');
if (instr('ФАРМ', upcase(myorg)) > 0)
then {
myorg := 'farm';
uslov := '5% препараты';
}
else {
myorg := 'med';
uslov := 'ФЛ';
}
dat1:=date1;
dat2:=date2;
runinterface(_gt_dolgexel,dat2,trim(usertune.descr));
XlRes := True;
aFileName := GetStringParameter('Files','OutputFilesDirectory',0) +'prem-'+myorg+'-'+trim(UserTune.Descr)+string(month(date1))+'.xls';
DeleteFile(aFileName);
XlRes := xlCreateExcel((aFileName), True);
if (XlRes) XlRes := xlIsExcelValid;
If (not XlRes)
{
StopVisual('',0);
Exit;
}
xlAddSheet;
xlSetSheetName(1, 'Титул');
xlSetSheetName(2, 'Начислено');
xlSetSheetName(3, 'Подробно');
xlSetSheetName(4, 'Долги');
//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 2м листом ///////////////
///////////////////////////////////// НАЧИСЛЕНО
//////////////////////////////////////////////////////////////////////////
//xlSetActiveSheet(2);
xlSetActiveSheetByName('Начислено');
//if not xlImportModule('c:\GAL582\Modules\page.bas') then message ('Ошибка импорта макроса');
//xlRunMacro('SetPage');
xlCreateMatrix ( 1000, 20 );
i:=2;
PrintHeader(i);
t1:=cur_time;
StartNewVisual( vtNumericVisual, vfTimer+vfBreak+vfConfirm,''#3'Подготовка отчета к печати', 1);
_loop basefin
{
_loop basedoc
{
case longint(substr(katcity.tel,length(katcity.tel),1)) of
1:delta:=6;
2:delta:=8;
3:delta:=4;
4:delta:=9;
5:delta:=3;
6:delta:=1;
end;
days:=to_days(basefin.ddoc)-to_days(basedoc.ddoc)-delta;
if days<0 then days:=0;
PrintTekPlat (i);
if (not NextVisual)
{
StopVisual('',0);
Message('Формирование отчета прервано пользователем.',OKButton)
xlKillExcel;
Exit;
}
}
}
xlWriteMatrixToExcel ( 2, 1 );
xlFreeMatrix;
xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
XLSETBACKCOLOR (16370100, 3 , 1 , 3 , 13);
xlSetFontSize ( 8 , HeaderStrCount , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"
// xlMergeCells(1,1,1,13);
xlAlignCells(xlCenter,2,1,3,13);
xlSetFontSize ( 12 , 1 , 1 , 1 , 13);
xlSetFontStyle ( xlBold, 1 , 1 , 3 , 13);
xlSetCellStringValue('Расчет доплаты к окладу', 1, 1, 1, 1);
xlFreeze(4,1);
xlSetNumberFormat ( '# ##0,00', 4, 4, i, 4 );
xlSetNumberFormat ( '# ##0,00', 4, 10, i, 10 );
xlSetNumberFormat ( '# ##0,00', 4, 13, i, 13 );
xlAutoFit(4,1,MaxExcelRow , MaxExcelCol);
xlSetColumnWidth(0,1,10,MaxExcelRow,10); // скрываем сумму по ДО
xlSetColumnWidth(0,1,12,MaxExcelRow,12); // скрываем %
xlSetColumnWidth(15,1,1,MaxExcelRow,1); // ширина колонки Вид
xlSetColumnWidth(20,1,5,MaxExcelRow,5); // ширина колонки контрагент
//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 3м листом ///////////////
//////////////////////////////////////////////////////////////////////////
xlCreateMatrix ( 10000, 20 );
// xlSetActiveSheet(3);
xlSetActiveSheetByName('Подробно');
i:=2;
PrintHeader(i);
k:=3; // счетчик строк на странице Начислено
_loop basefin
_loop basedoc
{
k:=k+1;
case longint(substr(katcity.tel,length(katcity.tel),1)) of
1:delta:=6;
2:delta:=8;
3:delta:=4;
4:delta:=9;
5:delta:=3;
6:delta:=1;
end;
days:=to_days(basefin.ddoc)-to_days(basedoc.ddoc)-delta;
if days<0 then days:=0;
// if (InStr('ФЛ',upcase(basedoc.nodoc)) >0 ) then {
// xlDOWriteToMatrix(i, 14, 1);
// xlSTWriteToMatrix(i, 16, '=ЕСЛИ(RC[-2]=1;RC[-12];0)');
// }
PrintTekPlat (i);
xlSTWriteToMatrix(i-1,11,'=Начислено!K'+string(k)); // дни подставляются из листа 2
j:=i;
xlSetFontStyle (xlBold, i , 1 , i , 13);
PrintSpecHeader (i);
xlAlignCells(xlCenter,i,1,i,13);
_loop stepdoc
_loop spstep
{
PrintTekSpec(i);
if (not NextVisual)
{
StopVisual('',0);
Message('Формирование отчета прервано пользователем.',OKButton)
xlKillExcel;
Exit;
}
}
xlSTWriteToMatrix(j-1, 13,'=СУММ(M'+string(i)+':M'+string(j+2)+')');
// xlSetActiveSheet(2);
xlSetActiveSheetByName('Начислено');
xlSetCellFormula ('=Подробно!M'+string(j), k, 13, k, 13); //%%
// xlSetActiveSheet(3);
xlSetActiveSheetByName('Подробно');
}
xlWriteMatrixToExcel ( 2, 1 );
xlFreeMatrix;
i:=i+1;
xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 13 );
XLSETBACKCOLOR (16370100, 3 , 1 , 3 , 13);
xlSetFontSize ( 8 , HeaderStrCount , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"
// xlMergeCells(1,1,1,13);
xlAlignCells(xlCenter,2,1,3,13);
xlSetFontSize ( 13 , 1 , 1 , 1 , 13);
xlSetFontStyle ( xlBold, 1 , 1 , 3 , 13);
xlSetCellStringValue('Расчет доплаты к окладу', 1, 1, 1, 1);
xlFreeze(4,1);
xlSetNumberFormat ( '# ##0,00', 4, 4, i, 4 );
xlSetNumberFormat ( '# ##0,00', 4, 6, i, 6 );
xlSetNumberFormat ( '# ##0,00', 4, 10, i, 10 );
xlSetNumberFormat ( '# ##0,00', 4, 13, i, 16 );
xlAutoFit(4,1,MaxExcelRow , MaxExcelCol);
//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 4м листом ///////////////
//////////////////////////////////////////////////////////////////////////
xlCreateMatrix ( recordsintable(#tDolg)+10, 10 );
xlSTWriteToMatrix(1,1, 'Задолженность по оплате счетов');
xlSTWriteToMatrix(3,1,'Дата сч.');
xlSTWriteToMatrix(3,2,'№ сч.');
xlSTWriteToMatrix(3,3,'Организация');
xlSTWriteToMatrix(3,4,'Город');
xlSTWriteToMatrix(3,5,'Сумма');
xlSTWriteToMatrix(3,6,'Оплачено');
xlSTWriteToMatrix(3,7,'Возврат');
xlSTWriteToMatrix(3,8,'Остаток');
xlSTWriteToMatrix(3,9,'Дни');
xlSTWriteToMatrix(3,10,'Штраф');
i:=4 ;
_loop tDolg
{
sum:=tdolg.total-tdolg.plat-tdolg.rekl;
if sum<0 then sum:=0;
if sum>1 then
{
days:=to_days(dat2)-to_days(basedoc1.ddoc);
if days<0 then days:=0;
if days>60 then
{
xlSTWriteToMatrix(i,1,DateToStr(basedoc1.ddoc,'DD.MM.YY'));
xlSTWriteToMatrix(i,2,basedoc1.nodoc);
xlSTWriteToMatrix(i,3,katorg1.name);
xlSTWriteToMatrix(i,4,katcity1.name);
xlDOWriteToMatrix(i,5,tdolg.total);
xlDOWriteToMatrix(i,6,tdolg.plat);
xlDOWriteToMatrix(i,7,tdolg.rekl);
xlDOWriteToMatrix(i,8,sum);
xlDOWriteToMatrix(i,9,days);
xlSTWriteToMatrix(i,10,'=ЕСЛИ(RC[-1]>60;ЕСЛИ(RC[-1]<90;RC[-2]*0,005;RC[-2]*0,015);0)');
i:=i+1;
}
}
}
// xlSetActiveSheet(4);
xlSetActiveSheetByName('Долги');
xlWriteMatrixToExcel ( 1, 1 );
xlFreeMatrix;
i:=i-1;
xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, 3, 1, i, 10 );
XLSETBACKCOLOR (16370100, 3 , 1 , 3 , 10);
xlSetFontSize ( 8 , HeaderStrCount , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"
// xlMergeCells(1,1,1,10);
xlAlignCells(xlCenter,2,1,3,10);
xlSetFontSize ( 13 , 1 , 1 , 1 , 10);
xlSetFontStyle ( xlBold, 1 , 1 , 3 , 10);
xlFreeze(4,1);
xlSetNumberFormat ( '# ##0,00', 4, 5, i, 8 );
xlSetNumberFormat ( '# ##0,00', 4, 10, i, 10 );
xlAutoFit(2,1,MaxExcelRow , MaxExcelCol);
//////////////////////////////////////////////////////////////////////////
///////////////////////////////////// работаем с 1м листом ///////////////
//////////////////////////////////////////////////////////////////////////
// xlSetActiveSheet(1);
xlSetActiveSheetByName('Титул');
xlCreateMatrix ( 100, 5 );
xlSTWriteToMatrix(1,3,'Утверждаю ');
xlSTWriteToMatrix(2,3, if (myorg = 'med', 'Гутова Е.А.', 'Войтенко А.В.') );
xlSTWriteToMatrix(4,1,'Расчет доплаты к окладу менеджера - '+usertune.fio);
xlSTWriteToMatrix(5,1,'за период с '+DateToStr(date1,'DD.MM.YYг.')+' по '+DateToStr(date2,'DD.MM.YYг.'));
xlSTWriteToMatrix(7,1,'Сумма поступившей оплаты:');
xlSTWriteToMatrix(7,2,'=СУММ(Начислено!D:D)');
// xlSTWriteToMatrix(8,1,'В том числе по '+uslov+':');
//xlSTWriteToMatrix(8,2,'=СУММ(Подробно!P:P)');
// xlSTWriteToMatrix(9,1,'Остаток:');
//xlSTWriteToMatrix(9,2,'=R[-2]C-R[-1]C');
xlSTWriteToMatrix(11,1,'Начислено всего:');
xlSTWriteToMatrix(11,2,'=СУММ(Начислено!M:M)');
// xlSTWriteToMatrix(12,1,'В том числе '+uslov+':');
// xlSTWriteToMatrix(12,2,'=СУММ(Подробно!O:O)');
// xlSTWriteToMatrix(13,1,'Остаток:');
// xlSTWriteToMatrix(13,2,'=R[-2]C-R[-1]C');
xlSTWriteToMatrix(15,1,'Начислен штраф согласно приказа:');
xlDOWriteToMatrix(15,2,0);
xlSTWriteToMatrix(16,1,'Оклад:');
xlDOWriteToMatrix(16,2,0);
xlSTWriteToMatrix(17,1,'Начислен штраф по долгам:');
xlSTWriteToMatrix(17,2,'=СУММ(Долги!J:J)/1,1');
xlSTWriteToMatrix(18,1,'Итого к начислению за указанный период: ');
xlSTWriteToMatrix(18,2,'=R[-7]C-R[-3]C-R[-2]C-R[-1]C');
xlSTWriteToMatrix(19,1,'Итого к начислению (без '+uslov+') 60%: ');
xlSTWriteToMatrix(19,2,'=(R[-8]C-R[-4]C-R[-3]C-R[-2]C)*0,6');
xlWriteMatrixToExcel ( 1, 1 );
xlFreeMatrix;
// xlMergeCells(1,1,1,6);
// xlMergeCells(2,1,2,2);
xlAlignCells(xlCenter,5,1,5,2);
xlSetFontStyle ( xlBold, 1 , 1 , MaxExcelRow , MaxExcelCol);
xlSetFontSize ( 10 , 1 , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "10"
xlSetFontSize ( 13 , 4 , 1 , 4 , 2);
xlSetFontSize ( 12 , 5 , 1 , 5, 2);
xlSetFontSize ( 12 , 12 , 2 , 12 , 2);
xlSetNumberFormat ( '# ##0,00', 2, 2, MaxExcelRow, 2 );
xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, 2, 2, 2, 2 );
xlAutoFit(2,1,MaxExcelRow , MaxExcelCol);
xlKillExcel;
t2:=cur_time;
StopVisual('',0);
// message(timetostr(sub_time(t2,t1),'HH:MM:SS:SSSS'));
}
cmCancel:
{
closeinterface(cmDone);
mtChangeRefCount( #tDolg, -1 );
}
end;
end.