'Nome       : PosDcx.imp
'Tipo       : LST
'Data       : 2012/04/04
'Versao     : 1.0
'Descricao  : POS - Documentos de caixa

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.0   ____/__/__ --------------------------------------------------
'Versao base


'==============================================================================
#DEF - Definicao global do documento
'==============================================================================
Caracteres invalidos             [CarInv]=#
##


'==============================================================================
#ESP - Campos especificos
'==============================================================================
'diversos
Limites a listar                  [EspLim]=?
##


'==============================================================================
#DOC - Configuracao do documento
'==============================================================================
Nome                       [DocNom]=DCX
Vias                       [DocVia]=Original
Tipo                       [DocTip]=
Dados especificos          [DocEsp]=ESP1,FAC

'formato
Impressora                 [DocPrt]=
'Impressora                 [DocPrt]=PR01
Linhas por pagina          [DocLpg]=100
Formato do papel           [DocPap]=72L
Ajustar pagina             [DocApg]=0

'funcoes de listagem
Base para documento         [FxDOC]=PosDoc
Listar cabecalho            [FxCAB]=PosCab
Listar linhas               [FxLIN]=PosLin; Nor
Listar fim                  [FxFIM]=PosFim
##


'==============================================================================
#VAR - Variaveis
'==============================================================================
Pag      = Doc_CntPag

DataExt  = FrmVal$(Sig_DtHoje,45,0)
Dat      = FrmVal$(Sig_DtHoje,44,0)

vaHor    = FrmHr$("HM",Enc_Mst_HrSai)                       'hora
'vaHor   = FrmVal$(Enc_Mst_HrSai,52,0)                      'hora

vaDtl    = FrmDt$("",Enc_Mst_Dtl)                           'data de lancamento
vaHorI   = FrmHs$("HM",Enc_Mst_HrIni)                       'hora de inicio
vaHorF   = FrmHs$("HM",Enc_Mst_HrFim)                       'hora de fim

'dados da empresa 
vaEmpIde = vuEmpIde$                                        'empresa
vaEmpMor = vuEmpMor$                                        'morada
vaEmpLoc = vuEmpLoc$                                        'localidade
vaEmpCpo = vuEmpCpo$                                        'codigo postal
vaEmpTel = vuEmpTel$                                        'telefone
vaEmpFax = vuEmpFax$                                        'fax
vaEmpNif = vuEmpNif$                                        'nif
vaEmpNju = vuEmpNju$                                        'natureza juridica
vaEmpReg = vuEmpReg$                                        'numero de registo
vaEmpCps = vuEmpCps$                                        'capital social

'- (61) --------------------------------------------------->'Comentario
PosNdo   = Enc_Mst_Ndoc$                                    'numero de documento
PosOpe   = Enc_Mst_Oper$                                    'operador

'linhas do documento
vaArtCod = Stc_Mst_Art$                                     'codigo do artigo
vaArtIde = TxIde$(Enc_Mov_Opc$,"OPCIDE")                    'identificacao
vaArtNom = Stc_Mst_Nome1$                                   'nome
vaArtQua = FrmNum$(05.3,Doc_Art_Qu)                         'quantidade
vaArtPrc = FrmNum$(10.2,Doc_Art_Prc)                        'preco
vaArtDsc = Enc_Mov_Desco$                                   'desconto
vaArtLiq = FrmNum$(10.2,Doc_Art_Liq)                        'liquido

'valores com dimensao reduzida
Iva      = IvaTax("A")                                      'taxa de IVA
Iv       = IvaTax("A")+"%"                                  'taxa de IVA
Uni      = Stc_Mst_Unid$                                    'unidade

'valores POS - artigo
vaPosNom = left$(Stc_Mst_Nome1$, 20)                        'nome para talao
vaPosQu  = Doc_Art_Qu                                       'quantidade
vaPosQ   = Doc_Art_Qu                                       'quantidade (variavel reduzida)
vaPosPrc = FrmNum$(8.2,Doc_Art_Prc)                         'preco
vaPosLiq = FrmNum$(8.2,Doc_Art_Liq)                         'liquido

'valores POS - totais
vaPosPag = FrmNum$(10.2,vuPosPag)                           'total pago
vaPosTro = FrmNum$(10.2,vuPosTro)                           'troco

'valores de iva
'- (61) --------------------------------------------------->'Comentario
vaIvaT   = FrmNum$(04.0,vuIvaTax)                           'formatar taxa
vaIvaI   = FrmNum$(10.2,vuIvaInc)                           'formatar incidencia
vaIvaV   = FrmNum$(10.2,vuIvaVal)                           'formatar valor

'totais do documento
vaDocDsc    = FrmNum$(10.2,vuDocDsc)                        'valor de desconto
vaDocPort   = FrmNum$(10.2,vuDocPort)                       'portes
vaDocIvaSuj = FrmNum$(10.2,vuDocIvaSuj)                     'sujeito a IVA
vaDocInc    = FrmNum$(10.2,vuDocInc)                        'incidencia de IVA
vaDocIva    = FrmNum$(10.2,vuDocIva)                        'valor de IVA
vaDocIlq    = FrmNum$(10.2,vuDocIlq)                        'valor ilquido
vaDocLiq    = FrmNum$(10.2,vuDocLiq)                        'valor liquido
vaDocTot    = FrmNum$(10.2,vuDocTot)                        'valor total
vaDocQua    = Enc_Mst_Qu                                    'quantidade

'vendedor/operador
vaVnd      = NumTxt$(Enc_Mst_Vend,2)                        'numero
vaVndNom   = EmpTabCon$("Vend",Enc_Mst_Vend,"Nome")         'nome

'informacoes sobre o documento
'DocNome   = Doc_Ide_Nome$
'DocNome   = Doc_Ide_Sdoc$

Cpag      = EmpTabCon$("Cpag",Enc_Mst_CpagCod,"Des")
'Viatura   = TxIde$(Enc_Mst_Opc$,"MAT")
'HorSai    = FrmVal$(Enc_Mst_HrSai,53,0)


vaDocNum  = FrmNdo$("",Enc_Mst_Tdoc$,Enc_Mst_Ndoc$)         'numero de documento
DocVia    = Doc_Ide_Via$                                    'via do documento
DocDtl    = FrmVal$(Doc_Ide_Dtl,44,0)                       'data do documento
DocDtv    = FrmVal$(Doc_Ide_Dtv,44,0)                       'data de vencimento
DocOrg    = VarAlt$("ENC_MST","Emp_Inf_Local$")
DocDest   = VarAlt$("ENC_MST","Cta_Ang_Local$,LocEnt$")

'listar documentos
DocIde    = Enc_Mst_Tdoc$+" "+FrmNdo$("44",Enc_Mst_Tdoc$,Enc_Mst_Ndoc$)

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

'artigo
vaArtCod = vuMovArt$                                        'codigo
vaArtCov = vuMovCov$                                        'codigo formatado
vaArtNom = vuMovNom$                                        'nome

'valores - documento
vaDocQua = FrmNum$(06.2,vuDocQua)                           'quantidade
vaDocVto = FrmNum$(10.2,vuDocVto)                           'valor total
vaDocPag = FrmNum$(10.2,vuDocPag)                           'valor a pagar
vaDocTro = FrmNum$(10.2,vuDocTro)                           'valor de troco

'valores - movimento
vaMovQua = FrmNum$(06.3,vuMovQua)                           'quantidade
vaMovPrc = FrmNum$(06.2,vuMovPrc)                           'preco
vaMovVto = FrmNum$(12.2,vuMovVto)                           'valor

'conta
vaCtCod  = CTA_MST_Ct$                                      'codigo da conta
vaCtNom  = CTA_MST_Nome$                                    'nome

'armazem
vaArzCod = arzCod$                                          'codigo
vaArzCov = arzCov$                                          'codigo formatado
vaArzNom = arzNom$                                          'nome

'vendedor
vaVndCod = vndCod$                                          'codigo
vaVndCov = vndCov$                                          'codigo formatado
vaVndNom = vndNom$                                          'nome

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

'valor total
toMovVto = FrmNum$(10.2,Total("vaMovVto",0))                'valor - total
s1MovVto = FrmNum$(10.2,Total("vaMovVto",1))                'valor - subtotal 1
s2MovVto = FrmNum$(10.2,Total("vaMovVto",2))                'valor - subtotal 2
##


'==============================================================================
#SEQ - Sequencias para recolha de artigos
'==============================================================================
'------------------------------------------------------------------------------
'NOR - Tipo Normal
'------------------------------------------------------------------------------
Identificacao de sequencia [IDS]=NOR
Codigos validos            [ID1]=*
Codigos invalidos          [ID0]=PORTE,MOBRA


'= estado da sequencia para recolha normal
Funcao : Recolha       [FX,REC ]=REC; EXEREC
Funcao : Executar   [FX,EXEREC ]=*
Recolha automatica           [E]=RAUTO

Modo automatico              [E]=AUT 1
Quantidade                   [E]=QU; ESC:LPL
'Quantidade automatica        [E]=AUTO_QU UNI; ESC:LPL

'Quantidade 2                [E]=QU2
'Preco                        [E]=PRC
Preco                        [E]=PrcProm [ZER=N][PRC=PV1][FRM=4.2]; ESC:LPL
Desconto                     [E]=DES
Iva                          [E]=IVA
Total                  [E,TOT  ]=TOT

Confirmar linha (automatica) [E]=CFL 1; CF2:ALT, ESC:LPL
'Confirmar linha              [E]=CFL ; CF2:ALT, ESC:LPL

Registar                     [E]=REG

Mostrar artigo               [E]=FxExe Pos_DisArt
Fim de sequencia             [E]=FIM


'= estado da sequencia para correccao de linha
Funcao : Corrigir      [FX,COR ]=COR; EXECOR
Funcao : Executar   [FX,EXECOR ]=*
Recolha automatica           [E]=RAUTO
'Campo opcional              [E]=OPC Var$,Descricao,Tipo(A/N)+Dig
Quantidade                   [E]=QU; ESC:LPL
'Quantidade automatica        [E]=AUTO_QU UNI; ESC:LPL

'Quantidade 2                [E]=QU2
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA
Total                  [E,TOT  ]=TOT

'Confirmar linha (automatica) [E]=CFL 1; CF2:ALT, ESC:LPL
Confirmar linha              [E]=CFL ; CF2:ALT, ESC:LPL

Registar                     [E]=REG

Mostrar artigo               [E]=FxExe Pos_DisArt
Fim de sequencia             [E]=FIM


'= estado da sequencia para alteracao de documento
'alterar dados
Inicio de alteracao    [E,ALT  ]=ALT
'Campo opcional 1            [E]=OPC 1
Quantidade                   [E]=QU
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA; TOT

'anulacao
Limpar linha           [E,LPL  ]=LPL
Fim de sequencia             [E]=FIM

##


'-----------------------------------------------------------------------------
' Recolha do Cabecalho do documento
'-----------------------------------------------------------------------------
'==============================================================================
#PAGDEF - Definicao de paginas
'==============================================================================
Pagina inicial      [PagIni]=1
Campo inicial       [CmpIni]=2
##


'==============================================================================
#PAG  Dados para Documento    'Definicao da pagina 
'==============================================================================
'mo asp x   y  identificacao      di  variavel                            frm   dv ope
30,-10, 20, 50,"Conta          " ,100,Cta_Mst_Ct$                         ,30.0,250
31, 10, 20, 80,"Nome           " ,100,VarAlt$("ENC_MST","Cta_Mst_Nome$")  ,30.0,250
31, 10, 20,110,"Morada         " ,100,VarAlt$("ENC_MST","Cta_Ang_Morada$"),30.0,250
31, 10, 20,140,"Localidade     " ,100,VarAlt$("ENC_MST","Cta_Ang_Local$") ,30.0,250
31, 10, 20,170,"Codigo Postal  " ,100,VarAlt$("ENC_MST","Cta_Ang_Cpost$") ,30.0,250
30, 10, 20,200,"Contribuinte   " ,100,VarAlt$("ENC_MST","Cta_Mst_Ctrb$")  ,12.0,130
'31, 10, 20,230,"Vendedor       " ,100,Enc_Mst_Vend                        , 2.0, 50

'30,110, 20,260,"Cond. Pagamento" ,100,Enc_Mst_CpagCod                     , 2.0, 50

'31, 10 ,390,110,"Descr. para Doc ",100,TxIde$(Enc_Mst_Opc$,"DOC_DESCR")   ,08.0, 90
'10, 53, 390,140,"Hora de saida   ",100,Enc_Mst_HrSai                              , 4.0,100
'31, 10, 390,170,"Local de carga  ",100,VarAlt$("ENC_MST","Emp_Inf_Local$")        ,30.0,100
'31, 10, 390,200,"Local de entrega",100,VarAlt$("ENC_MST","Cta_Ang_Local$,LocEnt$"),30.0,100
'31, 10, 390,230,"Matricula       ",100,TxIde$(Enc_Mst_Opc$,"MAT")                 ,30.0,100
'31, 10, 240,260,"Informação Livre",100,TxIde$(Enc_Mst_Opc$,"INF1")                ,40.0,250

##


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

'        10        20        30        40
'123456789.123456789.123456789.123456789.


'=============================================================================
'- Comum ---------------------------------------------------------------------
'=============================================================================
Sub FxIni 'funcao de inicializacao
'nada a executar
end sub


Sub FxFim 'funcao de finalizacao
'nada a executar
end sub


Sub Lst_AJT 'ajuste
'nada a executar
end sub


'-----------------------------------------------------------------------------
'- [VAR] - Variaveis ---------------------------------------------------------
'-----------------------------------------------------------------------------
Sub PrpVar_Com 'preparar variaveis comuns
tabVar$ = "EmpTbDocVar"                                     'tabela de dados

usaIva$ = TabAdiCon$("V", tabVar$, "POS.TIK.OPC.IVA")       'usar IVA
end sub


Sub PrpVar_Emp 'preparar variaveis da empresa
vuEmpIde$ = Emp_Inf_Nome$                                   'empresa
vuEmpMor$ = Emp_Inf_Morada$                                 'morada
vuEmpLoc$ = Emp_Inf_Local$                                  'localidade
vuEmpCpo$ = Emp_Inf_Cpost$                                  'codigo postal
vuEmpTel$ = Emp_Inf_Telef$                                  'telefone
vuEmpFax$ = Emp_Inf_Fax$                                    'fax
vuEmpNif$ = Emp_Inf_Contrib$                                'nif
vuEmpNju$ = Emp_Inf_NatJur$                                 'natureza juridica
vuEmpReg$ = Emp_Inf_NumReg$                                 'numero de registo
vuEmpCps$ = FrmNum$(10.2,Emp_Inf_CapSoc)                    'capital social
end sub


Sub PrpVar_Doc 'preparar variaveis do documento
'vuDocQua  = VarCom("Doc_Qua")                               'quantidade
'vuDocVto  = VarCom("Doc_Vto")                               'valor
'vuDocPag  = VarCom("Doc_Pag")                               'valor a pagar
'vuDocTro  = VarCom("Doc_Tro")                               'valor de troco

'totais do documento
vuDocDsc   = Ado_Tot_Desco                                   'valor de desconto
vuDocPort  = Ado_Tot_Ext                                     'portes
vuDocIvaSuj= Ado_Tot_IvaSuj                                  'sujeito a IVA
vuDocInc   = Ado_Tot_Inc                                     'incidencia de IVA
vuDocIva   = Ado_Tot_Iva                                     'valor de IVA
vuDocIlq   = Ado_Tot_Ilq - Ado_Tot_Iva                       'valor ilquido
vuDocLiq   = Ado_Tot_Liq                                     'valor liquido
vuDocTot   = Ado_Tot_Tot                                     'valor total
end sub


Sub PrpVar_Mov 'preparar variaveis do movimento
'vuMovTli$ = VarCom$("Mov_Tli")                              'tipo de linha
'vuMovArt$ = VarCom$("Mov_Art")                              'artigo
'vuMovNom$ = VarCom$("Mov_Nom")                              'artigo - nome
'vuMovQua  = VarCom("Mov_Qua")                               'quantidade
'vuMovPrc  = VarCom("Mov_Prc")                               'preco
'vuMovVto  = VarCom("Mov_Vto")                               'valor
end sub


'-----------------------------------------------------------------------------
'Documento
'-----------------------------------------------------------------------------
Sub PosDoc_DocIni 'inicializar documento
'msgbox "", "DOC","INI"

call PrpVar_Com                                             'preparar variaveis comuns

'LinInf1$  = TxIde$(Enc_Mst_Opc$,"INF1")                     '?
end sub


Sub PosDoc_DocFim 'terminar documento
'msgbox "", "DOC","FIM"
end sub


Sub PosDoc_LinIni 'inicio de linhas
'msgbox "", "LIN","INI"
end sub


Sub PosDoc_LinFim 'fim de linhas
'msgbox "", "LIN","FIM"
end sub


'-------------------------------------------------------------------------
'cabecalho do documento
'-------------------------------------------------------------------------
Sub PosCab 'cabecalho do documento
call PrpVar_Emp                                             'preparar variaveis da empresa
call PrpVar_Doc                                             'preparar variaveis do documento
'- (61) --------------------------------------------------->'Comentario

print vuEmpIde$                                             'nome da empresa
'print PrtCmd$("[16CPILN]");                                 'tipo de letra
print                                                       'separar
print vuEmpMor$                                             'morada
print vuEmpLoc$                                             'local
print vuEmpCpo$                                             'codigo postal
?Contribuinte: @vaEmpNif                #
?Telefone: @vaEmpTel   Fax: @vaEmpFax   #
call CabLinAdi                                              'cabecalho - listar linhas adicionais

?----------------------------------------
?           Documento No:  @vaDocNum    #
? Data: @vaDtl            Hora: @vaHor  #
? Oper: @vaVnd @vaVndNom                #
?========================================
?   Artigo                       Valor  #
?========================================
end sub


Sub CabLinAdi 'cabecalho - listar linhas adicionais
tabVar$ = "EmpTbDocVar"                                     'tabela de dados
for i = 1 to 5
ntx$ = NumTxt$(i, 2)                                        'conversao em texto
chv$ = "POS.DCX.CAB.L" + ntx$                               'chave

res$ = TabAdiCon$("V", tabVar$, chv$)                       'consultar valor
if res$ <> "" then                                          'ha valor a listar
   print res$                                               'listar
end if
next
end sub


'-------------------------------------------------------------------------
'fim do documento
'-------------------------------------------------------------------------
Sub PosFim 'total do documento

?========================================
?   Total:                @vaDocTot     #
?========================================

'- (61) --------------------------------------------------->'Comentario
call FimLinAdi                                              'listar linhas adicionais
print                                                       'listar separacao

for i = 1 to 5 
print                                                       'listar separacao
next
end sub


Sub FimLinAdi 'fim - listar linhas adicionais
tabVar$ = "EmpTbDocVar"                                     'tabela de dados
for i = 1 to 5
ntx$ = NumTxt$(i, 2)                                        'conversao em texto
chv$ = "POS.DCX.FIM.L" + ntx$                               'chave

res$ = TabAdiCon$("V", tabVar$, chv$)                       'consultar valor
if res$ <> "" then                                          'ha valor a listar
   print res$                                               'listar
end if
next
end sub


'-------------------------------------------------------------------------
'linha do documento
'-------------------------------------------------------------------------
Sub PosLinAjt 'ajuste de linhas
print                                                       'linha de separacao
end sub


Sub PosLinNor 'artigos tipo normal
call PrpVar_Mov                                             'preparar variaveis do movimento

?@vaPosNom                  @vaPosLiq   #
end sub


Sub PosLinTxl 'artigos tipo texto livre
'- (61) --------------------------------------------------->'Comentario
Print Enc_Mov_Div$                                          'listar informacao
end sub

##

