FUNCTION New_Report(oLbx)
LOCAL oDlg, oHdr, oData, oField, nI
LOCAL nFld, nDat, nF, cAlias, oSiz
LOCAL oCel, lCel, nOpt, cTit, oAlg
LOCAL aAlg:={"Izq.","Cen.","Der."}
aField:={}
aData:={}
aHead:={}
aTypD:={}
aSizD:={}
aAlig:={}
aType:={}
aSizs:={}
aPict:={}
nDat:= 1
nFld:= 1
nOpt:= 1
lCel:=.F.
cTit:="Reporte de "+cTitl+Space(25)
cAlias:=oLbx:cAlias()
DbSelectArea(cAlias)
nF:=(cAlias)->(FCount())
ASize(aField,nF)
ASize(aType,nF)
ASize(aSizs,nF)
ASize(aPict,nF)
AFields(aField,aType,aSizs)
FOR nI=1 TO nF
IF nI<=3 // tres como mínimo
AAdd(aData,aField[nI])
AAdd(aHead,aField[nI])
AAdd(aTypD,aType[nI])
AAdd(aSizD,aSizs[nI])
AAdd(aAlig,IF(aType[nI]="N","Der.","Izq."))
ELSE
nI:=nF
ENDIF
NEXT nI
AFill(aPict,"")
DEFINE DIALOG oDlg RESOURCE "SDS_VSR" FONT oWnd:oFont ;
TITLE "Configuración del Reporte"
REDEFINE BUTTON ID 101 OF oDlg ; // Agregar
ACTION ;
(oData:Add(aField[nFld]) ,;
AAdd(aHead,aField[nFld]) ,;
AAdd(aTypD,aType[nFld]) ,;
AAdd(aSizD,aSizs[nFld]) ,;
AAdd(aAlig,IF(aType[nFld]="N","Der.","Izq.")) ,;
nDat:=Len(aHead) ,;
oSiz:Refresh() ,;
oAlg:Refresh() ,;
oHdr:Refresh() )
REDEFINE BUTTON ID 102 OF oDlg ; // Borrar
ACTION ;
IF(Len(aHead)==1, MsgBeep() ,;
(oData:Del(nDat), ,;
ADel(aHead,nDat) ,;
ASize(aHead,Len(aHead)-1) ,;
ADel(aTypD,nDat) ,;
ASize(aTypD,Len(aTypD)-1) ,;
ADel(aSizD,nDat) ,;
ASize(aSizD,Len(aSizD)-1) ,;
ADel(aAlig,nDat) ,;
ASize(aAlig,Len(aAlig)-1) ,;
nDat:=Min(Len(aHead),nDat) ,;
oSiz:Refresh() ,;
oAlg:Refresh() ,;
oHdr:Refresh() ))
REDEFINE BUTTON ID 103 OF oDlg ; // Insertar
ACTION ;
(oData:Insert(aField[nFld],nDat),;
AAdd(aHead,NIL) ,;
aIns(aHead,nDat) ,;
aHead[nDat]:=aField[nFld] ,;
AAdd(aTypD,NIL) ,;
aIns(aTypD,nDat) ,;
aTypD[nDat]:=aType[nFld] ,;
AAdd(aSizD,NIL) ,;
aIns(aSizD,nDat) ,;
aSizD[nDat]:=aSizs[nFld] ,;
AAdd(aAlig,NIL) ,;
aIns(aAlig,nDat) ,;
aAlig[nDat]:=IF(aType[nFld]="N","Der.","Izq.") ,;
oSiz:Refresh() ,;
oAlg:Refresh() ,;
oHdr:Refresh() )
REDEFINE LISTBOX oField VAR nFld ITEMS aField ID 104 OF oDlg
REDEFINE LISTBOX oData VAR nDat ITEMS aData ID 105 OF oDlg ;
ON CHANGE (oHdr:Refresh(),oSiz:Refresh(),oAlg:Refresh())
REDEFINE GET oHdr VAR aHead[nDat] ID 106 OF oDlg MEMO // Get head
REDEFINE GET oSiz VAR aSizD[nDat] ID 107 OF oDlg PICTURE "9999" // Get size
REDEFINE COMBOBOX oAlg VAR aAlig[nDat] ITEMS aAlg ID 108 OF oDlg // Get align
REDEFINE CHECKBOX oCel VAR lCel ID 111 OF oDlg
REDEFINE RADIO nOpt ID 112,113,114,115 OF oDlg
REDEFINE GET cTit ID 116 OF oDlg MEMO
REDEFINE BUTTON ID 110 OF oDlg ACTION Gen_Report(cAlias,cTit,nOpt,lCel)
REDEFINE BUTTON ID 120 OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED
RETURN (NIL)
STAT FUNC Gen_Report(cAlias,cTit,nOpt,lCel)
LOCAL oReport, oDevice, cFTxt, cHead, cData
LOCAL cGroup, oFont, nI, nRecno, nFld
DEFINE FONT oFont NAME cFont SIZE 0,-10
DO CASE
CASE nOpt==1 // pantalla
PRINT oDevice TITLE cTit PREVIEW
REPORT oReport ;
TITLE Trim(cTit) ;
FONT oFont ;
HEADER "Fecha: "+DtoC(Date()) ,;
"Hora: " +Time() RIGHT ;
FOOTER "Hoja: " + ;
Str(oReport:nPage,3) ;
CENTERED ;
PREVIEW ;
CAPTION cTit ;
TO DEVICE oDevice
CASE nOpt==2 // Impresora
PRINT oDevice TITLE cTit
REPORT oReport ;
TITLE Trim(cTit) ;
FONT oFont ;
HEADER "Fecha: "+DtoC(Date()) ,;
"Hora: " +Time() RIGHT ;
FOOTER "Hoja: " + ;
Str(oReport:nPage,3) ;
CENTERED ;
CAPTION cTit ;
TO DEVICE oDevice
CASE nOpt==3 // Archivo
cFTxt:=cPatD+cAlias+".Txt"
REPORT oReport ;
TITLE Trim(cTit) ;
FONT oFont ;
HEADER "Fecha: "+DtoC(Date()) ,;
"Hora: " +Time() RIGHT ;
FOOTER "Hoja: " + ;
Str(oReport:nPage,3) ;
CENTERED ;
CAPTION cTit ;
TO FILE (cFTxt)
CASE nOpt==4 // Excel
Rpt_Excel(cAlias)
RETURN (NIL)
ENDCASE
FOR nI:=1 TO Len(aData)
RptAddColumn({Get_Head(aHead,nI)},, ;
{Get_Data(aData,nI)}, ;
aSizD[nI], ;
{Trim(aPict[nI])}, ;
{|| 1}, ;
(aTypD[nI]=="N"), ;
{|| .T. }, ;
IF(aAlig[nI]="Der.","RIGHT",IF(aAlig[nI]="Cen.","CENTER","LEFT")))
NEXT
ENDREPORT
IF lCel
oReport:CellView()
ENDIF
nRecno:=(cAlias)->(Recno())
ACTIVATE REPORT oReport ON STARTGROUP oReport:NewLine() ;
ON INIT (cAlias)->(DbGotop())
(cAlias)->(DbGoto(nRecno))
IF nOpt=3
ShellExecute(oWnd:hWnd,"Open",cFTxt,Nil,Nil,1)
ENDIF
RETURN (NIL)