'Nome       : RquArt.sql
'Tipo       : SQL
'Data       : 2016/08/17
'Versao     : 1.1
'Descricao  : Resumo de quantidades por artigo

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.1   ____/__/__ --------------------------------------------------
'Alterado acesso a tabela StcSMst para {TB_StcMst}

'- Versao : 1.0   2004/02/07 --------------------------------------------------
'Versao base


'==============================================================================
'#INF - Informacao
'==============================================================================
'------------------------------------------------------------------------------
' codigos de movimento
'------------------------------------------------------------------------------
'Cod  Descricao            Tipo Notas
'---  -------------------- ---- -----------------------------------------------
' 1 - Compra               Ent
' 2 - Dev.Cliente          Ent
' 3 - Dev.Fornec           Sai
' 4 - Quebra               Sai
' 5 - Transferencia        Ent
' 6 - Custos               Ent So deve ser considerado o valor
' 7 - E.Diversas           Ent
' 8 - S.Diversas           Ent
' 9 - Venda                Sai
'10 - Enc.Forn.            --- Nao actualiza existencias
'11 - Act.Inv.Saida        Sai
'12 - Act.Inv.Entr.        Ent
'13 - R.Encom.Forn.        Ent Semelhante a compra
'14 - Saida Taras          --- Nao usado
'15 - Entrada Taras        --- Nao usado
'16 - N.Credito            Ent Semelhante a venda - Anulacao
'17 - Trf.Armazem          --- Apenas movimenta armazens
'18 - Inc.Custos           Ent So deve ser considerado o valor


'==============================================================================
#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 -------------------------------------------------------------------
Preparar artigo               [Cmd]=ArtPrp=+
+SELECT Art$ AS [COD$],Nome1$ as [NOM$],Grupo$ AS [GRP$], Fcnv as Fqu FROM {TB_StcMst} +
+WHERE [Art$] = '{Art.Sel}'

Artigos com movimento         [Cmd]=ArtMov=+
+SELECT DISTINCT Art$ FROM StcMov{Ano} +
+WHERE RecVal<>255 +
+AND [Art$] BETWEEN '{Opc_Art.Ini}' AND '{Opc_Art.Fim}' +
+AND Dtl BETWEEN {Opc_Dtl.Ini} AND {Opc_Dtl.Fim} +
+ORDER BY Art$


'- quantidades movimentadas ---------------------------------------------------
Quantidades entradas          [Cmd]=QuEnt=+
+SELECT Sum(qu) as QuEnt FROM StcMov{Ano} +
+WHERE RecVal<>255 +
+AND Cmv IN(1,-1,2,-2,5,-5,7,-7,12,-12,13,-13,16,-16) +
+AND [Art$] = '{Art.Sel}' +
+AND ArzEnt BETWEEN {Opc_ArzEnt.Ini} AND {Opc_ArzEnt.Fim} +
+AND Dtl BETWEEN {Opc_Dtl.Ini} AND {Opc_Dtl.Fim}


'- saidas ---------------------------------------------------------------------
Quantidades saidas            [Cmd]=QuSai=+
+SELECT Sum(qu) as QuSai FROM StcMov{Ano} +
+WHERE RecVal<>255 +
+AND Cmv IN(3,-3,4,-4,8,-8,9,-9,11,-11) +
+AND [Art$] = '{Art.Sel}' +
+AND ArzSai BETWEEN {Opc_ArzSai.Ini} AND {Opc_ArzSai.Fim} +
+AND Dtl BETWEEN {Opc_Dtl.Ini} AND {Opc_Dtl.Fim}


'------------------------------------------------------------------------------
'Cod  Descricao            Tipo Notas
'---  -------------------- ---- -----------------------------------------------
' 1 - Compra               Ent
' 2 - Dev.Cliente          Ent
' 3 - Dev.Fornec           Sai
' 4 - Quebra               Sai
' 5 - Transferencia        Ent
' 6 - Custos               Ent So deve ser considerado o valor
' 7 - E.Diversas           Ent
' 8 - S.Diversas           Ent
' 9 - Venda                Sai
'10 - Enc.Forn.            --- Nao actualiza existencias
'11 - Act.Inv.Saida        Sai
'12 - Act.Inv.Entr.        Ent
'13 - R.Encom.Forn.        Ent Semelhante a compra
'14 - Saida Taras          --- Nao usado
'15 - Entrada Taras        --- Nao usado
'16 - N.Credito            Ent Semelhante a venda - Anulacao
'17 - Trf.Armazem          --- Apenas movimenta armazens
'18 - Inc.Custos           Ent So deve ser considerado o valor



##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=Qup,Quantidades por Período

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

'funcoes de listagem
Listar cabecalho            [FxCAB]=Qup_Cab
Listar linhas               [FxLIN]=Qup_Lin
Listar fim                  [FxFIM]=Qup_Fim

'controlo de listagem SQL
Gerador de dados a listar  [SQLDat]=ArtMov
Subtotalizadores           [SQLSbt]=ART$:2
##


'==============================================================================
#VAR - Variaveis
'==============================================================================
'---------------------------------------------------------->'Comentario (61)
'------------------------------------------------------->'Comentario (58)
'---------------------------------------------------->'Comentario (55)
'------------------------------------------------->'Comentario (52)
'------------------------------------->'Comentario (40)

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
artCod   = SqlCmp$("Art$")                            'codigo do artigo
artCov   = StcCodFrm$(Art$)                           'codigo do artigo formatado                
artNom   = SqlOpcCon$("NOM$")                         'nome do artigo
artNom25 = left$(SqlOpcCon$("NOM$"), 25)              'nome do artigo (25 digitos)
artFqu   = FrmNum$(-5.3, artFQ)                       'factor de quantidade

tArtN    = FrmNum$(5.0,TotCnt("artCov",0))            'numero de registos
sArtN    = FrmNum$(5.0,TotCnt("artCov",1))            'numero de registos


'entradas
vEntQu   = FrmNum$(8.3,entQu)                         'quantidade
vEntQa   = FrmNum$(8.3,entQa)                         'quantidade ajustada

'entradas - totais
tEntN    = FrmNum$(5.0,TotCnt("vEntQu",0))            'numero de registos
tEntQu   = FrmNum$(8.3,total(vEntQu,0))               'quantidade
tEntQa   = FrmNum$(8.3,total(vEntQa,0))               'quantidade ajustada

'entradas - subtotais
sEntN    = FrmNum$(5.0,TotCnt("vEntQu",1))            'numero de registos
sEntQu   = FrmNum$(8.3,total(vEntQu,1))               'quantidade
sEntQa   = FrmNum$(8.3,total(vEntQa,1))               'quantidade ajustada


'saidas
vSaiQu   = FrmNum$(8.3,saiQu)                         'quantidade
vSaiQa   = FrmNum$(8.3,saiQa)                         'quantidade ajustada

'saidas - totais
tSaiN    = FrmNum$(5.0,TotCnt("vSaiQu",0))            'numero de registos
tSaiQu   = FrmNum$(8.3,total(vSaiQu,0))               'quantidade
tSaiQa   = FrmNum$(8.3,total(vSaiQa,0))               'quantidade ajustada

'saidas - subtotais
sSaiN    = FrmNum$(5.0,TotCnt("vSaiQu",1))            'numero de registos
sSaiQu   = FrmNum$(8.3,total(vSaiQu,1))               'quantidade
sSaiQa   = FrmNum$(8.3,total(vSaiQa,1))               'quantidade ajustada


'existencia
vExiQu   = FrmNum$(8.3,exiQu)                         'quantidade
vExiQa   = FrmNum$(8.3,exiQa)                         'quantidade ajustada

'existencias - totais
tExiN    = FrmNum$(5.0,TotCnt("vExiQu",0))            'numero de registos
tExiQu   = FrmNum$(8.3,total(vExiQu,0))               'quantidade
tExiQa   = FrmNum$(8.3,total(vExiQa,0))               'quantidade ajustada

'existencias - subtotais
sExiN    = FrmNum$(5.0,TotCnt("vExiQu",1))            'numero de registos
sExiQu   = FrmNum$(8.3,total(vExiQu,1))               'quantidade
sExiQa   = FrmNum$(8.3,total(vExiQa,1))               'quantidade ajustada

##


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


Sub FxIni 'funcao de inicializacao
end sub


Sub FxFim 'funcao de finalizacao
end sub


Sub Lst_AJT 'ajuste
end sub


'------------------------------------------------------------------------------
'- Funcoes Diversas
'------------------------------------------------------------------------------
Sub ArtMovPrp 'preparar artigo do movimento
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlCalc("ARTPRP")                          'preparar artigo
artFQ = SqlOpcCon("Fqu")                           'factor para quantidade

'msgbox "","",xxx
end sub


Sub CalcEnt 'calcular entradas
res = SqlCalc("QuEnt")                             'calcular

entQu = SqlOpcCon("QuEnt")                         'quantidade
entQa = entQu * artFQ                              'quantidade ajustada
end sub


Sub CalcSai 'calcular saidas
res = SqlCalc("QuSai")                             'calcular

saiQu = SqlOpcCon("QuSai")                         'quantidade
saiQa = saiQu * ArtFQ                              'quantidade ajustada
end sub


Sub CalcExi 'calcular existencia
call CalcEnt                                       'calcular entradas
call CalcSai                                       'calcular saidas

exiQu = entQu - saiQu                              'quantidade
exiQa = entQa - saiQa                              'quantidade ajustada
end sub


Sub Cab080 'cabecalho para 80 colunas
FxDiv LstIde,16CPI,0
print TxTit$("TT=10CPI, LD, PT=40C, TL=10CPI", cabTit$)
?Data: @DataExt                                                   Folha No: @Pag#
?================================================================================
end sub


Sub Cab132 'cabecalho para 132 colunas
FxDiv LstIde,16CPI,0
print TxTit$("TT=16CPI, LD, PT=66C, TL=16CPI", cabTit$)
?Data : @DataExt                                                                                                       Folha No: @Pag
?====================================================================================================================================
end sub


'------------------------------------------------------------------------------
'- Quantidades do periodo -----------------------------------------------------
'------------------------------------------------------------------------------
Sub Qup_Cab 'cabecalho
cabTit$="Quantidades do Periodo"
call Cab132                                       'cabecalho para 132 colunas

?                                                         Quantidade Recolha                         Quantidade Ajustada            #
? Artigo         Nome                               Entradas     Saidas   Existencia      Factor     Entradas     Saidas   Existencia
?====================================================================================================================================
'<23456789.1234> <23456789.123456789.123456789> <234,678.12><234,678.12><234,678.12>    <1234.12><234,678.12><234,678.12><234,678.12>
'print string$(132,"-")
end sub


Sub Qup_LinTit1 'titulo 1 - familia
tmp=CntLin("MIN",5)                                'minimo de linhas
tmp=CntLin("INC",1)                                'contar linha

fam$ = SbtInf$("ACT",1)                            'familia
idg$ = fam$                                        'identificacao do grupo

print tab(5) "Familia: " idg$                      'identificar grupo
end sub


Sub Qup_Lin 'linha
call ArtMovPrp                                     'preparar artigo do movimento
call CalcExi                                       'calcular existencia

?@ArtCov         @ArtNom                        @vEntQu     @vSaiQu     @vExiQu        @artFqu   @vEntQa      @vSaiQa    @vExiQa    #
end sub


Sub Qup_LinSbt1 'subtotal 1
?    Total familia:@sArtN                       @sEntQu     @sSaiQu     @sExiQu                  @sEntQa      @sSaiQa    @sExiQa    #
print

tmp=CntLin("INC",1)                                'contar linhas
x=TotLpz(1)                                        'limpar totais
end sub


Sub Qup_Fim
?====================================================================================================================================
?      Totais: @tArtN                           @tEntQu     @tSaiQu     @tExiQu                  @tEntQa      @tSaiQa    @tExiQa    #
?====================================================================================================================================
FxDiv LstPer,SP
end sub

##

