Vez ou outra recebo uns pedidos um tanto quanto inusitados. Este queria imprimir o CTBR040 (Balancete) por filial, NÃO considerando o parâmetro "Seleciona Filiais" (que não atendia às expectativas do cliente). Mas selecionando todas as filiais e totalizando-as no mesmo relatório. Eu disse.... Deixe-me pensar...... E, a resposta, acredito que já sabem qual foi: Sim. É possível. Mas terei que usar algumas funções de minha biblioteca. Quer experimentar? Lá vai o código:
#include "totvs.ch"
procedure u_CTBR040BlackTDN(wnRel)
local aFiliais:=AdmGetFil() as array
local cSVFilAnt:=cFilAnt as character
local cSpaceQuadro as character
local oReport as object
private aSelFil:=Array(0) as array
private aQuadro:=array(8) as array
cSpaceQuadro:=Space(Len(CriaVar("CT1_CONTA")))
aFill(aQuadro,cSpaceQuadro)
dfv():Default(@wnRel,ProcName())
oReport:=ExecIn():CallProc("ULTRA_SECRET","CTBR040","REPORTDEF",@wNRel)
bAction:=oReport:GetAction()
oReport:SetAction({|oReport|PrintReport(@oReport,@wNRel,@aFiliais,@bAction)})
oReport:PrintDialog()
SetFilAnt(cSVFilAnt)
return
static function SetFilAnt(cFil)
cFilAnt:=cFil
return(FWSM0Util():setSM0PositionBycFilAnt())
static function PrintReport(oReport,wNRel,aFiliais,bAction)
local nFilial as numeric
local nFiliais as numeric
local oCell as object
local oSection:=oReport:Section(1) as object
nFiliais:=Len(aFiliais)
for nFilial:=1 to nFiliais
cFil:=aFiliais[nFilial]
SetFilAnt(cFil)
aEval(oReport:aBreak,{|e|aSize(e:aFunction,0)})
aSize(oReport:aBreak,0)
aSize(oReport:aFunction,0)
aEval(oSection:aBreak,{|e|aSize(e:aFunction,0)})
aSize(oSection:aBreak,0)
aSize(oSection:aFunction,0)
oCell:=oSection:Cell("SALDODEB")
aSize(oCell:aFunction,0)
oCell:=oSection:Cell("SALDOCRD")
aSize(oCell:aFunction,0)
oCell:=oSection:Cell("MOVIMENTO")
aSize(oCell:aFunction,0)
oReport:oPage:lFirstPage:=.T.
Eval(bAction,oReport)
CacheData():Set("u_CTBR040BlackTDN","MV_PAR09",(oReport:oPage:nPage+1))
oReport:EndPage()
next nfilial
return
Vai precisar do Ponto de Entrada U_MVCHANGE para Controlar a Paginação.
procedure U_MVCHANGE()
local cPergunta:=ParamIXB[1]
if (("CTR040"$cPergunta).and.IsInCallStack("u_CTBR040BlackTDN"))
MV_PAR09:=CacheData():Get("u_CTBR040BlackTDN","MV_PAR09",MV_PAR09)
endif
return
Ninja nível 10
ResponderExcluir