;** Ft_Dupli *******************************************************************
;*  Geracao de Duplicatas                                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 26/06/2001 por Anivel Augusto Rodrigues
;Alterado em     : 12/06/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Busca_Lookup
;Alterado em     : 01/07/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem de Valores
;Alterado em     : 07/11/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta Azevedo
;Alterado em     : 19/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS2 MinasLack
;Alterado em     : 03/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS1 Tecnomar
;Alterado em     : 05/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Docto NF/ROM/DUP
;Ultima Alteracao: 07/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Indice Inddup1/Duplic
;Ultima Alteracao: 16/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPS1/NF2 INBEC
;Ultima Alteracao: 13/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Duplic
;Ultima Alteracao: 06/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPD/NFD Auditoria
;Ultima Alteracao: 02/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DPD/NFD Auditoria
;Ultima Alteracao: 19/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carteira G CARTAO CRED/DEB
;Ultima Alteracao: 27/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Cartao
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 19/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VrOriginal/Cartao
;Ultima Alteracao: 24/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Observacao Duplic
;Ultima Alteracao: 22/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NF-e                                       
;Ultima Alteracao: 18/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie NFe          
;Ultima Alteracao: 07/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Duplicata                      
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo venctos com instru‡Æo de desconto ModaMil
;Ultima Alteracao: 11/04/2012 por Bruno Carvalho
;Motivo Alteracao: Add Codigo_Cobrador (Representante) se vier em branco do Cadastro 
;Ultima Alteracao: 11/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo venctos com instru‡Æo de desconto ModaMil
;Ultima Alteracao: 18/04/2012 por Bruno Carvalho
;Motivo Alteracao: Add valor em branco para variavel OPCAOC quando nÆo ‚ setada 
;Ultima Alteracao: 25/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Carrega_Parametros de acordo com a empresa
;Ultima Alteracao: 02/10/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor ir em branco caso troco gerando DupC c/ valor zerado
;Ultima Alteracao: 24/10/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor ir em branco caso troco gerando DupNF c/ valor zerado
;Ultima Alteracao: 29/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo fazer estorno do titulo se o mesmo ja estiver com conta de banco
;Ultima Alteracao: 25/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo fazer estorno do titulo se o mesmo ja estiver com conta de banco
 
;*******************************************************************************
;* Grava Duplicata                                                             *
;*******************************************************************************
Proc Duplicata_DP()
 
Moveto "Dupc"
While True
  End
  Down
  [Codigo da Empresa      ] = [NotaC->Codigo da Empresa        ]
  [Numero do Documento    ] = DP_NUMDOCTO
  [Codigo do Documento    ] = DP_CDDOCTO
  If IsLockRecord()
     Then UnLockRecord
          If Not Exclui_DP()
             Then Return
          EndIf
     Else QuitLoop
  EndIf
EndWhile

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

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

        [Endereco de Cobranca     ] = [FaturaC->Endereco de Cobranca   ]
        [Bairro de Cobranca       ] = [FaturaC->Bairro de Cobranca     ]
        [CEP de Cobranca          ] = [FaturaC->CEP de Cobranca        ]
        [Cidade de Cobranca       ] = [FaturaC->Cidade de Cobranca     ]
        [UF de Cobranca           ] = [FaturaC->UF de Cobranca         ]
EndIf
If APLIC_ORIGEM="NOTA"
   Then
        [Razao Social Fatura      ] = [NotaC->Razao Social           ]
        [Endereco Fatura          ] = [NotaC->Endereco               ]
        [Bairro Fatura            ] = [NotaC->Bairro                 ]
        [CEP Fatura               ] = [NotaC->CEP                    ]
        [Cidade Fatura            ] = [NotaC->Cidade                 ]
        [UF Fatura                ] = [NotaC->UF                     ]
        [CGC Fatura               ] = [NotaC->CGC                    ]
        [IE Fatura                ] = [NotaC->IE                     ]

        Moveto [Lookup_End_Cob]
        If Busca_Lookup("Codigo",[DupC->Codigo],"SM")
           Then [Endereco de Cobranca    ]=REG_BUSCA_LOOKUP["Endereco de Cobranca"]
                [Bairro de Cobranca      ]=REG_BUSCA_LOOKUP["Bairro de Cobranca"]
                [CEP de Cobranca         ]=REG_BUSCA_LOOKUP["CEP de Cobranca"]
                [Cidade de Cobranca      ]=REG_BUSCA_LOOKUP["Cidade de Cobranca"]
                [UF de Cobranca          ]=REG_BUSCA_LOOKUP["UF de Cobranca"]
                Release Vars REG_BUSCA_LOOKUP
        EndIf

EndIf

[Numero do Pedido         ] = [NotaC->Numero do Pedido         ]
[Numero_Carregamento      ] = [NotaC->Numero_Carregamento      ]
[Codigo da Destinacao     ] = [NotaC->Codigo da Destinacao     ]
[Descricao da Destinacao  ] = [NotaC->Descricao da Destinacao  ]
[Codigo do Representante  ] = [NotaC->Codigo do Representante  ]
[Nome Fantasia Represent  ] = [NotaC->Nome Fantasia Represent  ]
[Comissao do Representante] = [NotaC->Comissao do Representante]
[Pedido Cliente           ] = [NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
If not IsBlank([NotaC->Valor IR]) And [NotaC->Valor IR]<0
   Then [Valor Nota Fiscal] = [NotaC->Valor IR]*-1
   Else [Valor Nota Fiscal] = [NotaC->Valor Nota Fiscal        ]
EndIf

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

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

[Cta Receber Atualizado   ]="S"
Controle_Dia()
UnLockRecord

EndProc

;*******************************************************************************
;* 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"
[Numero da Nota           ] = [NotaC->Numero do Documento ]
[Serie da Nota            ] = [NotaC->Serie do Documento  ]
If not IsBlank([NotaC->Valor IR]) And [NotaC->Valor IR]<0
   Then [Valor da Nota Fiscal        ] = [NotaC->Valor IR]*-1
   Else [Valor da Nota Fiscal        ] = [NotaC->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    ] = [NotaV->Data ]
[Valor Duplicata    ] = [NotaV->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  ] = [NotaV->Valor da Comissao]

If [NotaV->Duplicata_VrOriginal]>0
   Then
        [Valor Duplicata        ]=[NotaV->Duplicata_VrOriginal   ]
        [Valor do Desconto      ]=[NotaV->Duplicata_VrDesconto   ]
        [Data Limite Desconto   ]=[NotaV->Duplicata_DtLimDesconto]
EndIf

UnLockRecord

Moveto [Codigo da Empresa]
Locate [NotaC->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,
        FPGTO, NCARTAO, NC_COD, NC_NDV, NC_ADM, NC_CTA, VRLANC

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\\P_Duplic"
Moveto [Codigo_Empresa]
Locate [NotaC->codigo da empresa]
If Not RetVal
   Then PARAM_PLANO_CONTA_AVISTA=""
        PARAM_PLANO_CONTA_APRAZO=""
   Else PARAM_PLANO_CONTA_AVISTA=[Plano_Conta_AVista      ]
        PARAM_PLANO_CONTA_APRAZO=[Plano_Conta_APrazo      ]
EndIf

Moveto "\\Sistemas\\CtaRec\\Duplic"
While True
  Moveto [Numero do Lancamento]
  End
  If IsBlank([Numero do Lancamento])
     Then CR_LANC="000001"
     Else CR_LANC=AlinhM(StrVal(NumVal([Numero do Lancamento])+1),6)
  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         ]

Switch
   Case APLIC_ORIGEM="FATURA": [Sistema Gerador]="FT"
   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]
[Sequencia Gerador   ]=[NotaV->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       ]=[NotaV->Forma de Pagamento     ]
[Codigo do Representante ]=[DupC->Codigo do Representante ]
[Nome Fantasia Represent ]=[DupC->Nome Fantasia Represent ]
[Observacoes             ]=[NotaC->Tipo do Documento]+"/"+
                           [NotaC->Numero do Documento]+
                           " * "+[NotaC->Descricao da Destinacao]
[Valor da Comissao       ]=[DupI->Valor da Comissao       ]
[Saldo da Comissao       ]=[DupI->Valor da Comissao       ]
[Data de Entrada         ]=Today()
[Numero_Carregamento_Orig]=[NotaC->Numero_Carregamento    ]
If ([Data de Emissao]=[Data de Vencimento]) Or
   (([Data de Emissao]+1)=[Data de Vencimento])
   Then [Codigo Plano_Conta]=PARAM_PLANO_CONTA_AVISTA
   Else [Codigo Plano_Conta]=PARAM_PLANO_CONTA_APRAZO
EndIf

FPGTO  =[NotaV->Forma de Pagamento]
NCARTAO=[NotaV->Nome do Cartao]
If (FPGTO="CT" Or FPGTO="CD") And NCARTAO<>""
   Then Moveto "\\Sistemas\\Vendas\\P_Cartao"
        Moveto [Codigo_Empresa]
        Locate [DupC->Codigo da Empresa],NCARTAO
        If retval
           Then NC_COD   =[Codigo Destinat         ]
                NC_NDV   =[Numero Dias Vencimento  ]
                NC_ADM   =[Tx_Descto_Administradora]
                NC_CTA   =[Codigo da Conta         ]

                Moveto "\\Sistemas\\CtaRec\\Duplic"
                [Observacoes             ]=[NotaC->Razao Social]+" * "+
                                           [NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]+
                                           ", Vr: "+LTrim(Format("W10.2,EIC",[Valor do Documento]))
                [Codigo do Destinatario  ]=NC_COD
                [Codigo da Conta         ]=NC_CTA
                [Codigo da Empresa       ]=[DupC->Codigo da Empresa]
                [Codigo do Representante ]=[DupC->Codigo do Representante ]
                [Valor do Documento      ]=[Valor do Documento]-(([Valor do Documento]*NC_ADM)/100)
                [Saldo do Documento      ]=[Valor do Documento            ]

                Switch
                  Case SYS_CODIGO_CLIENTE<>"0217":
                       If [Data de Vencimento]=[Data de Emissao]
                          Then [Data de Vencimento]=[Data de Emissao]+NC_NDV
                               [Data a Receber    ]=[Data de Vencimento]
                       EndIf
                EndSwitch

           Else Moveto "\\Sistemas\\CtaRec\\Duplic"
                Mensagem("CartÆo: "+NCARTAO+" parametros nÆo cadastrado !")
        EndIf
EndIf

If [NotaV->Forma de Pagamento]="CT" Or
   [NotaV->Forma de Pagamento]="CD"
   Then [Tipo do Lancamento      ]="G"
        [Descricao do Lancamento ]="CARTAO CRED/DEB"
   Else [Tipo do Lancamento      ]="E"
        [Descricao do Lancamento ]="CARTEIRA"
EndIf

Controle_Dia()

;Codigo do Cobrador do Cadastro de Representantes
If [Codigo do Cobrador]=""
   Then Moveto [Codigo do Representante]
        Busca_Lookup("Codigo do Representante",[\Sistemas\Ctarec\Duplic->Codigo do Representante],"")
        [Codigo do Cobrador   ]=REG_BUSCA_LOOKUP["Codigo_Cobrador"]
        [Descricao do Cobrador]=REG_BUSCA_LOOKUP["Descricao_Cobrador"]
EndIf   
                             
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 "idupnf01" [NotaC->Numero do Documento],[NotaC->Serie do Documento],[NotaC->Codigo da Empresa]
If RetVal
   Then NF_EXISTE=True
        DP_NUMDOCTO=[Numero do Documento]
        DP_SRDOCTO =[Serie do Documento ]
   Else If PARAM_DUPLIC_NUMERO="D" ;**** Diferente ****
           Then NF_EXISTE  =False
                DP_NUMDOCTO=""
                DP_SRDOCTO =""
                Return
        EndIf
EndIf

Moveto "DupI"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then While [Codigo da Empresa  ]=[NotaC->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 Format("W11.2,EIC",[Saldo do Documento])<>Format("W11.2,EIC",[Valor do Documento])
                     Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                          MSG=MSG+"referente a este documento: "+
                              [NotaC->Codigo da Empresa]+" / "+
                              [NotaC->Codigo do Documento]+" / "+
                              [NotaC->Numero do Documento]+"//"
                          MSG=MSG+"n„o ser  efetuado, pois o T¡tulo j  teve baixa ! // //"
                          MSG=MSG+"Verificar !"
                          Mensagem(MSG)
                          Return
                  EndIf

                  Moveto [Codigo da Conta]
                  If Busca_Lookup("Codigo da Conta",[Codigo da Conta],"SM")
                     Then UnLockRecord
                          If REG_BUSCA_LOOKUP["Tipo da Conta"]="C"
                             Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                                  MSG=MSG+"referente a este documento: "+
                                      [NotaC->Codigo da Empresa]+" / "+
                                      [NotaC->Codigo do Documento]+" / "+
                                      [NotaC->Numero do Documento]+"//"
                                  MSG=MSG+"n„o ser  efetuado, pois a conta do T¡tulo j  esta em banco ! // //"
                                  MSG=MSG+"Verificar !"
                                  Mensagem(MSG)
                                  Return
                          EndIf   
                  EndIf

                  Del
          EndIf

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

Moveto "Dupc"
Moveto [Codigo da Empresa]
Locate [NotaC->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, ci

Moveto "DupNF"
Moveto [Numero da Nota]
Locate IndexOrder by "idupnf01" [NotaC->Numero do Documento],
      [NotaC->Serie do Documento],[NotaC->Codigo da Empresa]
If RetVal
   Then NF_EXISTE  =True
        DP_NUMDOCTO=[Numero do Documento]
        DP_SRDOCTO =[Serie do Documento ]
   Else If PARAM_DUPLIC_NUMERO="D" ;**** Diferente ****
           Then NF_EXISTE  =False
                DP_NUMDOCTO=""
                DP_SRDOCTO =""
                Return True
        EndIf
EndIf

DP_NUMERO_GERADO=DP_NUMDOCTO

For ci From 1 to 2
  Moveto "DupI"
  Moveto [Codigo da Empresa]
  Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
  If RetVal
     Then While [Codigo da Empresa  ]=[NotaC->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 Format("W11.2,EIC",[Saldo do Documento])<>Format("W11.2,EIC",[Valor do Documento])
                       Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                            MSG=MSG+"referente a este documento: "+
                                [NotaC->Codigo da Empresa]+" / "+
                                [NotaC->Codigo do Documento]+" / "+
                                [NotaC->Numero do Documento]+"//"
                            MSG=MSG+"n„o foi efetuado, pois j  teve baixa(s) ! //"
                            MSG=MSG+"Verificar o documento "+CHV_EMPRESA+" / "+CHV_TPDOCTO+" / "+CHV_NUMERO_ORDEM+" no Contas a Receber!"
                            Mensagem(MSG)
                            Return False
                    EndIf
                    If ci=2
                       Then Del
                    Endif
            EndIf

            Moveto "DupI"
            If ci=1
               Then Skip
               Else Del
            Endif
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
EndFor

Moveto "DupNF"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then While [Codigo da Empresa  ]=[NotaC->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 [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then Del
EndIf

Return True
EndProc

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

Moveto "DupI"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then While [Codigo da Empresa  ]=[NotaC->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 Format("W11.2,EIC",[Saldo do Documento])<>Format("W11.2,EIC",[Valor do Documento])
                     Then MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Receber,//"
                          MSG=MSG+"referente a este documento: "+
                              [NotaC->Codigo da Empresa]+" / "+
                              [NotaC->Codigo do Documento]+" / "+
                              [NotaC->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 [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then While [Codigo da Empresa  ]=[NotaC->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 [NotaC->Codigo da Empresa], DP_NUMDOCTO, DP_SRDOCTO
If RetVal
   Then Del
EndIf

Return True
EndProc


;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(Opcaoc) Then Opcaoc="" EndIf
Aguarde("Atualizando DUPLICATAS "+Opcaoc+" "+NOTAFISC)

Switch
  Case OP_MOVDP="ESTORNAR" :
       Switch
         Case SubStr([NotaC->Codigo do Documento],1,4)="NFE9":
              DP_CDDOCTO=PARAM_DOC_DUPNFES
              DP_SRDOCTO=PARAM_SER_DUPNFES
         Case SubStr([NotaC->Codigo do Documento],1,3)="NFE":
              DP_CDDOCTO=PARAM_DOC_DUPNFEN
              DP_SRDOCTO=PARAM_SER_DUPNFEN

         Case SubStr([NotaC->Codigo do Documento],1,3)="NF2":
              DP_CDDOCTO="DPS1" ;PadrÆo
              DP_SRDOCTO="DPS1"
         Case SubStr([NotaC->Codigo do Documento],1,3)="NFD":
              DP_CDDOCTO="DPD" ;PadrÆo
              DP_SRDOCTO="DPD"

         Case SubStr([NotaC->Tipo do Documento],1,2)="NF":
              DP_CDDOCTO="DUP" ;PadrÆo
              DP_SRDOCTO=""

              DP_CDDOCTO=PARAM_DOC_DUP
              DP_SRDOCTO=PARAM_SER_DUP
         OtherWise:
              DP_CDDOCTO=[NotaC->Codigo do Documento]
              DP_SRDOCTO=[NotaC->Serie do Documento ]
       EndSwitch
       
       If PARAM_DUPLIC_NUMERO="D"       ;**** Diferente ****
          Then DP_NUMDOCTO=""
          Else DP_NUMDOCTO=[NotaC->Numero do Documento ]
       EndIf
       Estorno_DPCR_Ok=Estorna_Lanctos_DPCR()
  Case OP_MOVDP="ATUALIZAR":
       If CANCELA_DUP
          Then Moveto "NotaC"
               
               Switch
				         Case SubStr([NotaC->Codigo do Documento],1,4)="NFE9":
				              DP_CDDOCTO=PARAM_DOC_DUPNFES
				              DP_SRDOCTO=PARAM_SER_DUPNFES
				         Case SubStr([NotaC->Codigo do Documento],1,3)="NFE":
				              DP_CDDOCTO=PARAM_DOC_DUPNFEN
				              DP_SRDOCTO=PARAM_SER_DUPNFEN
				
                 Case SubStr([NotaC->Codigo do Documento],1,3)="NF2":
                      DP_CDDOCTO="DPS1" ;PadrÆo
                      DP_SRDOCTO="DPS1"
                 Case SubStr([NotaC->Codigo do Documento],1,3)="NFD":
                      DP_CDDOCTO="DPD" ;PadrÆo
                      DP_SRDOCTO="DPD"
                 Case SubStr([NotaC->Tipo do Documento],1,2)="NF":
                      DP_CDDOCTO="DUP" ;PadrÆo
                      DP_SRDOCTO=""
        
                      DP_CDDOCTO=PARAM_DOC_DUP
                      DP_SRDOCTO=PARAM_SER_DUP
                 OtherWise:
                      DP_CDDOCTO=[NotaC->Codigo do Documento]
                      DP_SRDOCTO=[NotaC->Serie do Documento ]
               EndSwitch
       
               If PARAM_DUPLIC_NUMERO="D"       ;**** Diferente ****
                  Then DP_NUMDOCTO=""
                  Else DP_NUMDOCTO=[NotaC->Numero do Documento ]
               EndIf

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

               Switch
				         Case SubStr([NotaC->Codigo do Documento],1,4)="NFE9":
				              DP_CDDOCTO=PARAM_DOC_DUPNFES
				              DP_SRDOCTO=PARAM_SER_DUPNFES
				         Case SubStr([NotaC->Codigo do Documento],1,3)="NFE":
				              DP_CDDOCTO=PARAM_DOC_DUPNFEN
				              DP_SRDOCTO=PARAM_SER_DUPNFEN
				
                 Case SubStr([NotaC->Codigo do Documento],1,3)="NF2":
                      DP_CDDOCTO="DPS1" ;PadrÆo
                      DP_SRDOCTO="DPS1"
                 Case SubStr([NotaC->Codigo do Documento],1,3)="NFD":
                      DP_CDDOCTO="DPD" ;PadrÆo
                      DP_SRDOCTO="DPD"
                 Case SubStr([NotaC->Tipo do Documento],1,2)="NF":
                      DP_CDDOCTO="DUP" ;PadrÆo
                      DP_SRDOCTO=""
        
                      DP_CDDOCTO=PARAM_DOC_DUP
                      DP_SRDOCTO=PARAM_SER_DUP
                 OtherWise:
                      DP_CDDOCTO=[NotaC->Codigo do Documento]
                      DP_SRDOCTO=[NotaC->Serie do Documento ]
               EndSwitch
       
               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 [NotaC->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

                 ;Ajustes Azevedo 07/11/2006
                 If SYS_CODIGO_CLIENTE="0117" And
                    [NotaC->Forma de Pagamento]="BO" And
                    (SubStr(Directory(),1,1)="X")
                    Then CX_CONTA_CAIXA="0014"
                        ;CX_CONTA_CAIXA="0002"
                 EndIf

                 Duplicata_DP()
                 Nota_DP()

                 DP_NPARC=0
                 Moveto "NotaV"
                 Moveto [Codigo da Empresa]
                 Locate EMPRESAFISC, NOTAFISC, SERIEFISC
                 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] 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  ]=[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] Or PARAM_AVISTADUPLIC="S"
                              Then DP_CONTDP=DP_CONTDP+1
                                   Desdobra_DP()
                                   Atualiza_CR()
                           EndIf
                           Moveto "NotaV"
                           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_cddocto, dp_srdocto, dp_contdp,
             Procura_Proximo_Numero
Release Procs Atualiza_CR, Desdobra_DP, Nota_DP, Duplicata_DP,
              Cancelar_Duplicatas, Estorna_Lanctos_DPCR

