'Nome       : EncGuiGlb.sql
'Tipo       : LST
'Data       : 2013/10/21
'Versao     : 1.0
'Descricao  : ENC - Listagem de Guias Globais

'==============================================================================
'#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")


'------------------------------------------------------------------------------
'- Guias Globais --------------------------------------------------------------
'------------------------------------------------------------------------------
Lista de guias [Cmd]=GuiGlb=+
   +SELECT * FROM EncMst MST +
   +WHERE MST.RecVal <> 255 +
   +AND   MST.[Tdoc$]  IN('{Opc_Tdoc}') +
   +AND   MST.[Ndoc$]  BETWEEN '{Opc_Ndoc.Ini}' AND '{Opc_Ndoc.Fim}' +
   +AND   MST.[CtEnt$] BETWEEN '{Opc_Ct.Ini}'   AND '{Opc_Ct.Fim}' +
   +AND   MST.Dtl      BETWEEN  {Opc_Dtl.Ini}   AND  {Opc_Dtl.Fim} +
   +ORDER BY MST.[Ndoc$]


'------------------------------------------------------------------------------
'- Artigos da Guia Global -----------------------------------------------------
'------------------------------------------------------------------------------
Artigos da guia [Cmd]=GuiGlb_Art=+
   +SELECT * FROM EncMov MOV +
   +WHERE MOV.RecVal <> 255 +
   +AND   MOV.[TpRg]   = 1 +
   +AND   MOV.[Tdoc$]  = '{DOC.Tdo}' +
   +AND   MOV.[Ndoc$]  = '{DOC.Ndo}' +
   +ORDER BY MOV.[Art$]


'------------------------------------------------------------------------------
'- Documentos de entrega por Guia Global --------------------------------------
'------------------------------------------------------------------------------
Documentos de entrega [Cmd]=GuiGlb_Ent=+
   +SELECT * FROM EncGdo GDO +
   +WHERE GDO.RecVal <> 255 +
   +AND   GDO.[Lig$]   = 'CPA' +
   +AND   GDO.[Tdoc2$] = '{DOC.Tdo}' +
   +AND   GDO.[Ndoc2$] = '{DOC.Ndo}' +
   +ORDER BY GDO.[Tdoc1$],GDO.[Ndoc1$]

##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=GUI_TXT,Guias Globais

'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
Listar linhas               [FxLIN]=Tx_GuiLin,0
Listar fim                  [FxFIM]=Tx_GuiFim

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


'==============================================================================
#DOC_x - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=GUI_XLS,Guias Globais (XLS)

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

'funcoes de listagem
Base para documento         [FxDOC]=XlsGui
Listar cabecalho            [FxCAB]=XlsGui_Cab
Listar linhas               [FxLIN]=XlsGui_Lin,0
Listar fim                  [FxFIM]=XlsGui_Fim

Matriz auxiliar            [DocMat]=EncGuiGlb.xls

'controlo de listagem SQL
Gerador de dados a listar  [SQLDat]=GuiGlb
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

'- Diversos ---------------------------------------------------------------------

##


'==============================================================================
#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$ = "Guias Globais"                          'titulo
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

'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] - Guias Globais ------------------------------------------------------
'------------------------------------------------------------------------------
Sub TX_GuiCab 'listar cabecalho
lstTit$ = "Guias Globais"                          'titulo
call Cab132Col                                     'listar cabecalho

?Data: @DataExt                                                                                                       Folha No: @Pag#
?====================================================================================================================================
?|  Guia Global                           |     Data     |              |              |                                            |
?|----------------------------------------------------------------------------------------------------------------------------------|
?|  Artigo                                |  Quantidade  |   Entregue   |  Diferenca   |   Observacoes                              |
?====================================================================================================================================

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


Sub TX_GuiLin 'listar linha
call Com_Var_Prp                                   'preparar variaveis

tmp = CntLin("INC", 2)                             'contar linhas
? @vaGuiDoc                                  @vaGuiDtr                                   @vaCtuIde                                  #
print string$(132,"-")

'acumular artigos da guia
call ResQuaPrp                                     'preparar resumos

acmTdo$ = vuDocTdo$                                'acumular - tipo de documento
acmNdo$ = vuDocNdo$                                'acumular - numero de documento
call AcmDocTot                                     'acumular documento - total
call AcmEnt                                        'acumular entrega

'listar artigos
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

vuArt$    = chv$                                   'artigo
call Com_Var_PrpArt                                'preparar variaveis - artigo

vuQuTot   = ResAcmCon("A", chv$, "TOT")            'consultar quantidade total
vuQuEnt   = ResAcmCon("A", chv$, "ENT")            'consultar quantidade entregue
vuQuDif   = vuQuTot - vuQuEnt                      'diferenca
vuArtObs$ = ""                                     'observacaoes

? @vaArtIde                                @vaQuTot       @VaQuEnt       @VaQuDif       @VaArtObs                                   #
Next

if vuEntLdo$ <> "" then                            'ha documentos de entrega ?
tmp = CntLin("MIN", 2)                             'minimo de linhas
?             - Documentos de entrega -----------------------------------------------------------------------------------------------

   nls = TxtSepLin(vuEntLdo$, 120, ",")            'separar documentos em linhas

   for cnt = 1 to nls
   tmp = CntLin("INC", 1)                          'contar linha
   Print Tab(14) ConTx$(cnt)                       'listar
   next
end if

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


Sub TX_GuiFim 'listar fim
?====================================================================================================================================
FxDiv LstPer,SP
end sub


'==============================================================================
'- [XLS] - Listar para XLS ----------------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- [XLS] - Guias Globais ------------------------------------------------------
'------------------------------------------------------------------------------
Sub XlsGui_DocIni 'inicializar documento
call com_Xls_DocIni                                'inicializar documento
call XlsTab_Prep                                   'preparar
end sub


Sub XlsGui_DocFim 'terminar documento
call Com_Xls_DocFim                                'terminar/mostrar documento
end sub


Sub XlsGui_Prep 'preparar para listar
lstTit$ = "Guias Globais")                         'titulo da listagem

res = XlsWks("Valores")                            'activar worksheet
call Com_Xls_DocCab                                'cabecalho do documento
res = XlsIdeLst("Lst_Tipo", "")                    'anular tipo da listagem

call Com_Xls_LinIni                                'iniciar linhas

'definicao das colunas
coIde  =  2                                        'identificacao
end sub


Sub XlsGui_Lin 'linha de valores
call XlsTab_IncLin                                 'incrementar linha	

'valores a listar
V01$ = left$(SqlCmp$("V01"), 08)                   'valor 1

'listar
res = XlsLst(liUsa,coIde, V01$)                    'identificacao

'seguinte
antGrp$ = uGrp$                                    'actualizar grupo anterior
End sub


Sub XlsTab_IncLin 'incrementar linha	
call Com_Xls_LinInc                                'incrementar linha
liUsa =  xlsLsa                                    'linha a usar

zon$= XlsZonNum$("L", liUsa)                       'zona da linha
res = XlsFon(zon$, ",,B-I-")                       'activar fonte bold, italico
end sub


Sub XlsTab_Fim 'terminar
call Com_Xls_LinFim                                'fim de linhas

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


'==============================================================================
'#RES - Funcoes para resumos
'==============================================================================
Sub ResQuaPrp 'preparar
res = ResIni(3)                                    'inicializar

'preparar campos acumuladores
res = ResCmpReg("TOT", "TOT - Quantidade total")      'registar acumulador
res = ResCmpReg("ENT", "ENT - Quantidade entregue")   'registar acumulador

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


Sub ResAcmTot 'acumular - total
res = ResAcm(vaChv$, qaTot, 0)                     'acumular
end sub


Sub ResAcmEnt 'acumular - entrega
res = ResAcm(vaChv$, 0, qaEnt)                     'acumular
end sub


Sub AcmDocTot 'acumular documento - total
idq$ = "TOT"                                       'identificador do query
res   = SqlOpcAct("DOC.Tdo",acmTdo$)               'registar tipo de documento
res   = SqlOpcAct("DOC.Ndo",acmNdo$)               'registar numero de documento

exi   = SqlQryGer(idq$,"GuiGlb_Art")               'preparar movimentos
while exi = 1
vArt$ = SqlQryCmp$(idq$,"Art$")                    'artigo
vQua  = SqlQryCmp(idq$,"Qu")                       'quantidade

acmArt$ = vArt$                                    'artigo para acumulacao
call AcmChvAcm                                     'preparar chave de acumulacao (artigo)

vaChv$ = acmArtEqv$                                'chave de acumulacao
qaTot  = vQua                                      'quantidade
call ResAcmTot                                     'acumular - total

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


Sub AcmEnt 'acumular entrega
idqEnt$ = "ENT"                                    'identificador do query
res   = SqlOpcAct("DOC.Tdo",acmTdo$)               'registar tipo de documento
res   = SqlOpcAct("DOC.Ndo",acmNdo$)               'registar numero de documento

vuEntLdo$ = ""                                     'limpar lista de documentos de entrega

exi   = SqlQryGer(idqEnt$,"GuiGlb_Ent")            'preparar documentos
while exi = 1
veTdo$ = SqlQryCmp$(idqEnt$,"Tdoc1$")              'tipo de documento
veNdo$ = SqlQryCmp$(idqEnt$,"Ndoc1$")              'numero de documento

vuTdo$ = TxtTamMin$(veTdo$, 6)                     'ajustar tamanho de tipo de documento

veNdv$ = FrmNdo$("46",veTdo$,veNdo$)               'formatar numero de documento
'veDoc$ = veTdo$ + " " + veNdv$                     'documento
veDoc$ = vuTdo$ + " " + veNdv$                     'documento

if vuEntLdo$ <> "" then                            'ja ha documentos na lista ?
   vuEntLdo$ = vuEntLdo$ + ","                     'juntar separador da lista
end if
vuEntLdo$ = vuEntLdo$ + veDoc$                     'juntar documento a lista

call AcmEntDoc                                     'acumular entrega - documento

'seguinte
exi = SqlQryRgs(idqEnt$)                           'registo seguinte
wend
end sub


Sub AcmEntDoc 'acumular entrega - documento
idqEdo$ = "ENTDOC"                                 'identificador do query
res   = SqlOpcAct("DOC.Tdo",veTdo$)                'registar tipo de documento
res   = SqlOpcAct("DOC.Ndo",veNdo$)                'registar numero de documento

exi   = SqlQryGer(idqEdo$,"GuiGlb_Art")            'preparar movimentos
while exi = 1
vArt$ = SqlQryCmp$(idqEdo$,"Art$")                 'artigo
vQua  = SqlQryCmp(idqEdo$,"Qu")                    'quantidade

acmArt$ = vArt$                                    'artigo para acumulacao
call AcmChvAcm                                     'preparar chave de acumulacao (artigo)

vaChv$ = acmArtEqv$                                'chave de acumulacao
qaEnt  = vQua                                      'quantidade
call ResAcmEnt                                     'acumular - entrega

'seguinte
exi = SqlQryRgs(idqEdo$)                           'registo seguinte
wend
end sub


Sub AcmChvAcm 'preparar chave de acumulacao (artigo)
res  = StcArtLer(acmArt$)                          'preparar dados do artigo

acmArtEqv$ = STC_MstEx_EqvChv$                     'chave de equivalencia
if acmArtEqv$ = "" then                            'sem chave de equivalencia ?
   acmArtEqv$ = STC_MST_Art$                       'usar codigo do artigo como chave de equivalencia
end if
end sub

##


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