'Nome       : StcMonos.sql
'Tipo       : SQL
'Data       : 2012/10/13
'Versao     : 1.0
'Descricao  : Listagem de monos

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.1   ____/__/__ --------------------------------------------------
'Listagem para EXCEL

'- Versao : 1.0   2006/06/16 --------------------------------------------------
'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 -------------------------------------------------------------------
'------------------------------------------------------------------------------
'Artigos a usar            [Cmd]=ArtUsa=+
'   +SELECT * FROM StcMst +
'   +WHERE [Art$] BETWEEN '{Opc_Art.Ini}' AND '{Opc_Art.Fim}' +
'  +ORDER BY [Art$]

Artigos a usar            [Cmd]=ArtUsa=+
   +SELECT * FROM {TB_StcMst} +
   +WHERE [Art$] BETWEEN '{Opc_Art.Ini}' AND '{Opc_Art.Fim}' +
   +ORDER BY [Art$]


'------------------------------------------------------------------------------
'- consultar ultimos movimentos entre datas -----------------------------------
'------------------------------------------------------------------------------
Ultima Venda por datas         [Cmd]=UltVndDt=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
    +AND UltVenda > {Opc_Dtl.Ini} AND UltVenda <= {Opc_Dtl.Fim} +
   +ORDER BY UltVenda DESC

Ultima por datas compra        [Cmd]=UltCmpDt=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
   +AND UltCompra >= {Opc_Dtl.Ini} AND UltCompra <= {Opc_Dtl.Fim} +
   +ORDER BY UltCompra DESC

Ultimo movimento          [Cmd]=UltMovDt=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
   +AND UltMov >= {Opc_Dtl.Ini} AND UltMov <= {Opc_Dtl.Fim} +
   +ORDER BY UltMov DESC


'------------------------------------------------------------------------------
'- consultar ultimos movimentos sem controlo de data --------------------------
'------------------------------------------------------------------------------
Ultimo movimento          [Cmd]=UltMov=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
   +ORDER BY UltMov DESC

Ultima compra             [Cmd]=UltCmp=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
   +ORDER BY UltCompra DESC

Ultima venda              [Cmd]=UltVnd=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
   +ORDER BY UltVenda DESC

Ultimo movimento por ano  [Cmd]=UltMva=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
   +ORDER BY ANO DESC

Ultimo movimento com upc diferente de zero [Cmd]=UltUpc=+
   +SELECT TOP 1 * FROM StcAcm +
   +WHERE [Art$] = '{Art.Sel}' +
   +AND Arz = 0 +
   +AND Upc > 0 +
   +ORDER BY ANO DESC

##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=VND,Sem Vendas

'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
Base para documento         [FxDOC]=Umv
Listar cabecalho            [FxCAB]=Umv_Cab
Listar linhas               [FxLIN]=Vnd_Lin,0
Listar fim                  [FxFIM]=Umv_Fim

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



'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=CMP,Sem Compras

'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
Base para documento         [FxDOC]=Umv
Listar cabecalho            [FxCAB]=Umv_Cab
Listar linhas               [FxLIN]=Cmp_Lin,0
Listar fim                  [FxFIM]=Umv_Fim

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=UMV,Sem Movimentos

'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
Base para documento         [FxDOC]=Umv
Listar cabecalho            [FxCAB]=Umv_Cab
Listar linhas               [FxLIN]=Umv_Lin,0
Listar fim                  [FxFIM]=Umv_Fim

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=VNDx,Sem Vendas (exist.s/limite)

'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
Base para documento         [FxDOC]=Umv
Listar cabecalho            [FxCAB]=Umv_CabGer
Listar linhas               [FxLIN]=Vnd_Lin,0
Listar fim                  [FxFIM]=Umv_Fim

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=CMPx,Sem Compras (exist.s/limite)

'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
Base para documento         [FxDOC]=Umv
Listar cabecalho            [FxCAB]=Umv_CabGer
Listar linhas               [FxLIN]=Cmp_Lin,0
Listar fim                  [FxFIM]=Umv_Fim

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=UMVx,Sem Movimentos (exist.s/limite)

'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
Base para documento         [FxDOC]=Umv
Listar cabecalho            [FxCAB]=Umv_CabGer
Listar linhas               [FxLIN]=Umv_Lin,0
Listar fim                  [FxFIM]=Umv_Fim

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=VNDXls,Sem Vendas (XLS)

'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
Base para documento         [FxDOC]=XlsUmvExi
Listar cabecalho            [FxCAB]=XlsUmvSV_Cab
Listar linhas               [FxLIN]=XlsVnd_Lin,0
Listar fim                  [FxFIM]=XlsUmv_Fim

Matriz auxiliar            [DocMat]=StcMonos.xls

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=CMPXls,Sem Compras (XLS)

'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
Base para documento         [FxDOC]=XlsUmvExi
Listar cabecalho            [FxCAB]=XlsUmvSC_Cab
Listar linhas               [FxLIN]=XlsCmp_Lin,0
Listar fim                  [FxFIM]=XlsUmv_Fim

Matriz auxiliar            [DocMat]=StcMonos.xls

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=UMVXls,Sem Movimentos (XLS)

'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
Base para documento         [FxDOC]=XlsUmvExi
Listar cabecalho            [FxCAB]=XlsUmvSM_Cab
Listar linhas               [FxLIN]=XlsUmv_Lin,0
Listar fim                  [FxFIM]=XlsUmv_Fim

Matriz auxiliar            [DocMat]=StcMonos.xls

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=VNDXlsGer,Sem Vendas (exist.s/limite) (XLS)

'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
Base para documento         [FxDOC]=XlsUmvGer
Listar cabecalho            [FxCAB]=XlsUmvSV_Cab
Listar linhas               [FxLIN]=XlsVnd_Lin,0
Listar fim                  [FxFIM]=XlsUmv_Fim

Matriz auxiliar            [DocMat]=StcMonos.xls

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=CMPXlsGer,Sem Compras (exist.s/limite) (XLS)

'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
Base para documento         [FxDOC]=XlsUmvGer
Listar cabecalho            [FxCAB]=XlsUmvSC_Cab
Listar linhas               [FxLIN]=XlsCmp_Lin,0
Listar fim                  [FxFIM]=XlsUmv_Fim

Matriz auxiliar            [DocMat]=StcMonos.xls

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


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Tipo                       [DocTip]=SQL
Nome                       [DocNom]=UMVXlsGer,Sem Movimentos (exist.s/limite) (XLS)

'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
Base para documento         [FxDOC]=XlsUmvGer
Listar cabecalho            [FxCAB]=XlsUmvSM_Cab
Listar linhas               [FxLIN]=XlsUmv_Lin,0
Listar fim                  [FxFIM]=XlsUmv_Fim

Matriz auxiliar            [DocMat]=StcMonos.xls

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


'==============================================================================
#VAR - Variaveis
'==============================================================================
Tipo     = MemTxt$(1)
Pag      = Doc_CntPag
Nlp      = Doc_CntLin

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   = SqlCmp$("Nome1$")                          'nome do artigo
artNom25 = left$(SqlCmp$("Nome1$"), 25)               'nome do artigo (25 digitos)

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

vDtuMov  = FrmDt$("",dtuMov)                          'data do ultimo movimento 
vDtuCmp  = FrmDt$("",dtuCmp)                          'data da ultima compra
vDtuVnd  = FrmDt$("",dtuVnd)                          'data da ultima venda

vPv1     = FrmNum$(8.2,SqlCmp("Pv1"))                 'preco de venda 1
vUPC     = FrmNum$(08.2,Upc)                          'UPC
vPmc     = FrmNum$(08.2,Pmc)                          'PMC


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

'existencia
vExiQu   = FrmNum$(9.2,exiQu)                         'quantidade

##


'==============================================================================
#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
cnt=0                                           'limpar contador
end sub


Sub FxFim 'funcao de finalizacao
'res = XlsFim(0)                                 'terminar EXCEL
'nada a executar
end sub


Sub Lst_AJT 'ajuste
'nada a executar
end sub


'------------------------------------------------------------------------------
'- VAR - Funcoes para variaveis -----------------------------------------------
'------------------------------------------------------------------------------
Sub VarLpz 'limpar variaveis
dtuMov = 0                                         'data do ultimo movimento 
dtuCmp = 0                                         'data da ultima compra
dtuVnd = 0                                         'data da ultima venda

entQu  = 0                                         'quantidade entrada
saiQu  = 0                                         'quantidade saida
exiQu  = 0                                         'quantidade de existencia
end sub


Sub VarPrp 'preparar variaveis
entQu = SqlQryCmp(idq$,"QEnt")                     'quantidade entrada
saiQu = SqlQryCmp(idq$,"QSai")                     'quantidade saida
exiQu = entQu - saiQu                              'quantidade de existencia

pmc   = SqlQryCmp(idq$,"Pmc")                      'PMC
upc   = SqlQryCmp(idq$,"Upc")                      'UPC
'upc=0                                              'UPC

idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltUpc")                   'preparar ultimo movimento
if res = 1 then                                    'ha registo ?
   Upc = SqlQryCmp(idq$,"Upc")                     'UPC > 0 
end if
end sub


'------------------------------------------------------------------------------
'- PRP - Preparar valores -----------------------------------------------------
'------------------------------------------------------------------------------
Sub UmvArtPrp 'preparar listagem por ultimo do movimento
call VarLpz                                        'limpar variaveis

call PrpUltMov                                     'preparar por data do ultimo movimento
call PrpUltCmp                                     'preparar por data da ultima compra
call PrpUltVnd                                     'preparar por data da ultima venda
call PrpUltMovDt                                   '---------------------

'valores para controlar listagem
call PrpExiAct                                     'preparar existencia actual
lst = 1                                            'assume listar

if exiQu <= ExistAcomparar then                    'sem existencia ?
   lst = 0                                         'nao listar
end if

if RegUltMovDt = 1 then                            'se existe registo de venda a partir de ... 
   lst = 0                                         'não lista
end if

'lst = 1                                            '#DBG# - listar
end sub


Sub CmpArtPrp 'preparar listagem ultima compra
call VarLpz                                        'limpar variaveis

call PrpUltMov                                     'preparar por data do ultimo movimento
call PrpUltCmp                                     'preparar por data da ultima compra
call PrpUltVnd                                     'preparar por data da ultima venda
call PrpUltCmpDt                                   '---------------------

'valores para controlar listagem
call PrpExiAct                                     'preparar existencia actual
lst = 1                                            'assume listar

if exiQu <= ExistAcomparar then                    'sem existencia ?
   lst = 0                                         'nao listar
end if

if RegUltCmpDt = 1 then                            'se existe registo de venda a partir de ... 
   lst = 0                                         'não lista
end if

'lst = 1                                            '#DBG# - listar
end sub


Sub VndArtPrp 'preparar listagem ultima venda
call VarLpz                                        'limpar variaveis

call PrpUltMov                                     'preparar por data do ultimo movimento
call PrpUltCmp                                     'preparar por data da ultima compra
call PrpUltVnd                                     'preparar por data da ultima venda
call PrpUltVndDt                                   '---------------------
call PrpUltCmpDt                                   '---------------------

'valores para controlar listagem
call PrpExiAct                                     'preparar existencia actual
lst = 1                                            'assume listar

if exiQu <= ExistAcomparar then                    'sem existencia ?
   lst = 0                                         'nao listar
end if

if RegUltVndDt = 1 then                            'se existe registo de venda a partir de ... 
   lst = 0                                         'não lista
end if

if RegUltCmpDt = 1 then                            'se existe registo de compra a partir de ... 
   if dtuvnd = 0 then                              'e sem vendas
      lst = 0                                      'não lista
   end if
end if

'lst = 1                                            '#DBG# - listar
end sub


Sub PrpExiAct 'preparar existencia actual
idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltMva")                   'preparar ultimo movimento
if res = 1 then                                    'ha registo ?
   dtuMov = SqlQryCmp(idq$,"UltMov")               'data do ultimo movimento 
   call VarPrp                                     'preparar variaveis
end if
end sub


Sub PrpUltMov 'preparar por data do ultimo movimento
idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltMva")                   'preparar ultimo movimento
if res = 1 then                                    'ha registo ?
   dtuMov = SqlQryCmp(idq$,"UltMov")               'data do ultimo movimento 
end if
end sub


Sub PrpUltCmp 'preparar por data da ultima compra
idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltCmp")                   'preparar ultimo movimento
if res = 1 then                                    'ha registo ?
   dtuCmp = SqlQryCmp(idq$,"UltCompra")            'data do ultima Compra
end if
end sub


Sub PrpUltVnd 'preparar por data da ultima venda
idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltVnd")                   'preparar ultimo movimento
if res = 1 then                                    'ha registo ?
   dtuVnd = SqlQryCmp(idq$,"Ultvenda")             'data do ultima Venda
end if
end sub


Sub PrpUltMovDt 'preparar por data do ultimo movimento
idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltMovDt")                 'preparar ultimo movimento
if res = 1 then                                    'ha registo ?
   dtuMovdt = SqlQryCmp(idq$,"UltMov")             'data do ultimo movimento 
end if

RegUltMovDt = res                                  'valida a existencia de registo
end sub


Sub PrpUltCmpDt 'preparar por data da ultima compra
idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltCmpDt")                 'preparar ultimo movimento
if res = 1 then                                    'ha registo ?
   dtuCmpdt = SqlQryCmp(idq$,"UltCompra")          'data do ultima Compra
end if

RegUltCmpDt = res                                  'valida a existencia de registo
end sub


Sub PrpUltVndDt 'preparar por data da ultima venda
idq$ = "ACM"                                       'identificador do qwery
art$  = SqlCmp$("Art$")                            'artigo
res   = SqlOpcAct("Art.Sel",art$)                  'registar artigo

res   = SqlQryGer(idq$,"UltVndDt")                 'preparar ultimo movimento                                        

if res = 1 then                                    'ha registo ?
   dtuVnddt = SqlQryCmp(idq$,"Ultvenda")           'data do ultima Venda
end if

RegUltVndDt = res                                  'valida a existencia de registo
end sub


'==============================================================================
'- [TXT] - Listar em modo texto -----------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- Funcoes para cabecalho
'------------------------------------------------------------------------------
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


'------------------------------------------------------------------------------
'- [TXT] - Ultimo Movimento do Artigo -----------------------------------------
'------------------------------------------------------------------------------
Sub Umv_DocIni 'inicializar documento
grpAnt$ = ""                                      'limpar grupo

'msgbox "","UMV INI"
end sub


Sub Umv_Cab 'cabecalho 
'activa valor de comparacao para existencia positiva  
ExistAcomparar = 0                                'existencia a comparar

Call Umv_CabExe                                   'executar cabecalho
end sub


Sub Umv_CabGer 'cabecalho
'activa valor de comparacao para existencia sem comparacao  
ExistAcomparar = 0 - 9999999999                   'lista artigos com qq existencia
                             
Call Umv_CabExe                                   'executar cabecalho
end sub


Sub Umv_CabExe 'cabecalho - executar
vliPer$ = OpcCon$("DTL", "DES")                   'descricao do periodo

docTit$ = "Listagem de Monos"                     'titulo a listagem
docIde$ = VBS_DocIde$("")                         'identificacao do documento
cabTit$ = docIde$ + " - " + vliPer$               'titulo para cabecalho

call Cab132                                       'cabecalho para 132 colunas

? Artigo           Nome                                          U.Mov.      U.Compra   U.Venda    Existencia      U.P.C.      P.M.C.
?====================================================================================================================================
'<23456789.1234> <23456789.123456789.123456789> 2006/01/01 123,123.12<,123,123.12
end sub


Sub Umv_Fim
?====================================================================================================================================
?       Totais:     @tArtN                                                                                                          #
?====================================================================================================================================
FxDiv LstPer,SP
end sub


'------------------------------------------------------------------------------
'- UMV - por ultimo movimento -------------------------------------------------
'------------------------------------------------------------------------------
Sub Umv_LinTit1 'titulo 1 - familia
call Umv_ExeTit                                    'executar titulo
end sub


Sub Umv_LinSbt1 'subtotal 1
call Umv_ExeSbt                                    'executar subtotal
end sub


Sub Umv_Lin 'linha
call UmvArtPrp                                     'preparar dados
if lst = 1 then                                    'listar ?
   call Umv_ExeLin                                 'executar linha
end if
end sub


'------------------------------------------------------------------------------
'- CMP - por ultima compra ----------------------------------------------------
'------------------------------------------------------------------------------
Sub Cmp_LinTit1 'titulo 1 - familia
call Umv_ExeTit                                    'executar titulo
end sub


Sub Cmp_LinSbt1 'subtotal 1
call Umv_ExeSbt                                    'executar subtotal
end sub


Sub Cmp_Lin 'linha
call CmpArtPrp                                     'preparar dados
if lst = 1 then                                    'listar ?
   call Umv_ExeLin                                 'executar linha
end if
end sub


'------------------------------------------------------------------------------
'- VND - por ultima venda -----------------------------------------------------
'------------------------------------------------------------------------------
Sub Vnd_LinTit1 'titulo 1 - familia
call Umv_ExeTit                                    'executar titulo
end sub


Sub Vnd_LinSbt1 'subtotal 1
call Umv_ExeSbt                                    'executar subtotal
end sub


Sub Vnd_Lin 'linha
call VndArtPrp                                     'preparar dados
if lst = 1 then                                    'listar ?
   call Umv_ExeLin                                 'executar linha
end if
end sub


'------------------------------------------------------------------------------
'- COM - Funcoes comuns de listagem -------------------------------------------
'------------------------------------------------------------------------------
Sub Umv_ExeTit 'executar titulo
fam$    = SbtInf$("ACT",1)                         'familia
ideGrp$ = fam$                                     'identificacao do grupo
end sub


Sub Umv_ExeLin 'executar linha
if ideGrp$ <> grpAnt$ then                         'mudou de grupo
   tmp=CntLin("MIN",3)                             'minimo de linhas
   tmp=CntLin("INC",1)                             'contar linha
   print tab(5) "Familia: " ideGrp$                'identificar grupo

   grpAnt$ = ideGrp$                               'guardar grupo
end if

?@ArtCov           @ArtNom                                     @vDtuMov    @vDtuCmp    @vDtuVnd  @vExiQu      @vUpc       @vPmc     #
tmp=CntLin("INC",1)                                'contar linha
end sub


Sub Umv_ExeSbt 'executar subtotal
numReg = TotCnt("artCov",1)                        'numero de registos
if numReg > 0 then
?    Total familia: @sArtN                       #
   print                                           'separar

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


'==============================================================================
'- [XLS] - Listar para XLS ----------------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- [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 - globais
'coIds    = 3                                       'identificqcao de subtotal
'coNrg    = 4                                       'numero de registos

'coCod    = 2                                       'codigo
'coNom    = 3                                       'nome
end sub


Sub Com_Xls_DocFim 'terminar documento
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

zon$ = XlsZon$(liUsa, coCod,liUsa, coUlt)          'zona
res = XlsAli(zon$, "<")                            'alinhamento
end sub


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


Sub Com_Xls_LstTot 'listar totais
call XlsComLin_Fim                                 'fim de linhas

vNrg   = TotCnt("artCov", 0)                       'numero de registos
'vMovQu = Total("vaMovQu", 0)                       'quantidade
'vMovVt = Total("vaMovVt", 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, coMovQu, vMovQu)               'total quantidade
'res = XlsLst(liUsa, coMovVt, vMovVt)               'total valor
end sub


Sub Com_Xls_SbtNrg 'numero de registos do subtotal
res = XlsLst(liUsa, coNrg, vNrg)                   'numero de registos
res = XlsLst(liUsa, coIds, ideSbt$)                'identificar subtotal

zon$ = XlsZon$(liUsa, coNrg, liUsa, coUlt)         'zona
'msgbox "","ALI/NRG",zon$

res = XlsAli(zon$, "|")                            'alinhamento
end sub


'- grupo 1 -------------------------------------------------------------------
Sub Com_Xls_LinTit1 'titulo 1
if titIde$ <> "" then                              'ha titulo ?
   call Com_Xls_IncLin                             'incrementar linha	
   call XlsComLin_ActB                             'activar linha em BOLD

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

titIde$ = ""                                       'anular titulo
end sub


Sub Com_Xls_LinSbt1 'subtotal 1
vNrg   = TotCnt("ArtCov", 1)                       'numero de registos
'vMovQu = Total("vaMovQu", 1)                       'quantidade
'vMovVt = Total("vaMovVt", 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, coMovQu, vMovQu)            'total quantidade
   'res = XlsLst(liUsa, coMovVt, vMovVt)            'total valor
end if

call Com_Xls_IncLin                                'incrementar linha	

x = TotLpz(1)                                      'limpar totais
ideSbt$ = ""                                       'limpar identificador de subtotal
end sub


'------------------------------------------------------------------------------
'- [XLS] - Listagem Ultimos movimentos ----------------------------------------
'------------------------------------------------------------------------------
Sub XlsUmvExi_DocIni 'inicializar documento - validar existencia
ExistAcomparar = 0                                'existencia a comparar
call XlsUmv_DocIni                                'inicializar documento
end sub


Sub XlsUmvExi_DocFim 'terminar documento - validar existencia
call XlsUmv_DocFim                                 'terminar documento
end sub


Sub XlsUmvExi_LinIni 'inicializar documento - linhas previas
ide$ = "Linha Previa"

for i = 1 to -1
call Com_Xls_IncLin                                'incrementar linha	

res = XlsLst(liUsa, 2, i)                          'listar contagem
res = XlsLst(liUsa, 3, ide$)                       'listar valor
next
end sub


Sub XlsUmvExi_LinFim 'inicializar documento - linhas adicionais
ide$ = "Linha Adicional"

for i = 1 to -1
call Com_Xls_IncLin                                'incrementar linha	

res = XlsLst(liUsa, 2, i)                          'listar contagem
res = XlsLst(liUsa, 3, ide$)                       'listar valor
next
end sub


Sub XlsUmvGer_DocIni 'inicializar documento - nao validar existencia
ExistAcomparar = 0 - 9999999999                   'lista artigos com qq existencia
call XlsUmv_DocIni                                'inicializar documento
end sub


Sub XlsUmvGer_DocFim 'terminar documento - nao validar existencia
call XlsUmv_DocFim                                'terminar documento
end sub


Sub XlsUmv_DocIni 'inicializar documento
comXlsFic$ = "StcMonos.xls"                        'nome do ficheiro
'comCabTit$ = Memtxt$(1)                            'titulo
comCabTit$ = DocTit$("DOC")                        'titulo
'- (52) ------------------------------------------>'Comentario

call Com_Xls_DocIni                                'inicializar documento

'definicao das colunas - da listagem
coNrg    = 2                                       'numero de registos
coIds    = 3                                       'identificqcao de subtotal
coUlt    = 3                                       'ultima coluna (para formatacao)

coCod    = 2                                       'codigo
coNom    = 3                                       'nome
coDum    = 4                                       'data do ultimo movimento
coDuc    = 5                                       'data da ultima compra
coDuv    = 6                                       'data da ultima venda
coExi    = 7                                       'existencia quantidade
coUpc    = 8                                       'UPC
coPmc    = 9                                       'PMC

vliPer$ = OpcCon$("DTL", "DES")                    'descricao do periodo
end sub


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


'------------------------------------------------------------------------------
'- VND - por ultima venda -----------------------------------------------------
'------------------------------------------------------------------------------
Sub XlsUmvSV_Cab 'cabecalho - sem vendas
'lstTit$ = comCabTit$                               'titulo da listagem
lstTit$ = "Sem Vendas - " + vliPer$                'titulo da listagem
res = XlsIdeLst("Lst_Tit" , lstTit$)               'listar titulo
end sub


Sub XlsVnd_LinTit1 'titulo 1 - familia
call XlsUmv_ExeTit                                 'executar titulo
end sub


Sub XlsVnd_LinSbt1 'subtotal 1
call XlsUmv_ExeSbt                                 'executar subtotal
end sub


Sub XlsVnd_Lin 'linha
call VndArtPrp                                     'preparar dados
if lst = 1 then                                    'listar ?
   call XlsUmv_ExeLin                              'executar linha
end if
end sub


'------------------------------------------------------------------------------
'- CMP - por ultima compra ----------------------------------------------------
'------------------------------------------------------------------------------
Sub XlsUmvSC_Cab 'cabecalho - sem compras
'lstTit$ = comCabTit$                               'titulo da listagem
lstTit$ = "Sem Compras - " + vliPer$               'titulo da listagem
res = XlsIdeLst("Lst_Tit" , lstTit$)               'listar titulo
end sub


Sub XlsCmp_LinTit1 'titulo 1 - familia
call XlsUmv_ExeTit                                 'executar titulo
end sub


Sub XlsCmp_LinSbt1 'subtotal 1
call XlsUmv_ExeSbt                                 'executar subtotal
end sub


Sub XlsCmp_Lin 'linha
call CmpArtPrp                                     'preparar dados
if lst = 1 then                                    'listar ?
   call XlsUmv_ExeLin                              'executar linha
end if
end sub


'------------------------------------------------------------------------------
'- UMV - por ultimo movimento -------------------------------------------------
'------------------------------------------------------------------------------
Sub XlsUmvSM_Cab 'cabecalho - sem movimentos
'lstTit$ = comCabTit$                               'titulo da listagem
lstTit$ = "Sem Movimentos - " + vliPer$            'titulo da listagem
res = XlsIdeLst("Lst_Tit" , lstTit$)               'listar titulo
end sub


Sub XlsUmv_LinTit1 'titulo 1 - familia
call XlsUmv_ExeTit                                 'executar titulo
end sub


Sub XlsUmv_LinSbt1 'subtotal 1
call XlsUmv_ExeSbt                                 'executar subtotal
end sub


Sub XlsUmv_Lin 'linha
call UmvArtPrp                                     'preparar dados
if lst = 1 then                                    'listar ?
   call XlsUmv_ExeLin                              'executar linha
end if
end sub


'------------------------------------------------------------------------------
'- COM - Funcoes comuns de listagem -------------------------------------------
'------------------------------------------------------------------------------
Sub XlsUmv_ExeTit 'executar titulo
fam$    = SbtInf$("ACT",1)                         'familia
ideGrp$ = fam$                                     'identificacao do grupo
end sub


Sub XlsUmv_ExeSbt 'executar subtotal
numReg = TotCnt("artCov",1)                        'numero de registos
if numReg > 0 then                                 'ha registos ?
   ideGrp$ = "Total familia: " + grpAnt$           'numero de registos

   call Com_Xls_IncLin                             'incrementar linha	
   call XlsComLin_ActBI                            'activar linha em BOLD+ITALICO

   'res = XlsLst(liUsa, 2, numReg)                 'identificar grupo
   'res = XlsLst(liUsa, 3, ideGrp$)                'identificar grupo

   vNrg = numReg
   ideSbt$ = ideGrp$                               'identificacao de subtotal
   call Com_Xls_SbtNrg                             'numero de registos do subtotal

   call Com_Xls_LinSep                             'linha de separacao

   x = TotLpz(1)                                   'limpar totais
end if
end sub


Sub XlsUmv_ExeLin 'executar linha
'call Com_Var_Prp                                   'preparar variaveis

'listar grupo
if ideGrp$ <> grpAnt$ then                         'mudou de grupo
   call Com_Xls_IncLin                             'incrementar linha	
   
   famXls$    = SbtInf$("ACT",1)                   'familia
   ideGrpXls$ = "Familia : "+famXls$               'identificacao do grupo

   'listar
   res = XlsLst(liUsa, 2, ideGrpXls$)              'identificar grupo

   'seguinte
   grpAnt$ = ideGrp$                               'guardar grupo
end if

vArtCov$   = StcCodFrm$(Art$)                      'codigo do artigo formatado
vArtNom$   = SqlCmp$("Nome1$")                     'nome do artigo
vDtuMov$   = FrmDt$("", dtuMov)                    'data do ultimo movimento 
vDtuCmp$   = FrmDt$("", dtuCmp)                    'data da ultima compra
vDtuVnd$   = FrmDt$("", dtuVnd)                    'data da ultima venda


'listar linha
call Com_Xls_IncLin                                'incrementar linha	
res = XlsLst(liUsa, coCod, vArtCov$)               'codigo do artigo
res = XlsLst(liUsa, coNom, vArtNom$)               'nome do artigo
res = XlsLst(liUsa, coDum, vDtuMov$)               'data do ultimo movimento
res = XlsLst(liUsa, coDuc, vDtuCmp$)               'data da ultima compra
res = XlsLst(liUsa, coDuv, vDtuVnd$)               'data da ultima venda
res = XlsLst(liUsa, coExi, exiQu)                  'existencia quantidade
res = XlsLst(liUsa, coUpc, Upc)                    'UPC
res = XlsLst(liUsa, coPmc, Pmc)                    'PMC


'acumular valores
res = AcmExe("artCov", 0)                          'acumular codigo (forçar contagem de linhas)
end sub


Sub XlsUmv_Fim 'terminar
call Com_Xls_LstTot                                'listar totais
end sub

##


'==============================================================================
#VBS - VbScript
'==============================================================================
'= Consultar opcoes do documento ==============================================
Function DocIde(arg) 'identificacao do documento
'arg        - argumento (nao usado)

with FxPre
res = .DocConOpc("T", "DocIde")        'consultar
end with

DocIde = res                           'devolver resultado
end function


Function DocConEsp(ide) 'consultar opcao especifica de documento
'ide        - identificador 

with FxPre
res = .DocConEsp("T", ide)             'consultar
end with

DocConEsp = res                        'devolver valor
end function


Function DocConOpc(ide) 'consultar opcao de documento
'ide        - identificador 

with FxPre
res = .DocConOpc("T", ide)             'consultar
end with

DocConOpc = res                        'devolver valor
end function


Function DocConOpcEsp(ide) 'consultar opcao especifica do documento
'ide        - identificador 

with FxPre
res = .DocConOpcEsp("T", ide)          'consultar
end with

DocConOpcEsp = res                     'devolver valor
end function


Function DocConVar(ide) 'consultar variavel do documento
'ide        - identificador 

with FxPre
res = .DocConVar("T", ide)             'consultar
end with

DocConVar = res                        'devolver valor
end function

##


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