'Nome       : Iso_Guias.sql
'Tipo       : SQL
'Data       : 2016/03/24
'Versao     : 1.0
'Descricao  : Documentos por Local de Entrega

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.0   2003/??/?? --------------------------------------------------
'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","Cemp,Emp_Dat.mdb")

Dados a listar [Cmd]=DocGuias=+
+SELECT top 1 FROM EncMst 


##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=EncMpv
Nome                       [DocNom]=SqlGuia,Documentos p/ Local Entrega

'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]=GuiaXls
Listar cabecalho            [FxCAB]=GuiaXls_Cab
Listar linhas               [FxLIN]=GuiaXls_Lin, 0
Listar fim                  [FxFIM]=GuiaXls_Fim

Matriz auxiliar            [DocMat]=isoguias.xls

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


'==============================================================================
#VAR - Variaveis
'==============================================================================
Tipo     = MemTxt$(1)
Pag      = Doc_CntPag
Tit080   = TxTit$("TT=10CPI, LD, PT=40C",MemTxt$(1))
Tit132   = TxTit$("TT=16CPI, LD, PT=66C",MemTxt$(1))
DataExt  = FrmVal$(Sig_DtHoje,45,0)


'Campos
ctCod    = SqlCmp$("CtEnt$")
ctNom    = SqlCmp$("CtEnt$")

DocIde   = SqlCmp$("Tdoc$")+" "+FrmNdo$("46",SqlCmp$("Tdoc$"),SqlCmp$("Ndoc$"))
DocDt    = FrmDt$("",SqlCmp("Dtl"))
DocVnd   = FrmNum$( 3.0,SqlCmp("Vend"))
Vnd      = FrmNum$( 3.0,SqlCmp("Vend"))

vDocV1   = FrmNum$( 10.2,SqlCmp("ValTot"))
vDocV2   = FrmNum$( 10.2, val(TxIde$(SqlCmp$("EncMst.Opc$"),"TotMoeAlt")))

tDocN    = FrmNum$(  5.0,TotCnt("vDocV1",0))
tDocV1   = FrmNum$( 10.2,total(vDocV1,0))
tDocV2   = FrmNum$( 10.2,total(vDocV2,0))

sDocN    = FrmNum$(  5.0,TotCnt("vDocV1",1))
sDocV1   = FrmNum$( 10.2,total(vDocV1,1))
sDocV2   = FrmNum$( 10.2,total(vDocV2,1))
##


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

SUB FxIni 'funcao de inicializacao
x = VBS_IniLoc(a)                          'prepara array
LinP  = 1
LinPX = 1
col   = 1
liUsa = 8
LocP$ = ""
end sub


SUB FxFim 'funcao de finalizacao
end sub


SUB Lst_AJT 'ajuste
end sub



'=============================================================================
' XLS - Funcoes comuns
'=============================================================================
Sub Xls_DocIni 'inicializar documento
dfi$ = FicEmp$("EMP","Ext","dExcel",cmo$)          'directorio de documentos EXCEL
nfi$ = "RND:IsoGuia.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 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 = XlsPrt(1)                                    'listar worksheet
'res = XlsVer(0)                                    'mostrar EXCEL - normal
res = XlsVer(1)                                    'mostrar EXCEL - maximizado
res = XlsLib(0)                                    'libertar EXCEL
end sub


Sub Xls_DocCab 'cabecalho do documento
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

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 Xls_LinInc 'incrementar linha
xlsLsa = xlsLin                                    'linha de saida
res = XlsLinIns(xlsLin, 1)                         'juntar linha

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


Sub 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 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


'=============================================================================
' Listagem Mapa de Vendas para EXCEL
'=============================================================================
Sub GuiaXls_DocIni 'inicializar documento
call Xls_DocIni                                    'inicializar documento
end sub

Sub GuiaXls_Cab 'preparar para listar
res = XlsWks("Valores")                            'activar worksheet
call Xls_DocCab                                    'cabecalho do documento
res = XlsIdeLst("Lst_Tipo", "")                    'anular tipo da listagem

call Xls_LinIni                                    'iniciar linhas

'definicao das colunas
coCt  = 2                                          'codigo conta
coIde = 3                                          'nome
coDoc = 4                                          'documento
coPtv = 5                                          'posto de venda/vendedor
coVnd = 6                                          'vendedor
coDt  = 7                                          'data do documento
coIlq = 8                                          'valor iliquido
coIva = 9                                          'iva
coDes =10                                          'desconto
coLiq =11                                          'liquido
coPai =12                                          'pais
coMoe =13                                          'moeda
end sub


Sub GuiaXls_Lin 'Memorizar Local / Guias
LocX$ = VarAlt$("ENC_MST","Cta_Ang_Local$,LocEnt$")
LocG$ = AjtCmp$(LocX$)
Ndoc$ = Enc_Mst_Ndoc$
Col   = 1

call Se_Existe
if ExiSn = 1   then
   ColX   = VBS_LerCol(linP)
   ColUsa = ColX + 1
   x=VBS_MemLoc(LinP, Col, LocG$, ndoc$, ColUsa)
else
   LinP   = LinPX
   ColUsa = 3
   x=VBS_MemLoc(LinP, Col, LocG$, ndoc$, ColUsa)
   LinPX  = LinPX + 1
end if
end Sub

Sub Se_Existe                'Se já existe
ExiSn = 0
for Lin=1 to LinPX
Loc$=VBS_LerLoc$(lin)

if Loc$ = LocG$   then
    ExiSn = 1
    LinP  = Lin
end if
next
End Sub

Sub GuiaXls_Fim 'terminar documento
Arg$=""
res =  SqlDbPrp(arg$)
tmp=CntLin("INC",1)                              'contar linhas
TdocG$ = "GT"
'NdocG$ = "201600000545"

Call Lista_Mapa
call Xls_DocFim                                    'terminar/mostrar documento
end sub

Sub Lista_Mapa                                     ' Listar Mapa
for i=1 to LinPX
Loc$   = VBS_LerLoc$(i)
call lerNdoc
next
End Sub

Sub LerNdoc   ' Ler o Nº Documento
ColX   = VBS_LerCol(i)
idq1$="1"
idq2$="2"
idq3$="3"

for Col=3 to ColX
NdocG$ = VBS_LerNdoc$(i,Col)

Sql$=       "SELECT EncMst.Tdoc$, EncMst.Ndoc$, EncMst.Dtl, EncMst.CtEnt$, EncMov.Art$, EncMov.Qu, EncMov.Prc, EncMov.Iva"
Sql$=Sql$ + " FROM EncMst INNER JOIN EncMov ON EncMst.Tdoc$ = EncMov.Tdoc$ AND EncMst.Ndoc$ = EncMov.Ndoc$"
Sql$=Sql$ + " WHERE EncMst.Tdoc$='"+TdocG$+"'"+" AND EncMst.Ndoc$='"+NdocG$+"'"+" AND EncMov.TpRg=1"

res = SqlQryGer(idq1$,sql$)   'gerar recordset
'msgbox "",res,Sql$

while res=1
NdocG$   = SqlQryCmp$(idq1$,"EncMst.Ndoc$") 
DocLst$  = FrmNdo$("",TdocG$,NdocG$)
DtLst$   = FrmDt$("",SqlQryCmp(idq1$,"Dtl"))
Cnt$     = SqlQryCmp$(idq1$,"EncMst.CtEnt$")
res$     = CtaContaLer(Cnt$)
CntG$    = Cnt$+ " - "+Cta_Mst_Nome$
Art$     = SqlQryCmp$(idq1$,"EncMov.Art$")
res$     = StcArtLer(Art$)
ArtG$    = Art$+" - "+Stc_Mst_Nome1$
Quant    = SqlQryCmp(idq1$,"EncMov.Qu")
Call ListaDocument

Res   = SqlQryRgs(idq1$)
wend
next
end Sub

Sub ListaDocument
LocL$ = Loc$
res = XlsLinIns(liUsa, 1)                         'juntar linha

if Loc$ <> LocP$   then
   LocP$ = Loc$
   res = XlsLinIns(liUsa, 1)                         'juntar linha
   LiUsa = LiUsa + 1
else
   LocL$ = ""
end if

res = XlsLst(liUsa,2 , LocL$)
res = XlsLst(liUsa,3 , DocLst$)
res = XlsLst(liUsa,4 , DtLst$)
res = XlsLst(liUsa,5 , CntG$)
res = XlsLst(liUsa,6 , ArtG$)
res = XlsLst(liUsa,7 , Quant)

LiUsa = LiUsa + 1
end sub


##

'-----------------------------------------------------------------------------
#VBS
'-----------------------------------------------------------------------------
dim Local()                           'linhas memirizadas

Function IniLoc(arg) 'prepara array
'arg        - argumento (nao usado)

'msgbox "IniLin 1"

redim Local(100, 100)                   'reservar espaco para linhas

'msgbox "IniLin 2"
end function


Function MemLoc(LinP, Col, Loc, ndoc, colUsa) 'memorizar linha
'Lin        - Linha
'Col        - Coluna
'loc        - Local
'ndoc       - numero de documento
'ColUsa     - Coluna a Usar


Local(LinP,1)=ColUsa                    'Coluna Usada
Local(LinP,2)=Loc                    'Local
Local(LinP,ColUsa)=ndoc                 'N. Documento

'msgbox "MemLoc " & linP & " >" & Col & "<" & " >" & Loc & "<" & " >" & ndoc & "<" & " >" & ColUsa & "<"
'msgbox "MemLin " & lin & " >" & tdoc & "< >" & vl & "<"
'msgbox vl 
end function

Function LerLoc(lin) 'ler tipo. doc.
'lin        - linha
LerLoc=Local(lin,2)                 'tipo de doc.

'msgbox "LerLoc >" & LerLoc & "<" & Lin
end function

Function LerCol(lin) 'ler tipo. doc.
'lin        - linha
LerCol=Local(lin,1)                 'tipo de doc.

end function


Function LerNdoc(lin, Col) 'ler num. doc.
'lin        - linha
'Col        - Coluna
LerNdoc=Local(lin,Col)                 'num. de doc.

end function

##


