'Nome       : GbiVchEnt.sql
'Tipo       : LST
'Data       : 2014/05/29
'Versao     : 1.0
'Descricao  : GBI - Listagem de Vouchers/Entidades

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.0   ____/__/__ --------------------------------------------------
'Versao base


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


'==============================================================================
#ESP - Campos especificos
'==============================================================================
##


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


'------------------------------------------------------------------------------
'- Entidades ------------------------------------------------------------------
'------------------------------------------------------------------------------
Lista de entidades [Cmd]=EntLst=+
   +SELECT * FROM GbiEnt ENT +
   +WHERE RecIde > 0 +
   +AND   [Cod$]    BETWEEN '{Opc_Div.Ini}'  AND '{Opc_Div.Fim}' +
   +ORDER BY Des$


'------------------------------------------------------------------------------
'- Voucher --------------------------------------------------------------------
'------------------------------------------------------------------------------
Lista de voucher da entidade - JET [Cmd]=Vou_Ent_JET=+
   +SELECT * FROM {TB_GbiLug} LUG +
   +WHERE [DivOpc$] LIKE '*[[]VCH.ENT={ENT.COD}]*' +
   +ORDER BY RecIde


Lista de voucher da entidade - SQS [Cmd]=Vou_Ent_SQS=+
   +SELECT * FROM {TB_GbiLug} LUG +
   +WHERE [DivOpc$] LIKE '%[[]VCH.ENT={ENT.COD}]%' +
   +ORDER BY RecIde

##


'==============================================================================
#DOC - Configuracao do documento JET
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=VCH_TXT_JET,Vouchers/Entidades

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

'funcoes de listagem
Funcao do documento         [FxDoc]=Tx_Gui
Listar cabecalho            [FxCAB]=Tx_GuiCab_JET
Listar linhas               [FxLIN]=Tx_GuiLin,0
Listar fim                  [FxFIM]=Tx_GuiFim

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


'==============================================================================
#DOC_x - Configuracao do documento SQL SERVER
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=VCH_TXT_SQS,Vouchers/Entidades

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

'funcoes de listagem
Listar cabecalho            [FxCAB]=Tx_GuiCab_SQS
Listar linhas               [FxLIN]=Tx_GuiLin,0
Listar fim                  [FxFIM]=Tx_GuiFim

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


'==============================================================================
#VAR - Variaveis
'==============================================================================
Tit80    = TxTit$("TT=12CPI, LD, PT=48C, TL=10CPI",lstTit$))
Tit132   = TxTit$("TT=16CPI, LD, PT=66C, TL=16CPI",lstTit$))

Tipo     = MemTxt$(1)
Pag      = Doc_CntPag
DataExt  = FrmVal$(Sig_DtHoje,45,0)

'- Guia Global ----------------------------------------------------------------
vaGuiTdo = vuGuiTdo$                               'tipo de documento
vaGuiNdo = vuGuiNdo$                               'numero de documento
vaGuiDoc = vuGuiDoc$                               'documento
vaGuiDtr = FrmDt$("",vuGuiDtr)                     'data de registo

'- Conta ----------------------------------------------------------------------
vaCtuCov = vuCtuCov$                               'codigo formatado
vaCtuNom = vuCtuNom$                               'nome
vaCtuIde = vuCtuIde$                               'identificacao

'- Artigo ---------------------------------------------------------------------
vaArt    = vuArt$                                  'artigo

vaArtCov = vuArtCov$                               'codigo formatado
vaArtNom = vuArtNom$                               'nome
vaArtIde = vuArtIde$                               'identificacao

vaQuTot  = FrmNum$(9.3,vuQuTot)                    'quantidade total
VaQuEnt  = FrmNum$(9.3,vuQuEnt)                    'quantidade enttregue
VaQuDif  = FrmNum$(9.3,vuQuDif)                    'quantidade da diferenca
VaArtObs = vuArtObs$                               'observacoes

'- Entidade ---------------------------------------------------------------------
vaEntCod = entCod$                                 'codigo da entidade
vaEntNom = entNom$                                 'nome da entidade
vaEntIde = entCod$+" - "+entNom$                   'identificacao da entidade


'vaVouNum = FrmNum$(8.0,TxIde$(vuOpc$,"VCH.NUM"))   'numero do vouvher
vaVouNum = FrmNum$(8.0, vuVouNum)                  'numero do vouvher
vaVouBil = vuBilSec$+" "+vuBilFil$+" "+vuBilLug    'bilhete

'vuBilSec$ = SqlQryCmp$(idq$,"LUG.Sec$")            'sector
'vuBilFil$ = SqlQryCmp$(idq$,"LUG.Fil$")            'fila

'- Voucher ----------------------------------------------------------------------
vaVouIde   = FrmNum$(8.0,vuVouIde)                 'identificacao
vaVouNrg   = FrmNum$(9.0,vuVouNrg)                 'numero de registos
vaVouVto   = FrmNum$(6.2,vuVouVto)                 'valor acumulado
vaVouAcm   = FrmNum$(6.2,vuVouAcm)                 'valor acumulado
vaVouDif   = FrmNum$(6.2,vuVouDif)                 'diferenca
vaVouObs   = vuVouObs$                             'observacaoes

'contagem
toNrg    = FrmNum$(9.0,TotCnt("vaVouNum",0))    'numero de registos - total
s1Nrg    = FrmNum$(9.0,TotCnt("vaVouNum",1))    'numero de registos - subtotal 1
s2Nrg    = FrmNum$(9.0,TotCnt("vaVouNum",2))    'numero de registos - subtotal 2

'preco/valor
vaBilPrc = FrmNum$(6.2,vuBilPrc)                'preco
toBilPrc = FrmNum$(6.2,Total("vaBilPrc",0))     'preco - total
s1BilPrc = FrmNum$(6.2,Total("vaBilPrc",1))     'preco - subtotal 1
s2BilPrc = FrmNum$(6.2,Total("vaBilPrc",2))     'preco - subtotal 2

'valor para cliente
vaCliDsp = FrmNum$(4.2,vuCliDsp)+"%"            'percentagem de desconto
vaCliDsc = FrmNum$(6.2,vuCliDsc)                'valor de desconto

vaCliFac = FrmNum$(6.2,vuBilPrc)                'valor para cliente
toCliFac = FrmNum$(6.2,Total("vaBilPrc",0))     'valor para cliente - total
s1CliFac = FrmNum$(6.2,Total("vaBilPrc",1))     'valor para cliente - subtotal 1
s2CliFac = FrmNum$(6.2,Total("vaBilPrc",2))     'valor para cliente - subtotal 2

vaCliLiq = FrmNum$(6.2,vuCliLiq)                'valor liquido
toCliLiq = FrmNum$(6.2,Total("vaCliLiq",0))     'valor liquido - total
s1CliLiq = FrmNum$(6.2,Total("vaCliLiq",1))     'valor liquido - subtotal 1
s2CliLiq = FrmNum$(6.2,Total("vaCliLiq",2))     'valor liquido - subtotal 2


'valores para voucher
toVouNrg = FrmNum$(9.0,TotCnt("vaVouIde",0))    'numero de registos - total
s1VouNrg = FrmNum$(9.0,TotCnt("vaVouIde",1))    'numero de registos - subtotal 1
s2VouNrg = FrmNum$(9.0,TotCnt("vaVouIde",2))    'numero de registos - subtotal 2

vaVouPrc = FrmNum$(6.2,vuVouPrc)                'preco
toVouPrc = FrmNum$(6.2,Total("vaVouPrc",0))     'preco - total
s1VouPrc = FrmNum$(6.2,Total("vaVouPrc",1))     'preco - subtotal 1

vaVouLiq = FrmNum$(6.2,vuVouLiq)                'valor liquido
toVouLiq = FrmNum$(6.2,Total("vaVouLiq",0))     'valor liquido - total
s1VouLiq = FrmNum$(6.2,Total("vaVouLiq",1))     'valor liquido - subtotal 1
##


'==============================================================================
#INC
'==============================================================================
Variaveis  comuns                 =[SIG_Dir.Div],LsComVar.std
##


'==============================================================================
#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
'- (64) ------------------------------------------------------>'Comentario
'- (67) --------------------------------------------------------->'Comentario
'- (70) ------------------------------------------------------------>'Comentario


'=============================================================================
'- Inicializar ---------------------------------------------------------------
'=============================================================================
Sub FxIni 'funcao de inicializacao
'nada a excutar
end sub


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


Sub Lst_AJT 'ajuste
'nada a excutar
end sub


'=============================================================================
'- Comum ---------------------------------------------------------------------
'=============================================================================
'-----------------------------------------------------------------------------
'- [TXT] - Listar em modo texto ----------------------------------------------
'-----------------------------------------------------------------------------
Sub Cab80Col   'cabecalho para 80 colunas
FxDiv LstIde,10CPI,0
?@Tit80                                                                     #
End Sub


Sub Cab132Col   'cabecalho para 132 colunas
FxDiv LstIde,16CPI,0
?@Tit132                                                                                                                          #
End Sub


'------------------------------------------------------------------------------
'- [XLS] - Listar para EXCEL --------------------------------------------------
'------------------------------------------------------------------------------
Sub Com_Xls_DocIni 'inicializar documento
dfi$ = FicEmp$("EMP","Ext","dExcel",cmo$)          'directorio de documentos EXCEL
nfi$ = "RND:EncGuiGlb.xls"                         'nome do ficheiro
cmo$ = SigCmoCur$("MIX")                           'modulo corrente
ficDoc$ = FicTmp$(dfi$, nfi$)                      'ficheiro para documento
res = DirCri("D", dfi$)                            'criar directorio para documento

xlsMatNom$ = DocOpc$("DocMat")                     'nome do ficheiro matriz
xlsMat$    = DocOpc$("DocMat+SBT")                 'endereco do ficheiro matriz

res = FicCop(xlsMat$, ficDoc$)                     'criar ficheiro (copia de matriz)
res = XlsPrp(0)                                    'preparar EXCEL
res = XlsDocLer(ficDoc$)                           'ler ficheiro

'res = XlsDocCri("")                                'criar documento
end sub


Sub Com_Xls_DocFim 'terminar documento
'res = XlsLinEli(xlsLin, 1)                         'eliminar linha - ultima
'res = XlsLinEli(xlsLba, 1)                         'eliminar linha - primeira

res = XlsDocDir$("A", dfi$)                        'activar directorio
res = XlsDocGrv(ficDoc$)                           'gravar ficheiro

res = XlsVer(1)                                    'mostrar EXCEL - maximizado
res = XlsLib(0)                                    'libertar EXCEL
end sub


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

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


Sub Com_Xls_LinInc 'incrementar linha
xlsLsa = xlsLin                                    'linha de saida
res = XlsLinIns(xlsLin, 1)                         'juntar linha

'seguinte
xlsLin = xlsLin + 1                                'contar linha
end sub


Sub Com_Xls_LinIni 'iniciar linhas
res = XlsIdePsq("PO_BAS")                          'pesquisar posicao base
linBav = XlsIdePsqRes("L")                         'linha da posicao base

xlsLba = linBav                                    'linha base
xlsLin = linBav + 1                                'contador de linhas usadas
end sub


Sub Com_Xls_LinFim 'fim de linhas
res = XlsLinEli(xlsLin, 1)                         'eliminar linha - ultima
res = XlsLinEli(xlsLba, 1)                         'eliminar linha - primeira

res = XlsIdePsq("PO_FIM")                          'pesquisar posicao final
linFim = XlsIdePsqRes("L")                         'linha da posicao final
end sub


'-----------------------------------------------------------------------------
'- [VAR] - Variaveis ---------------------------------------------------------
'-----------------------------------------------------------------------------
Sub Com_Var_Prp 'preparar variaveis
usaObs$ = ""                                       'anular observacoes

entCod$ = SqlCmp$("ENT.Cod$")                      'entidade - codigo
entNom$ = SqlCmp$("ENT.Des$")                      'entidade - nome

'preparar valores
call Com_Var_PrpDoc                                'preparar variaveis - documento
call Com_Var_PrpCtu                                'preparar variaveis - conta
end sub


Sub Com_Var_PrpDoc 'preparar variaveis - documento
vuDocTdo$ = SqlCmp$("MST.Tdoc$")                   'tipo de documento
vuDocNdo$ = SqlCmp$("MST.Ndoc$")                   'numero de documento
vuDocCtu$ = SqlCmp$("MST.CtEnt$")                  'conta
vuGuiDtr  = SqlCmp("MST.Dtl")                      'data

'formatar
vuGuiTdo$ = vuDocTdo$                              'tipo de documento
vuGuiNdo$ = FrmNdo$("46",vuDocTdo$,vuDocNdo$)      'numero de documento
vuGuiDoc$ = vuDocTdo$ + " " + vuGuiNdo$            'documento
vuGuiDtr$ = FrmDt$("",vuDocDtr)                    'formatar data
end sub


Sub Com_Var_PrpCtu 'preparar variaveis - conta
res  = CtaContaLer(VuDocCtu$)                      'preparar dados da conta
vuCtuCov$ = CTA_MST_Ct$                            'codigo formatado
vuCtuNom$ = CTA_MST_Nome$                          'nome
vuCtuIde$ = vuCtuCov$ + " - " + vuCtuNom$          'identificacao
end sub


Sub Com_Var_PrpArt 'preparar variaveis - artigo
res  = StcArtLer(VuArt$)                           'preparar dados do artigo

vuArtEqv$ = STC_MstEx_EqvChv$                      'chave de equivalencia
if vuArtEqv$ = "" then                             'sem chave de equivalencia ?
   vuArtEqv$ = STC_MST_Art$                        'usa codigo do artigo como chave de equivalencia
end if

vuArtCov$ = StcCodFrm$(STC_MST_Art$)               'codigo formatado
vuArtNom$ = STC_MST_Nome1$                         'nome
vuArtIde$ = vuArtCov$ + " - " + vuArtNom$          'identificacao
end sub


'==============================================================================
'- [TXT] - Listar em modo texto -----------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- [TXT] - Vouchers -----------------------------------------------------------
'------------------------------------------------------------------------------
Sub TX_GuiCab_Jet 'listar cabecalho - JET
tipSql$= "JET"                                    'tipo de SQL

call TX_GuiCab                                    'listar cabecalho
end sub


Sub TX_GuiCab_Sqs 'listar cabecalho - SQL Server
tipSql$= "SQS"                                    'tipo de SQL

call TX_GuiCab                                    'listar cabecalho
end sub


Sub TX_Gui_DocIni 'inicializar
acmCliFac = 0                                      'limpar acumulador

lisBil = 0                                         'nao listar bilhetes
end sub


Sub TX_GuiCab 'listar cabecalho
lstTit$ = "Entidades / Vouchers"                   'titulo
call Cab132Col                                     'listar cabecalho

?Data: @DataExt                                                                                                       Folha No: @Pag#
?====================================================================================================================================
?|  Voucher              |  Bilhete              |     Valor total   | Desconto |  Valor a facturar |  Observações                  |
?====================================================================================================================================

'print string$(132,"-")
end sub


Sub TX_GuiLin 'listar linha
call Com_Var_Prp                                   'preparar variaveis
call LstVou_Prp                                    'listar voucher - preparar

if usaVou = 1 then                                 'entidade com voucher ?
? @vaEntIde                                                                                                                         #

   call LstVou_Exe                                 'listar voucher
end if
end sub


Sub LstVou_Prp 'listar voucher - preparar
call ResVouPrp                                     'preparar resumo

idq$ = "VOU"                                       'identificador do query
res   = SqlOpcAct("ENT.COD",entCod$)               'registar entidade

'exi   = SqlQryGer(idq$,"Vou_Ent")                  'preparar registos
sqlUsa$ = "Vou_Ent_" + tipSql$                     'SQL a usar

exi   = SqlQryGer(idq$, sqlUsa$)                   'preparar registos

usaVou   = exi                                     'validade de vouchers para entidade
vuCliDsp = GbiDscPrp(entCod$)                      'preparar desconto
end sub


Sub LstVou_Exe 'listar voucher - executar
if lisBil = 1 then                                 'listar bilhetes ?
   tmp = CntLin("INC", 2)                          'contar linhas
   print string$(132,"-")
else
   tmp = CntLin("INC", 1)                          'contar linhas
end if

exi = usaVou                                       'validade de uso de voucher
while exi = 1
vuOpc$    = SqlQryCmp$(idq$,"LUG.DivOpc$")         'campos opcionais
vuVouNum  = TxIde$(vuOpc$,"VCH.NUM")               'numero do vouvher
vuBilUtz$ = SqlQryCmp$(idq$,"LUG.OdaUtz$")         'vendedor
vuBilSec$ = SqlQryCmp$(idq$,"LUG.Sec$")            'sector
vuBilFil$ = SqlQryCmp$(idq$,"LUG.Fil$")            'fila
vuBilLug  = SqlQryCmp(idq$,"LUG.Lug")              'lugar
vuBilPrc  = SqlQryCmp(idq$,"LUG.Prc")              'preco

vaChv$ = vuVouNum                                  'chave de acumulacao

vTot     = vuBilPrc                                'valor total
vuCliDsc = GbiDscCalc(vTot, vuCliDsp)              'calcular desconto
vuCliLiq = vTot - vuCliDsc                         'valor liquido

call ResAcmPrc                                     'acumular - preco
call ResAcmAdi                                     'acumular - rgistar valor adicional

if lisBil = 1 then                                 'listar bilhetes ?
   tmp = CntLin("INC", -1)                         'contar linha
?             @vaVouNum     @vaVouBil                     @vaBilPrc   @vaCliDsp          @vaCliLiq                                  #
end if

'seguinte
exi = SqlQryRgs(idq$)                              'registo seguinte
wend

if lisBil = 1 then                                 'listar bilhetes ?
?  Subtotal: -----------------------------------------------------------------------------------------------------------------------#
?                           @s1Nrg                        @s1BilPrc   @vaCliDsp          @s1CliLiq                                  #

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

x = TotLpz(1)                                      'limpar totais
acmCliFac = acmCliFac + vuCliDsc                   'acumular desconto

call LstRes                                        'listar resumo
end sub


Sub LstRes 'listar resumo
tmp = CntLin("INC", 1)                             'contar linhas
?- Valor por voucher ---------------------------------------------------------------------------------------------------------------#

'listar voucher
mo$  = "*"                                         'modo - geral
grp$ = ""                                          'grupo

nrg = ResGrpPrp(mo$, grp$)                         'preparar grupo a listar
For i = 1 to nrg
tmp = CntLin("INC", 1)                             'contar linha
chv$ = ResIdxChv$(i)                               'chave para posicao

vuVouIde  = chv$                                   'voucher
vuVouNrg  = ResAcmCon("A", chv$, "NRG")            'consultar numero de registos
vuVouVto  = ResAcmCon("A", chv$, "VTO")            'consultar valor total
vuVouAcm  = ResAcmCon("A", chv$, "ACM")            'consultar valor acumulado
vuVouCli  = ResAcmCon("A", chv$, "CLI")            'consultar valor cliente
vuVouVnd$ = ResAdiCon$(chv$, "VND")                'consultar vendedor

vuVouDif  = vuVouVto - vuVouAcm                    'diferenca
vuVouObs$ = vuVouVnd$                              'observacaoes

vuVouPrc = vuVouAcm                                'preco do voucher

vTot     = vuVouAcm                                'valor total
vuCliDsc = GbiDscCalc(vTot, vuCliDsp)              'calcular desconto
vuVouLiq = vTot - vuCliDsc                         'valor liquido

tmp = CntLin("INC", -1)                            'contar linha
?   @vaVouIde               @vaVouNrg                     @vaVouPrc   @vaCliDsp          @vaVouLiq    @VaVouObs                     #
Next


if lisBil = 0 then                                 'nao lista bilhetes ?
   tmp = CntLin("INC", 1)                          'contar linha
?  Subtotal: -----------------------------------------------------------------------------------------------------------------------#
?                           @s1VouNrg_x                   @s1VouPrc   @vaCliDsp          @s1VouLiq                                  #
end if

print                                              'listar separacao
tmp = CntLin("INC", 1)                             'contar linha
end sub


Sub TX_GuiFim 'listar fim
?====================================================================================================================================
if lisBil = 1 then                                 'lista bilhetes ?
?                           @toNrg                        @toBilPrc                      @toCliLiq                                  #
else
?                           @toVouNrg                     @toVouPrc                      @toVouLiq                                  #
end if
?====================================================================================================================================
FxDiv LstPer,SP
end sub


'==============================================================================
'#RES - Funcoes para resumos
'==============================================================================
Sub ResVouPrp 'preparar
res = ResIni(4)                                    'inicializar

'preparar campos acumuladores
res = ResCmpReg("NRG", "NRG - Registos")           'registar acumulador
res = ResCmpReg("VTO", "VTO - Valor total")        'registar acumulador
res = ResCmpReg("ACM", "ACM - Valor acumulado")    'registar acumulador

'diversos
res = ResAcmPrp("")                                'preparar acumulacao
end sub


Sub ResAcmPrc 'acumular - preco
res = ResAcm(vaChv$, 1, 0, vuBilPrc)               'acumular
end sub


Sub ResAcmAdi 'acumular - rgistar valor adicional
res = ResAdiReg(vaChv$, "VND", vuBilUtz$)          'registar vendedor
end sub

##


'==============================================================================
#INC
'==============================================================================
Funcoes comuns                    =[SIG_Dir.Div],LsComPgm.std
##
