;** GDPADR *********************************************************************
;*  Geracao de Duplicatas - Numero Duplicata=Numero Nota                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 18/04/2013 por Bruno Carvalho
;Ultima Alteracao: 06/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variavel novo nome OPNUMERO_DUPLICATA, codigo e serie documentos
;Ultima Alteracao: 09/05/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Desdobra()
;Ultima Alteracao: 10/05/2013 por Bruno Carvalho
;Motivo Alteracao: Add "DupI" [Tipo de Pagamento] e [Sequencia Gerador Nota] 
;Ultima Alteracao: 19/06/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Desdobra() quando "CT" ou "CD" com Data de EmissÆo = Data de Vencimento 
;Ultima Alteracao: 19/06/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Seleciona() condi‡Æo p/ quando "Answer" sem registros
;Ultima Alteracao: 21/01/2014 por Andrey Fillipe
;Motivo Alteracao: Add Taxa de Multa
;Ultima Alteracao: 06/02/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes Desdobra() Valor Duplicata 
;Ultima Alteracao: 24/02/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes Desdobra() Data Vencimento "CD"  e "CT"
;Ultima Alteracao: 30/10/2014 por Luis Gustavo
;Motivo Alteracao: Ajustes nas Procs Duplicata() e Desdobra(), nao estava calculando a data de vencimento, com a forma de pagamento cartao
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo IR se nÆo for utilizado!
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Pega_Endereco() e ajustado dados do endere‡o de cobran‡a
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 28/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 21/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes                    
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito]
;Ultima Alteracao: 07/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novos processos de visualiza‡Æo      
;Ultima Alteracao: 16/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "P_Fatura"
;Alterado em     : 17/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dupnf codigo do documento,Tipo do Documento
;Alterado em     : 18/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes logica
;Alterado em     : 30/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0121 duplicata emitida
;Ultima Alteracao: 13/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modo ordem da duplicata numero/letra
;Ultima Alteracao: 03/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cartao para dup<>Nf
;Ultima Alteracao: 23/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sort seleciona     
;Alterado em     : 22/11/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes forma de pagamento, dup agrupada
;Alterado em     : 14/12/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtrar cliente
;Alterado em     : 03/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFCE
;Ultima Alteracao: 06/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novos 2NFE + Serie            

;*******************************************************************************
;* Rotina de Geracao de Duplicatas                                             *
;*******************************************************************************
Proc Seleciona()
private NR

AGUARDE("Aguarde, Processando Dados")
ClearAll

{Ask} {Destin}
Moveto [Codigo da Destinacao] Example "destin"
Moveto [Gera Duplicata      ] TypeIn "S"

{Ask} {NotaC} Check
Moveto [Codigo da Destinacao   ] Example "destin"
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Documento    ] TypeIn "~VSDGTPDOCTO.."
Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Situacao               ] TypeIn "Not C"
Moveto [Tipo Movimento Estoque ] TypeIn "S"
Moveto [Codigo                 ] TypeIn "~VSDGDESTINAT.."
If VSDGGVV="N"
   Then Moveto [Tipo de Pagamento] TypeIn "P"
EndIf
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

Sort "Answer" On "Codigo da Empresa", "Data de Emissao", "Codigo",
                 "Codigo do Documento","Numero do Documento", "Serie do Documento"
ClearAll

View "DupC"
View "DupNF"
CoEdit "Answer" SetHighLight Current Record 23 Field 31
While Not RecordStatus("New")
  NF_EXISTE=False
  
  Moveto "DupNF"
  Moveto [Numero da Nota]
  Locate IndexOrder by "idupnf10" [Answer->Numero do Documento],[Answer->Serie do Documento],[Answer->Codigo da Empresa],[Answer->Codigo do Documento]
  If RetVal
     Then 
          moveto "DupC"
          moveto [Codigo da Empresa]
          locate [DupNF->Codigo da Empresa],[DupNF->Numero do Documento],[DupNF->Serie do Documento]
          if retval
             then if [Situacao]<>"C"
                     then NF_EXISTE=True
                  endif
          endif   
  EndIf

  Moveto "Answer"
  If NF_EXISTE
     Then Del
          Loop
  EndIf
  If OPNUMERO_DUPLICATA="DUP<>NF" Then [Situacao]="" EndIf
  Down
EndWhile
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

NR    = NRecords("Answer")
Mensagem(ltrim(Format("W10,EIC",NR))+" Documentos encontrados !")

CANCELADO=False
CopyForm "NotaC" "8" "Answer" "F"
switch
  case OPNUMERO_DUPLICATA="DUP<>NF":
    CoEdit "Answer" SetHighLight Current Record 23 Field 31
    PickForm "F"
    Home

    While True
      Prompt " ESC=Cancelar  F2=Gerar  F4=Agrupar  F5=Desagrupar  Del=Excluir"
  
      Wait Table
           Until "F2","F4","F5","DEL","ESC"
    
      Switch
        Case RetVal="DEL":
             Del
        Case RetVal="F2":
             if confgeral("Confirmar gerar as duplicatas destes documentos ?")
                then        
                     QuitLoop
             endif
        Case RetVal="ESC":
             if confgeral("Deseja realmente sair sem gerar duplicatas ?")
                then        
                     CANCELADO=True
                     QuitLoop
             endif
        Case RetVal="F4":
             [Situacao]="A"
        Case RetVal="F5":
             [Situacao]=""
      EndSwitch       
    EndWhile

  case OPNUMERO_DUPLICATA="DUP=NF":
    View "Answer" SetHighLight Current Record 23 Field 31
    PickForm "F"
    Home
    While True
      Prompt " ESC=Cancelar  F2=Gerar "
  
      Wait Table
           Until "F2","ESC","DEL"
    
      Switch
        Case RetVal="DEL":
    
        Case RetVal="F2":
             if confgeral("Confirmar gerar as duplicatas destes documentos ?")
                then        
                     QuitLoop
             endif
        Case RetVal="ESC":
             if confgeral("Deseja realmente sair sem gerar duplicatas ?")
                then        
                     CANCELADO=True
                     QuitLoop
             endif
      EndSwitch       
    EndWhile

endswitch
Do_It!
ClearAll

Echo Normal
Echo Off

EndProc  ; (Seleciona)

;*******************************************************************************
;* Grava Desdobramentos                                                        *
;*******************************************************************************
Proc Desdobra()

If Not DUPLIC_OK
   Then Return
EndIf

Switch
  Case OPNUMERO_DUPLICATA="DUP<>NF" : 
       NPARC=0
       For i From 1 To 15
         If Not IsBlank(DtNota[i])
            Then NPARC=NPARC+1
         EndIf
       EndFor
        
       sq=0
       Moveto "DupI"
       For i From 1 To 15
         If IsBlank(DtNota[i]) Then Loop EndIf
         While True
           ii=i
           For v From 1 To 15
             If Not IsBlank(DtNota[v]) And
                DtNota[v]<=DtNota[ii]
                Then ii=v
             EndIf
           EndFor
           sq=sq+1
           End
           Down
           [Codigo da Empresa        ] = [Dupc->Codigo da Empresa  ]
           [Numero do Documento      ] = [Dupc->Numero do Documento]
           [Serie do Documento       ] = [Dupc->Serie do Documento ]
           
            switch
              case sys_modo_ordemdup="N":
                 [Ordem do Documento]=strval(sq)
              
              otherwise                 :
                 If NPARC=1
                    Then [Ordem do Documento]=""
                    Else [Ordem do Documento]=CHR(65+(sq-1))
                 EndIf
            
            endswitch
       
           [Data Vencimento          ] = DtNota[ii]
           [Valor da Comissao        ] = VrComi[ii]
           [Multa                    ] = TAXAM
           [Taxa de Juros            ] = TAXA
           [Tipo Taxa de Juros       ] = VSDGFORMA
           [Forma de Pagamento       ] = FpPagto[ii]

           If (FpPagto[ii]="CT" Or FpPagto[ii]="CD" Or FpPagto[ii]="CL") And NCartao[ii]<>""
              Then Moveto "P_Cartao"
                   Moveto [Codigo_Empresa]
                   Locate [DupC->Codigo da Empresa],NCartao[ii]
                   If Retval
                      Then NC_COD   = [Codigo Destinat         ]
                           NC_NDV   = [Numero Dias Vencimento  ]
                           NC_ADM   = [Tx_Descto_Administradora]
                           NC_CTA   = [Codigo da Conta         ]

                           Moveto "DupI"
                           [Codigo_Sacado  ] = NC_COD
                           [Codigo da Conta] = NC_CTA
                           [Valor Duplicata] = VrNota[ii]
                           [Valor Duplicata]=[Valor Duplicata]-(([Valor Duplicata]*NC_ADM)/100)

                           If DtNota[ii]=[Dupc->Data de Emissao]
                              Then [Data Vencimento ]=[Dupc->Data de Emissao]+NC_NDV
                              Else [Data Vencimento ]=DtNota[ii]
                           EndIf
                          
                           Release Vars NC_COD, NC_NDV, NC_ADM, NC_CTA   
                      Else Mensagem("CartÆo: "+NCartao[ii]+" parametros nÆo cadastrado !")
                   EndIf
              Else [Codigo_Sacado  ] = [DupC->Codigo         ]
                   [Codigo da Conta] = [DupC->Codigo da Conta]
                   [Valor Duplicata] = VrNota[ii]
           EndIf

           Switch
             Case VSDGFORMA="A" : [NDias Taxa de Juros]=365
             Case VSDGFORMA="M" : [NDias Taxa de Juros]=30
             Case VSDGFORMA="D" : [NDias Taxa de Juros]=1
           EndSwitch  
           UnLockRecord
       
           DtNota[ii]=BlankDate()
           If IsBlank(DtNota[i]) Then QuitLoop EndIf
         EndWhile
       EndFor
        
       For i From 1 to 15
         DtNota[i] =BlankDate()
         VrNota[i] =0
         VrComi[i] =0
         FpPagto[i]=""
         NCartao[i]=""            
       EndFor
        
       Moveto "NumeroDp"
       [Proximo Numero]=[Proximo Numero]+1
       UnLockRecord
        
       Moveto "DupI"

  OtherWise : 
       Moveto "NotaV"
       Moveto [Codigo da Empresa]
       Locate [Answer->Codigo da Empresa],[Answer->Numero do Documento],[Answer->Serie do Documento]
       If Not RetVal
          Then Return
       EndIf
        
       NPARC = 0  
       i     = 0
       While [Codigo da Empresa  ]=[Answer->Codigo da Empresa]   And
             [Numero do Documento]=[Answer->Numero do Documento] And
             [Serie do Documento ]=[Answer->Serie do Documento]

             if [Forma de Pagamento]="TC" and [Numero do Cartao]<>""
                then 
                     ; nÆo conta parcela
                else 
                     NPARC=NPARC+1
             endif
                
             Skip
             If EOT()
                Then QuitLoop
             Endif
       EndWhile
          
       Home
       Moveto [Codigo da Empresa]
       Locate [Answer->Codigo da Empresa],[Answer->Numero do Documento],[Answer->Serie do Documento]
       While [Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
             [Numero do Documento]=[Answer->Numero do Documento] And
             [Serie do Documento ]=[Answer->Serie do Documento ]

          if [Forma de Pagamento]="TC" and [Numero do Cartao]<>""
             then 
                  ; nÆo gera parcela
             else 
                  If [Data]>[Answer->Data de Emissao] Or 
                     [Forma de Pagamento]="CT"        Or
                     [Forma de Pagamento]="CD"        Or  
                     [Forma de Pagamento]="CL"        Or  
                     VSDGGVV="S"                      
                     Then 
                          i=i+1
                          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 ]

                          switch
                            case sys_modo_ordemdup="N":
                               [Ordem do Documento]=strval(i)
                            
                            otherwise                 :
                               If NPARC=1
                                  Then [Ordem do Documento]=""
                                  Else [Ordem do Documento]=CHR(64+i)
                               EndIf
                          
                          endswitch
                          
                          [Data Vencimento          ] = [NotaV->Data ]
                          [Multa                    ] = TAXAM
                          [Taxa de Juros            ] = TAXA
                          [Tipo Taxa de Juros       ] = VSDGFORMA
                          [Valor da Comissao        ] = [NotaV->Valor da Comissao ]
                          [Sequencia Gerador Nota   ] = [NotaV->Sequencia         ]
                          [Forma de Pagamento       ] = [NotaV->Forma de Pagamento]
                          
                          Switch
                            Case VSDGFORMA="A" : [NDias Taxa de Juros]=365
                            Case VSDGFORMA="M" : [NDias Taxa de Juros]=30
                            Case VSDGFORMA="D" : [NDias Taxa de Juros]=1
                          EndSwitch
                          If [Forma de Pagamento]="CT" Or [Forma de Pagamento]="CD" Or [Forma de Pagamento]="CL"
                             Then Moveto "P_Cartao"
                                  Moveto [Codigo_Empresa]
                                  Locate [DupC->Codigo da Empresa],[NotaV->Nome do Cartao]
                                  If Retval
                                     Then NC_COD   = [Codigo Destinat         ]
                                          NC_NDV   = [Numero Dias Vencimento  ]
                                          NC_ADM   = [Tx_Descto_Administradora]
                                          NC_CTA   = [Codigo da Conta         ]
                
                                          Moveto "DupI"
                                          [Codigo_Sacado  ] = NC_COD
                                          [Codigo da Conta] = NC_CTA
                                          [Valor Duplicata] = [NotaV->Valor]
                                          [Valor Duplicata ]=[Valor Duplicata]-(([Valor Duplicata]*NC_ADM)/100)
                                          
                                          If [NotaV->Data]=[Dupc->Data de Emissao]
                                             Then [Data Vencimento ]=[Dupc->Data de Emissao]+NC_NDV
                                             Else [Data Vencimento ]=[NotaV->Data]
                                          EndIf
                                          
                                          Release Vars NC_COD, NC_NDV, NC_ADM, NC_CTA   
                                     Else Mensagem("CartÆo: "+[NotaV->Nome do Cartao]+" parametros nÆo cadastrado !")
                                   EndIf
                             Else [Codigo_Sacado  ] = [DupC->Codigo         ]
                                  [Codigo da Conta] = [DupC->Codigo da Conta]
                                  [Valor Duplicata] = [NotaV->Valor         ]
                          EndIf
                          UnLockRecord
                            
                          
                  EndIf  
          endif
          
          Moveto "DupI"
          If [NotaV->Duplicata_VrOriginal]>0
             Then [Valor Duplicata        ]=[NotaV->Duplicata_VrOriginal   ]
                  [Valor do Desconto      ]=[NotaV->Duplicata_VrDesconto   ]
                  [Data Limite Desconto   ]=[NotaV->Duplicata_DtLimDesconto]
          EndIf 

          Moveto "NotaV"
          Skip
          If EOT()
             Then QuitLoop
          Endif
       EndWhile
EndSwitch
EndProc  ;  Desdobra()

;*******************************************************************************
;* Rotina de Geracao de Duplicatas                                             *
;*******************************************************************************
Proc GeraDup()
AGUARDE("Aguarde, Gerando Duplicatas")
ClearAll

getsys_modo_ordemdup()

Switch     
 Case OPNUMERO_DUPLICATA="DUP<>NF" : 
      Tabela=Cria_Temp(PrivDir())
      Copy "Answer" Tabela
      WC=0
      
      For cci From 1 To 2
        Switch
          Case cci=1:
            {Ask} TypeIn Tabela Enter Check
            Moveto [Situacao] TypeIn "Blank"
            Do_It!
            ClearAll
            If IsEmpty("Answer")
               Then Loop
            EndIf
      
            Sort "Answer" On "Codigo da Empresa", "Numero do Documento", "Serie do Documento"
            ClearAll
          Case cci=2:
            {Ask} TypeIn Tabela Enter Check
            Moveto [Situacao] TypeIn "Not Blank"
            Do_It!
            ClearAll
            If IsEmpty("Answer")
               Then Loop
            EndIf
      
            Sort "Answer" On "Codigo da Empresa", "Nome Fantasia EmitDest", "Codigo",
                             "Numero do Documento", "Serie do Documento"
            ClearAll
        EndSwitch
      
        Array  DtNota[15]
        Array  VrNota[15]
        Array  VrComi[15]
        Array FpPagto[15]
        Array NCartao[15]      
        
        For i From 1 to 15
          DtNota[i] =BlankDate()
          VrNota[i] =0
          VrComi[i] =0
          FpPagto[i]=""
          NCartao[i]=""
        EndFor
      
        View "DupC"
        View "DupI"
        View "DupNF"
        View "FaturaC"
        View "NotaV"
        View "NumeroDp"
        View "P_Cartao"
        View "P_Fatura"
        View "\\Sistemas\\Cadastro\\Destinat"
        View "\\Sistemas\\Cadastro\\End_cob"
        Coedit "Answer"
      
        CODCLI="****"
        VAR_INICIO=True
        PRO_CANCEL=False
      
        Scan
          If PRO_CANCEL then QuitLoop EndIf
          DUPINI=[Answer->Numero do Documento]
          
          WC=WC+1
      
          If [Situacao]=""
             Then Duplicata()
                  Nota()
                  Desdobra()
                  Moveto "Answer"
                  Loop
          EndIf
      
          If [Codigo]<>CODCLI
             Then If Not VAR_INICIO
                     Then Desdobra()
                  EndIf
                  VAR_INICIO=False
                  Moveto "Answer"
                  DUPINI=AlinhM(StrVal(DUPINI), 6)
                  CODCLI=[Codigo]
                  Duplicata()
          EndIf
          Nota()
      
          Moveto "Answer"
      
        EndScan
        If [Situacao]="A"
           Then Desdobra()
        EndIf
        Do_It!
        ClearAll
      
      EndFor          
      Delete Tabela
      
 OtherWise : 
      Sort "Answer" On "Codigo da Empresa", "Numero do Documento", "Serie do Documento"
      ClearAll
      
      WC=0
      View "DupC"
      View "DupI"
      View "DupNF"
      View "FaturaC"
      View "NotaV"
      View "P_Cartao"
      View "P_Fatura"
      View "\\Sistemas\\Cadastro\\Destinat"
      View "\\Sistemas\\Cadastro\\End_cob"
      Coedit "Answer"
      
      Scan
      
        WC=WC+1
        DUPINI=[Answer->Numero do Documento]

        if not GetP_Fatura([Answer->Codigo da Empresa])
           then
                loop
        endif   
      
        Switch
        	Case SubStr([Answer->Codigo do Documento],1,3)="NFE":
        	
            if not isblank(PARAM_DOC_2NFE) and [Answer->Codigo do Documento]=PARAM_DOC_2NFE
               then
                    PARAM_DOC_NFEN                 = PARAM_DOC_2NFE  
                    PARAM_TIP_NFEN                 = PARAM_TIP_2NFE  
                    PARAM_SER_NFEN                 = PARAM_SER_2NFE  
                             
                    PARAM_DOC_DUPNFEN              = PARAM_DOC_DUP2NFE  
                    PARAM_TIP_DUPNFEN              = PARAM_TIP_DUP2NFE  
                    PARAM_SER_DUPNFEN              = PARAM_SER_DUP2NFE  
            endif  
        	
            TPDOCTO=PARAM_DOC_DUPNFEN
            SERDUP =PARAM_SER_DUPNFEN

        	Case SubStr([Answer->Codigo do Documento],1,3)="NSE":
            TPDOCTO=PARAM_DOC_DUPNSEN
            SERDUP =PARAM_SER_DUPNSEN

          Case SubStr([Answer->Codigo do Documento],1,3)="NCE":
            TPDOCTO=[Answer->Codigo do Documento]
            SERDUP =[Answer->Serie do Documento ]

          Case SubStr([Answer->Codigo do Documento],1,1)="X":
            TPDOCTO=[Answer->Codigo do Documento]
            SERDUP =[Answer->Serie do Documento ]

          Case SubStr([Answer->Tipo do Documento],1,3)="CUP":
            TPDOCTO=[Answer->Codigo do Documento]
            SERDUP =[Answer->Serie do Documento ]
          Case SubStr([Answer->Tipo do Documento],1,2)="NF": 
            TPDOCTO="DUP" ;PadrÆo
            SERDUP =""
          OtherWise:
            TPDOCTO=[Answer->Codigo do Documento]
            SERDUP =[Answer->Serie do Documento ]
        EndSwitch
       
        AGUARDE("Aguarde, Gerando Duplicata: "+DUPINI+" Total: "+StrVal(WC))
      
        Duplicata()
        Nota()
        Desdobra()
        Moveto "Answer"
      
      EndScan
      Do_It!
      ClearAll      
EndSwitch

EndProc  ; GeraDup()
                      
;*******************************************************************************
;* Grava Duplicata                                                             *
;*******************************************************************************
Proc Duplicata()
OF_OK=False

if not GetP_Fatura([Answer->Codigo da Empresa])
   then
        DUPLIC_OK=False
        Return
endif   

Switch 
 Case OPNUMERO_DUPLICATA="DUP<>NF" :

      Switch
      	Case SubStr([Answer->Codigo do Documento],1,3)="NFE":

          if not isblank(PARAM_DOC_2NFE) and [Answer->Codigo do Documento]=PARAM_DOC_2NFE
             then
                  PARAM_DOC_NFEN                 = PARAM_DOC_2NFE  
                  PARAM_TIP_NFEN                 = PARAM_TIP_2NFE  
                  PARAM_SER_NFEN                 = PARAM_SER_2NFE  
                           
                  PARAM_DOC_DUPNFEN              = PARAM_DOC_DUP2NFE  
                  PARAM_TIP_DUPNFEN              = PARAM_TIP_DUP2NFE  
                  PARAM_SER_DUPNFEN              = PARAM_SER_DUP2NFE  
          endif  

          TPDOCTO=PARAM_DOC_DUPNFEN
          SERDUP =PARAM_SER_DUPNFEN

      	Case SubStr([Answer->Codigo do Documento],1,3)="NSE":
          TPDOCTO=PARAM_DOC_DUPNSEN
          SERDUP =PARAM_SER_DUPNSEN

        Case SubStr([Answer->Codigo do Documento],1,3)="NCE":
          TPDOCTO=[Answer->Codigo do Documento]
          SERDUP =[Answer->Serie do Documento ]

        Case SubStr([Answer->Codigo do Documento],1,1)="X":
          TPDOCTO=[Answer->Codigo do Documento]
          SERDUP =[Answer->Serie do Documento ]
        Case SubStr([Answer->Tipo do Documento],1,3)="CUP":
          TPDOCTO=[Answer->Codigo do Documento]
          SERDUP =[Answer->Serie do Documento ]
        Case SubStr([Answer->Tipo do Documento],1,2)="NF": 
          TPDOCTO="DUP" ;PadrÆo
          SERDUP =""
        OtherWise:
          TPDOCTO=[Answer->Codigo do Documento]
          SERDUP =[Answer->Serie do Documento ]
      EndSwitch

      Moveto "NumeroDp"
      Moveto [Codigo da Empresa]
      Locate [Answer->Codigo da Empresa], TPDOCTO
      If Not RetVal
         Then Mensagem("Controle da numera‡„o p/ duplicatas ["+TPDOCTO+"] n„o informado  !// Duplicata n„o gerada !//Processo Cancelado !")
              DUPLIC_OK=False
              PRO_CANCEL=True
              Return
      EndIf
      While True
        If Not IsLockRecord()
           Then QuitLoop
        EndIf
      EndWhile
      DUPINI=AlinhM(StrVal([Proximo Numero]),6)
        
      OF_OK=False
      If [Answer->Tipo do Documento]<>"CUP" And
         [Answer->Tipo do Documento]<>"NFCE"
         Then Moveto "FaturaC"
              Moveto [Numero da OF]
              Locate [Answer->Numero da OF]
              If RetVal
                 Then OF_OK=True
              EndIf
       EndIf       

 OtherWise  : 
      If [Answer->Tipo do Documento]<>"CUP" And
         [Answer->Tipo do Documento]<>"NFCE"
         Then Moveto "FaturaC"
              Moveto [Numero da OF]
              Locate [Answer->Numero da OF]
              If RetVal
                Then OF_OK=True
                     If Search("TROCA",[Descricao da Destinacao])>0
                       Then If [Valor DebitoCredito]>=0
                               Then DUPLIC_OK=False
                                    Return
                            EndIf
                     EndIf
              EndIf
      EndIF
      
EndSwitch   

DUPLIC_OK=True
Moveto "Dupc"
Moveto [Codigo da Empresa]
Locate [Answer->Codigo da Empresa  ], DUPINI, SERDUP
If RetVal
   Then Mensagem("Duplicata: "+DUPINI+" j  Existe, Verificar !")
        DUPLIC_OK=False
        Return
EndIf

End Down
[Codigo da Conta          ] = VSDGCONTA
[Codigo da Empresa        ] = [Answer->Codigo da Empresa     ]
[Numero do Documento      ] = DUPINI
[Codigo do Documento      ] = TPDOCTO
[Serie do Documento       ] = SERDUP
[Nome Fantasia Empresa    ] = [Answer->Nome Fantasia Empresa ]


Switch
  Case OPNUMERO_DUPLICATA="DUP<>NF" And VSDGOPCAO="N" :
       [Data de Emissao  ] = [Answer->Data de Emissao]
  Case OPNUMERO_DUPLICATA="DUP<>NF" And VSDGOPCAO="I" :
       [Data de Emissao  ] = VSDGDTREF
  Case OPNUMERO_DUPLICATA="DUP=NF" And VSDGOPCAO="N" :
       [Data de Emissao  ] = [Answer->Data de Emissao] 
EndSwitch

If Substr([Answer->Descricao Condpagto],1,6)="CONTRA"
   Then [Condicoes Especiais]=[Answer->Descricao Condpagto]
EndIf

[Tipo                     ] = [Answer->Tipo                  ]
[Codigo                   ] = [Answer->Codigo                ]
[Nome Fantasia EmitDest   ] = [Answer->Nome Fantasia EmitDest]

If OF_OK 
   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                       ]
        [Numero do Pedido         ]=[FaturaC->Numero do Pedido         ]
        
        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 Not OF_OK Or IsBlank([Razao Social Fatura])
   Then Moveto "\\Sistemas\\Cadastro\\Destinat"
        Moveto [Codigo]
        Locate [Answer->Codigo]
        If RetVal
           Then Moveto "Dupc"
                [Razao Social Fatura]=[\Sistemas\Cadastro\Destinat->Razao Social]
                [Endereco Fatura    ]=[\Sistemas\Cadastro\Destinat->Endereco    ]
                [Bairro Fatura      ]=[\Sistemas\Cadastro\Destinat->Bairro      ]
                [CEP Fatura         ]=[\Sistemas\Cadastro\Destinat->CEP         ]
                [Cidade Fatura      ]=[\Sistemas\Cadastro\Destinat->Cidade      ]
                [UF Fatura          ]=[\Sistemas\Cadastro\Destinat->UF          ]
                [CGC Fatura         ]=[\Sistemas\Cadastro\Destinat->CGC         ]
                [IE Fatura          ]=[\Sistemas\Cadastro\Destinat->IE          ]
        EndIf

        Moveto "\\Sistemas\\Cadastro\\End_Cob"
        Moveto [Codigo]
        Locate [Answer->Codigo]
        If RetVal
           Then Moveto "Dupc"
                [Endereco de Cobranca]=[\Sistemas\Cadastro\End_Cob->Endereco de Cobranca]
                [Bairro de Cobranca  ]=[\Sistemas\Cadastro\End_Cob->Bairro de Cobranca  ]
                [CEP de Cobranca     ]=[\Sistemas\Cadastro\End_Cob->CEP de Cobranca     ]
                [Cidade de Cobranca  ]=[\Sistemas\Cadastro\End_Cob->Cidade de Cobranca  ]
                [UF de Cobranca      ]=[\Sistemas\Cadastro\End_Cob->UF de Cobranca      ]
        EndIf
        Moveto "DupC"
EndIf

[Codigo da Destinacao     ] = [Answer->Codigo da Destinacao     ]
[Descricao da Destinacao  ] = [Answer->Descricao da Destinacao  ]
[Codigo do Representante  ] = [Answer->Codigo do Representante  ]
[Nome Fantasia Represent  ] = [Answer->Nome Fantasia Represent  ]
[Comissao do Representante] = [Answer->Comissao do Representante]
[Pedido Cliente           ] = "NF/"+[Answer->Numero do Documento]

Switch
 Case OPNUMERO_DUPLICATA="DUP=NF" : 
      [Valor Nota Fiscal        ] = [Answer->Valor Nota Fiscal  ]
      [Numero do Pedido         ] = [Answer->Numero do Pedido   ]
      [Numero_Carregamento      ] = [Answer->Numero_Carregamento]
      
      [Duplicata Emitida        ] = "S"
      [Boleta Emitida           ] = "S"
      [Promissoria Emitida      ] = "S"
      [Carne Emitido            ] = "S"

      Switch
       Case [Answer->Forma de Pagamento]="BO" :
            [Duplicata Emitida  ]=""
            [Boleta Emitida     ]=""
       Case [Answer->Forma de Pagamento]="NP" :
            [Promissoria Emitida]=""
       Case [Answer->Forma de Pagamento]="CR":
            [Carne Emitido      ]=""
       Case [Answer->Forma de Pagamento]="CO" Or
            [Answer->Forma de Pagamento]="DP":
            [Duplicata Emitida  ]="" 
      EndSwitch
 Otherwise  :  
      switch
        case sys_codigo_cliente="0121":
      
        otherwise                     :
          Switch
           Case [Answer->Forma de Pagamento]="BO" : 
                [Duplicata Emitida  ]="S"
                [Promissoria Emitida]="S"
           Case [Answer->Forma de Pagamento]="NP" :
                [Duplicata Emitida  ]="S"
                [Boleta Emitida     ]="S"
          EndSwitch         

      endswitch
EndSwitch

[Sistema Gerador]="GD"

Controle_Dia()
SEQ_NOTA=0

EndProc  ; Duplicata()

;*******************************************************************************
;* 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()
If Not DUPLIC_OK
   Then Return
Endif

If OPNUMERO_DUPLICATA="DUP<>NF"
   Then SEQ_NOTA=SEQ_NOTA+1
        SEQ = AlinhM(StrVal(SEQ_NOTA),2)
   Else SEQ = "01"      
EndIf

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                ] = SEQ

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

[Numero da Nota           ] = [Answer->Numero do Documento]
[Serie da Nota            ] = [Answer->Serie do Documento ]
[Valor da Nota Fiscal     ] = [Answer->Valor Nota Fiscal  ]
UnLockRecord

If OPNUMERO_DUPLICATA="DUP<>NF"
  Then Moveto "DupC"
       [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Answer->Valor Nota Fiscal]

       Moveto "NotaV"
       Moveto [Codigo da Empresa]
       Locate [Answer->Codigo da Empresa],[Answer->Numero do Documento],[Answer->Serie do Documento]
       If RetVal
          Then While [Codigo da Empresa  ] = [Answer->Codigo da Empresa  ] And
                     [Numero do Documento] = [Answer->Numero do Documento] And
                     [Serie do Documento ] = [Answer->Serie do Documento ]
        
                  For i From 1 To 15
                    If IsBlank(DtNota[i])
                       Then DtNota[i] =[Data              ]
                            VrNota[i] =[Valor             ]
                            VrComi[i] =[Valor da Comissao ]
                            FpPagto[i]=[Forma de Pagamento]
                            NCartao[i]=[Nome do Cartao    ]   
                            QuitLoop
                       Else If DtNota[i]=[Data]
                               Then VrNota[i]=VrNota[i]+[Valor            ]
                                    VrComi[i]=VrComi[i]+[Valor da Comissao]
                                    QuitLoop
                            EndIf
                    EndIf
                  EndFor
                  Skip
                  If EOT()
                     Then QuitLoop
                  Endif
               EndWhile
       EndIf
       Moveto "DupC"
EndIf

EndProc  ; Nota()
                 
;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ConfOpcoes(Opcao)
Private Opcao
Switch
  Case Opcao="Ler":
       If IsFile("GD_0001.sc")
           Then Play "GD_0001"
           Else VSDGOPCAO=""
       EndIf
  Case Opcao="Gravar":
       FileWrite        "GD_0001.sc" From ";****** Variaveis de Configura‡„o DTGERACAO FATURA"+"\n"
       FileWrite Append "GD_0001.sc" From "VSDGOPCAO="+Chr(34)+VSDGOPCAO+Chr(34)+"\n"
EndSwitch

EndProc ; ConfOpcoes()               
                      
;*******************************************************************************
;* Rotina do ShowDialog                                                        *
;*******************************************************************************
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_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_TPDOCTO"       : Campo="TG_CONTA"
            Case Campo="TG_DESTINAT"      : Campo="TG_TPDOCTO"
            Case Campo="TG_DTINI"         : Campo="TG_DESTINAT" 
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_TAXAM"         : Campo="TG_DTFIM"
            Case Campo="TG_TAXA"          : Campo="TG_TAXAM"
            Case Campo="TG_FORMA"         : Campo="TG_TAXA"
            Case Campo="TG_GVV"           :
                 If IsBlank(VSDGTAXA)
                    Then Campo="TG_TAXA"
                    Else Campo="TG_FORMA"
                 EndIf
            Case Campo="TG_OPCAO"         : Campo="TG_GVV"
            Case Campo="TG_DTREF"         : Campo="TG_OPCAO"
            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" :
                         If GetP_Fatura(VSDGEMPRESA)
                            Then 
                                 VSDGCONTA  =PARAM_CONTA_CAIXA
                                 VSDGTAXA   =PARAM_TXJUROS
                                 VSDGFORMA  =PARAM_FORMA_TXJUROS
                                 VSDGGVV    =PARAM_AVISTADUPLIC

                                 If OPNUMERO_DUPLICATA="DUP<>NF"
                                    Then 
                                         getrecord "\\sistemas\\vendas\\NumeroDP" VSDGEMPRESA, PARAM_DOC_DUPNFEN to regnumerodp                                    
                                         If RetVal
                                            Then Campo="TG_CONTA"
                                                 VSDGPROXFAT=AlinhM(StrVal(regnumerodp["Proximo Numero"]),6)
                                            Else 
                                                 Mensagem("Controle da numera‡„o p/ duplicatas ["+PARAM_DOC_DUPNFEN+"] n„o informado para Empresa !")
                                         EndIf
                                 
                                    else Campo="TG_CONTA"
                                 EndIf
                         EndIf
                    Case Campo="TG_CONTA":
                         If Not IsBlank(VSDGCONTA)
                            Then Campo="TG_TPDOCTO"  
                         EndIf
                    Case Campo="TG_TPDOCTO" : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT": Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   : Campo="TG_DTFIM"
                         If IsBlank(VSDGDTINI)
                            Then VSDGDTINI=today()
                         Endif
                    Case Campo="TG_DTFIM"   : Campo="TG_TAXAM"
                         If IsBlank(VSDGDTFIM)
                            Then VSDGDTFIM=VSDGDTINI
                         EndIf
                    Case Campo="TG_TAXAM":
                         VSDGTAXAM=ControlValue("TG_TAXAM")
                         If Not IsBlank(VSDGTAXAM)
                            Then TAXAM=NumVal(VSDGTAXAM)
                         EndIf
                         Campo="TG_TAXA"
                    Case Campo="TG_TAXA":
                         VSDGTAXA=ControlValue("TG_TAXA")
                         If Not IsBlank(VSDGTAXA)
                            Then TAXA=NumVal(VSDGTAXA)
                                 Campo="TG_FORMA"
                            Else VSDGFORMA    =""
                                 VSDGDESCFORMA=""
                                  Campo="TG_GVV"
                         EndIf
                    Case Campo="TG_FORMA":
                         VSDGFORMA=ControlValue("TG_FORMA")
                         If Not IsBlank(VSDGFORMA)
                            Then Switch
                                   Case VSDGFORMA="D":
                                        VSDGDESCFORMA="Dia"
                                   Case VSDGFORMA="M":
                                        VSDGDESCFORMA="Mes"
                                   Case VSDGFORMA="A":
                                        VSDGDESCFORMA="Ano"
                                   OtherWise:
                                        VSDGFORMA    =""
                                        VSDGDESCFORMA=""
                                 EndSwitch
                                 Campo="TG_GVV"
                            Else VSDGDESCFORMA=""
                         EndIf
                    Case Campo="TG_GVV":
                         VSDGGVV=ControlValue("TG_GVV")
                         Switch
                           Case VSDGGVV="S":
                                VSDGDESCGVV="SIM"
                           Case VSDGGVV="N":
                                VSDGDESCGVV="NAO"
                           OtherWise:
                                VSDGGVV    ="N"
                                VSDGDESCGVV="NAO"
                         EndSwitch
                         If OPNUMERO_DUPLICATA="DUP<>NF"
                            Then Campo="TG_OPCAO"
                            Else 
                                 VSDGOPCAO    ="N"
                                 VSDGDESCOPCAO="DT FATURA=DT EMISSAO NF"                                 
                                 VSDGDTREF    =BlankDate()
                                 
                                 Campo="YES"
                         EndIf   
                    Case Campo="TG_OPCAO": Campo="YES"
                         VSDGOPCAO=ControlValue("TG_OPCAO")
                         Switch
                           Case VSDGOPCAO="N": VSDGDESCOPCAO="DT FATURA=DT EMISSAO NF"
                                               VSDGDTREF=BlankDate()
                           Case VSDGOPCAO="I": VSDGDESCOPCAO="DT FATURA=DT INFORMADA"
                                               If IsBlank(VSDGDTREF)
                                                  Then VSDGDTREF=Today()
                                               EndIf
                                               CAMPO="TG_DTREF"
                           OtherWise         : VSDGDESCOPCAO=""
                                               Campo="TG_OPCAO"
                         EndSwitch
                    Case Campo="TG_DTREF": Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe o Codigo da Empresa"
  Case Campo="TG_CONTA":
       MSG_CAMPO="Informe o Codigo da Conta"
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_DTFIM":
       MSG_CAMPO="Informe a Data Final"
  Case Campo="TG_TAXAM":
       MSG_CAMPO="Branco=Nulo"
  Case Campo="TG_TAXA":
       MSG_CAMPO="Branco=Nulo"
  Case Campo="TG_FORMA":
       MSG_CAMPO="D=Diario, M=Mensal, A=Anual"
  Case Campo="TG_GVV":
       MSG_CAMPO="Em Branco=N„o, S=Sim, N=N„o "
  Case Campo="TG_OPCAO":
     MSG_CAMPO="Op‡„o: N=Data igual DtEmiss„o NF   I=Informar Data Gera‡„o"       
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()


;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Parm"

If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999"    EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"       EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""         EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""       EndIf
If Not IsAssigned(OPNUMERO_DUPLICATA)  Then OPNUMERO_DUPLICATA="DUP=NF" EndIf
LimpAguarde()

sys_valor()

VSDGDTINI          = BlankDate()
VSDGDTFIM          = BlankDate()
VSDGCONTA          = ""
VSDGTPDOCTO        = ""
VSDGNOMCONTA       = ""
VSDGTAXA           = ""
VSDGTAXAM          = ""
VSDGFORMA          = ""
VSDGDESCFORMA      = ""
VSDGGVV            = ""
VSDGDESCGVV        = ""
TAXAM              = BlankNum()
TAXA               = BlankNum()
VSDGPROXFAT        = ""
VSDGDESCOPCAO      = ""
VSDGOPCAO          = ""
VSDGDESCOPCAO      = "" 
VSDGDTREF          = BlankDate()
VSDGDESTINAT       = ""

titsd=""
Switch
 Case OPNUMERO_DUPLICATA="DUP<>NF" : titsd="Gerac„o de Duplicatas - N§.Duplicata<>N§.Nota"
 Case OPNUMERO_DUPLICATA="DUP=NF"  : titsd="Gerac„o de Duplicatas - N§.Duplicata= N§.Nota"
EndSwitch

ConfOpcoes("Ler")

While True
  Echo Normal
  Echo Off

  ShowDialog titsd Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 20 Width 72

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

    @ 06,36 ?? "Gerar: Duplicatas, Cartäes !"

    Label  @ 02,00 "Conta"  For "TG_CONTA"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA"    To VSDGCONTA
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCONTA" To VSDGNOMCONTA
                          
    Label  @ 04,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 05,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO               

    Label  @ 06,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 07,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST

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

    Label  @ 11,00 "Taxa de Multa"  For "TG_TAXAM"
    Accept @ 11,21 Width 13 "A7"  Picture "#*#.[##]" Tag "TG_TAXAM"    To VSDGTAXAM

    Label  @ 12,00 "Taxa de Juros"  For "TG_TAXA"
    Accept @ 12,21 Width 13 "A7"  Picture "#*#.[##]" Tag "TG_TAXA"    To VSDGTAXA

    Label  @ 13,00 "Tipo Taxa de Juros"  For "TG_FORMA"
    Accept @ 13,21 Width 04 "A1"  Picture "D,M,A" Tag "TG_FORMA"    To VSDGFORMA
    Accept @ 13,25 Width 09 "A3"  Picture "!*!" Tag "TG_DESCFORMA"    To VSDGDESCFORMA

    Label  @ 14,00 "Gera Venda a Vista"  For "TG_GVV"
    Accept @ 14,21 Width 04 "A1"  Picture "S,N" Tag "TG_GVV"    To VSDGGVV
    Accept @ 14,25 Width 09 "A3"  Picture "!*!" Tag "TG_DESCGVV"    To VSDGDESCGVV

    Label  @ 00,35 "Op‡„o p/ Data Emiss„o da Fatura" For "TG_OPCAO"
    Accept @ 01,39 Width 04 "A1"  Picture "N,I" Tag "TG_OPCAO" To VSDGOPCAO
    Accept @ 01,44 Width 25 "A25"  Picture "!*!" Tag "TG_DESCOPCAO" To VSDGDESCOPCAO

    Label  @ 02,35 "Data Gera‡„o" For "TG_DTREF"
    Accept @ 03,36 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

    Pushbutton @ 16,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 16,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal   Then QuitLoop EndIf
  If IsBlank(VSDGDTINI)
     Then Mensagem("Data Inicial Invalida !")
          Loop           
  EndIf
  
  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop            
  EndIf
  
  Seleciona()
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar")
          Loop             
  EndIf
  
  If CANCELADO
     Then 
          Mensagem("Procedimento abortado, duplicatas nÆo foram geradas !")
          Loop
     else
          GeraDup()
          Mensagem("Fim da Opera‡„o !")       
  EndIf
  ConfOpcoes("Gravar") 

EndWhile
ClearAll
Release Vars All
Release Procs All
