

; Script fora de uso, verificar quem precisa e analisar !!
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes           

return


;** GeraNFs ********************************************************************
;*  Monta Fatura dos Cupons em Aberto e Imprime no final                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 28/08/2002 por Anivel Augusto Rodrigues
;Ultima Alteracao: 11/04/2005 por Davi Pereira Carrano
;Motivo Alteracao: Retirando Atendente
;Ultima Alteracao: 19/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cupom
;Ultima Alteracao: 26/10/2007 por Antonio Marcelo Alves  
;Motivo Alteracao: Impressao da Nota
;Ultima Alteracao: 09/11/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Imprime NF Sim/Nao
;Ultima Alteracao: 21/11/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Destinacao+Obs
;Alterado em     : 29/11/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes [Valor Desconto]
;Alterado em     : 05/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes [Sistema Gerador]
;Alterado em     : 09/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes OBS
;Alterado em     : 14/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO Item
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 28/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes ShowDialog TG_DESTINAT
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Alterado processo "NotaCF" p/ "NotaR" 

;*******************************************************************************
;* Rotina para Selecionar Registros                                            *
;*******************************************************************************
Proc Seleciona()
ClearAll

{Ask} {NotaC} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
If Not IsBlank(VSDGDESTINAT)
   Then Moveto [Codigo         ] TypeIn "~VSDGDESTINAT.."
   Else Moveto [Codigo         ] TypeIn ">=~VSDGDESTINATINI, <=~VSDGDESTINATFIM"
EndIf
Moveto [Tipo do Documento      ] TypeIn "CUP.."
Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Cupom Fiscal Faturado  ] TypeIn "Not S"
Moveto [Descricao da Destinacao] TypeIn "..VEND.."
Moveto [Tipo Movimento Estoque ] TypeIn "S"
Moveto [Forma de Pagamento     ] TypeIn "\"NO\""
Moveto [Situacao               ] TypeIn "Not C"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then CopyForm "NotaC" "6" "Answer" "F"
EndIf

EndProc  ; (Seleciona)

;*******************************************************************************
;* Seleciona Titulos para Baixa
;*******************************************************************************
Proc CHAVE()
While True

  Moveto [Valor Nota Fiscal]
  SOMA_NF=ImageCSum()

  End
  SOMA_CF=RecNo()

  Down
  Moveto [Codigo da Empresa]
  While True

    Prompt " Esc=Sair  F7=Paginar  F8=Gerar"

    Wait Field
      Message(StrVal(SOMA_CF)+" Cupom(s)    Total-> "+Format("W12.2,ECI",SOMA_NF)+"  ")
         Until "ESC","ENTER","F7","HOME","UP","PGUP","F8"

    Switch
    Case RetVal="F8":
         CONFGERAL("Gerar Fatura ?")
         If OK="S"
            Then If IsEmpty("Answer")
                    Then Mensagem("N„o existem registros a processar")
                    Else CHAVE=7
                         Return
                 EndIf
         EndIf
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" And Field()="Codigo da Empresa":
         While True
           PAGINA("Answer","MR")
           If EDITAR="S"
              Then CHAVE=0
              Else If EXCLUIR="S"
                      Then CONFIRMA()
                           If OK="S"
                              Then DEL
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           Ins
         EndWhile
         QuitLoop
    Case Retval="ESC":
         If Field()="Codigo da Empresa"
            Then CHAVE=9
                 Return
         EndIf
    EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Selecionar Registros                                            *
;*******************************************************************************
Proc Seleciona2()
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Example "emp"
Moveto [Numero do Documento    ] Example "numero"
Moveto [Serie do Documento     ] Example "serie"
Moveto [Codigo                 ] Check
{Ask} {NotaI} Check
Moveto [Codigo da Empresa      ] Example "emp"
Moveto [Numero do Documento    ] Example "numero"
Moveto [Serie do Documento     ] Example "serie"
Do_It!
ClearAll

If IsTable("Temp_020")
   Then Delete "Temp_020"
EndIf
Copy "Answer" "Temp_020"

{Ask} {Answer}
Moveto [Codigo da Empresa       ] Check
Moveto [Codigo                  ] Check
Moveto [Codigo do Item          ] Check
Moveto [Preco Unitario          ] Check
;Moveto [Taxa Desconto Unitario  ] Check
Moveto [Quantidade              ] TypeIn "Calc Sum as Quantidade"
Moveto [Preco Total             ] TypeIn "Calc Sum as PrecoTotal"
Do_It!
ClearAll

EndProc  ; (Seleciona)

;*******************************************************************************
;* Rotina Geracao dos Dados da FaturaI,FaturaC                                 *
;*******************************************************************************
Proc Gera_Fatura()
AGUARDE("Aguarde, processando dados")

ClearAll
INICIO =True
DOCTO_OK=True
EMPRESA="????"
CLIENTE="????"
CONTFAT=0

NR = NRecords("Answer")

View NOWINDOW  "\\Sistemas\\Cadastro\\Feriados"
View NOWINDOW  "\\Sistemas\\CtaRec\\Duplic"
View NOWINDOW  "\\Sistemas\\CtaCor\\Conta"
View NOWINDOW  "\\Sistemas\\CtaCor\\SaldCont"
View NOWINDOW  "\\Sistemas\\CtaCor\\MovCont"

View NOWINDOW  "DupC"
View NOWINDOW  "DupI"
View NOWINDOW  "DupNF"

View "NumeroNF"
View "NumeroDP"
View "P_Fatura"
View "NotaC"
View "NotaI"
View "NotaV"
View "NotaR"
View "Temp_020"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())

  If [Codigo da Empresa]<>EMPRESA or
     [Codigo           ]<>CLIENTE
     Then If Not INICIO And DOCTO_OK
             Then Fecha_Fatura()
             Else INICIO=False
          EndIf

          If [Codigo da Empresa]<>EMPRESA
             Then Carrega_Parametros()
                  Moveto "Answer"
          EndIf
          EMPRESA=[Codigo da Empresa]
          CLIENTE=[Codigo           ]

          Moveto "NotaC"
          Moveto [Codigo da Empresa]
          Locate EMPRESA, VSDGPROXNF, VSDGSERTPDOCTO
          If RetVal
             Then DOCTO_OK=False
                  Mensagem("Documento: "+EMPRESA+"/"+VSDGPROXNF+"/"+VSDGTPDOCTO+" j  existe.//Anotar !")
                  CONFGERAL("Continuar com processamento ?")
                  If OK="N"
                     Then QuitLoop
                  EndIf
                  Grava_NumeroNF()
                  Moveto "Answer"
                  Loop
          EndIf

          DOCTO_OK=True
          CONTFAT=CONTFAT+1
          SEQ_I =0
          SEQ_V =0
          TOT_DESCTO=0

          AGUARDE("Aguarde, gerando "+VSDGTPDOCTO+"/"+VSDGPROXNF+" ["+StrVal(CONTFAT)+"]  "+BARRA_STRING)
          End
          Down
          [Codigo da Empresa        ]=[Answer->Codigo da Empresa]
          [Codigo do Documento      ]=VSDGTPDOCTO
          [Numero do Documento      ]=VSDGPROXNF
          UnLockRecord

          Moveto "NotaC"
          Moveto [Codigo da Empresa]
          Locate EMPRESA, VSDGPROXNF, VSDGSERTPDOCTO

          [Codigo                   ]=[Answer->Codigo           ]
          [Data de Emissao          ]=VSDGDTREF
          [Data de Saida            ]=VSDGDTREF
          [Hora de Saida            ]=StrVal(Time())
          [Condicao de Pagamento    ]="04"
          [Forma de Pagamento       ]="CO"
          [Codigo do Representante  ]=""
          [Codigo da Destinacao     ]="002"
          [Codigo da Transportadora ]="0001"
          [Sistema Gerador          ]="FT"

          ;*** Obs Destinacao *******
          OBS1=VSDGOBSNF+" **  "
          OBS1=OBS1+"REF. "+Format("D13",VSDGDTINI)+" ATE "+Format("D13",VSDGDTFIM)
          Moveto [Codigo da Destinacao]
          Ativa_Lookup()
          Moveto [Codigo da Destinacao]
          Locate [NotaC->Codigo da Destinacao]
          If RetVal
             Then OBS1=OBS1+[Observacao_Destinacao]
          EndIf
          KeyPress "ESC"
          [Observacao na Nota Fiscal]=OBS1+" - Cupom(s): "

          ;*** Aliquota do Estado ***
          Moveto [UF]
          Ativa_Lookup()
          Moveto [UF]
          Locate [NotaC->UF]
          If RetVal
             Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
             Else UF_ALIQUOTA_ICMS=BlankNum()
          EndIf
          KeyPress "ESC"
          [Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS

          For wwi From 1 To 3
            Switch
              Case wwi=1: Moveto "NotaI"
              Case wwi=2: Moveto "NotaV"
              Case wwi=3: Moveto "NotaR"
            EndSwitch

            Moveto [Codigo da Empresa]
            Locate [NotaC->Codigo da Empresa       ],
                   [NotaC->Numero do Documento     ],
                   [NotaC->Serie do Documento      ]
            If RetVal
               Then While [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ] And
                          [Numero do Documento     ]=[NotaC->Numero do Documento     ] And
                          [Serie do Documento      ]=[NotaC->Serie do Documento      ]
                      Del
                    EndWhile
            EndIf
          EndFor

          NDOCTO ="????"
          SDOCTO ="????"
          SEQ_CF=0

          Moveto "Temp_020"
          Moveto [Codigo]
          Locate CLIENTE,EMPRESA
          If RetVal
             Then While  [Codigo           ]=CLIENTE And
                         [Codigo da Empresa]=EMPRESA

                    If [Numero do Documento    ]<>NDOCTO Or
                       [Serie do Documento     ]<>SDOCTO
                       Then NDOCTO=[Numero do Documento    ]
                            SDOCTO=[Serie do Documento     ]

                            SEQ_CF=SEQ_CF+1
                            Moveto "NotaR"
                            End Down
                            [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ]
                            [Numero do Documento     ]=[NotaC->Numero do Documento     ]
                            [Serie do Documento      ]=[NotaC->Serie do Documento      ]
                            [Sequencia               ]=SEQ_CF
                            [Modelo_Documento        ]="2C"
                            [Data_Documento          ]=BlankDate()
                            [Numero_Documento        ]=[Temp_020->Numero do Documento  ]
                            [Serie_Documento         ]=[Temp_020->Serie do Documento   ]
                            PostRecord

                            Moveto "NotaC"
                            If SEQ_CF=1
                               Then [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+
                                                                [Temp_020->Numero do Documento]
                               Else [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+","+
                                                                [Temp_020->Numero do Documento]
                            EndIf

                            Moveto "Temp_020"
                    EndIf
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
  EndIf

  If Not DOCTO_OK
     Then Moveto "Answer"
          Loop
  EndIf

  SEQ_I=SEQ_I+1
  Moveto "NotaI"
  End
  Down
  [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ]
  [Numero do Documento     ]=[NotaC->Numero do Documento     ]
  [Serie do Documento      ]=[NotaC->Serie do Documento      ]
  [Item do Documento       ]=SEQ_I
  [Numero Pedido_Orcamento ]=""
  [Item Pedido_Orcamento   ]=0
  [Codigo do Item          ]=[Answer->Codigo do Item]
  [Quantidade              ]=[Answer->Quantidade    ]
  [Preco Unitario          ]=[Answer->Preco Unitario]
  [Preco Unitario Tabela   ]=[Answer->Preco Unitario]
  [CFO                     ]=[NotaC->CFO                     ]
  
  Vrtot   =[Quantidade]*[Preco Unitario]
  [Preco Total             ]=NDecimal(Vrtot,2)
  VrDescto=NDecimal(Vrtot-[Answer->PrecoTotal],2)
  TOT_DESCTO=TOT_DESCTO+VrDescto
  
  [Valor do IPI            ]=Round(([Preco Total]*[Aliquota de IPI])/100,2)
  [Valor do ICMS           ]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
  [Valor do ISSQN          ]=Round(([Preco Total]*[Aliquota de ISSQN])/100,2)
  PostRecord

  Moveto "Answer"
EndScan
IF DOCTO_OK
   Then Fecha_Fatura()
EndIf
Do_It!
ClearAll

Delete "Answer"
Delete "Temp_020"

EndProc  ; (Gera_NF)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc Grava_NumeroNF()
Moveto "NumeroNF"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,VSDGTPDOCTO
If RetVal
   Then [Proximo Numero      ]=[Proximo Numero      ]+1
        [Data Ultima Emissao ]=VSDGDTREF
        VSDGPROXNF=AlinhM(StrVal([Proximo Numero      ]),6)
        PostRecord
EndIf
EndProc

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc Fecha_Fatura()
Moveto "NotaC"

For I From 1 To 10
   AICMS[I] =BlankNum()
   AIPI[I]  =BlankNum()
   AISSQN[I]=BlankNum()

   BCICMS[I] =BlankNum()
   BCIPI[I]  =BlankNum()
   BCISSQN[I]=BlankNum()

   VIICMS[I] =BlankNum()
   VIIPI[I]  =BlankNum()
   VIISSQN[I]=BlankNum()

   RICMS[I] =BlankNum()
   RIPI[I]  =BlankNum()
EndFor

VRMERC=0
VRSERV=0

Moveto "NotaI"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa       ],
       [NotaC->Numero do Documento     ],
       [NotaC->Serie do Documento      ]
If RetVal
   Then While [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ] And
              [Numero do Documento     ]=[NotaC->Numero do Documento     ] And
              [Serie do Documento      ]=[NotaC->Serie do Documento      ]

          If [Tributacao de ICMS]="D"
             Then For I From 1 To 10
                      If Not IsBlank(AICMS[I])
                         Then If AICMS[I]=[Aliquota de ICMS] And RICMS[I]=[Aliquota Reduzida BCICMS]
                                 Then BCICMS[I]=BCICMS[I]+[Preco Total]
                                      If Not [Preco Total]>0
                                         Then VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                                      EndIf
                                      QuitLoop
                              EndIf
                         Else AICMS[I] =[Aliquota de ICMS]
                              RICMS[I] =[Aliquota Reduzida BCICMS]
                              BCICMS[I]=[Preco Total]
                              If Not [Preco Total]>0
                                 Then VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                              EndIf
                              QuitLoop
                      EndIf
                  EndFor
          EndIf

          If [Tributacao de IPI]="D"
             Then For I From 1 To 10
                     If Not IsBlank(AIPI[I])
                        Then If AIPI[I]=[Aliquota de IPI] And RIPI[I]=[Aliquota Reduzida BCIPI]
                                 Then BCIPI[I]=BCIPI[I]+[Preco Total]
                                      If Not [Preco Total]>0
                                         Then VIIPI[I]=VIIPI[I]+[Valor do IPI]
                                      EndIf
                                      QuitLoop
                              EndIf
                         Else AIPI[I] =[Aliquota de IPI]
                              RIPI[I] =[Aliquota Reduzida BCIPI]
                              BCIPI[I]=[Preco Total]
                              If Not [Preco Total]>0
                                 Then VIIPI[I]=VIIPI[I]+[Valor do IPI]
                              EndIf
                              QuitLoop
                     EndIf
                 EndFor
          EndIf

          If [Tributacao de ISSQN]="D"
             Then For I From 1 To 10
                      If Not IsBlank(AISSQN[I])
                         Then If AISSQN[I]=[Aliquota de ISSQN]
                                 Then BCISSQN[I]=Round(BCISSQN[I]+[Preco Total],2)
                                      VIISSQN[I]=VIISSQN[I]+[Valor do ISSQN]
                                      QuitLoop
                              EndIf
                         Else AISSQN[I]=[Aliquota de ISSQN]
                              BCISSQN[I]=[Preco Total]
                              VIISSQN[I]=VIISSQN[I]+[Valor do ISSQN]
                              QuitLoop
                      EndIf
                  EndFor
          EndIf


          If [Tipo do Item]<>"C"
             Then VRMERC=VRMERC+[Preco Total]
             Else VRSERV=VRSERV+[Preco Total]
          EndIf

          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

CALC_OF()
CALC_VENCTOS()

;******** Rotina Caixa/Banco e Duplicatas **************************************
NOTAFISC =[NotaC->Numero do Documento     ]
SERIEFISC=[NotaC->Serie do Documento      ]

CANCELA_CX =False
CANCELA_DUP=False
If PARAM_AVISTAAUTOMAT="S" And [NotaC->Tipo Movimento Estoque]="S" And
   (Search("VEND",[NotaC->Descricao da Destinacao])>0 Or
    Search("FATURA CUPOM FISCAL",[NotaC->Descricao da Destinacao])>0)
   Then If PARAM_APRAZOAUTOMAT="S" And PARAM_AVISTADUPLIC="S"
           Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                Play("FT_DPECF")
           Else If [NotaC->Tipo de Pagamento]="V"
                   Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                        CX_VRLANC     =[NotaC->Valor Nota Fiscal]
                        Play("FT_CXECF")
                   Else If [NotaC->Tipo de Pagamento]="P"
                           Then Moveto "NotaV"
                                Moveto [Codigo da Empresa]
                                Locate [NotaC->Codigo da Empresa       ],
                                       [NotaC->Numero do Documento     ],
                                       [NotaC->Serie do Documento      ]
                                If RetVal
                                   Then While [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ] And
                                              [Numero do Documento     ]=[NotaC->Numero do Documento     ] And
                                              [Serie do Documento      ]=[NotaC->Serie do Documento      ]
                                          If [Data]=[NotaC->Data de Emissao]
                                             Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                                                  CX_VRLANC     =[Valor]
                                                  Play("FT_CXECF")
                                          EndIf
                                          Moveto "NotaV"
                                          Skip
                                          If EOT() Then QuitLoop EndIf
                                        EndWhile
                                EndIf
                        EndIf
                EndIf
        EndIf
EndIf
If PARAM_APRAZOAUTOMAT="S" And [NotaC->Tipo Movimento Estoque]="S" And
   (Search("VEND",[NotaC->Descricao da Destinacao])>0 Or
    Search("FATURA CUPOM FISCAL",[NotaC->Descricao da Destinacao])>0)
   Then If [NotaC->Tipo de Pagamento]="P" Or
          ([NotaC->Tipo de Pagamento]="V" And PARAM_AVISTADUPLIC="S")
          Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
               Play("FT_DPECF")
        EndIf
EndIf

Moveto "NotaC"
;*********** Impressao da Nota *************************************************
ConfGeral("Deseja Imprimir NF ?")
If Ok = "S"
   Then MSGDISPOSITIVO="Nota Fiscal"
        DispositivoI("FAT")
        If OK= "I"
           Then Switch
                  Case SYS_CODIGO_CLIENTE="0078" : Play "NF_0078B"
                  Case SYS_CODIGO_CLIENTE="0061" : Play "NF_0061B"
                EndSwitch
        EndIf        
EndIf
;*******************************************************************************  

CEMPRE_C=[NotaC->Codigo da Empresa  ]
NDOCTO_C=[NotaC->Numero do Documento]
SDOCTO_C=[NotaC->Serie do Documento ]

Moveto "NotaR"
Moveto [Codigo da Empresa]
Locate CEMPRE_C,NDOCTO_C,SDOCTO_C
While [Codigo da Empresa  ]=CEMPRE_C And
      [Numero do Documento]=NDOCTO_C And
      [Serie do Documento ]=SDOCTO_C
      
      If [Modelo_Documento]="2C"
         Then Moveto "NotaC"
              Moveto [Codigo da Empresa]
              Locate [NotaR->Codigo da Empresa ],
                     [NotaR->Numero_Documento  ],
                     [NotaR->Serie_Documento   ]
              If RetVal
                 Then [Cupom Fiscal Faturado]="S"
                      UnLockRecord
              EndIf
      EndIf
      Moveto "NotaR"
      Skip
      If EOT() Then QuitLoop EndIf
EndWhile

Grava_NumeroNF()
  
Moveto "Answer"
EndProc

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc CALC_OF()
Private VBC

Moveto "NotaC"
[Valor Mercadoria]=VRMERC
If [Descricao da Destinacao]="COMPLEMENTO IPI SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO IPI CBC"
   Then [Valor Mercadoria  ]=BlankNum()
EndIf
[Valor Servico    ]=VRSERV
[Valor do Desconto]=TOT_DESCTO
If [Taxa de Desconto]>0
   Then VRDESCTO=Round((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-VRDESCTO

VRBCICMS=0
VRICMS  =0
VRIPI   =0
VRISSQN =0
VRNF    =0

For I From 1 To 10
    If Not IsBlank(AICMS[I])
       Then If BCICMS[I]>0
               Then VBC=BCICMS[I]-Round(((BCICMS[I]*TXDESCTO_TOTAL)/100),2)
                    VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                    VRBCICMS=VRBCICMS+VBC
                    VRICMS=Round(VRICMS+((VBC*AICMS[I])/100),2)
               Else VRICMS=VRICMS+VIICMS[I]
            EndIf
    EndIf
    If Not IsBlank(AIPI[I])
       Then If BCIPI[I]>0
               Then VBC=BCIPI[I]
                    VRIPI=Round(VRIPI+((VBC*AIPI[I])/100),2)
               Else VRIPI=VRIPI+VIIPI[I]
            EndIf
    EndIf
    If Not IsBlank(AISSQN[I])
       Then If BCISSQN[I]>0
               Then VRISSQN=Round(VRISSQN+((BCISSQN[I]*AISSQN[I])/100),2)
               Else VRISSQN=VRISSQN+VIISSQN[I]
            EndIf
    EndIf
EndFor

[Valor BCICMS]=VRBCICMS
[Valor ICMS  ]=VRICMS
[Valor IPI   ]=VRIPI
[Valor ISSQN ]=VRISSQN
[Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                     [Valor Substituicao ICMS]+[Valor do Seguro])

VRNF=[Valor Nota Fiscal]

If [Aliquota BCFrete Nota]>0
   Then [Valor do Frete]=Round(([Valor Nota Fiscal]*[Aliquota BCFrete Nota])/100,2)
EndIf

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
        If [Aliquota BCICMS Frete]>0
           Then [Valor BCICMS]=Round([Valor BCICMS]+([Valor do Frete]-(([Valor do Frete]*[Aliquota BCICMS Frete])/100)),2)
                [Valor ICMS  ]=Round([Valor ICMS]+((([Valor do Frete]-(([Valor do Frete]*[Aliquota BCICMS Frete])/100))*[Aliquota de ICMS Frete])/100),2)
           Else [Valor BCICMS]=[Valor BCICMS]+[Valor do Frete]
                [Valor ICMS  ]=Round([Valor ICMS]+(([Valor do Frete]*[Aliquota de ICMS Frete])/100),2)
        EndIf
EndIf

;;If [Consumidor Final]="S" And [Valor BCICMS]>0
;;   Then [Valor BCICMS]=[Valor Nota Fiscal]
;;        [Valor ICMS  ]=Round(([Valor BCICMS]*UF_ALIQUOTA_ICMS)/100,2)
;;EndIf

If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
   Then [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
   Then [Valor BCICMS            ]=BlankNum()
EndIf

EndProc     ;  (Calc_OF)

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()
Private Contador_Repeticao, ncc, NPC, i, pos_s, NP,
        VRVENCTO, VRDIFERE, j, NDIAS,
        DIA_VECTO, MES_VECTO, ANO_VECTO

Moveto "NotaV"
Contador_Repeticao=0
For ncc From 1 To Len([NotaC->Composicao de Dias])
    If Asc(SubStr([NotaC->Composicao de Dias],ncc,1))<47 Or
       Asc(SubStr([NotaC->Composicao de Dias],ncc,1))>57
       Then Mensagem("Formato da Composicao de Dias Invalido !,//Exemplo= 30/60/90")
            Return
       Else If SubStr([NotaC->Composicao de Dias],ncc,1)="/"
               Then Contador_Repeticao=Contador_Repeticao+1
               Else Contador_Repeticao=0
            EndIf
            If Contador_Repeticao>1 Or
               SubStr([NotaC->Composicao de Dias],1,1)="/" Or
               SubStr([NotaC->Composicao de Dias],Len([NotaC->Composicao de Dias]),1)="/"
               Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                    Return
            EndIf
    EndIf
EndFor

If [NotaC->Tipo de Pagamento]="O"
   Then Moveto "NotaC"
        Return
EndIf

NPC=1
i=1
If Not IsBlank([NotaC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[NotaC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf
If NPC=0
   Then NP=[NotaC->Numero de Parcelas]
   Else If NPC=1 And [NotaC->Numero de Parcelas]>1
           Then NP=[NotaC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

VRVENCTO=NDecimal(([NotaC->Valor Nota Fiscal]/NP),2)
VRDIFERE=[NotaC->Valor Nota Fiscal]-(VRVENCTO*NP)

j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[NotaC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,(Len([NotaC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([NotaC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,Len([NotaC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf

  End
  Down
  [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ]
  [Numero do Documento     ]=[NotaC->Numero do Documento     ]
  [Serie do Documento      ]=[NotaC->Serie do Documento      ]
  [Sequencia               ]=AlinhM(StrVal(i),2)
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([NotaC->Data de Emissao])
                  MES_VECTO=Month([NotaC->Data de Emissao])
                  ANO_VECTO=Year([NotaC->Data de Emissao])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12                
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[NotaC->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[NotaC->Data de Emissao]+NDIAS
  EndIf
  If i<>NP
     Then [Valor]=VRVENCTO
     Else [Valor]=VRVENCTO+VRDIFERE
  EndIf
  [Forma de Pagamento]=[NotaC->Forma de Pagamento]
  PostRecord
  i=i+1
EndWhile

Moveto "NotaC"
EndProc   ;  (Calc_Venctos)

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()

If IsEmpty("P_Fatura")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Return False
EndIf

Moveto "P_Fatura"
Moveto [Codigo_Empresa]
Locate [Answer->Codigo da Empresa]
If Not RetVal
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        Return False
EndIf

PARAM_EMPRESA        =[Codigo_Empresa           ]
PARAM_DESTINACAO     =[Codigo_Destinacao        ]
PARAM_CONTA_CAIXA    =[Codigo_Conta_Caixa       ]
PARAM_DATAS_VENCTOS  =[Datas_Vencimentos        ]
PARAM_COR_TECIDO     =[Cor_Tecido               ]
PARAM_TAMANHO        =[Tamanho                  ]
PARAM_DESCUNIT       =[Desconto Unitario        ]
PARAM_VOLUMES        =[Volumes                  ]
PARAM_SUBSTICMS      =[Substituicao ICMS        ]
PARAM_PEDIDO         =[Utiliza_Pedido           ]
PARAM_ORCAMENTO      =[Utiliza_Orcamento        ]
PARAM_ORDEM_SERVICO  =[Utiliza_OS               ]
PARAM_BLOQUEIA_NEG   =[Bloqueia_Estoque_Negativo]
PARAM_MULT_BCICMS    =[Multiplas_BC_ICMS        ]
PARAM_NLCHQ_IGUAL_NF =[NLCheque_Igual_NF        ]
PARAM_IMPOSTOS       =[Impostos                 ]
PARAM_TABELA_PRECO   =[Tabela_Preco             ]
PARAM_TRANSPORTADORA =[Codigo_Transportadora    ]
PARAM_TRANSFERENCIA  =[Utiliza_Transferencia    ]
PARAM_CONSIGNACAO    ="N"
PARAM_CHEQUES        =[Utiliza_Controle_Cheques ]
PARAM_RELAT_NF       =[Script_Impressao_NF      ]
PARAM_RELAT_ROMA     =[Script_Impressao_Romaneio]
PARAM_RELAT_NP       =[Script_Impressao_NP      ]
PARAM_NITENS         =[Numero_Itens             ] 
PARAM_TAMANHO_DESCR  =[Tamanho_Descricao_Item   ]
PARAM_NLINHAS_OBS    =[NLinhas_Obs_Campo_Itens  ]
PARAM_NLCHQ_IGUAL_NF =[NLCheque_Igual_NF        ]
PARAM_NVIAS_ROMANEIO =[NVias_Romaneio           ]
PARAM_LIMITE_CREDITO =[Utiliza_Limite_Credito   ]
PARAM_ALTERA_PRECO   =[Utiliza_Alteracao_Preco  ]
PARAM_DIAS_ATRASO    =[Utiliza_Dias_Atraso      ]
PARAM_CUPOM_FISCAL   =[Utiliza_Cupom_Fiscal     ]
PARAM_UTILIZACDBARRA =[Utiliza_Codigo_Barras    ]
PARAM_BLOQUEIA_NF    =[Bloqueia_Reemissao_NF    ]
PARAM_AVISTAAUTOMAT  =[Gera_VendasVista_Automat ]
PARAM_APRAZOAUTOMAT  =[Gera_VendasPrazo_Automat ]
PARAM_AVISTADUPLIC   =[Gera_Duplicatas_AVista   ]
PARAM_TXJUROS        =[Duplicata_TxJuros        ]
PARAM_FORMA_TXJUROS  =[Duplicata_Forma_TxJuros  ]
PARAM_DUPLIC_NUMERO  =[Gera_Duplicatas_Numero   ]
Return True

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTREF"         : Campo="TG_EMPRESA"
            Case Campo="TG_TPDOCTO"       : Campo="TG_DTREF"
            Case Campo="TG_DESTINAT"      : Campo="TG_TPDOCTO"
            Case Campo="TG_DESTINATINI"   : Campo="TG_DESTINAT"
            Case Campo="TG_DESTINATFIM"   : Campo="TG_DESTINATINI"       
            Case Campo="TG_FROTA"         : Campo="TG_DESTINATFIM"
            Case Campo="TG_DTINI"         : Campo="TG_FROTA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPCHEQ"        : Campo="TG_DTFIM"
            Case Campo="TG_OBSNF"         : Campo="TG_OPCHEQ"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" :Campo="TG_DTREF"
                    Case Campo="TG_DTREF"   :Campo="TG_TPDOCTO"
                    Case Campo="TG_TPDOCTO" :Campo="TG_DESTINAT"
                         If Not IsBlank(VSDGEMPRESA)
                            Then View "NumeroNF"
                                 Moveto [Codigo da Empresa]
                                 Locate VSDGEMPRESA,VSDGTPDOCTO
                                 If RetVal
                                    Then If VSDGDTREF<[Data Ultima Emissao]
                                            Then Mensagem("Data ultima emiss„o maior que a informada !")
                                                 Campo="TG_DTREF"
                                         EndIf
                                         VSDGPROXNF=AlinhM(StrVal([Proximo Numero      ]),6)
                                    Else Mensagem("Empresa sem controle de Numera‡„o !")
                                         Campo="TG_EMPRESA"
                                 EndIf
                                 ClearImage
                         EndIf
                    Case Campo="TG_DESTINAT":
                         If Not IsBlank(VSDGDESTINAT)
                            Then VSDGDESTINATINI=""
                                 VSDGDESTINATFIM=""
                                 Campo="TG_DTINI"
                            Else Campo="TG_DESTINATINI"
                         EndIf
                    Case Campo="TG_DESTINATINI": Campo="TG_DESTINATFIM"
                    Case Campo="TG_DESTINATFIM": Campo="TG_FROTA"
                    Case Campo="TG_FROTA":
                       VSDGFROTA=ControlValue("TG_FROTA")
                       If IsBlank(VSDGFROTA)
                          Then VSDGFROTA="TODAS"
                       EndIf
                       Campo="TG_DTINI"
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_OPCHEQ"
                    Case Campo="TG_OPCHEQ"     : Campo="TG_OBSNF"
                    Case Campo="TG_OBSNF"      : Campo="YES"
                       VSDGOBSNF=ControlValue("TG_OBSNF")
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
     MSG_CAMPO="Informe uma Empresa"
  Case Campo="TG_TPDOCTO":
     MSG_CAMPO="Informe um Tipo de Documento"
  Case Campo="TG_OPCHEQ":
     MensagemCheckBoxes()
  Case Campo="TG_FROTA":
     MSG_CAMPO="Em Branco = TODAS"
  Case Campo="TG_OBSNF":
     MSG_CAMPO="Obs = \"OBS COMPLEMENTAR\" + Ref.Per¡odo+Obs Destina‡„o+Rela‡„o Cupons:"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
LimpAguarde()
VSDGEMPRESA  = ""
VSDGDESTINAT = ""
VSDGDTINI    = BlankDate()
VSDGDTFIM    = BlankDate()
VSDGDTREF    = Today()
VSDGPROXNF   = ""

Array AICMS[10]
Array AIPI[10]
Array AISSQN[10]

Array VIICMS[10]
Array VIIPI[10]
Array VIISSQN[10]

Array BCICMS[10]
Array BCIPI[10]
Array BCISSQN[10]

Array RICMS[10]
Array RIPI[10]

Array TG_OPCHEQ[1]
TG_OPCHEQ[1]="Visualizar a rela‡„o de ECF's"

Array CheckTG_OPCHEQ[ArraySize(TG_OPCHEQ)]
CheckTG_OPCHEQ[1]=True

While True

  ShowDialog "Gera Fatura para Cupons em Aberto" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB"
   @ 05,01   Height 18 Width 76

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Dt.Emiss„o" For "TG_DTREF"
    Accept @ 03,01 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

    Label  @ 02,15 "Tipo Docto"  For "TG_TPDOCTO"
    Accept @ 03,16 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 03,24 Width 23 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO

    Label  @ 02,48 "Prox. No" For "TG_PROXNF"
    Accept @ 03,49 Width 09 "A6"  Picture "######" Tag "TG_PROXNF" To VSDGPROXNF

    Label  @ 04,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 05,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 05,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST

    Label  @ 04,33 "Inicial"  For "TG_DESTINATINI"
    Accept @ 05,34 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINATINI" To VSDGDESTINATINI
    Label  @ 04,41 "Final"  For "TG_DESTINATFIM"
    Accept @ 05,42 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINATFIM" To VSDGDESTINATFIM

    Label  @ 06,00 "Frota de Ve¡culos"  For "TG_FROTA"
    Accept @ 07,01 Width 08 "A5"  Picture "!*!" Tag "TG_FROTA" To VSDGFROTA

    Label  @ 08,00 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 09,00 "de" For "TG_DTINI"
    Accept @ 09,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,17 "at‚" For "TG_DTFIM"
    Accept @ 09,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    CheckBoxes @ 09,36 Height 1 Width 35 Tag "TG_OPCHEQ"
    TG_OPCHEQ[1] to CheckTG_OPCHEQ[1]

    Label  @ 11,00 "Obs complementar"  For "TG_OBSNF"
    Accept @ 12,01 Width 72 "A255"  Picture "!*!" Tag "TG_OBSNF" To VSDGOBSNF

    Pushbutton @ 14,19 width 13 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 14,33 width 13 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa n„o informada !")
          Loop
  EndIf

  If VSDGFROTA="TODAS"
     Then FROTA=""
     Else FROTA=VSDGFROTA
  EndIf

  AGUARDE("Aguarde, selecionando dados")
  Seleciona()

  If IsEmpty("Answer")
     Then Mensagem("N„o existem registros a processar")
          Loop
  EndIf

  If CheckTG_OPCHEQ[1]
     Then
          Edit "Answer"
          SetHighLight Current Record 23 Field 31
          {Image} {KeepSet}
          Do_It!

          CoEdit "Answer"
          PickForm "F"
          CHAVE()
          Do_It!
          ClearAll
          Echo Normal
          Echo Off
          If CHAVE=9 Then Loop EndIf
          If IsEmpty("Answer")
             Then Mensagem("N„o existem registros a processar")
                  Loop
          EndIf
  EndIf
  Seleciona2()
  Gera_Fatura()
  Mensagem("Fim da opera‡„o !")

EndWhile
ClearAll
Release Vars All
Release Procs All
