'Nome       : CtaBalCtrb.sql
'Tipo       : LST
'Data       : 2007/03/16
'Versao     : 1.0
'Descricao  : Balancete por numero de contribuinte

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.0   2007/??/?? --------------------------------------------------
'Versao base


'==============================================================================
#DEF - Definicao global do documento
'==============================================================================
Caracteres invalidos             [CarInv]=#
##


'==============================================================================
#ESP - Campos especificos
'==============================================================================
Zoom para preview             [PrvZoom]=1.5
Opcoes para impressora WIN   [PrWinOpc]=[ORI=L]
##


'==============================================================================
#SQL - Comandos SQL
'==============================================================================
Base de dados           [BD]=EmpFic$("EMP","Cta,Cta.mdb")

Dados a listar [Cmd]=GerDli=+
   +SELECT CtaMst.Ctrb$ AS vCTB, CtaAcm.Ct$ AS vCTU, CtaMst.Nome$ AS vNOM, +
   +CtaAcm.Ano AS vANO +
   +FROM CtaAcm INNER JOIN CtaMst ON CtaAcm.Ct$ = CtaMst.Ct$ +
   +WHERE CtaMst.[Ct$] BETWEEN '{Opc_Ct.Ini}' AND '{Opc_Ct.Fim}' +
   +AND CtaMst.CodTrat$ = '9' +
   +AND CtaAcm.Ano = {ANO} +
   +ORDER BY CtaMst.Ctrb$, CtaMst.Ct$

##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=BalTxt,Balancete Por Contribuinte

'formato
Saida/Impressora           [DocPrt]=
Linhas por pagina          [DocLpg]=50
Colunas por linha          [DocCol]=132
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0
Especifico do documento    [DocEsp]=TipoLst=TXT

'funcoes de listagem
Listar cabecalho            [FxCAB]=BalTxt_Cab
Listar linhas               [FxLIN]=BalTxt_Lin
Listar fim                  [FxFIM]=BalTxt_Fim

'controlo de listagem SQL
Gerador de dados a listar  [SQLDat]=GerDli
Subtotalizadores           [SQLSbt]=vCTB
##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=BalGrf,Balancete Por Contribuinte

'formato
Saida/Impressora           [DocPrt]=PAG_W
'Saida/Impressora           [DocPrt]=PAG_W,PRV
Linhas por pagina          [DocLpg]=30
Colunas por linha          [DocCol]=132
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0
Especifico do documento    [DocEsp]=TipoLst=GRF

'funcoes de listagem
Listar cabecalho            [FxCAB]=BalGrf_Cab
Listar linhas               [FxLIN]=BalGrf_Lin
Listar fim                  [FxFIM]=BalGrf_Fim

'controlo de listagem SQL
Gerador de dados a listar  [SQLDat]=GerDli
Subtotalizadores           [SQLSbt]=vCTB
##


'==============================================================================
#VAR - Variaveis
'==============================================================================
'------------------------------------------------------------------------------
'Formatacao de valores
'------------------------------------------------------------------------------
Tipo     = MemTxt$(1)
Pag      = Doc_CntPag
DataExt  = FrmVal$(Sig_DtHoje,45,0)

'Campos
vCtb     = left$(SqlCmp$("vCTB"), 20)
vCtu     = left$(SqlCmp$("vCTU"), 12)
vNom     = left$(SqlCmp$("vNOM"), 30)
vAno     = FrmNum$( 4,SqlCmp("vANO"))
vDeb     = FrmMoe$("", 17,vCtDeb)
vCre     = FrmMoe$("", 17,vCtCre)
vVls     = FrmMoe$("", 17,vCtVls)

'subtotais
SbtId    = SbtIde$
SbtNr    = FrmNum$(6.0,SbtNr)
SbtNrg   = FrmNum$(6.0,TotCnt("vDeb",1))

vDeb_T1  = FrmNum$( 14.2,Total(vDeb,1))
vCre_T1  = FrmNum$( 14.2,Total(vCre,1))
vVls_T1  = FrmNum$( 14.2,Total(vVls,1))

'totais
TotNr    = FrmNum$(6.0,TotNr)
TotNrg   = FrmNum$(6.0,TotCnt("vDeb",0))

vDeb_T0  = FrmNum$( 14.2,Total(vDeb,0))
vCre_T0  = FrmNum$( 14.2,Total(vCre,0))
vVls_T0  = FrmNum$( 14.2,Total(vVls,0))

##


'==============================================================================
#PGM - Programa/Funcoes
'==============================================================================
'---------------------------------------------------------->'Comentario (61)
'------------------------------------------------------->'Comentario (58)
'---------------------------------------------------->'Comentario (55)
'------------------------------------------------->'Comentario (52)
'------------------------------------->'Comentario (40)

Sub FxIni 'funcao de inicializacao
'modo WIN
PrWIN AJT_F, 56.7,  56.7                           'ajuste para milimetros
PrWIN AJT_D,-280.0,-280.0                          'deslocamento de ajuste
PrWIN ET,  2                                       'espessura de traco

dimLinNor=4.4                                      'altura de uma linha normal
dimLinCab=6.6                                      'altura de uma linha de cabecalho

cnt=0                                              'limpar contador
end sub


Sub FxFim 'funcao de finalizacao
PrWIN FON, "REG"                                   'limpar registo de fontes
end sub


Sub Lst_AJT 'ajuste
end sub


Sub PrpValorCt 'preparar valores da conta
ctu$     = SqlCmp$("vCTU")                         'conta

'vctDeb   = CtaCtVcon(ctu$, "AD")                   'valor a debito
'vctCre   = CtaCtVcon(ctu$, "AC")                   'valor a credito
'vctVls   = CtaCtVcon(ctu$, "S")                    'valor do saldo

res      = CtaAcmPrp(ctu$, "")                     'preparar acumulados
vCtDeb   = CtaAcmVl("ACT_D")                       'valor a debito
vCtCre   = CtaAcmVl("ACT_C")                       'valor a credito
vCtVls   = CtaAcmVl("ACT_S")                       'valor do saldo
end sub


'==============================================================================
'= TXT = Modo Texto ===========================================================
'==============================================================================
Sub BalTxt_CabIni 'inicializar listagem
cntDoc=0
end sub


Sub BalTxt_Cab 'cabecalho de listagem
FxDiv LstIde,16CPI,0
print TxTit$("TT=16CPI, LD, PT=66C, TL=16CPI",MemTxt$(1))
?Data : @DataExt                                                                                                     Folha No : @Pag#
'123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.12
?====================================================================================================================================
?          Contribuinte         Conta                  Nome                        Debito            Crédito              Saldo     
?====================================================================================================================================
'      AAAAAAAAAAAAAAAAAAAA  AAAAAAAAAAAA  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  99,999,999,990.00  99,999,999,990.00  99,999,999,990.00
'      <------------------>  <---------->  <---------------------------->  <--------------->  <--------------->  <--------------->
end sub


Sub BalTxt_Lin 'linha de valores
call PrpValorCt                                    'preparar valores da conta

?      @vCtb                 @vCtu         @vNom                           @vDeb              @vCre              @vVls              #
end sub


Sub BalTxt_LinTit1 'titulo de subtotal 1
'tmp=CntLin("MIN",5)                                'minimo de linhas
'tmp=CntLin("INC",1)                                'contar linha

grp$=SbtInf$("ACT",1)                              'grupo
tmp =SqlOpcAct("Grp",grp$)                         'actualizar valor do grupo

'grVer$=grp$                                        'copiar
'ide$=SqlCalc$("GrpIde")                            'pesquisar identificador de grupo
'print tab(5) "Grupo : " grVer$ "     " ide$        'identificar grupo

'print "Linhas:" Doc_CntLin                        'numero da linha - DEBUG
end sub


Sub BalTxt_LinSbt1 'valor de subtotal 1
grp$    = SbtInf$("ANT",1)                         'grupo
grVer$  = grp$                                     'copiar
SbtIde$ = grVer$                                   'identificacao de subtotal
SbtNr   = TotCnt("vDeb",1)                         'numero de registos
if SbtNr > 1 then                                  'listar subtotal ?
?                                                Total do contribuinte:    @vDeb_T1           @vCre_T1           @vVls_T1           #

   tmp = CntLin("INC",1)                           'contar linha
end if

x = TotLpz(1)                                      'limpar totais
'print "Linhas:" Doc_CntLin                        'numero da linha - DEBUG
end sub


Sub BalTxt_FimAjt 'fim de pagina intermedia
?====================================================================================================================================
FxDiv LstPer,SP                                    'fim de pagina
'Print PrtCmd("[SP]");                             'fim de pagina
end sub


Sub BalTxt_Fim 'fim de listagem
TotNr=TotCnt("C01",0)                              'numero de registos
?====================================================================================================================================
?                            @TotNrg                                       @vDeb_T0           @vCre_T0           @vVls_T0           #
?====================================================================================================================================
'print "Linhas:" Doc_CntLin                        'numero da linha - DEBUG

FxDiv LstPer,SP                                    'fim de pagina
'Print PrtCmd("[SP]");                             'fim de pagina
end sub


'==============================================================================
'= GRF = Modo Grafico =========================================================
'==============================================================================
Sub BalGrf_CabIni 'inicializar listagem
cntDoc=0                                           'limpar contador
UsaEnv=0                                           'usar envolvente
UsaSpc=0                                           'usar separador de colunas
end sub


Sub BalGrf_Cab132 'cabecalho para 132 colunas
PrWIN AJT_B, 10.0, 0.0                             'posicao base

cabX1=3                                            'limite X1
cabX2=270                                          'limite X2
cabY1=25                                           'limite Y1
cabY2=cabY1+CabLin*dimLinCab                       'limite Y2
cabYm=cabY2+35*dimLinNor                           'limite Y maximo

PrWIN COR_F, 15                                    'cor de fundo

PrWIN FON, 10, 1                                   'activar fonte
'PrWIN TX_N, cabX2-100,  5,VarTx$(EMP_INF_NOME$)    'nome da empresa
PrWIN TX_N, cabX2-100,  5,EmpCurIde$("IDE")        'nome da empresa
PrWIN FON, 18, 1                             	   'activar fonte
PrWin FON, "BOLD+"                                 'activar bold
PrWIN TX_CTR,  cabX1, 5, cabX2, cabY1,MemTxt$(1)   'titulo centrado
PrWin FON, "BOLD-"                                 'desactivar bold
PrWIN FON, 10, 1                             	   'activar fonte

py   =cabY1-dimLinNor-1                            'posicao Y
pxFol=CabX2-30                                     'posicao X para folha
pxPag=CabX2-10                                     'posicao X para pagina

PrWIN TX_N,   05, py,"Data :"                      'data
PrWIN TX_N,   16, py,@DataExt                      'listar data
PrWIN TX_N,pxFol, py,"Folha No :"                  'folha
PrWIN TX_N,pxPag, py,@Pag                          'numero da folha

PrWIN COR_E, 200, 200, 200                         'cor de enchimento RGB
PrWIN GR_ME, 0                                     'modo de enchimento

PrWIN GR_CE,  cabX1, cabY1, cabX2, cabY2, 2        'caixa do cabecalho

if UsaEnv=1 then
   PrWIN GR_CX,  cabX1, cabY1, cabX2, cabYm, 2     'caixa envolvente
end if
End Sub


Sub BalGrf_Cab 'cabecalho
CabLin = 1                                         'linhas de cabecalho
call BalGrf_Cab132                                 'listar cabecalho
PrWIN AJT_B,  8.0, 0.0                             'posicao base

PrWin FON, "BOLD+"                                 'activar bold
call Doc2_CabCol                                   'titulos das colunas
PrWin FON, "BOLD-"                                 'desactivar bold
end sub


Sub BalGrf_LinPos 'posicao de linha
PrWIN AJT_B,  8, 31+Doc_CntLin*4.4                 'posicao base
'PrWIN TX_N,  -3,  0,Doc_CntLin                    'numero da linha - DEBUG
end sub


Sub BalGrf_Lin 'linha
call PrpValorCt                                    'preparar valores da conta
call BalGrf_LinPos                                 'posicionar linha
call BalGrf_LinCol                                 'listar colunas
end sub


Sub BalGrf_CabCol 'titulos de colunas
PrWIN TX_CTR,  5.0,cabY1, 49.1,cabY2,"Contribuinte"
PrWIN TX_CTR, 49.1,cabY1,114.2,cabY2,"Nome"
PrWIN TX_CTR,114.2,cabY1,124.7,cabY2,"Ano"
PrWIN TX_CTR,124.7,cabY1,162.5,cabY2,"Crédito"
PrWIN TX_CTR,162.5,cabY1,200.3,cabY2,"Debito"
PrWIN TX_CTR,200.3,cabY1,238.1,cabY2,"Saldo"
PrWIN TX_CTR,238.1,cabY1,263.3,cabY2,"Conta"
end sub


Sub BalGrf_LinCol 'listar valores de colunas
PrWIN TX_N,  6.0,0,@C01
PrWIN TX_N, 50.1,0,@C02
PrWIN TX_NP,115.2,0,"N",@C03
PrWIN TX_NP,125.7,0,"N",@C04
PrWIN TX_NP,163.5,0,"N",@C05
PrWIN TX_NP,201.3,0,"N",@C06
PrWIN TX_N,239.1,0,@C07
end sub


Sub BalGrf_LinTit1 'titulo de subtotal 1
'tmp=CntLin("MIN",5)                                'minimo de linhas
'tmp=CntLin("INC",1)                                'contar linha

grp$=SbtInf$("ACT",1)                              'grupo
tmp =SqlOpcAct("Grp",grp$)                         'actualizar valor do grupo
grVer$=grp$                                        'copiar

'ide$=SqlCalc$("GrpIde")                            'pesquisar identificador de grupo
'txi$="Grupo : "+grVer$+"     "+ide$                'identificar grupo

'call BalGrf_LinPos                                 'posicionar linha
'PrWIN TX_N, 06,  0,txi$                            'listar identificacao de grupo
end sub


Sub BalGrf_LinSbt1 'valor de subtotal 1
grp$   =SbtInf$("ANT",1)                           'grupo
grVer$ =grp$                                       'copiar
SbtIde$=grVer$                                     'identificacao de subtotal
SbtNr  =TotCnt("C01",1)                            'numero de registos

tmp=CntLin("INC",1)                                'contar linha
call BalGrf_LinPos                                 'posicionar linha
call BalGrf_LinSbt1Col                             'listar valores

'tmp=CntLin("INC",1)                                'contar linha
x=TotLpz(1)                                        'limpar totais
end sub


Sub BalGrf_LinSbt1Col 'subtotais
'PrWIN TX_NP,  6.0,0,"N",@C01_T1
PrWIN TX_N, 52.1,0,"Total do contribuinte:"
'PrWIN TX_N,117.2,0,SbtIde$
PrWIN TX_NP,125.7,0,"N",@C04_T1
PrWIN TX_NP,163.5,0,"N",@C05_T1
PrWIN TX_NP,201.3,0,"N",@C06_T1
end sub


Sub BalGrf_FimAjt 'fim de pagina intermedia
PrWIN FP                                           'fim de pagina
end sub


Sub BalGrf_Fim 'fim de listagem
TotNr=TotCnt("C01",0)                              'numero de registos
tmp=CntLin("INC",-2)                               'contar linha (sem nova pagina)
call BalGrf_LinPos                                 'posicionar linha
call BalGrf_FimCol                                 'listar totais

PrWIN FP                                           'fim de pagina
end sub


Sub BalGrf_FimCol 'totais por coluna
PrWIN TX_NP,  6.0,0,"N",@T01
PrWIN TX_N, 52.1,0,"Totais:"
PrWIN TX_NP,125.7,0,"N",@T04
PrWIN TX_NP,163.5,0,"N",@T05
PrWIN TX_NP,201.3,0,"N",@T06
end sub

##

