;** Ft_DupS2 *******************************************************************
;*  Geracao de Duplicatas                                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 20/06/2005 por Jose Luis Ameno da Silva
;Alterado em     : 05/04/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 07/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Indice Inddup1/Duplic
;Ultima Alteracao: 04/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa                     
;Ultima Alteracao: 24/08/2015 por Andrey Fillipe 
;Motivo Alteracao: Altera‡Æo no processo dos Numero do Lan‡amento - Numero_Lancamento()
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo IR se nÆo for utilizado!
;Ultima Alteracao: 22/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes gera‡Æo de movimentos de CF-e
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Pega_Endereco() e ajustado dados do endere‡o de cobran‡a
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito] 
;Alterado em     : 17/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dupnf codigo do documento,Tipo do Documento

;*******************************************************************************
;* Grava Duplicata                                                             *
;*******************************************************************************
Proc Duplicata_DP()
Moveto "Dupc"
While True
  End
  Down
  [Codigo da Empresa      ] = [Notas2C->Codigo da Empresa        ]
  [Numero do Documento    ] = DP_NUMDOCTO
  [Codigo do Documento    ] = DP_CDDOCTO
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

Moveto [Codigo da Empresa ]
Locate [Notas2C->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If Not RetVal
   Then Return
EndIf

[Codigo da Conta          ] = CX_CONTA_CAIXA
[Codigo da Empresa        ] = [Notas2C->Codigo da Empresa]
[Nome Fantasia Empresa    ] = [Notas2C->Nome Fantasia Empresa    ]
[Data de Emissao          ] = [Notas2C->Data de Emissao          ]
[Tipo                     ] = [Notas2C->Tipo                     ]
If Substr([Notas2C->Descricao Condpagto],1,6)="CONTRA"
   Then [Condicoes Especiais]=[Notas2C->Descricao Condpagto]
EndIf
[Codigo                   ] = [Notas2C->Codigo                   ]
[Nome Fantasia EmitDest   ] = [Notas2C->Nome Fantasia EmitDest   ]

If APLIC_ORIGEM="FATURA" Or
   APLIC_ORIGEM="BALCAO" Or
   APLIC_ORIGEM="TROCA"
   Then
        [Razao Social Fatura      ] = [FaturaC->Razao Social           ]
        [Endereco Fatura          ] = [FaturaC->Endereco               ]
        [Bairro Fatura            ] = [FaturaC->Bairro                 ]
        [CEP Fatura               ] = [FaturaC->CEP                    ]
        [Cidade Fatura            ] = [FaturaC->Cidade                 ]
        [UF Fatura                ] = [FaturaC->UF                     ]
        [CGC Fatura               ] = [FaturaC->CGC                    ]
        [IE Fatura                ] = [FaturaC->IE                     ]

        Pega_Endereco([FaturaC->Numero da OF])                                                                
        [Endereco de Cobranca     ]=VSD_C_Endereco
        [Bairro de Cobranca       ]=VSD_C_Bairro
        [CEP de Cobranca          ]=VSD_C_CEP
        [Cidade de Cobranca       ]=VSD_C_Cidade
        [UF de Cobranca           ]=VSD_C_UF
EndIf

If APLIC_ORIGEM="NOTA"
   Then
        [Razao Social Fatura      ] = [Notas2C->Razao Social           ]
        [Endereco Fatura          ] = [Notas2C->Endereco               ]
        [Bairro Fatura            ] = [Notas2C->Bairro                 ]
        [CEP Fatura               ] = [Notas2C->CEP                    ]
        [Cidade Fatura            ] = [Notas2C->Cidade                 ]
        [UF Fatura                ] = [Notas2C->UF                     ]
        [CGC Fatura               ] = [Notas2C->CGC                    ]
        [IE Fatura                ] = [Notas2C->IE                     ]

        Moveto [Lookup_End_Cob]
        ACHOU_CLIENTE=False
        Ativa_Lookup()
        Moveto [Codigo]
        Locate [DupC->Codigo]
        If RetVal
           Then ACHOU_CLIENTE=True
                CopyToArray REG_CLIENTE
        EndIf
        KeyPress "ESC"
        If ACHOU_CLIENTE
           Then [Endereco de Cobranca    ]=REG_CLIENTE["Endereco de Cobranca"]
                [Bairro de Cobranca      ]=REG_CLIENTE["Bairro de Cobranca"]
                [CEP de Cobranca         ]=REG_CLIENTE["CEP de Cobranca"]
                [Cidade de Cobranca      ]=REG_CLIENTE["Cidade de Cobranca"]
                [UF de Cobranca          ]=REG_CLIENTE["UF de Cobranca"]
                Release Vars REG_CLIENTE
        EndIf
EndIf

[Numero do Pedido         ] = [Notas2C->Numero do Pedido         ]
[Numero_Carregamento      ] = [Notas2C->Numero_Carregamento      ]
[Codigo da Destinacao     ] = [Notas2C->Codigo da Destinacao     ]
[Descricao da Destinacao  ] = [Notas2C->Descricao da Destinacao  ]
[Codigo do Representante  ] = [Notas2C->Codigo do Representante  ]
[Nome Fantasia Represent  ] = [Notas2C->Nome Fantasia Represent  ]
[Comissao do Representante] = [Notas2C->Comissao do Representante]
[Pedido Cliente           ] = [Notas2C->Tipo do Documento]+"/"+[Notas2C->Numero do Documento]
If [Notas2C->Valor DebitoCredito]<0
   Then [Valor Nota Fiscal] = [Notas2C->Valor DebitoCredito]*-1
   Else [Valor Nota Fiscal] = [Notas2C->Valor Nota Fiscal        ]
EndIf

;*** Implementado em 15/10/2004 *****
[Duplicata Emitida  ]=""
[Promissoria Emitida]="S"
[Carne Emitido      ]="S"
[Boleta Emitida     ]="S"

If [Notas2C->Forma de Pagamento]="BO"
   Then [Duplicata Emitida  ]="S"
        [Boleta Emitida     ]=""
EndIf
If [Notas2C->Forma de Pagamento]="NP"
   Then [Duplicata Emitida  ]="S"
        [Promissoria Emitida]=""
EndIf
If [Notas2C->Forma de Pagamento]="CR"
   Then [Duplicata Emitida  ]="S"
        [Carne Emitido      ]=""
EndIf
;************************************

[Cta Receber Atualizado   ]="S"

Switch
   Case APLIC_ORIGEM="FATURA": [Sistema Gerador]="FT"
   Case APLIC_ORIGEM="CFe"   : [Sistema Gerador]="CF"
   Case APLIC_ORIGEM="BALCAO": [Sistema Gerador]="BA"
   Case APLIC_ORIGEM="TROCA" : [Sistema Gerador]="TR"
   Case APLIC_ORIGEM="NOTA"  : [Sistema Gerador]="DI"
EndSwitch
[Tipo Docto Gerador  ]=[NotaC->Codigo do Documento]
[Numero Docto Gerador]=[NotaC->Numero do Documento]
Controle_Dia()
UnLockRecord

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Pega_Endereco(PARAM)
Private PARAM

VSD_E_Endereco=""
VSD_E_Bairro  =""
VSD_E_CEP     =""
VSD_E_Cidade  =""
VSD_E_UF      =""

VSD_C_Endereco=""
VSD_C_Bairro  =""
VSD_C_CEP     =""
VSD_C_Cidade  =""
VSD_C_UF      =""    

GetRecord "\\Sistemas\\Vendas\\FaturaCC" PARAM To REG_ENTCOB
If RetVal
   Then VSD_E_Endereco=REG_ENTCOB["Endereco de Entrega"]
        VSD_E_Bairro  =REG_ENTCOB["Bairro de Entrega"]
        VSD_E_CEP     =REG_ENTCOB["CEP de Entrega"]
        VSD_E_Cidade  =REG_ENTCOB["Cidade de Entrega"]
        VSD_E_UF      =REG_ENTCOB["UF de Entrega"]

        VSD_C_Endereco=REG_ENTCOB["Endereco de Cobranca"]
        VSD_C_Bairro  =REG_ENTCOB["Bairro de Cobranca"]
        VSD_C_CEP     =REG_ENTCOB["CEP de Cobranca"]
        VSD_C_Cidade  =REG_ENTCOB["Cidade de Cobranca"]
        VSD_C_UF      =REG_ENTCOB["UF de Cobranca"] 
EndIf   
 
EndProc ;Pega_Endereco() 

;*******************************************************************************
;* Grava Relacao de Notas                                                      *
;*******************************************************************************
Proc Nota_DP()
Moveto "DupNF"
End
Down
[Codigo da Empresa        ] = [Dupc->Codigo da Empresa    ]
[Numero do Documento      ] = [Dupc->Numero do Documento  ]
[Serie do Documento       ] = [Dupc->Serie do Documento   ]
[Sequencia                ] = "01"

[Codigo do Documento      ] = [Notas2C->Codigo do Documento ]
[Tipo do Documento        ] = [Notas2C->Tipo do Documento   ]

[Numero da Nota           ] = [Notas2C->Numero do Documento ]
[Serie da Nota            ] = [Notas2C->Serie do Documento  ]
If [Notas2C->Valor DebitoCredito]<0
   Then [Valor da Nota Fiscal        ] = [Notas2C->Valor DebitoCredito]*-1
   Else [Valor da Nota Fiscal        ] = [Notas2C->Valor Nota Fiscal  ]
EndIf
UnLockRecord
EndProc

;*******************************************************************************
;* Grava Desdobramentos                                                        *
;*******************************************************************************
Proc Desdobra_DP()
Private DP_ORDEM
If DP_NPARC=1
   Then DP_ORDEM=""
   Else DP_ORDEM=CHR(65+(DP_CONTDP-1))
EndIf
Moveto "DupI"
End
Down
[Codigo da Empresa  ] = [Dupc->Codigo da Empresa  ]
[Numero do Documento] = [Dupc->Numero do Documento]
[Serie do Documento ] = [Dupc->Serie do Documento ]
[Ordem do Documento ] = DP_ORDEM
[Data Vencimento    ] = [Notas2V->Data ]
[Valor Duplicata    ] = [Notas2V->Valor]
[Taxa de Juros      ] = PARAM_TXJUROS
[Tipo Taxa de Juros ] = PARAM_FORMA_TXJUROS
If PARAM_FORMA_TXJUROS="A" Then [NDias Taxa de Juros]=365 Endif
If PARAM_FORMA_TXJUROS="M" Then [NDias Taxa de Juros]=30  Endif
If PARAM_FORMA_TXJUROS="D" Then [NDias Taxa de Juros]=1   Endif
[Valor da Comissao  ] = [Notas2V->Valor da Comissao]
UnLockRecord

Moveto [Codigo da Empresa]
Locate [Notas2C->Codigo da Empresa  ], DP_NUMDOCTO, DP_SRDOCTO, DP_ORDEM
EndProc

;*******************************************************************************
;* Exportacao p/ Contas a Receber                                              *
;*******************************************************************************
Proc Atualiza_CR()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO_ORDEM, CR_LANC, CR_NDIAS, CR_DATA

CHV_EMPRESA=[DupC->Codigo da Empresa]
CHV_TPDOCTO=[DupC->Codigo do Documento]
If [DupI->Ordem do Documento]<>""
   Then CHV_NUMERO_ORDEM=[DupI->Numero do Documento]+"/"+[DupI->Ordem do Documento]
   Else CHV_NUMERO_ORDEM=[DupI->Numero do Documento]
EndIf

Moveto "\\Sistemas\\CtaRec\\Duplic"
While True
  Moveto [Numero do Lancamento]
  End
  If Numero_Lancamento("Interno","")
     Then CR_LANC = NUM_LANCTO
          Release Vars NUM_LANCTO
  EndIf
  Locate CR_LANC
  If Not Retval
     Then End Down
          [Numero do Lancamento ]=CR_LANC
          If Not IsLockRecord()
             Then QuitLoop
             Else Del
          EndIf
  EndIf
EndWhile

[Codigo da Conta         ]=[DupC->Codigo da Conta         ]
[Codigo da Empresa       ]=[DupC->Codigo da Empresa       ]
[Nome Fantasia Empresa   ]=[DupC->Nome Fantasia Empresa   ]
[Codigo do Documento     ]=[DupC->Codigo do Documento     ]
[Numero do Documento     ]=CHV_NUMERO_ORDEM
[Codigo do Destinatario  ]=[DupC->Codigo                  ]
[Nome Fantasia EmitDest  ]=[DupC->Nome Fantasia EmitDest  ]
[Data de Emissao         ]=[DupC->Data de Emissao         ]
[Data de Vencimento      ]=[DupI->Data Vencimento         ]
[Data a Receber          ]=[DupI->Data Vencimento         ]
[Tipo do Lancamento      ]="E"
[Descricao do Lancamento ]="CARTEIRA"

Switch
   Case APLIC_ORIGEM="FATURA": [Sistema Gerador]="FT"
   Case APLIC_ORIGEM="CFe"   : [Sistema Gerador]="CF"
   Case APLIC_ORIGEM="BALCAO": [Sistema Gerador]="BA"
   Case APLIC_ORIGEM="TROCA" : [Sistema Gerador]="TR"
   Case APLIC_ORIGEM="NOTA"  : [Sistema Gerador]="DI"
EndSwitch
[Tipo Docto Gerador  ]=[Notas2C->Codigo do Documento]
[Numero Docto Gerador]=[Notas2C->Numero do Documento]
[Sequencia Gerador   ]=[Notas2V->Sequencia]
[Documento Referente ]=[Tipo Docto Gerador]+"/"+[Numero Docto Gerador]+"-"+[Sequencia Gerador]

While True
  CR_NDIAS=0
  If Dow([Data a Receber])="Sat"
     Then CR_NDIAS=2
     Else If Dow([Data a Receber])="Sun"
             Then CR_NDIAS=1
          EndIf
  EndIf
  CR_DATA = [Data a Receber]
  Moveto "\\Sistemas\\Cadastro\\Feriados"
  Moveto [Data do Feriado]
  Locate CR_DATA
  If Retval
     Then If [Dias a Receber]>0
             Then CR_NDIAS=[Dias a Receber]
          EndIf
          UnLockRecord
  EndIf
  Moveto "\\Sistemas\\CtaRec\\Duplic"
  [Data a Receber]=[Data a Receber]+CR_NDIAS
  If CR_NDIAS=0
     Then QuitLoop
  EndIf
EndWhile
[Valor do Documento      ]=[DupI->Valor Duplicata         ]
[Saldo do Documento      ]=[DupI->Valor Duplicata         ]
[Valor do Desconto       ]=[DupI->Valor do Desconto       ]
[Data Limite Desconto    ]=[DupI->Data Limite Desconto    ]
[Taxa de Juros           ]=[DupI->Taxa de Juros           ]
[Tipo Taxa de Juros      ]=[DupI->Tipo Taxa de Juros      ]
[NDias Taxa de Juros     ]=[DupI->NDias Taxa de Juros     ]
[Tipo do Pagamento       ]=[Notas2V->Forma de Pagamento     ]
[Codigo do Representante ]=[DupC->Codigo do Representante ]
[Nome Fantasia Represent ]=[DupC->Nome Fantasia Represent ]
[Observacoes             ]=[Notas2C->Tipo do Documento]+"/"+[Notas2C->Numero do Documento]
[Valor da Comissao       ]=[DupI->Valor da Comissao       ]
[Saldo da Comissao       ]=[DupI->Valor da Comissao       ]
[Data de Entrada         ]=Today()
[Numero_Carregamento_Orig]=[Notas2C->Numero_Carregamento  ]
Controle_Dia()
UnLockRecord
EndProc

;*******************************************************************************
;* Cancelar Lancamentos                                                        *
;*******************************************************************************
Proc Cancelar_Duplicatas()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO_ORDEM

NF_EXISTE=False
Moveto "DupNF"
Moveto [Numero da Nota]
Locate IndexOrder by "idupnf10" [Notas2C->Numero do Documento],[Notas2C->Serie do Documento],[Notas2C->Codigo da Empresa],[Notas2C->Codigo do Documento]
If RetVal
   Then NF_EXISTE=True
        DP_NUMDOCTO=[Numero do Documento]
        DP_SRDOCTO =[Serie do Documento ]
   Else Return
EndIf

Moveto "DupI"
Moveto [Codigo da Empresa]
Locate [Notas2C->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] and
              [Numero do Documento]=DP_NUMDOCTO and
              [Serie do Documento ]=DP_SRDOCTO

          CHV_EMPRESA=[DupI->Codigo da Empresa]
          CHV_TPDOCTO=DP_CDDOCTO
          If [DupI->Ordem do Documento]<>""
             Then CHV_NUMERO_ORDEM=[DupI->Numero do Documento]+"/"+[DupI->Ordem do Documento]
             Else CHV_NUMERO_ORDEM=[DupI->Numero do Documento]
          EndIf

          Moveto "\\Sistemas\\CtaRec\\Duplic"
          Moveto [Codigo da Empresa]
          Locate IndexOrder by "IndDup1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO_ORDEM
          If RetVal
             Then If [Saldo do Documento]<>[Valor do Documento]
                     Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                          MSG=MSG+"referente a este documento: "+
                              [Notas2C->Codigo da Empresa]+" / "+
                              [Notas2C->Codigo do Documento]+" / "+
                              [Notas2C->Numero do Documento]+"//"
                          MSG=MSG+"n„o ser  efetuado, pois o T¡tulo j  teve baixa ! // //"
                          MSG=MSG+"Verificar !"
                          Mensagem(MSG)
                          Return
                  EndIf
                  Del
          EndIf

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

Moveto "Dupc"
Moveto [Codigo da Empresa]
Locate [Notas2C->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then For Icc From 1 to 3
          If Not IsLockRecord()
             Then [Situacao]="C"
                  UnLockRecord
                  QuitLoop
          EndIf
        EndFor
EndIf

EndProc

;*******************************************************************************
;* Elimina Lancamentos existentes ou regerados                                 *
;*******************************************************************************
Proc Estorna_Lanctos_DPCR()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO_ORDEM

Moveto "DupNF"
Moveto [Numero da Nota]
Locate IndexOrder by "idupnf10" [Notas2C->Numero do Documento],[Notas2C->Serie do Documento],[Notas2C->Codigo da Empresa],[Notas2C->Codigo do Documento]
If RetVal
   Then NF_EXISTE  =True
        DP_NUMDOCTO=[Numero do Documento]
        DP_SRDOCTO =[Serie do Documento ]
   Else NF_EXISTE  =False
        DP_NUMDOCTO=""
        DP_SRDOCTO =""
        Return False
EndIf

DP_NUMERO_GERADO=DP_NUMDOCTO

Moveto "DupI"
Moveto [Codigo da Empresa]
Locate [Notas2C->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] and
              [Numero do Documento]=DP_NUMDOCTO and
              [Serie do Documento ]=DP_SRDOCTO

          CHV_EMPRESA=[DupI->Codigo da Empresa]
          CHV_TPDOCTO=DP_CDDOCTO
          If [DupI->Ordem do Documento]<>""
             Then CHV_NUMERO_ORDEM=[DupI->Numero do Documento]+"/"+[DupI->Ordem do Documento]
             Else CHV_NUMERO_ORDEM=[DupI->Numero do Documento]
          EndIf

          Moveto "\\Sistemas\\CtaRec\\Duplic"
          Moveto [Codigo da Empresa]
          Locate IndexOrder by "IndDup1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO_ORDEM
          If RetVal
             Then If [Saldo do Documento]<>[Valor do Documento]
                     Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                          MSG=MSG+"referente a este documento: "+
                              [Notas2C->Codigo da Empresa]+" / "+
                              [Notas2C->Codigo do Documento]+" / "+
                              [Notas2C->Numero do Documento]+"//"
                          MSG=MSG+"n„o ser  efetuado, pois o T¡tulo j  teve baixa ! //"
                          MSG=MSG+"Verificar !"
                          Mensagem(MSG)
                          Return False
                  EndIf
                  Del
          EndIf

          Moveto "DupI"
          Del
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "DupNF"
Moveto [Codigo da Empresa]
Locate [Notas2C->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] and
              [Numero do Documento]=DP_NUMDOCTO and
              [Serie do Documento ]=DP_SRDOCTO

          Del
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "Dupc"
Moveto [Codigo da Empresa]
Locate [Notas2C->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then Del
EndIf

Return True
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Switch
  Case OP_MOVDP="ESTORNAR" :
       If SubStr([Notas2C->Codigo do Documento],1,2)="NF"
          Then DP_CDDOCTO="DUP"
               DP_SRDOCTO=""
          Else DP_CDDOCTO=[Notas2C->Codigo do Documento]
               DP_SRDOCTO=[Notas2C->Serie do Documento ]
       EndIf
       Estorna_Lanctos_DPCR()
  Case OP_MOVDP="ATUALIZAR":
       If CANCELA_DUP
          Then Moveto "Notas2C"
               Moveto [Codigo da Destinacao]
               Ativa_Lookup()
               Moveto [Codigo da Destinacao]
               Locate [Notas2C->Codigo da Destinacao]
               DP_GERA_DUPLICATA=[Gera Duplicata]
               keyPress "ESC"

               If SubStr([Notas2C->Codigo do Documento],1,2)="NF"
                  Then DP_CDDOCTO="DUP"
                       DP_SRDOCTO=""
                  Else DP_CDDOCTO=[Notas2C->Codigo do Documento]
                       DP_SRDOCTO=[Notas2C->Serie do Documento ]
               EndIf

               If SYS_CODIGO_CLIENTE="0117"       And
                  [Notas2C->Tipo de Pagamento ]="P" And
                  [Notas2C->Forma de Pagamento]="CP"
                  Then DP_GERA_DUPLICATA="N"
               EndIf

               If DP_GERA_DUPLICATA="S"
                  Then Cancelar_Duplicatas()
                       Moveto "Notas2C"
               EndIf
          Else Moveto "Notas2C"
               Moveto [Codigo da Empresa]
               Locate EMPRESAFISC, NOTAFISC, SERIEFISC

               Moveto [Codigo da Destinacao]
               Ativa_Lookup()
               Moveto [Codigo da Destinacao]
               Locate [Notas2C->Codigo da Destinacao]
               DP_GERA_DUPLICATA=[Gera Duplicata]
               keyPress "ESC"

               If SubStr([Notas2C->Codigo do Documento],1,2)="NF"
                  Then DP_CDDOCTO="DUP"
                       DP_SRDOCTO=""
                  Else DP_CDDOCTO=[Notas2C->Codigo do Documento]
                       DP_SRDOCTO=[Notas2C->Serie do Documento ]
               EndIf

               If SYS_CODIGO_CLIENTE="0117"       And
                  [Notas2C->Tipo de Pagamento ]="P" And
                  [Notas2C->Forma de Pagamento]="CP"
                  Then DP_GERA_DUPLICATA="N"
               EndIf

               While DP_GERA_DUPLICATA="S"
                 If PARAM_DUPLIC_NUMERO="D"    ;**** Diferente ****
                    Then
                         Procura_Proximo_Numero=True
                         If Not IsBlank(DP_NUMERO_GERADO)
                            Then DP_NUMDOCTO=DP_NUMERO_GERADO
                                 Procura_Proximo_Numero=False
                         EndIf

                         If Procura_Proximo_Numero
                            Then Moveto "NumeroDP"
                                 Moveto [Codigo da Empresa]
                                 Locate [NotaS2C->Codigo da Empresa], DP_CDDOCTO
                                 If Not RetVal
                                    Then Mensagem("Controle da numera‡„o p/ duplicatas n„o informado !// Duplicatas n„o foram geradas !")
                                         DP_GERA_DUPLICATA="N"
                                         Loop
                                 EndIf
                                 While True
                                   If Not IsLockRecord()
                                      Then QuitLoop
                                   EndIf
                                 EndWhile
                                 DP_NUMDOCTO=AlinhM(StrVal([Proximo Numero]),6)
                         EndIf

                    Else DP_NUMDOCTO=NOTAFISC  ;**** Igual****
                 EndIf

                 Duplicata_DP()
                 Nota_DP()

                 DP_NPARC=0
                 Moveto "Notas2V"
                 Moveto [Codigo da Empresa]
                 Locate EMPRESAFISC, NOTAFISC, SERIEFISC
                 If RetVal
                    Then While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] and
                               [Numero do Documento]=[Notas2C->Numero do Documento] and
                               [Serie do Documento ]=[Notas2C->Serie do Documento ]
                           If [Data]>[Notas2C->Data de Emissao] Or PARAM_AVISTADUPLIC="S"
                              Then DP_NPARC=DP_NPARC+1     ;*** Contagem de desdobramentos ***
                           EndIf
                           Skip
                           If EOT() Then QuitLoop EndIf
                         EndWhile
                 EndIf
                 Moveto [Codigo da Empresa]
                 Locate EMPRESAFISC, NOTAFISC, SERIEFISC
                 If RetVal
                    Then DP_CONTDP=0
                         While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] and
                               [Numero do Documento]=[Notas2C->Numero do Documento] and
                               [Serie do Documento ]=[Notas2C->Serie do Documento ]
                           If [Data]>[Notas2C->Data de Emissao] Or PARAM_AVISTADUPLIC="S"
                              Then DP_CONTDP=DP_CONTDP+1
                                   Desdobra_DP()
                                   Atualiza_CR()
                           EndIf
                           Moveto "Notas2V"
                           Skip
                           If EOT() Then QuitLoop EndIf
                         EndWhile
                 EndIf

                 If PARAM_DUPLIC_NUMERO="D" And          ;**** Diferente ****
                    Procura_Proximo_Numero
                    Then Moveto "NumeroDP"
                         If not NF_EXISTE
                            Then [Proximo Numero]=[Proximo Numero]+1
                         EndIf
                         UnLockRecord
                 EndIf

                 QuitLoop
               EndWhile
       EndIf
EndSwitch
Release Vars dp_numdocto, dp_nparc, dp_gera_duplicata, dp_cddocto,
             dp_srdocto, dp_contdp, Procura_Proximo_Numero
Release Procs Atualiza_CR, Desdobra_DP, Nota_DP, Duplicata_DP,
              Cancelar_Duplicatas, Estorna_Lanctos_DPCR
