'Nome       : CtaIvaAnx.sql
'Tipo       : LST
'Data       : 2008/05/15
'Versao     : 1.0
'Descricao  : Anexos de IVA - Listagem por SQL

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.0  2008/??/?? ---------------------------------------------------
'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=P]
##


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


'= documentos de apuramento ===================================================
Documentos por contribuinte    [Cmd]=DocCtrb=+
   +SELECT * FROM {TB_CtaIvaAnx} +
   +WHERE Tpr$ = '{Opc_Tpe}' +
   +AND   pTip$ IN({Opc_Tpv}) +
   +ORDER BY Ctrb$


'= tabelas auxiliares =========================================================
'- Dados anagraficos ----------------------------------------------------------
Dados anagraficos [Cmd]=AuxAng=+
+SELECT MST.[Ct$], MST.[Nome$], MST.[Ctrb$], ANG.[Nome2$], ANG.[Morada$], +
+ANG.[Local$], ANG.[Cpost$], ANG.[CLoc$] +
+FROM {TB_CtaMst} AS MST LEFT JOIN {TB_CtaAng} AS ANG ON MST.[Ct$] = ANG.[Ct$] +
+ORDER BY MST.[Ct$]

##

   +WHERE Trp$ BETWEEN '{Opc_Ct.Ini}' AND '{Opc_Ct.Fim}' +
   +AND CtaMst.CodTrat$ = '9' +
   +AND CtaAcm.Ano = {ANO} +



'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=Ctrb,Documentos por Contribuinte

'formato
Saida/Impressora           [DocPrt]=NULA
Linhas por pagina          [DocLpg]=50
Colunas por linha          [DocCol]=80
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0

'especifico do documento
Opcao especifica           [DocEsp]=OpcEsp=???

'funcoes de listagem
Base para documento         [FxDOC]=IvaAnxXls
Listar cabecalho            [FxCAB]=IvaAnxXls_Cab
Listar linhas               [FxLIN]=IvaAnxXls_Lin, 0
Listar fim                  [FxFIM]=IvaAnxXls_Fim

Matriz auxiliar            [DocMat]=CtaIvaAnx.xls

'controlo de listagem SQL
Gerador de dados a listar  [SQLDat]=DocCtrb
Subtotalizadores           [SQLSbt]=Ctrb$
##


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


'Campos
vNrg  = FrmNum$(5.0,cntReg)                        'numero do registo

'registo
'-----------------------------------------------------------
vPerCtb   = RegZon$+" "+RegCtb$                             'contribuinte

vPerCt    = RegCt$                                          'conta
vPerIde   = left$(RegIde$,30)                               'identificacao
vPerObs   = RegCt$                                          'observacoes

vPerUsa   = regPerUsa$                                      'periodo

vPerVto   = FrmNum$(11.2, RegDVto)                          'valor de documento
vPerInc   = FrmNum$(11.2, RegDInc)                          'valor de incidencia
vPerIva   = FrmNum$(11.2, RegPIva)                          'valor do IVA
vPerReb   = FrmNum$(11.2, RegPReb)                          'valor de reembolso

tPerInc   = FrmNum$(11.2, Total(vPerInc,0))                 'total de incidencia
tPerIva   = FrmNum$(11.2, Total(vPerIva,0))                 'total de IVA
tPerReb   = FrmNum$(11.2, Total(vPerReb,0))                 'total de reembolso

sPerInc   = FrmNum$(11.2, Total(vPerInc,1))                 'subtotal de incidencia
sPerIva   = FrmNum$(11.2, Total(vPerIva,1))                 'subtotal de IVA
sPerReb   = FrmNum$(11.2, Total(vPerReb,1))                 'subtotal de reembolso


'acumulados
'-----------------------------------------------------------
vAcmDiv   = FrmNum$(11.2, acmDiv)                           'valores diversos
vAcmDivP  = FrmNum$( 3.2, acmPdi)+"%"                       '% de valores diversos
##


'==============================================================================
#PGM - Programa/Funcoes
'==============================================================================
'- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
'- (13) --->'Comentario
'- (25) --------------->'Comentario
'- (28) ------------------>'Comentario
'- (40) ------------------------------>'Comentario
'- (43) --------------------------------->'Comentario
'- (46) ------------------------------------>'Comentario
'- (49) --------------------------------------->'Comentario
'- (52) ------------------------------------------>'Comentario
'- (55) --------------------------------------------->'Comentario
'- (58) ------------------------------------------------>'Comentario
'- (61) --------------------------------------------------->'Comentario


Sub FxIni 'funcao de inicializacao
cnt=0                                              'limpar contador
end sub


Sub FxFim 'funcao de finalizacao
'nada a executar
end sub


Sub Lst_AJT 'ajuste
'nada a executar
'MsgBox "", "TIT", "MSG"
end sub


'==============================================================================
'= COM = Funcoes comuns =======================================================
'==============================================================================
Sub VarRegPrp 'preparar valores do registo
regOpc$ = SqlCmp$("Opc$")                 'campos opcionais
regTdo$ = SqlCmp$("Tdo$")                 'tipo de documento
regNdo$ = SqlCmp$("Ndo$")                 'numero de documento
regDt   = SqlCmp("Dt")                    'data do documento
regTpr$ = SqlCmp$("Tpr$")                 'tipo de registo
regCt$  = SqlCmp$("Ct$")                  'conta
regIde$ = SqlCmp$("Ide$")                 'identificacao
regTv$  = SqlCmp$("Tv$")                  'tipo de valor
regAcm  = SqlCmp("Acm")                   'modo de acumulacao
regZon$ = SqlCmp$("Zon$")                 'zona
regCtb$ = SqlCmp$("Ctrb$")                'contribuinte

regPerD = SqlCmp("PerAnx")                'periodo do anexo
regPerA = SqlCmp("PerDoc")                'periodo do documento

regDVto = SqlCmp("dVto")                  'documento - valor total
regDInc = SqlCmp("dInc")                  'documento - valor de incidencia
regDIva = SqlCmp("dIva")                  'documento - valor do IVA

regPtip$= SqlCmp$("pTip$")                'parcial - tipo
regPInc = SqlCmp("pInc")                  'parcial - valor de incidencia
regPIva = SqlCmp("pIva")                  'parcial - valor do IVA
regPReb = SqlCmp("pReb")                  'parcial - valor de reembolso
regAdi$ = SqlCmp$("pAdi$")                'parcial - adicional

regObs$ = SqlCmp$("Obs$")                 'observacoes

'periodo
tmp$       = trim$(str$(regPerD))         'periodo em texto
vpAno$     = mid$(tmp$,1,4)               'separar ano
vpMes$     = mid$(tmp$,5,2)               'separar mes
regDocPer$ = vpAno$ + "/" +vpMes$         'formatar periodo

'diversos
regNdv$ = FrmNdo$("46",regTdo$,regNdo$)   'formatar numero de documento
regDoc$ = regTdo$ + " " + regNdv$         'documento
end sub


Sub VarRegAcm 'acumular valores do registo
vInc = RegPInc * regAcm                   'valor de incidencia
vIva = RegPIva * regAcm                   'valor do IVA
vReb = RegPReb * regAcm                   'valor de reembolso

'acumular
res = AcmExe("vPerInc", vInc)             'valor de incidencia
res = AcmExe("vPerIva", vIva)             'valor do IVA
res = AcmExe("vPerReb", vReb)             'valor de reembolso
end sub


'==============================================================================
'= LST - Listar ===============================================================
'==============================================================================


'==============================================================================
'= Listagem para EXCEL ========================================================
'==============================================================================
'---------------------------------------------------------->'Comentario (61)
'------------------------------------------------->'Comentario (52)
'------------------------------------->'Comentario (40)

Sub IvaAnxXls_DocIni 'inicializar documento
'msgbox "","DocIni"

xlsOpcNfi$ = "RND:CtaIvaAnx.xls"                   'nome do ficheiro a gerar
xlsOpcWks$ = ""                                    'nome da woorksheet

call XlsComDoc_IniMat                              'inicializar documento por matriz

'preparacao especifica
res = XlsWks("Valores")                            'activar worksheet

'preparar cabecalho
empNum$ = Emp_Inf_Cod$                             'numero da empresa
empNom$ = Emp_Inf_Nome$                            'nome da empresa
lstTit$ = MemTxt$(1)                               'titulo da listagem
lstTip$ = MemTxt$(2)                               'tipo da listagem
lstDt$  = FrmDt$("EXT", Sig_DtHoje)                'data para listagem

'msgbox "","Tit",lstTit$

'ide$    = Memtxt$(1)                               'identificacao
ide$    = VarCom$("IdeTit")                        'identificacao
tpe$    = VarCom$("IdeTpe")                        'tipo de entidade
ideCab$ = ide$ + " - " + tpe$                      'identificacao de cabecalho

res = XlsIdeLst("Emp_Num", empNum$)                'numero da empresa
res = XlsIdeLst("Emp_Nom", empNom$)                'nome da empresa
res = XlsIdeLst("Lst_Tit", lstTit$)                'titulo da listagem
'res = XlsIdeLst("Lst_Tit", ideCab$)                'titulo da listagem
res = XlsIdeLst("Lst_Tipo", lstTip$)               'tipo da listagem
res = XlsIdeLst("Lst_Data", lstDt$)                'data

call XlsComLin_Ini                                 'iniciar linhas

'definicao das colunas
coZon = 2                                          'zona
coCtb = 3                                          'contribuinte
coIde = 4                                          'identificacao
coDoc = 5                                          'documento
coPer = 6                                          'periodo
coVdo = 7                                          'valor doc
coAcm = 8                                          'acumulacao
coInc = 9                                          'incidencia
coIva = 10                                         'IVA
coReb = 11                                         'reembolso
coObs = 12                                         'observacoes

'totalizadores
acmDiv  = 0                                        'diversos
end sub


Sub IvaAnxXls_DocFim 'terminar documento
'res = XlsWksAct("A", 1)                            'activar worksheet
call XlsComDoc_Fim                                 'terminar/mostrar documento
end sub


Sub IvaAnxXls_IncLin 'incrementar linha
call XlsComLin_IncRep                              'incrementar linha + repor formato normal

zon$ = XlsZon$(liUsa, coCtb)                       'zona
res = XlsAli(zon$, "4")                            'alinhamento
end sub


Sub IvaAnxXls_LinTit1 'titulo 1
grp$    = SbtInf$("ACT",1)                         'grupo
ideGrp$ = "Contribuinte : " +grp$                  'identificacao do grupo

call IvaAnxXls_IncLin                              'incrementar linha

res = XlsLst(liUsa, coIde, ideGrp$)                'identificacao de grupo
call XlsComLin_ActB                                'activar linha em BOLD
end sub


Sub IvaAnxXls_LinSbt1 'subtotal 1
call IvaAnxXls_LinSbt                              'subtotal de grupo
x = TotLpz(1)                                      'limpar totais
end sub


Sub IvaAnxXls_Lin 'linha de valores
call IvaAnxXls_IncLin                              'incrementar linha

call VarRegPrp                                     'preparar valores
call VarRegAcm                                     'acumular valores

vZon$   = regZon$                                  'zona
vCtb$   = regCtb$                                  'contribuinte
vIde$   = regIde$                                  'identificacao
vPer$   = regDocPer$                               'periodo
vObs$   = regCt$                                   'observacoes

'listar
res = XlsLst(liUsa, coZon, vZon$)                  'zona
res = XlsLst(liUsa, coCtb, vCtb$)                  'contribuinte
res = XlsLst(liUsa, coIde, vIde$)                  'identificacao

res = XlsLst(liUsa, coDoc, RegDoc$)                'documento
res = XlsLst(liUsa, coPer, vPer$)                  'periodo
res = XlsLst(liUsa, coVdo, RegDVto)                'valor documento

res = XlsLst(liUsa, coAcm, RegAcm)                 'acumulacao
res = XlsLst(liUsa, coInc, RegPInc)                'incidencia
res = XlsLst(liUsa, coIva, RegPIva)                'IVA
res = XlsLst(liUsa, coReb, RegPReb)                'reembolso

res = XlsLst(liUsa, coObs, vObs$)                  'observacoes

'valores diversos
tmp$    = left$(regCtb$, 1)                        'separar 1 digito
if tmp$ = "#" then                                 'valores diversos ?
   acmDiv = acmDiv + regPReb                       'diversos
end if
end sub


Sub IvaAnxXls_LinSbt 'subtotal de grupo
call IvaAnxXls_IncLin                              'incrementar linha

vZon$   = ""                                       'zona
vCtb$   = "Subtotal"                               'contribuinte

'listar
res = XlsLst(liUsa, coZon, vZon$)                  'zona
res = XlsLst(liUsa, coCtb, vCtb$)                  'contribuinte

sbtNrg  = TotCnt("vPerInc",1)                      'numero de registos

sbtVinc = Total("vPerInc",1)                       'subtotal de incidencia
sbtViva = Total("vPerIva",1)                       'subtotal de IVA
sbtVreb = Total("vPerReb",1)                       'subtotal de reembolso

res = XlsLst(liUsa, coIde, sbtNrg)                 'numero de registos

res = XlsLst(liUsa, coInc, sbtVinc)                'incidencia
res = XlsLst(liUsa, coIva, sbtViva)                'IVA
res = XlsLst(liUsa, coReb, sbtVreb)                'reembolso

call XlsComLin_ActBI                               'activar linha em BOLD+ITALICO
zon$ = XlsZon$(liUsa, coCtb)                       'zona
res = XlsAli(zon$, "5")                            'alinhamento

call IvaAnxXls_IncLin                              'incrementar linha
x=TotLpz(1)                                        'limpar totais
end sub


Sub IvaAnxXls_LinSep 'linha de separacao
call IvaAnxXls_IncLin                              'incrementar linha
end sub


'- Terminar/Totais ------------------------------------------------------------
Sub IvaAnxXls_Fim 'terminar
call XlsComLin_Fim                                 'fim de linhas

ltoUsa = LinFim                                    'linha para totais
liUsa  = ltoUsa                                    'linha a usar

totNrg  = TotCnt("vPerInc",0)                      'numero de registos
totVinc = Total("vPerInc",0)                       'total de incidencia
totViva = Total("vPerIva",0)                       'total de IVA
totVreb = Total("vPerReb",0)                       'total de reembolso

res = XlsLst(liUsa, coDoc, totNrg)                 'numero de registos

res = XlsLst(liUsa, coInc, totVinc)                'incidencia
res = XlsLst(liUsa, coIva, totViva)                'IVA
res = XlsLst(liUsa, coReb, totVreb)                'reembolso

'valores diversos
liUsa  = ltoUsa + 1                                'linha a usar

vDivPer = 0                                        '% de valores diversos - inicializar
vDivPer = acmDiv / totVreb                         '% de valores diversos - calcular

res = XlsLst(liUsa, coReb, acmDiv)                 'valor
res = XlsLst(liUsa, coObs, vDivPer)                '% de valores diversos

'terminar/mostrar
'res = XlsWksAct("A", 1)                            'activar worksheet
end sub

##


'==============================================================================
#INC - Funcoes comuns
'==============================================================================
Funcoes comuns                    =[SIG_Dir.Div],LsComPgm.std
Funcoes comuns XLS                =[SIG_LST_DIR.XLS],XlsCom_Pgm.inc
##


