'Nome       : StdFacTi.Imp
'Tipo       : LST
'Data       : 2000/04/26
'Versao     : 1.0b
'Descricao  : Formato de documento tipo Factura para papel TI

'-----------------------------------------------------------------------------
' Modificacoes
'-----------------------------------------------------------------------------
'- Versao : 1.0  1999/01/19 -------------------------------------------------
'Versao base

'- Versao : 1.0a  1999/09/14 -------------------------------------------------
'Variaveis de totais de documentos e iva convertidas para variaveis ADO

'- Versao : 1.0b  2000/??/?? -------------------------------------------------
'alterado funcionamento do campo local de entrega



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


'-----------------------------------------------------------------------------
' Campos especificos
'-----------------------------------------------------------------------------
#ESP
Especifico 1                      [EspOp1]=Opcao 1
Especifico 2                      [EspOp2]=Opcao 2
Limites a listar                  [EspLim]=?
##


'-----------------------------------------------------------------------------
' Configuracao do documento
'-----------------------------------------------------------------------------
#DOC
Nome                       [DocNom]=Factura
Vias                       [DocVia]=Original
'Vias                       [DocVia]=Original;Duplicado
'Vias                       [DocVia]=Original;Duplicado,2;Triplicado
Tipo                       [DocTip]=
Personalizacao             [DocPer]=
Dados especificos          [DocEsp]=ESP1,FAC

'formato
Impressora                 [DocPrt]=
'Impressora                 [DocPrt]=PR01
Linhas por pagina          [DocLpg]=19
Formato do papel           [DocPap]=64L
Ajustar pagina             [DocApg]=1


'funcoes de listagem
Listar cabecalho            [FxCAB]=Fac_Cab
Listar linhas               [FxLIN]=Fac_Lin; Nor; Ajt; Txl; Med; Pmo; Doc; Cor;
Listar fim                  [FxFIM]=Fac_Fim
##


'-----------------------------------------------------------------------------
' Variaveis
'-----------------------------------------------------------------------------
#VAR
'descricao da empresa 
EmpNome    = Emp_Inf_Nome$
EmpMorada  = Emp_Inf_Morada$
EmpAprt    = TxIde$(Emp_Inf_Obs$,"APRT") 
EmpInf1    = TxIde$(Emp_Inf_Obs$,"INF1") 
EmpLocal   = Emp_Inf_Local$
EmpCpost   = Emp_Inf_Cpost$
EmpTel     = Emp_Inf_Telef$
EmpFax     = Emp_Inf_Fax$
EmpCtrb    = Emp_Inf_Contrib$
EmpTps     = Emp_Inf_NatJur$
EmpReg     = Emp_Inf_NumReg$
EmpCapSoc  = Emp_Inf_CapSoc
EmpLinTel  = "TEL:"+Emp_Inf_Telef$+" * "+Emp_Inf_Fax$


'indicacao do destinatario do documento
Nome      = VarAlt$("Enc_Mst","Cta_Mst_Nome$")
Morada    = VarAlt$("Enc_Mst","Cta_Ang_Morada$")
Local     = VarAlt$("Enc_Mst","Cta_Ang_Local$")
Cpost     = VarAlt$("Enc_Mst","Cta_Ang_Cpost$")
Ctrb      = VarAlt$("Enc_Mst","Cta_Mst_Ctrb$")
Ct        = Cta_Mst_Ct$


'informacoes sobre o documento
FacIde    = Doc_Ide_Sdoc$+" No "+ Trim$(FrmNdo$("",Enc_Mst_Tdoc$,Enc_Mst_Ndoc$))
DocDtl    = FrmVal$(Doc_Ide_Dtl,44,0)
Vend      = Enc_Mst_Vend
Cpag      = EmpTabCon$("Cpag",Enc_Mst_CpagCod,"Des")
DocDtv    = FrmVal$(Doc_Ide_Dtv,44,0)
DocOrg    = VarAlt$("ENC_MST","Emp_Inf_Local$")
DocDest   = VarAlt$("ENC_MST","Cta_Ang_Local$,LocEnt$")
DocHrSai  = FrmVal$(VarAlt$("ENC_MST","Enc_Mst_HrSai"),53)


'linha de artigo a listar
LinArt    = Stc_Mst_Art$
LinNome   = Stc_Mst_Nome1$
LinQu     = FrmVal$(Doc_Art_Qu,21,5.3)
LinPrc    = FrmVal$(Doc_Art_Prc,21,11.2)
Iva       = IvaTax("A")
LinDesco  = Enc_Mov_Desco$
LinILiq   = FrmVal$(Doc_Art_ILq,21,14.2)


'linha de documentos a listar
DocIde    = Enc_Mst_Tdoc$+" "+FrmNdo$("44",Enc_Mst_Tdoc$,Enc_Mst_Ndoc$)
DocVl     = FrmVal$(Doc_Tot_Tot,21,13.2)

'valores do iva/taxas
IvaTx0    = " 0"+FrmVal$(Doc_Tot_IvaIse,21,10.1)
IvaTx1    = FrmVal$(IvaTax(1),21,2.0)+FrmVal$(AdoIvaInc("T",1),21,10.1)+FrmVal$(AdoIvaVal("T",1),21,8.1)
IvaTx2    = FrmVal$(IvaTax(2),21,2.0)+FrmVal$(AdoIvaInc("T",2),21,10.1)+FrmVal$(AdoIvaVal("T",2),21,8.1)
IvaTx3    = FrmVal$(IvaTax(3),21,2.0)+FrmVal$(AdoIvaInc("T",3),21,10.1)+FrmVal$(AdoIvaVal("T",3),21,8.1)

'totais das taxas de iva
IvaTot    = Space$(2)+FrmVal$(AdoIvaInc("T",1)+AdoIvaInc("T",2)+AdoIvaInc("T",3),21,10.1)+FrmVal$(AdoIvaVal("T",1)+AdoIvaVal("T",2)+AdoIvaVal("T",3),21,8.1)


'totais do documento
DocDesco = FrmVal$(Ado_Tot_Desco,21,13.2)
DocIlq   = FrmVal$(Ado_Tot_Ilq,21,13.2)
DocLiq   = FrmVal$(Ado_Tot_Liq,21,13.2)
DocPort  = FrmVal$(Ado_Tot_Ext,21,13.2)
DocIvaSuj= FrmVal$(Ado_Tot_IvaSuj,21,13.2)
DocInc   = FrmVal$(Ado_Tot_Inc,21,13.2)
DocIva   = FrmVal$(Ado_Tot_Iva,21,13.2)
DocIlq   = FrmVal$(Ado_Tot_Ilq,21,13.2)
DocLiq   = FrmVal$(Ado_Tot_Liq,21,13.2)
DocTot   = FrmVal$(Ado_Tot_Tot,21,13.2)


'conversão de moeda para totais
DocEurTot=FrmVal$(MoeCnv("N",Ado_Tot_Tot,Enc_Mst_Moeda,2),21,13.2)
DocEurCmb=FrmVal$(EmpTabCon$("MOEDA",Enc_Mst_Moeda,"CMBEUR"),21,3.3)


'===================================================================
'Especificos Recibo
'===================================================================
RecIde    = "RECIBO DA "+Doc_Ide_Sdoc$+" No "+ Trim$(FrmNdo$("",Enc_Mst_Tdoc$,Enc_Mst_Ndoc$))
RecTotEsc = FrmVal$(Doc_Tot_Tot,21,13.2)
RecTotEur = FrmVal$(MoeCnv("N",Doc_Tot_Tot,Enc_Mst_Moeda,2),21,13.2)
RecDocPg  = "Factura Nr. "+ Trim$(FrmNdo$("06",Enc_Mst_Tdoc$,Enc_Mst_Ndoc$))
##


'------------------------------------------------------------------------------
' Sequencias para recolha de artigos
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' Tipo Normal
'------------------------------------------------------------------------------
#SEQ
Identificacao de sequencia [IDS]=NOR
Codigos validos            [ID1]=*
Codigos invalidos          [ID0]=P,M
'Modos de uso               [IDM]=Rec,Cor

Funcao : Recolha       [FX,REC ]=REC; EXE
Funcao : Corrigir      [FX,COR ]=COR; EXE
Funcao : Executar      [FX,EXE ]=*
Recolha aautomatica          [E]=RAUTO
'Campo opcional              [E]=OPC Var$,Descricao,Tipo(A/N)+Dig
Quantidade                   [E]=QU; ESC:LPL
'Quantidade 2                [E]=QU2
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA

Total                  [E,TOT  ]=TOT
Confirmar linha              [E]=CFL; CF2:ALT, ESC:LPL
Registar                     [E]=REG
Fim de sequencia             [E]=FIM

'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


'------------------------------------------------------------------------------
' Linha com campos opcionais 
'------------------------------------------------------------------------------
' Deficinao de Campos opcionais  ex:Cor

' linha para sequencia                     [E]=OPC Var$,Descricao,Tipo(A/N)+Dig
'               Campo opcional Cor         [E]=OPC COR,Cor escolhida,A15

' definir a linha no cabecalho do documento e no documento com o nome "COR"
'
' Indicar no artigo o tipo de linha da identificacao de sequencia 
' neste caso "COR"
'------------------------------------------------------------------------------
Identificacao de sequencia [IDS]=COR
Codigos validos            [ID1]=*
Codigos invalidos          [ID0]=P,M
'Modos de uso               [IDM]=Rec,Cor

Funcao : Recolha       [FX,REC ]=REC; EXE
Funcao : Corrigir      [FX,COR ]=COR; EXE
Funcao : Executar      [FX,EXE ]=*
Recolha aautomatica          [E]=RAUTO
Campo opcional 1             [E]=OPC COR,Cor escolhida,A15
Quantidade                   [E]=QU; ESC:LPL
'Quantidade 2                [E]=QU2
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA

Total                  [E,TOT  ]=TOT
Confirmar linha              [E]=CFL; CF2:ALT, ESC:LPL
Registar                     [E]=REG
Fim de sequencia             [E]=FIM

'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


'------------------------------------------------------------------------------
' Tipo Valor total (portes e Mao de obra)
'------------------------------------------------------------------------------
Identificacao de sequencia [IDS]=PMO
Codigos validos            [ID1]=P,M
Codigos invalidos          [ID0]=

Funcao : Recolha       [FX,REC ]=REC; EXE
Funcao : Corrigir      [FX,COR ]=COR; EXE
Funcao : Executar      [FX,EXE ]=*
Recolha automatica           [E]=RAUTO
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA
Total                  [E,TOT  ]=TOT
Confirmar linha              [E]=CFL; CF2:ALT, ESC:LPL
Registar                     [E]=REG
Fim de sequencia             [E]=FIM

Inicio de alteracao    [E,ALT  ]=ALT
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA; TOT

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


'------------------------------------------------------------------------------
' Tipo Medidas
'------------------------------------------------------------------------------
Identificacao de sequencia [IDS]=MED
Codigos validos            [ID1]=M
Codigos invalidos          [ID0]=

Funcao : Recolha       [FX,REC ]=REC; EXE
Funcao : Corrigir      [FX,COR ]=COR; EXE
Funcao : Executar      [FX,EXE ]=*
Recolha automatica           [E]=RAUTO
Quantidade                   [E]=QU
Medidas                      [E]=MED
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA
Total                  [E,TOT  ]=TOT
Confirmar linha              [E]=CFL; CF2:ALT, ESC:LPL
Registar                     [E]=REG
Fim de sequencia             [E]=FIM

Inicio de alteracao    [E,ALT  ]=ALT
Preco                        [E]=PRC
Desconto                     [E]=DES
Iva                          [E]=IVA; TOT

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


'------------------------------------------------------------------------------
' Tipo Texto livre
'------------------------------------------------------------------------------
Identificacao de sequencia [IDS]=TXL
Codigos validos            [ID1]=
Codigos invalidos          [ID0]=
'Modos de uso               [IDM]=Rec:RTX; Alt:RTX; Cor:RTX

Funcao : Recolha       [FX,REC ]=REC; EXE
Funcao : Corrigir      [FX,COR ]=COR; EXE
Funcao : Executar      [FX,EXE ]=*
Texto                  [E,RTX  ]=TXL
Recolha automatica           [E]=RAUTO
Confirmar linha              [E]=CFL; CF2:RTX, ESC:LPL
Registar                     [E]=REG
Fim de sequencia             [E]=FIM

'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
31, 10, 20,200,"Vendedor       " ,100,Enc_Mst_Vend                        , 2.0, 50
30, 10, 20,230,"Contribuinte   " ,100,VarAlt$("ENC_MST","Cta_Mst_Ctrb$")  ,12.0,130
30,110, 20,260,"Cond. Pagamento" ,100,VarAlt$("ENC_MST","Cta_Ang_Cpag")   , 2.0, 50

10, 53, 390,170,"Hora de saida   ",100,VarAlt$("ENC_MST","Enc_Mst_HrSai")         , 4.0,100
31, 10, 390,200,"Local de carga  ",100,VarAlt$("ENC_MST","Emp_Inf_Local$")        ,30.0,100
31, 10, 390,230,"Local de entrega",100,VarAlt$("ENC_MST","Cta_Ang_Local$,LocEnt$"),30.0,100
31, 10, 390,260,"Matricula       ",100,TxIde$(Enc_Mst_Opc$,"MAT")                 ,30.0,100
##

'30, 10,430,100,100,  8.0,"Texto   : ",150,Variavel,Ope
' |   |  |   |   |    |      |          |    |       |
' |   |  |   |   |    |      |          |    |       +--> Opcao especial
' |   |  |   |   |    |      |          |    +----------> Variavel
' |   |  |   |   |    |      |          +---------------> Dimensao da identificacao
' |   |  |   |   |    |      +--------------------------> Texto Informativo
' |   |  |   |   |    +--------------> Formato do valor
' |   |  |   |   +-------------------> Dimensao
' |   |  |   +-----------------------> Coluna
' |   |  +---------------------------> Linha
' |   +------------------------------> Tipo de valor/Aspecto
' +----------------------------------> Controlo de recolha
'
'1o parametro - modo/controlo de recolha (<0 nao pode alterar)
'2o parametro - tipo dos dados/aspecto
'3o parametro - linha
'4o parametro - coluna
'5o parametro - dimensao da identificacao
'6o parametro - formato do valor (inteiros.decimais)
'7o parametro - texto informativo
'8o parametro - variavel
'
'Controlo de recolha : 1x - Pode modificar para registo novo
'                      2x - Pode modificar para alteracao de registo
'                      3x - Igual a 1x+2x
'                      ?0 - Nao cria variavel
'                      ?1 - Cria variavel
'
'Notas : O campo 'Opcao especial' e opcional

#PGM
'-----------------------------------------------------------------------------
' Funcoes para impressao do documento
'-----------------------------------------------------------------------------

'=============================================================================
' Documento = Factura
'=============================================================================
'?                           |                                          |            |                |      |          | 
'-----------------------------------------------------------------------------
' Cabecalho
'-----------------------------------------------------------------------------
Sub FAC_CAB ' cabecalho da factura
print PrtCmd$("[10CPILN]")
?@EmpNome                                          @FacIde                    #
?@EmpInf1                                                                     #
?@EmpMorada                                    @Nome                          #
?@EmpAprt                                      @Morada                        #
?@EmpCpost                                     @Local                         #
?@EmpLinTel                                    @Cpost                         #
?Capital Social @EmpCapSoc
?@EmpReg                                                         @Ctrb          #
?Contribuinte No@EmpCtrb                                                      #

print PrtCmd$("[16CPILN]")
?
?         @DocDtl         @Ct           @Vend                              @Cpag                            #
?
?               @DocOrg                                              @DocDest                         @DocHrSai
?
?
print PrtCmd$("[16CPILN]")
end sub


'-----------------------------------------------------------------------------
' Linhas do Documento
'-----------------------------------------------------------------------------
SUB FAC_LinNor 'artigos tipo normal
?  @LinArt              @LinNome                                   @LinQu       @LinPrc            @Iva @LinDesco  @LinILiq        #
end sub


SUB LinCor 'Exemplo campos opcionais
?@LinArt           @LinNome                           @LinQu          @Uni     @LinPrc           @LinDesco       @LinLiq        @Iva
?Cor escolhida   : @LinOpcCor
end sub

SUB FAC_LinPmo 'artigos tipo Portes e Mao-de-obra
?
end sub


SUB FAC_LinTxl 'artigos tipo texto livre
Print Tab(19) left$(Enc_Mov_Div$,30)
end sub


SUB FAC_LinAjt 'ajuste de linhas
?
end sub


SUB FAC_LinDoc 'linha de documento
? Documento : @DocIde            @pDocTot             @pDocIva               #
'? Iva 1                          @pIvaI1              @pIvaV1                #
end sub


'-----------------------------------------------------------------------------
' Final do Documento
'-----------------------------------------------------------------------------
SUB FAC_FimAjt  'ajuste de fim de pagina
print PrtCmd$("[SP]")
end sub


SUB FAC_Fim     'total do documento
print PrtCmd$("[10CPILN]")
?            @IvaTx0                                           @DocIlq         #
?            @IvaTx1                                           @DocDesco       #
?            @IvaTx2                                                           #
?            @IvaTx3                                           @DocIva       #   
?            @IvaTot                                           @DocTot         #
?                                            TOTAL EM EURO  :  @DocEurTot      #
? ** PROCESSADO POR COMPUTADOR **   Factor de conversao EURO: @DocEurCmb       # 

'Imprimir Recibo

Call Rec_Cab
Call Rec_Lin
end sub



'=============================================================================
' Documento = Recibo
'=============================================================================
'-----------------------------------------------------------------------------
' Cabecalho
'-----------------------------------------------------------------------------
SUB REC_CAB'cabecalho do recibo
?
?
?
print PrtCmd$("[10CPILN]")
?@EmpNome                                       @RecIde                       #
?@EmpInf1                                                                     #
?@EmpMorada                                    @Nome                          #
?@EmpAprt                                      @Morada                        #
?@EmpCpost                                     @Local                         #
?@EmpLinTel                                    @Cpost                         #
?Capital Social @EmpCapSoc
?@EmpReg                                                         @Ctrb          #
?Contribuinte No@EmpCtrb                                                      #
End Sub

'-----------------------------------------------------------------------------
' Linha
'-----------------------------------------------------------------------------
SUB REC_LIN 'linha do recibo
ExtNl=NumExtPrp("120","=")                      'preparar extenso
?
?           Recebemos de V.Exas a quantia de Escudos          @RecTotEsc      #
'?           Recebemos de V.Exas a quantia de Euro             @RecTotEur      #
?           Referente a nossa @RecDocPg                                     #


print PrtCmd$("[16CPILN]")
Print Tab(5) "Sao :" Tab(10) NumExt$(1 ,Ado_Tot_Tot,"ESC",3)                                                             #
'Print Tab(5) "Sao :" Tab(10) NumExt$(1 ,Ado_Tot_Tot,"EUR",3)                                                             #
?    Cliente N. @Ct                                                             #
print PrtCmd$("[SP]")
'Linhas de ajuste de fim
?
?
end sub
##

