;** ConfCF *********************************************************************
;*  Digitacao de Conferˆncia de Cupom                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 09/03/2018 por Bruno Carvalho          
;Ultima Alteracao: 14/03/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ alterar a situa‡Æo p/ FINALIZADO se todos os itens do cupom foram conferidos
;Ultima Alteracao: 05/10/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes mensagem e outros
;Ultima Alteracao: 01/11/2018 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado [Tipo do Documento] e p/ quando for documento<>"CUP" localizar pela chave da NOTA 
;Ultima Alteracao: 08/11/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ alinhar o numero do documento, trazer a serie automatico quando ROM e ignorar itens cancelados no NOTAI
;Ultima Alteracao: 30/05/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustado processo para localizar codbar da proc CDBarras()
;Ultima Alteracao: 10/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFCE                  
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 
 
;*******************************************************************************
;* Rotina para controlar a chave da conferencia                                *
;*******************************************************************************
Proc CHAVEC()
FACA_DIGITAC=True
FACA_CHAVEI =True
INICIO_PAGINA=True

While True
  Moveto "Confcfc"
  Moveto [Numero da Conferencia]
  End
  Moveto [Numero da Conferencia]
  CONFERENCIA=[Numero da Conferencia]

  If OPCAO_FORM=FORMRELACAO
    Then Down
    Else PgDn 
  EndIf
  Moveto [Numero da Conferencia]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

  Switch
    Case RetVal=-33 : SemFuncoes()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM=FORMRELACAO
            Then OPCAO_FORM=FORMMANUTENCAO
            Else OPCAO_FORM=FORMRELACAO
         EndIf
         Del
         CHAVEC=5
         Return
         
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           If OPCAO_FORM=FORMRELACAO
              Then PAGINA("Confcfc","MR")
              Else PAGINA("Confcfc","MT")
           EndIf
           INICIO_PAGINA=True
           CONFERENCIA=[Numero da Conferencia]
           Switch
             Case EDITAR="S":
                  PickForm FORMMANUTENCAO
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])
                     Then CHAVEC=0
                          FACA_DIGITAC=True
                          FACA_CHAVEI =True
                          INICIO_PAGINA=True

                          CONFERENCIA=[Numero da Conferencia]
                          Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             Case EXCLUIR="S":
                  PickForm FORMMANUTENCAO
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])  
                     Then If [Situacao da Conferencia]="FINALIZADO"
                             Then Mensagem("Esta conferˆncia n„o pode ser excluida !// J  foi FINALIZADA !")
                                  UnLockRecord
                             Else If QuerExcluir("")
                                     Then EXCLUSAO_C()
                                     Else UnLockRecord
                                  EndIf
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM=FORMMANUTENCAO
              Then PickForm FORMMANUTENCAO
              Else PickForm FORMRELACAO
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If Numero_Lancamento("","F")
            Then CONFERENCIA = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC    
            Else QuitLoop
         EndIf
         PickForm FORMMANUTENCAO
         Moveto [Numero da Conferencia]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC=0
                 If Checa_Controle([Numero_Controle_Dia])
                    Then Return
                 EndIf
            Else CHAVEC=1
                 If Checa_Controle(SYS_CONTROLE_DIA)
                    Then Return
                    Else OPCAO_FORM=FORMRELACAO 
                 EndIf
         EndIf  
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM=FORMRELACAO
            Then PickForm FORMRELACAO
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc ChaveI()

Moveto "Confcfc"
SetaCorRegistro("Padrao")

Moveto "Confcfi"
While True
  Calc_Itens()
  
  Moveto [Codigo do Item]
  End
  If Not IsBlank([Codigo do Item])
     then Down
  Endif
  CHAVEI=1
  SetaCorRegistro("Editar")
  While True
    MSGCAMPO=""
    TECLA= " Esc=Retornar  Alt+F=Fun‡”es  PgDn=Finalizar"
    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F2","F7","HOME","UP","PGUP","PGDN","PGUP","F8","F3","F5","F9",-33,"F6"

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F2  ~A~tiva lan‡amentos   " : " Ativa lan‡amentos                              " : "F2",
              Separator,
              "~C~ancelar                " : " Cancelar a Opera‡„o                            " : "CANCELAR"
            EndMenu
            To MenuVar
            echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar
    EndIf

    Switch
    Case Retval="F2":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case Retval="PGDN" Or RetVal="ESC":
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=False
            Then Moveto "Confcfc"
                 If [Quantidade_Cupom] = [Quantidade_Conferido]
                    Then [Situacao da Conferencia]="FINALIZADO"
                    Else If [Situacao da Conferencia]<>"EM ABERTO"
                            Then [Situacao da Conferencia] = "EM ABERTO" 
                         EndIf   
                 EndIf 
                 ;MENSAGEM("A conferˆncia deve ter pelo menos 1(um) item!")
                 ;QuitLoop
            Else Moveto "Confcfc"      
         EndIf
         FACA_CHAVEI =False
         FACA_DIGITAC=False
         CHAVEI=9
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         While True
           PAGINA("Confcfi","MR")
           Switch
             Case EDITAR="S"  : FastMsg("Edi‡„o n„o permitida !")
             Case EXCLUIR="S" : FastMsg("Exclus„o n„o permitida !")
             OtherWise        : QuitLoop
           EndSwitch
           UnLockRecord
           SetaPosForm()
         EndWhile
         QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()
Moveto "Confcfc"

If INICIO_PAGINA
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                [Tipo do Documento]="NFCE"
        EndIf
        If [Situacao da Conferencia]="FINALIZADO"
           Then MSG_T="Esta conferˆncia de cupom j  foi FINALIZADA !//"
                Mensagem(MSG_T)
                CHAVEC=9
                Return
        EndIf
EndIf 
If CHAVEC=0 Or Not INICIO_PAGINA
   Then Moveto "Confcfi"  SetaCorRegistro("Padrao")
        Moveto "Confcfc"
        Moveto [Flag]
   Else if not isblank([Codigo da Empresa])
           then Moveto [Numero do Documento]
           else Moveto [Codigo da Empresa]
        endif   
EndIf

FACA_CHAVEI=True
INICIO_PAGINA=False

While True 
  TECLA=" Esc=Retornar  "
  If Field()="Codigo da Empresa" Or Field()="Codigo"         
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf  
  
  Switch
    Case Field()="Tipo do Documento"   : MSGCAMPO="Tipo do Documento: CUP/NFE/ROM"    
    OtherWise                          : MSGCAMPO=Field()
  EndSwitch
  
  If Field()="Codigo da Empresa" Or Field()="Codigo"         
     Then MSGCAMPO = MSGCAMPO+", [F1]Consultar tabela"
  EndIf 
  
  Switch
    Case Field()="Flag" : MSGCAMPO="[ENTER] Itens da Conferˆncia"
  EndSwitch   
 
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","Down"
       
  Switch
  Case RetVal="F1":
       If Field()="Codigo da Empresa"   Or
          Field()="Codigo"         
          Then CONSULTAF1()
       EndIf                                                                                         
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="Down":
       If CHAVEC=0
          Then QuitLoop
       EndIf
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("")
                  Then EXCLUSAO_C()
                       CHAVEC=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Codigo da Empresa"    :   
            If QuerDesfazer("")
               Then EXCLUSAO_C()
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Tipo do Documento"     : Moveto [Codigo da Empresa  ]  
       Case Field()="Numero do Documento"   : Moveto [Tipo do Documento  ]
       Case Field()="Codigo"                : Moveto [Flag               ]
       Case Field()="Numero de Serie Cupom" : Moveto [Numero do Documento]    
       Case Field()="Flag"                  : []=""
            If CHAVEC=1
               Then Moveto [Numero do Documento]
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       OtherWise                  : Left
       EndSwitch       
  Case Retval="ENTER":
       Switch
       Case Field()="Codigo da Empresa": 
            If IsBlank([]) 
               Then If Not IsBlank(SYS_EMPRESA_DEFAULT)
                       Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                    EndIf
            EndIf
            If IsBlank([]) Then Loop EndIf
            Moveto [Tipo do Documento]
       Case Field()="Tipo do Documento" : 
            If IsBlank([]) 
               Then [Tipo do Documento]="NFCE"
            EndIf
            If IsBlank([]) Then Loop EndIf
            If Upper(SubStr([Tipo do Documento],1,3))<>"CUP" And  
               Upper(SubStr([Tipo do Documento],1,3))<>"NFE" And  
               Upper(SubStr([Tipo do Documento],1,3))<>"ROM" And
               Upper(SubStr([Tipo do Documento],1,3))<>"NFCE"
               Then Mensagem("Tipo de documento informado ‚ diferente de CUP/NFCE/NFE/ROM!")
                    Loop    
            EndIf   
            Moveto [Numero do Documento]
       Case Field()="Numero do Documento" : 
            If Not IsBlank([])
               Then []=Alinh()
                    If Search("CUP",[Tipo do Documento])>0 or
                       Search("NFCE",[Tipo do Documento])>0
                       Then Moveto [Numero de Serie Cupom]
                       Else [Numero de Serie Cupom]=""
                            If Search("ROM",[Tipo do Documento])>0
                               Then GetRecord "P_Fatura" [Codigo da Empresa] To REG_PFATURA
                                    If RetVal
                                       Then [Serie do Documento]=REG_PFATURA["Rom_Serie do Documento"]
                                            If Not Localiza_Nota()
                                               Then Moveto [Serie do Documento]
                                                   Loop 
                                            EndIf
                                            QuitLoop 
                                       Else Moveto [Serie do Documento]       
                                    EndIf
                               Else Moveto [Serie do Documento]           
                            EndIf   
                    EndIf         
            EndIf
       Case Field()="Serie do Documento" :      
            If Not Localiza_Nota()
               Then Moveto [Serie do Documento]
                    Loop 
            EndIf
            QuitLoop
       Case Field()="Numero de Serie Cupom"  : 
            If Not IsBlank([])
               Then If CHAVEC=1
                       Then if len([])<=3
                               then []=AlinhM([],3)
                            endif   
                       
                            ACHOU_CUPOM = ""
                            EMPRESA      = [Codigo da Empresa    ]
                            NDOC         = [Numero do Documento  ]
                            NSERIE_CUPOM = [Numero de Serie Cupom]

                            Moveto "Confcfc"
                            UnLockRecord
                            FormKey
                            Moveto [Numero do Documento]
                            Locate NDOC
                            If RetVal
                               Then While NDOC=[Numero do Documento]
                                      If AlinhM(NSERIE_CUPOM,6)=AlinhM([Numero de Serie Cupom],6) And 
                                         CONFERENCIA<>[Numero da Conferencia]
                                         Then ACHOU_CUPOM = [Numero da Conferencia]
                                              QuitLoop
                                      EndIf
                                      Skip
                                      If Eot() Then QuitLoop EndIf
                                      Locate Next NDOC
                                      If Not RetVal
                                         Then QuitLoop
                                      EndIf   
                                    EndWhile                                       
                                    Moveto "Confcfc"
                                    Moveto [Numero da Conferencia]
                                    Locate CONFERENCIA
                                    FormKey
                                    IsLockRecord()
                                    Moveto [Numero do Documento]
                                    If ACHOU_CUPOM<>""
                                       Then Mensagem("Cupom/NFCe "+[Numero do Documento]+" / Serie "+[Numero de Serie Cupom]+
                                                     " foi localizado na conferˆncia "+ACHOU_CUPOM+"!")
                                            Loop
                                    EndIf   
                            EndIf
                            
                            CUPOM_CANCELADO = False
                            NSERIE_CUPOM    = AlinhM([Confcfc->Numero de Serie Cupom],6)
                            SDOC            = ""
                            Moveto "Confcfc"
                            UnLockRecord
                            FormKey
                            
                            Moveto "NotaC"
                            Moveto  [Numero do Documento]
                            Locate NDOC
                            If RetVal
                               Then While [Numero do Documento] = NDOC
                                      If [Codigo da Empresa] = [Confcfc->Codigo da Empresa ] And
                                         ([Tipo do Documento] = "CUP" Or [Tipo do Documento ] = "NFCE" ) And
                                         StrVal(NumVal([Numero da OF])) = StrVal(NumVal(NSERIE_CUPOM)) And [Data de Emissao] = Today()
                                         Then If [Situacao]="C"
                                                 Then CUPOM_CANCELADO = True
                                              EndIf   
                                              SDOC = [Serie do Documento]
                                              QuitLoop
                                      EndIf
                                      Skip
                                      If Eot() Then QuitLoop EndIf
                                      Locate Next NDOC
                                      If Not RetVal
                                         Then QuitLoop
                                      EndIf   
                                    EndWhile       
                            EndIF   
                            
                            Moveto "Confcfc"
                            Moveto [Numero da Conferencia]
                            Locate CONFERENCIA
                            FormKey
                            IsLockRecord()
                            Moveto [Numero de Serie Cupom]
                            
                            Switch
                              Case CUPOM_CANCELADO :
                                   Mensagem("Cupom/NFCe "+[Numero do Documento]+" / Serie "+[Numero de Serie Cupom]+" CANCELADO ")  
                                   Loop
                              Case SDOC=""         :
                                   Mensagem("Cupom/NFCe "+[Numero do Documento]+" / ECF "+[Numero de Serie Cupom]+" n„o encontrado!"+
                                            "// //Verificar dados ou integrador nÆo esta ativo ! ")  
                                   Loop
                              OtherWise           : 
                                   [Serie do Documento] = SDOC
                                   GetRecord "\\Sistemas\\Vendas\\NotaC" EMPRESA,NDOC,SDOC To REG_NOTA
                                   If RetVal
                                     Then 
                                           If REG_NOTA["Tipo do Documento"]<>"CUP" And
                                              REG_NOTA["Tipo do Documento"]<>"NFCE"
                                              Then Mensagem("Documento "+[Numero do Documento]+" "+
                                                            [Serie do Documento]+" n„o ‚ um Cupom/NFCe !")  
                                                   Loop 
                                           EndIf   
                                           [Codigo      ] = REG_NOTA["Codigo"]
                                           [Razao Social] = REG_NOTA["Razao Social"]
                                      Else Mensagem("Cupom/NFCe "+[Numero do Documento]+" "+[Serie do Documento]+" inv lido! ")  
                                           Loop
                                   EndIf    
                                   Release Vars REG_NOTA
                            EndSwitch
                    EndIf
                    QuitLoop
            EndIf
       Case Field()="Codigo":
            If IsBlank([])
               Then Moveto [Razao Social]
               Else QuitLoop
            EndIf
       Case Field()="Razao Social":
            QuitLoop
       Case Field()="Flag" : []=""
                             QuitLoop    
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile

EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para localizar o numero do documento                                 *
;*******************************************************************************
Proc Localiza_Nota()
Private ACHOU_NOTA,EMPRESA,TDOC,NDOC,SDOC,DOCTO,REG_NOTA,NOTA_CANCELADA,ACHOU_NOTA

ACHOU_NOTA = ""
EMPRESA    = [Codigo da Empresa  ]
TDOC       = [Tipo do Documento  ]
NDOC       = [Numero do Documento]
SDOC       = [Serie do Documento ]

DOCTO      = Ltrim(TDOC+" ")+Ltrim(SDOC+" ")+NDOC

Moveto "Confcfc"
UnLockRecord
FormKey
Moveto [Numero do Documento]
Locate NDOC
If RetVal
   Then While NDOC=[Numero do Documento]
          If EMPRESA = [Codigo da Empresa ] And 
             SDOC    = [Serie do Documento] And 
             TDOC    = [Tipo do Documento ] And CONFERENCIA<>[Numero da Conferencia]
             Then ACHOU_NOTA = [Numero da Conferencia]
                  QuitLoop
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next NDOC
          If Not RetVal
             Then QuitLoop
          EndIf   
        EndWhile                                       
        Moveto "Confcfc"
        Moveto [Numero da Conferencia]
        Locate CONFERENCIA
        FormKey
        IsLockRecord()
        Moveto [Numero do Documento]
        If ACHOU_NOTA<>""
           Then Mensagem("Nota "+DOCTO+" foi localizado na conferˆncia "+ACHOU_NOTA+"!")
                Return False
        EndIf   
EndIf

NOTA_CANCELADA = False

Moveto "Confcfc"
UnLockRecord
FormKey

ACHOU_NOTA = False
Moveto "NotaC"
Moveto [Codigo da Empresa]
Locate EMPRESA,NDOC,SDOC
If RetVal
   Then If [Situacao]="C"                     ;If [Data de Emissao] = Today()
           Then NOTA_CANCELADA = True
        EndIf
        ACHOU_NOTA = True
        CopyToArray REG_NOTA
   Else Moveto "Confcfc"
        Moveto [Numero da Conferencia]
        Locate CONFERENCIA
        FormKey
        IsLockRecord()
        Mensagem("Nota "+DOCTO+" inv lida! ")  
        Return False         
EndIf   

Moveto "Confcfc"
Moveto [Numero da Conferencia]
Locate CONFERENCIA
FormKey
IsLockRecord()

Switch
  Case NOTA_CANCELADA :
       Mensagem("Nota "+DOCTO+" CANCELADA!")  
       Return False
  OtherWise           : 
       [Codigo      ] = REG_NOTA["Codigo"]
       [Razao Social] = REG_NOTA["Razao Social"]
EndSwitch
        
Return True

EndProc ;Localiza_Nota()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private NITEMOF,FRACIONADO,PEGA_DADOS_CODITEM

Moveto [Codigo do Item]
Ativa_Lookup()
Moveto [Codigo de Barras]
Locate Dados_Item
If RetVal
   Then Moveto [Codigo do Item]
        PEGA_DADOS_CODITEM = [Codigo do Item]
   Else If Codigo_Barras2(Dados_Item,"")
           Then PEGA_DADOS_CODITEM = CODIGO_BARRA2
           Else PEGA_DADOS_CODITEM = Dados_Item
        EndIf
        Moveto [Codigo do Item]
        Locate PEGA_DADOS_CODITEM
EndIf
If [Inativo]="S"
   Then MSG = "Item: "+[Codigo do Item]+" "+[Descricao do Item]+" esta inativo !"
        KeyPress "ESC"
        FastMsg(MSG)
        Del
        Return 
EndIf
KeyPress "ESC"
 
Del
Moveto [Codigo do Item]
Locate PEGA_DADOS_CODITEM
If Not RetVal
   Then ACHOU_ITEM=False
        GetRecord "\\Sistemas\\Estoque\\Itens" PEGA_DADOS_CODITEM To REG_BUSCA_LOOKUP
        If RetVal
           Then MSG="Neste cupom n„o tem o item informado !// //"
                MSG=MSG+"Item: "+REG_BUSCA_LOOKUP["Codigo do Item"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+"////"
                MSG=MSG+"Inclus "
           Else MSG="Codigo de Barra "+Dados_Item+" n„o localizado!"                   
        EndIf         
        Mensagem(MSG)
        Return
   Else GetRecord "\\Sistemas\\Estoque\\Itens" PEGA_DADOS_CODITEM To REG_BUSCA_LOOKUP       
EndIf

Switch
  Case IsBlank([Quantidade_Conferido]) And Dados_QTD<0:
       MSG=    "Item: "+REG_BUSCA_LOOKUP["Codigo do Item"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+"//"
       MSG=MSG+"nÆo existe quantidade a ser deduzida !"
       Mensagem(MSG)
  Case Dados_QTD<0 And [Quantidade_Conferido]<(Dados_QTD*-1) :
       Mensagem("A quantidade a ser deduzida [ "+StrVal(Dados_QTD*-1)+" ]// ‚ igual ou maior "
                 +"a quantidade j  conferida [ "+StrVal([Quantidade_Conferido])+" ].")
  Case Dados_QTD>0 And ([Quantidade_Conferido]+Dados_QTD)>[Quantidade_Cupom] :
       Mensagem("A quantidade informada ‚ maior que a quantidade do cupom!")
  
  OtherWise:         
       [Quantidade_Conferido ]= [Quantidade_Conferido]+Dados_QTD
       Acerta_Item()
       Calc_Itens()
       Moveto [Codigo do Item]
EndSwitch 

EndProc

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Acerta_Item()
[Quantidade_Diferenca]=([Quantidade_Conferido]-[Quantidade_Cupom])

If [Quantidade_Diferenca]=0
  Then [Quantidade_Diferenca]=BlankNum()
EndIf

If [Quantidade_Conferido]=0
  Then [Quantidade_Conferido]=BlankNum()
EndIf

If [Quantidade_Diferenca]=0
   Then [Quantidade_Diferenca  ]=BlankNum()
Endif   

UnLockRecord
EndProc 

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Calc_Itens()
Moveto "Confcfi"
Moveto [Quantidade_Cupom       ] VSQTDP  =ImageCSum()
Moveto [Quantidade_Conferido   ] VSQTDE  =ImageCSum()

VSQTDD=(VSQTDE-VSQTDP)  

If VSQTDP =0 Then VSQTDP =BlankNum() EndIf
If VSQTDE =0 Then VSQTDE =BlankNum() EndIf

Moveto "Confcfc"
[Quantidade_Cupom      ]=VSQTDP
[Quantidade_Conferido  ]=VSQTDE
[Quantidade_Diferenca  ]=VSQTDD

Moveto "Confcfi"
EndProc ;Calc_Itens()

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()
Private etiqok

Moveto "Confcfc"  SetaCorRegistro("Padrao")
Moveto "Confcfi"

While True
  Calc_Itens()

  Moveto [Codigo do Item]
  End
  if not isblank([Codigo do Item])
     then Down
  endif   

  CHAVEI=1
  SetaCorRegistro("Editar")
  While True
    TECLA= " F7=Paginar  PgDn=Finalizar  "
    MSGCAMPO=""
     
    If Not Ler_CDBarras(22,00) 
       Then Del
            OPCHAVEI="CDC"
            CHAVEI=7
            Return
       Else CDBarras()
            QuitLoop
    EndIf
  EndWhile  
EndWhile    

EndProc   ; (ChaveCdBar)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()
Moveto "Confcfi"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Moveto "Confcfc"
Del
EndProc   ; (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
Moveto "Confcfi"
CODIT=[Codigo do Item]
Del
EndProc  ; (Exclusao_I)

;*******************************************************************************
;* Rotina para Carregar Pedido                                                 *
;*******************************************************************************
Proc Carrega_Nota()
Private codite

Moveto "Notai"
Moveto [Numero do Documento]
Locate [Confcfc->Numero do Documento]
If RetVal
   Then While [Numero do Documento] = [Confcfc->Numero do Documento]
          If [Codigo da Empresa ] = [Confcfc->Codigo da Empresa ] And 
             [Serie do Documento] = [Confcfc->Serie do Documento]
             Then QuitLoop
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next [Confcfc->Numero do Documento]
          If Not RetVal
             Then QuitLoop
          EndIf   
        EndWhile
   Else Moveto "Confcfi"
        Return
EndIF        

Moveto "Confcfi"
Scan
  [Quantidade_Cupom]=BlankNum()
EndScan

while RecordStatus("New")=True
   Del
Endwhile        

Moveto "Notai"
While [Numero do Documento] = [Confcfc->Numero do Documento] And
      [Codigo da Empresa  ] = [Confcfc->Codigo da Empresa  ] And 
      [Serie do Documento ] = [Confcfc->Serie do Documento ] 
      
      If [Notai->Quantidade] > 0 And [Notai->Situacao_Item]<>"C"
         Then Moveto "Confcfi"
              Moveto [Codigo do Item]
              Locate [NotaI->Codigo do Item]
              If Not RetVal
                 Then End
                      If [Referencia]<>"" Or [Codigo do Item]<>""
                         Then Down
                      EndIf   
                      [Codigo do Item   ]=[NotaI->Codigo do Item]
								 Else codite=[Codigo do Item]
										  [Codigo do Item   ]=""
										  [Codigo do Item   ]=codite
							EndIf        
                      
              [Quantidade_Cupom]=[Quantidade_Cupom]+[Notai->Quantidade]
              UnLockRecord
            
              Moveto "NotaI"
      EndIf
      Skip
      If EOT() Then QuitLoop Endif
EndWhile

Moveto "Confcfi"
Scan
  Acerta_Item()
EndScan
Calc_Itens()

GetRecord "NotaC" [Confcfc->Codigo da Empresa],[Confcfc->Numero do Documento],[Confcfc->Serie do Documento] To REG_NOTAC
If RetVal
  Then Moveto "Confcfc"
       If [Codigo da Empresa      ]<>REG_NOTAC["Codigo da Empresa"]       Then [Codigo da Empresa      ]=REG_NOTAC["Codigo da Empresa"]       EndIf
       If [Nome Fantasia Empresa  ]<>REG_NOTAC["Nome Fantasia Empresa"]   Then [Nome Fantasia Empresa  ]=REG_NOTAC["Nome Fantasia Empresa"]   EndIf
       If [Codigo                 ]<>REG_NOTAC["Codigo"]                  Then [Codigo                 ]=REG_NOTAC["Codigo"]                  EndIf
       If [Razao Social           ]<>REG_NOTAC["Razao Social"]            Then [Razao Social           ]=REG_NOTAC["Razao Social"]            EndIf
EndIf

Moveto "Confcfi"

EndProc ;Carrega_Nota()
 
;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars AutoLib, ErrorProc, FORMMANUTENCAO

View "NotaC"     
CoEdit NoWindow "Confcfc"
If FORMMANUTENCAO="4"
   Then Moveto [Quantidade_Cupom     ] Menu {Image} {Format} Enter {Fixed} {3}
        Moveto [Quantidade_Conferido ] Menu {Image} {Format} Enter {Fixed} {3}
        Moveto [Quantidade_Diferenca ] Menu {Image} {Format} Enter {Fixed} {3}
EndIf

;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll

        Release Vars All
        Release Procs All
        return false
EndIf

PickForm FORMMANUTENCAO
Moveto "\\Sistemas\\Estoque\\Itens" SetaCorRegistro("Invisivel")
Moveto "NotaI"                      SetHighLight Current Record 119 Field 119

Moveto "Confcfi" 

If FORMMANUTENCAO="4"
   Then Moveto [Quantidade_Cupom    ] Menu {Image} {Format} Enter {Fixed} {3}
        Moveto [Quantidade_Conferido] Menu {Image} {Format} Enter {Fixed} {3}
        Moveto [Quantidade_Diferenca] Menu {Image} {Format} Enter {Fixed} {3}
EndIf

Moveto "Confcfc"

Return True

EndProc   ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
FACA_DIGITAC=True

OPCHAVEI="CDB"

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then Controle_Dia()
          [Situacao da Conferencia]="EM ABERTO"
          Carrega_Nota()
  EndIf
  While FACA_CHAVEI
    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
      EndIf
    EndWhile
  EndWhile
EndWhile
Moveto "Confcfc" 
If CHAVEC=8 Then EXCLUSAO_C() EndIf

If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM=FORMRELACAO
   Then PickForm FORMRELACAO
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina para Verificar se Conteudo do Campo e Numero V lido                  *
;*******************************************************************************
Proc E_NumeroValidoV(Valor)
Private Valor,c,p,r      

If Len(Valor)=0
   Then Return False
EndIf

p=0
r=0

For c From 1 to Len(Valor)
 If SubStr(Valor,c,1)<"0" Or SubStr(Valor,c,1)>"9"
    Then If SubStr(Valor,c,1)=","
            Then p=p+1
            Else If SubStr(Valor,c,1)="-"  
                    Then r=r+1
                    Else Return False
                 EndIf   
         EndIf
 EndIf
EndFor

If p>1 or r>1
   Then Return False
EndIf

If r=1 And SubStr(Valor,1,1)<>"-"
   Then Return False
EndIf

p=searchfrom(",",valor,1)
If p>0
   Then If p=Len(Valor) Or
           p<(Len(Valor)-3)
           Then Return False
        EndIf
EndIf

Return True
EndProc

;*******************************************************************************
;* Rotina para Verificar se Conteudo do Campo e Numero V lido                  *
;*******************************************************************************
Proc Cnv_NumeroV(Valor)
Private Valor,c,s      

s=""
For c From 1 to Len(Valor)
  switch
    case substr(valor,c,1)="," : s=s+"."
    case substr(valor,c,1)="." : s=s+","
    otherwise                  : s=s+substr(valor,c,1) 
  endswitch
endfor

return numval(s)
EndProc

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Bloq,"+
        "\\Sistemas\\Vendas\\Bib_Bal"
        
SYS_VALOR()

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""  EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""   EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""   EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""   EndIf
If Not IsAssigned(NOMEMPRESA)          Then NOMEMPRESA=""           EndIf

FORMRELACAO    = "F"
FORMMANUTENCAO = "1"

If Not Carrega_Tabelas()
   Then Return
EndIf

Moveto "\\Sistemas\\Estoque\\Itens"  SetaCorRegistro("Invisivel")
Moveto "Notai"                       SetaCorRegistro("Invisivel")

Moveto "Confcfc"
PickForm FORMRELACAO
OPCAO_FORM = FORMRELACAO

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM=FORMRELACAO
             Then PickForm FORMRELACAO
             Else PickForm FORMMANUTENCAO
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
