ALIAS SX_CAIXA
INDEX SX_CAIXA str(sx_conta,3)+dtos(data)+Str(Cod_Adiant)
OUTROARQ CP_DIVIS
OUTROARQ CP_SUBD CP_SUBD SDCOD

VARIAVEL z_de      = ctod( "01."+SubStr(Dtoc(S_Datual),4) )
VARIAVEL z_ate     = s_datual
VARIAVEL zfConta   = 999
VARIAVEL zfDivisao = 0
VARIAVEL zfGrupo = 0
VARIAVEL zfCodForn = 0
VARIAVEL Z_VDIVIS = {}
VARIAVEL Z_VSUBD  = {}
VARIAVEL znQtdSubd  = 0
VARIAVEL znQtdDivis = 0
VARIAVEL znTotalPago = 0
variavel z_strCaixa = ''
variavel z_strFiltros = ''

T9,10,20,70,"Parametros" 

T2,2,Conta Caixa/Banco..:,6,zfConta,999
T3,2,Data Inicial.......:,8,z_de,99.99.99 
T4,2,Data Final.........:,8,z_ate,99.99.99
 
T6,2,Divisao de Despesas:,3,zfDivisao,999 
T7,2,Grupo Contabil.....:,2,zfGrupo,9
T8,2,Fornecedor.........:,2,zfCodForn,9999

comando antes z_nil = if(zfConta>0, DbSeek( str(zfConta,3) ) , '')
COMANDO ANTES znQtdDivis = Cp_Divis->( Recc() ) + 1
COMANDO ANTES Z_Vdivis = Array( znQtdDivis )
COMANDO ANTES Z_NIL = AFILL( Z_VDIVIS , 0 ) 
COMANDO ANTES znQtdSubd = Cp_Subd->( Recc() ) + 1
COMANDO ANTES Z_Vsubd = Array( znQtdSubd )
COMANDO ANTES Z_NIL = AFILL( Z_VSubd , 0 ) 

COMANDO ANTES Z_STRCaixa   = if(zfConta>0,Str(zfConta,3),"GERAL")
COMANDO ANTES Z_STRFILTROS = if(zfDivisao>0,"* Apenas da Div.de Despesa:"+Str(zfDivisao,3),"")
COMANDO ANTES Z_STRFILTROS = Z_STRFILTROS+if(zfGrupo>0,"* Apenas do Grupo Contabil:"+Str(zfGrupo,1),"")
COMANDO ANTES Z_STRFILTROS = Z_STRFILTROS+if(zfCodForn>0,"* Apenas do Fornecedor:"+Str(zfCodForn,4),"")

repita enquanto zfConta=0.or.zfConta=sx_conta

filtro zfConta=0.or.zfConta=sx_conta
FILTRO data>=z_de.and.data<=z_ate
FILTRO zfDivisao=0.or.cp_divisao=zfDivisao
FILTRO zfGrupo=0.or.zfGrupo=grupo
FILTRO zfCodForn=0.or.zfCodForn=cp_cod_for

COMANDO DURANTE Z_divisao = cp_divisao
COMANDO DURANTE Z_divisao = IF(Z_divisao>0.and.Z_divisao<znQtdDivis, Z_divisao, znQtdDivis)
COMANDO DURANTE Z_Vdivis[Z_divisao] = Z_Vdivis[Z_divisao] + if(z_divisao>0,Valor,0)
COMANDO DURANTE Z_subd   = if( Cp_Subd->(DbSeek(sx_caixa->CP_SUBDIV)), Cp_Subd->(Recno()), 0)
COMANDO DURANTE Z_subd   = IF(Z_subd>0.and.Z_subd<znQtdSubd, Z_subd, znQtdSubd)
COMANDO DURANTE Z_Vsubd[Z_subd] = Z_Vsubd[Z_subd] + if(Z_subd>0,Valor,0)

COMANDO DURANTE znTotalPago = znTotalPago + if(z_divisao>0,Valor,0)

ARQUIVO CP_DIVIS
OUTROARQ CP_SUBD CP_SUBD SDCOD
VARIAVEL LST_TP = 60
VARIAVEL znTotalPago = 0

FILTRO Z_VDIVIS[ recn() ] > 0
COMANDO DURANTE Z_divisao = recno()
COMANDO DURANTE Z_Tdiv = z_vdivis[ Z_divisao ]
COMANDO DURANTE znTotalPago = znTotalPago + z_tdiv
COMANDO DURANTE ZDESC = DESC

C[empresa]
C[sistema]     em [s_datual] as [time]     Pag [pag 999]
CPagamentos por Centro de Custo. (Caixa:[z_strcaixa]),  de [z_de] a [z_ate]
C[Z_STRFILTROS]
C[repl("-",88)]
CDivisao                                       Total      %
C[repl("=",88)]

D[ZDESC]             [z_tdiv @E 999,999.99] [z_tdiv/znTotalPago*100 @E 999.99]% do Total


//SUBLIST CP_SUBD
//   COMANDO ANTES Z_NLAN = 0
//   COMANDO ANTES ZDIVSTR = strzero(z_divisao,3)
//   COMANDO ANTES DbSeek( ZDIVSTR )
//   COMANDO ANTES ZDESCLower = Pad( LEFT(zDESC,1)+lower(Substr(zDESC,2)), 24)
//   REPITA ENQUANTO ZDIVSTR=left(SDCOD,3)
//   COMANDO DURANTE Z_NLAN = Z_NLAN + 1
//   COMANDO DURANTE Z_subd = recno()
//   COMANDO DURANTE ZTOTSUBD = z_vSubd[ Z_subd ]
//   COMANDO DURANTE z_desc = zDivStr+"-"+Pad( LEFT(SDDESC,1)+lower(Substr(SDDESC,2)), 20)
//
//   FILTROIMP ZTOTSUBD > 0
//   D   ... [sdcod]-[z_desc] [ztotsubd @E 999,999.99] [ztotsubd/z_tdiv*100 @E 999.99]%
//   //D   ... [sdcod]-[z_desc] [ztotsubd @E 999,999.99] [ztotsubd/z_tdiv*100 @E 999.99]% de [ZDESCLower]
//FIM SUBLIST

ULTPAG

filtroimp znTotalPago>0
ULTPAG *** Totais Gerais:            [znTotalPago @E 999,999,999.99]   100.00%