Код: Выделить всё
#include GetKau.vih
#include ObjSaveNastr.vih
#include FT_MSFO_Log.vih
#include FT_MSFOPlagIn.vih
#include ExtClass.vih
#define IntName O3
// Указываем что наш интрфейс реализует отчет МСФО
VipInterface FT_MSFOPlagIn_#(IntName) implements ObjFT_MSFOPlagIn;
Interface FT_MSFOPlagIn_#(IntName);
var IsNastrLoad:array[1] of boolean;
pNastr:ObjSaveNastr;
sCurWorkBook:string;
ExClassFun: iExtClass;
mOrg,mLinkedOrg:longint;
_za1,_za2,_za3:double;
_za1a,_za1b,_za2a,_za3a:double;
// ------------------------
vksf: word;
table struct tt (
kre : string , // кредитор
val : string , // валюта
spr : double , // ставка_процента
zal : double , // залог
ost : double , // остаток
pol : double , // получено
// vasya, tz sds008 --------------
kor : double , // корректировки
// -------------------------------
voz : double , // возвращено
in1 : double , // до_31/12/2007
in2 : double , // от_1/1/2008_до_31/12/2008
in3 : double , // от_1/1/2009_до_31/12/2009
in4 : double , // от_1/1/2010_до_31/12/2010
in5 : double , // от_1/1/2011_до_31/12/2011
ord : word , // для_порядка
tmp : word)
(
i1 = ord + kre + val + spr
);
create view
var CurNoRep,xs1,ys1,xs2,ys2:word;
DateRep1,DateRep2:date;
IsNeedRepEx:boolean;
vkod,vkliz:string;
mvkod,mvkliz:longint;
vks:word;
daza:boolean;
ViewOrg,ViewLinkedOrg:string;
as select tt.*
from tt,KatNotes,KatKlass,veksl,vekslop,basefin,PlPor,soprhoz,cursval,klval,grafkred,aval,KatOrg,KatOrgDescr;
form frm('FT_MSFO_#(IntName).OUT','FT_MSFO_#(IntName)') with novisual;
#include dLog.vpp // Модуль для работы с логом (Gera)
// Дата компиляции плагина (для отчета о подключенных о плагинах)
function PlagInDate: string;
{
PlagInDate:='#__DATETIME__';//Не трогать!!!
}
// Количество реализуемых отчетов
function RepCount: word;
{
RepCount:=1;
}
// Код i-го реализуемого отчета
function KodRep(i:word): word;//Код должен быть уникален среди всех отчетов!!!
{
case i of
1:KodRep:=8;
end;
}
// Имя i-го реализуемого отчета
function NameRep(i:word): string;
{
case i of
1:NameRep:='Заемные средства';
end;
}
// Имя листа Excel i-го реализуемого отчета
function ListRep(i:word): string;
{
case i of
1:ListRep:='O3';
end;
}
// Размер окна параметров
function X(i:word): integer;
{
case i of
1:X:=10;
end;
}
function Y(i:word): integer;
{
case i of
1:Y:=5;
end;
}
function SX(i:word): integer;
{
case i of
1:SX:=80;
end;
}
function SY(i:word): integer;
{
case i of
1:SY:=25;
end;
}
//Обязательно должно быть! Внедряется в менеджер.
screen scMainParam (,,scI1Esc);
table tt;
fields
xs1:noprotect;
ys1:noprotect;
xs2:noprotect;
ys2:noprotect;
vkod('Овердрафт',,scI13Esc): protect,pickbutton;
vkliz('Лизинг',,scI13Esc): protect,pickbutton;
vks('Валютные кредиты сформированы',,):[list 1'В валюте','В рублях','Согласно классификатору'],protect;
daza:noprotect;
ViewOrg('Фильтр по компаниям Группы',,scI13Esc): protect,pickbutton;
ViewLinkedOrg('Фильтр по Связанным сторонам',,scI13Esc): protect,pickbutton;
<<
`Верхняя левая ячейка таблицы 1:`
.@@@@@ .@@@@@
`Верхняя левая ячейка таблицы 2:`
.@@@@@ .@@@@@
`Вид кредита "овердрафт"`
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
`Вид кредита "лизинг"`
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
`Валютные кредиты сформированы`
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[.] Учитывать данные "залога"`
`Фильтр по компаниям Группы`
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
`Фильтр по Связанным сторонам`
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
end;
screen sc1;
<<
>>
end;
// **********************************************************************************************
function GetViewKontr(m:longint):string; //просмотр контрагента
var kol:longint;
cRec:comp;
{
kol:=getmarkercount(m); //количество элементов в маркере m
if (kol=0) GetViewKontr:='Не установлен'
else if (kol<>1) GetViewKontr:='Множественный выбор ('+string(kol)+')'
else {
getmarker(m,0,cRec);
if (getfirst katorg where((cRec==katorg.nrec))=tsok) GetViewKontr:=katorg.name;
};
}
function PickKontr(m:longint):string; //выбор контрагента
var i,MarkerDescr,MarkerOrg:longint;
cRec:comp;
{
MarkerDescr:=InitMarker('',8,100,10,false);
MarkerOrg:=InitMarker('',8,100,10,false);
for(i:=0;i<getmarkercount(m);i:=i+1) {
getmarker(m,i,cRec);
InsertMarker(MarkerOrg,cRec);
_loop KatOrgDescr where((cRec==KatOrgDescr.cRec))
InsertMarker(MarkerDescr,KatOrgDescr.NRec);
};
DoneMarker(MarkerOrg,'KatOrg');
DoneMarker(MarkerDescr,'KatOrgDescr');
runinterface(GetSomeKontrPrim,true);
MarkerOrg:=InitMarker('KatOrg',8,100,10,false);
clearmarker(m);
for(i:=0;i<getmarkercount(MarkerOrg);i:=i+1) {
getmarker(MarkerOrg,i,cRec);
InsertMarker(m,cRec);
};
DoneMarker(MarkerOrg,'KatOrg');
PickKontr:=GetViewKontr(m);
}
function PrintRep(MSFO_Log:FT_MSFO_Log):boolean;
var i,n:word;
SumCell:double;
{
PrintRep:=false;
StartNewVisual(vtRotateVisual,vfTimer,'Формирование отчета',0);
if (IsNeedRepEx) {//Нужна расшифровка
};
i:=0;
if (getfirst tt where ((0==tt.ord))<>tsok) { i:=i+1; }; // если нет овердрафта, то сдвигаем на строку ниже
if (xlSetActiveWorkBookByName(sCurWorkBook)) {
if (xlSetActiveSheetByName(ListRep(CurNoRep))) {
if (xlCreateMatrix(recordsintable(#tt)+i,14)) {
xlClearMatrix;
_loop tt {
if (not NextVisual) break;
if ((tt.ost=0) and (tt.pol=0) and (tt.voz=0) and (tt.in1=0) and (tt.in2=0) and (tt.in3=0) and (tt.in4=0) and (tt.in5=0)) { continue; };
inc(i);
if (i=ys2) { break; };
if (i=1) { tt.spr:=tt.spr/100; }; // 20070726
xlstWriteToMatrix(i, 1,tt.kre) ; // кредитор , string
xlstWriteToMatrix(i, 2,tt.val) ; // валюта , string
xldoWriteToMatrix(i, 3,tt.spr) ; // ставка_процента , double
xldoWriteToMatrix(i, 4,tt.zal/1000) ; // залог , double
xldoWriteToMatrix(i, 5,tt.ost/1000) ; // остаток , double
xldoWriteToMatrix(i, 6,tt.pol/1000) ; // получено , double
// vasya, tz sds008 -------------------------------------------------------
xldoWriteToMatrix(i, 7,tt.kor/1000) ; // корректировка , double
// ------------------------------------------------------------------------
xldoWriteToMatrix(i, 8,tt.voz/1000) ; // возвращено , double
xldoWriteToMatrix(i,10,tt.in1/1000) ; // до_31/12/2007 , double
xldoWriteToMatrix(i,11,tt.in2/1000) ; // от_1/1/2008_до_31/12/2008 , double
xldoWriteToMatrix(i,12,tt.in3/1000) ; // от_1/1/2009_до_31/12/2009 , double
xldoWriteToMatrix(i,13,tt.in4/1000) ; // от_1/1/2010_до_31/12/2010 , double
xldoWriteToMatrix(i,14,tt.in5/1000) ; // от_1/1/2011_до_31/12/2011 , double
}; // _loop tt
xlWriteMatrixToExcel(ys1+4,xs1);
xlFreeMatrix;
};
/* vasya, tz sds008 -----------------------------------------<<<<
xlSetCellNumberValue(_za1/1000,ys2+1,xs2+1,ys2+1,xs2+1);
xlSetCellNumberValue(_za2/1000,ys2+1,xs2+2,ys2+1,xs2+2);
xlSetCellNumberValue(_za3/1000,ys2+5,xs2+1,ys2+5,xs2+1);
// ------------------------------------------------------------*/
xlSetCellNumberValue(_za1/1000,ys2+1,xs2+1,ys2+1,xs2+1);
xlSetCellNumberValue(_za1a/1000,ys2+1,xs2+2,ys2+1,xs2+2);
xlSetCellNumberValue(_za1b/1000,ys2+1,xs2+3,ys2+1,xs2+3);
xlSetCellNumberValue(_za2/1000,ys2+3,xs2+1,ys2+3,xs2+1);
xlSetCellNumberValue(_za2a/1000,ys2+3,xs2+2,ys2+3,xs2+2);
xlSetCellNumberValue(_za3/1000,ys2+5,xs2+1,ys2+5,xs2+1);
xlSetCellNumberValue(_za3a/1000,ys2+5,xs2+2,ys2+5,xs2+2);
// vasya, tz sds008 ----------------------------------------->>>>
}
else MSFO_Log.add(1,'Нет листа "'+ListRep(CurNoRep)+'" в отчете!');
}
else MSFO_Log.add(1,'Нет книги "'+sCurWorkBook+'"!');
PrintRep:=NextVisual;
StopVisual('',0);
}
procedure set_vkod; //просмотр кредита овердрафт
{
var i: longint;
var c: comp;
i:=getmarkercount(mvkod);
if (i=0) { set vkod:='не установлен'; }
else {
if (i<>1) { set vkod:='множественный выбор ('+string(i)+')'; }
else {
getmarker(mvkod, 0, c);
if (getfirst KATKLASS where ((c==KATKLASS.NREC))=tsok) { set vkod:=KATKLASS.NAME; };
};
};
};
procedure set_vkliz;
{
var i: longint;
var c: comp;
i:=getmarkercount(mvkliz);
if (i=0) { set vkliz:='не установлен'; }
else {
if (i<>1) { set vkliz:='множественный выбор ('+string(i)+')'; }
else {
getmarker(mvkliz, 0, c);
if (getfirst KATKLASS where ((c==KATKLASS.NREC))=tsok) { set vkliz:=KATKLASS.NAME; };
};
};
};
procedure InitPlagInParam(i:word;iNastr:ObjSaveNastr);
var GrName,TblName,sNoRow,sNoCol,sFilt,str:string;
numf,wPos:word;
k,kol:longint;
{
if (i=0 or i>RepCount) exit;
if (IsNastrLoad[i]) exit;
if (mvkod=0) mvkod:=InitMarker('',8,1,1) else clearmarker(mvkod);
//if (mvkod<>0) clearmarker(mvkod) else mvkod:=InitMarker('',8,1,1) ;
if (mvkliz=0) mvkliz:=InitMarker('',8,1,1) else clearmarker(mvkliz);
if (mOrg<>0) ClearMarker(mOrg) else mOrg:=initmarker('',8,0,1);
if (mLinkedOrg<>0) ClearMarker(mLinkedOrg) else mLinkedOrg:=initmarker('',8,0,1);
if (NullVipRef(pNastr)) pNastr:=iNastr;//Для последующего использования
CurNoRep:=i;
//Обязательно хранить настройки отчетов в группах с таким именем
GrName:=iNastr.OpenGroup(NameRep(i)+' '+KodRep(i));
if (GrName<>'') {
//Здесь уже настройки конкретного отчета ************************
donemarker(mOrg,'');
mOrg:=iNastr.ReadMarker('mOrg');
ViewOrg:=GetViewKontr(mOrg);
donemarker(mLinkedOrg,'');
mLinkedOrg:=iNastr.ReadMarker('mLinkedOrg');
ViewLinkedOrg:=GetViewKontr(mLinkedOrg);
donemarker(mvkod,'');
mvkod:=iNastr.ReadMarker('mvkod'); set_vkod;
donemarker(mvkliz,'');
mvkliz:=iNastr.ReadMarker('mvkliz'); set_vkliz;
set vks:=word(iNastr.ReadStr('vks'));
set daza:=if(iNastr.ReadStr('daza')='TRUE', true, false);
set xs1:=word(iNastr.ReadStr('xs1'));
set ys1:=word(iNastr.ReadStr('ys1'));
set xs2:=word(iNastr.ReadStr('xs2'));
set ys2:=word(iNastr.ReadStr('ys2'));
//***************************************************************
iNastr.CloseGroup(GrName);
}
IsNastrLoad[i]:=true;
}
// Здесь надо сохранить настройки отчета
procedure DonePlagInParam(i:word;iNastr:ObjSaveNastr);
var k,kol,numf:word;
mTmp:longint;
{
if (i=0 or i>RepCount) exit;
if (not IsNastrLoad[i]) exit;
//Обязательно хранить настройки отчетов в группах с таким именем
if (iNastr.WriteBeginGroup(NameRep(i)+' '+KodRep(i))) {
//Здесь уже настройки конкретного отчета ************************
mTmp:=InitMarker('',8,0,1);CopyMarker(mTmp,mOrg);//Нельзя удалять маркер, только сохранить
iNastr.WriteMarker('mOrg',mTmp);
mTmp:=InitMarker('',8,0,1);CopyMarker(mTmp,mLinkedOrg);//Нельзя удалять маркер, только сохранить
iNastr.WriteMarker('mLinkedOrg',mTmp);
iNastr.WriteMarker('mvkod',mvkod);[b]//вот как раз эти маркеры глюча[/b]т
iNastr.WriteMarker('mvkliz',mvkliz);[b]//вот как раз эти маркеры глючат[/b]
iNastr.SaveStr(string(daza),'daza');
iNastr.SaveStr(string(vks),'vks');
iNastr.SaveStr(string(xs1),'xs1');
iNastr.SaveStr(string(ys1),'ys1');
iNastr.SaveStr(string(xs2),'xs2');
iNastr.SaveStr(string(ys2),'ys2');
//***************************************************************
iNastr.WriteEndGroup(NameRep(i)+' '+KodRep(i));
IsNastrLoad[i]:=false;
};
}