'Nome       : StcArtEqv.sql
'Tipo       : SQL
'Data       : 2016/10/21
'Versao     : 1.0
'Descricao  : STC - Arigos equivalentes

'==============================================================================
'#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","Cemp,Emp_Dat.mdb")
'Base de dados           [BD]=EmpFic$("EMP","Stc,Stc.mdb")


'------------------------------------------------------------------------------
'- generico -------------------------------------------------------------------
'------------------------------------------------------------------------------
Nome do artigo [Cmd]=ArtNom=+
   +SELECT Nome1$ as [NOME$] +
   +FROM {TB_StcMst} +
   +WHERE Art$ = '{ART.COD}'


'------------------------------------------------------------------------------
'- Artigos equivalentes -------------------------------------------------------
'------------------------------------------------------------------------------
Gerar registos      [Cmd]=ArtEqv=+
   +SELECT MST.Art$ AS ArtCod, MST.Nome1$ AS ArtDes, +
   +       [EQV].Cod$ AS EqvCOD, +
   +       [EQV].Tpc$   AS EqvTip, [EQV].Des$ AS EqvDes, [EQV].Qua  AS EqvQua, +
   +       [EQV].CtFor$ AS EqvCtf +
   +FROM {TB_StcMst} AS MST +
   +LEFT JOIN StcArtEqv AS EQV ON MST.Art$ = [EQV].Art$ +
   +WHERE MST.RecVal <> 255 +
   +AND   [EQV].Art$  IS NOT NULL +
   +AND   MST.Art$    BETWEEN '{Opc_Art.Ini}'   AND '{Opc_Art.Fim}' +
   +ORDER BY MST.Art$, [EQV].Cod$

##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=XlsArtEqv,XLS - Artigos Equivalentes

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

'funcoes de listagem
Base para documento         [FxDOC]=XlsArtEqv
Listar cabecalho            [FxCAB]=XlsArtEqv_Cab
Listar linhas               [FxLIN]=XlsArtEqv_Lin
Listar fim                  [FxFIM]=XlsArtEqv_Fim

'controlo de listagem SQL
Gerador de dados a listar  [SQLDat]=ArtEqv
Subtotalizadores           [SQLSbt]=ArtCod

Matriz auxiliar            [DocMat]=StcArtEqv.xls
##


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

'- dados a listar -------------------------------------------------------------
vaObs    = usaObs$                              'observacaoes

'artigo
vaArtCod = vuArtCod$                            'codigo
vaArtCov = vuArtCov$                            'codigo formatado
vaArtNom = vuArtNom$                            'nome

'artigo equivalente
vaEqvCod = vuEqvCod$                            'codigo equivalente
vaEqvDes = vuEqvDes$                            'descricao
vaEqvTip = vuEqvTip$                            'tipo
vaEqvQua = FrmNum$(6.3,vuEqvQua)                'quantidade
vaEqvCtf = vuEqvCtf$                            'conta do fornecedor


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

'resumo
toResQu  = FrmNum$(6.3,Total("vaResQu",0))      'quantidade - total
s1ResQu  = FrmNum$(6.3,Total("vaResQu",1))      'quantidade - subtotal 1
s2ResQu  = FrmNum$(6.3,Total("vaResQu",2))      'quantidade - subtotal 2

##


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


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 ---------------------------------------------------------------------
'=============================================================================
'-----------------------------------------------------------------------------
'- [VAR] - Variaveis ---------------------------------------------------------
'-----------------------------------------------------------------------------
Sub Com_Var_Con 'consultar variaveis
'artigo
vuArtCod$ = SqlCmp$("ArtCod")                      'artigo
vuArtDes$ = SqlCmp$("ArtDes")                      'descricao

'artigo equivalente
vuEqvCod$ = SqlCmp$("EqvCod")                      'artigo
vuEqvDes$ = SqlCmp$("EqvDes")                      'descricao
vuEqvTip$ = SqlCmp$("EqvTip")                      'tipo
vuEqvQua  = SqlCmp$("EqvQua")                      'quantidade
vuEqvCtf$ = SqlCmp$("EqvCtf")                      'conta de fornecedor
end sub


Sub Com_Var_Prp 'preparar variaveis
usaObs$ = ""                                       'anular observacoes
call Com_Var_Con                                   'consultar variaveis

'preparar valores
call Com_Var_PrpArt                                'preparar variaveis - artigo
end sub


Sub Com_Var_PrpArt 'preparar variaveis - artigo
'res     = SqlOpcAct("Art.Cod",artCod$)             'registar artigo
'res     = SqlCalc("ARTNOM")                        'preparar nome do artigo

vuArtCov$ = StcCodFrm$(vuArtCod$)                  'codigo formatado
vuArtIde$ = vuArtCov$ + " - " + vuArtDes$          'identificacao
end sub


'-----------------------------------------------------------------------------
'- [TXT] - Listar em modo texto ----------------------------------------------
'-----------------------------------------------------------------------------
Sub Com_Txt_Cab 'cabecalho - texto
'cabTit$ = "Titulo"
FxDiv LstIde,10CPI,0
print TxTit$("TT=10CPI, LD, PT=40C, TL=10CPI",comCabTit$)
?Data: @DataExt                                                   Folha No: @Pag#
?================================================================================
?  Codigo         Nome                              Quantidade           Valor  #
'123456789.12345  123456789.123456789.123456789.12  12,345.123   -123,456,789.12#
?================================================================================
end sub


Sub Com_Txt_LinExe 'executar linha
?@vEntCov        @vEntIde                           @vaResQu     @vaResVt       #
end sub


Sub Com_Txt_Fim 'terminar
?================================================================================
?   Totais: @toNrg                                  @toResQu     @toResVt       #
?================================================================================
FxDiv LstPer,SP
'Print PrtCmd$("[SP]");
end sub


Sub Com_Txt_LinTit1 'titulo 1
if titIde$ <> "" then                              'ha titulo ?
   tmp = CntLin("INC", 1)                          'contar linhas
   print tab(5) titIde$                            'listar 
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Txt_LinTit2 'titulo 2
if titIde$ <> "" then                              'ha titulo ?
   tmp = CntLin("INC", 1)                          'contar linhas
   print tab(5) titIde$                            'listar 
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Txt_LinSbt1 'subtotal 1
nrg = TotCnt("vEntCov",1)                          'numero de registos

if nrg > 1 then                                    'listar numero ?
?           @s1Nrg                                  @s1ResQu     @s1ResVt       #
   tmp=CntLin("INC", 1)                            'contar linhas
end if

tmp=CntLin("INC", 1)                               'contar linhas
print                                              'separar

x = TotLpz(1)                                      'limpar totais
end sub


Sub Com_Txt_LinSbt2 'subtotal 2
nrg = TotCnt("vEntCov",2)                          'numero de registos

if nrg > 1 then                                    'listar numero ?
?           @s2Nrg                                  @s2ResQu     @s2ResVt       #
   tmp=CntLin("INC", 1)                            'contar linhas
end if

if sepSbt2 = 1 then                                'separar subtotal 2 ?
   tmp=CntLin("INC", 1)                            'contar linhas
   print                                           'separar
end if

sepSbt2 = 1                                        'separar subtotal 2
x = TotLpz(2)                                      'limpar totais
end sub


'------------------------------------------------------------------------------
'- [XLS] - Listar para EXCEL --------------------------------------------------
'------------------------------------------------------------------------------
Sub Com_Xls_DocIni 'inicializar documento
xlsOpcNfi$ = "RND:" + comXlsFic$                   '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$ = comCabTit$                               '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

call XlsComLin_Ini                                 'iniciar linhas

'definicao das colunas
coNrg    = 2                                       'numero de registos - total
coNrs    = 3                                       'numero de registos - subtotal

coCod    = 2                                       'codigo
coNom    = 3                                       'nome

coEqvTip = 4                                       'tipo
coEqvQua = 5                                       'quantidade

coObs    = 6                                       'observacoes
end sub


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


Sub Com_Xls_IncLin 'incrementar linha
'call XlsComLin_Inc                                 'incrementar linha
call XlsComLin_IncRep                              'incrementar linha + repor formato normal

zon$ = XlsZon$(liUsa, coCod,liUsa, coNom)          'zona
'zon$= XlsZonNum$("L", liUsa)                      'zona da linha
res = XlsAli(zon$, "<")                            'alinhamento
end sub


Sub Com_Xls_LinSep 'linha de separacao
call XlsVnd_IncLin                                 'incrementar linha
end sub


Sub Com_Xls_LstLinEqv 'listar linha - equivalencia
res = XlsLst(liUsa, coCod, vuEqvCod$)              'codigo
res = XlsLst(liUsa, coNom, vuEqvDes$)              'nome
res = XlsLst(liUsa, coEqvTip, vuEqvTip$)           'tipo
res = XlsLst(liUsa, coEqvQua, vuEqvQua)            'quantidade

res = XlsLst(liUsa, coObs, vuObs$)                 'quantidade
end sub


Sub Com_Xls_LstTot 'listar totais
call XlsComLin_Fim                                 'fim de linhas

vNrg   = TotCnt("vaResQu", 0)                      'numero de registos
vResQu = Total("vaResQu", 0)                       'quantidade
vResVt = Total("vaResVt", 0)                       'valor

'listar
liUsa = linFim                                     'linha a usar

call XlsComLin_ActBI                               'activar linha em BOLD+ITALICO
'res = XlsLst(liUsa, coNrg, vNrg)                   'numero de registos
'res = XlsLst(liUsa, coResQu, vResQu)               'total quantidade
end sub


Sub Com_Xls_LinTit1 'titulo 1
if titIde$ <> "" then                              'ha titulo ?
   call Com_Xls_IncLin                             'incrementar linha	

   call XlsComLin_ActBI                            'activar linha em BOLD+ITALICO
   res = XlsLst(liUsa, coNom, titIde$)             'listar identificacao
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Xls_LinTit2 'titulo 2
if titIde$ <> "" then                              'ha titulo ?
   call Com_Xls_IncLin                             'incrementar linha	

   res = XlsLst(liUsa, coNom, titIde$)             'listar identificacao
end if

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Xls_SbtNrg 'numero de registos do subtotal
res = XlsLst(liUsa, coNrs, vNrg)                   'numero de registos

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


Sub Com_Xls_LinSbt1 'subtotal 1
vNrg   = TotCnt("vaResQu", 1)                      'numero de registos
vResQu = Total("vaResQu", 1)                       'quantidade
vResVt = Total("vaResVt", 1)                       'valor

if vNrg > 1 then                                   'listar numero ?
   call Com_Xls_IncLin                             'incrementar linha	
   call XlsComLin_ActBI                            'activar linha em BOLD+ITALICO

   call Com_Xls_SbtNrg                             'numero de registos do subtotal
'   res = XlsLst(liUsa, coResQu, vResQu)            'total quantidade
end if

call Com_Xls_IncLin                                'incrementar linha	

x = TotLpz(1)                                      'limpar totais
end sub


Sub Com_Xls_LinSbt2 'subtotal 2
vNrg   = TotCnt("vaResQu", 2)                      'numero de registos
vResQu = Total("vaResQu", 2)                       'quantidade
vResVt = Total("vaResVt", 2)                       'valor

if vNrg > 1 then                                   'listar numero ?
   call Com_Xls_IncLin                             'incrementar linha	
   call XlsComLin_ActBI                            'activar linha em BOLD+ITALICO

   call Com_Xls_SbtNrg                             'numero de registos do subtotal
   res = XlsLst(liUsa, coResQu, vResQu)            'total quantidade
   res = XlsLst(liUsa, coResVt, vResVt)            'total valor
end if

if sepSbt2 = 1 then                                'separar subtotal 2 ?
   call Com_Xls_IncLin                             'incrementar linha	
end if

sepSbt2 = 1                                        'separar subtotal 2
x = TotLpz(2)                                      'limpar totais
end sub


'==============================================================================
'- [TXT] - Listar em modo texto -----------------------------------------------
'==============================================================================
'nao ha


'==============================================================================
'- [XLS] - Listar para XLS ----------------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- [XLS] - Vendas por conta/artigo --------------------------------------------
'------------------------------------------------------------------------------
Sub XlsArtEqv_DocIni 'inicializar documento
comXlsFic$ = "StcArtEqv.xls"                       'nome do ficheiro
comCabTit$ = "Artigos Equivalentes"                'titulo

call Com_Xls_DocIni                                'inicializar documento
end sub


Sub XlsArtEqv_DocFim 'terminar documento
call Com_Xls_DocFim                                'terminar documento
end sub


Sub XlsArtEqv_Lin 'linha
call Com_Var_Prp                                   'preparar variaveis
call Com_Xls_IncLin                                'incrementar linha	

vaCod$  = artCov$                                  'codigo
vaNom$  = artNom$                                  'nome

'listar
call Com_Xls_LstLinEqv                             'listar (equivalencia)
end sub


Sub XlsArtEqv_Fim 'terminar
call Com_Xls_LstTot                                'listar totais
end sub


Sub XlsArtEqv_LinTit1 'titulo 1
call Com_Var_Con                                   'consultar variaveis
call Com_Var_PrpArt                                'preparar variaveis - artigo

titIde$ = vuArtIde$                                'titulo
call Com_Xls_LinTit1                               'listar
end sub


Sub XlsArtEqv_LinSbt1 'subtotal 1
call Com_Xls_LinSbt1                               'listar
end sub

##


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