;** Expedic ********************************************************************
;*  Digitacao de Ordem de Expedicao                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 18/02/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 08/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 24/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F7
;Ultima Alteracao: 17/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_Pedido()
;Ultima Alteracao: 09/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item SORTIDO LUPUS
;Ultima Alteracao: 13/04/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes para Impress„o de Posi‡„o Expedi‡„o
;Ultima Alteracao: 12/05/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Relat˘rios Grade por Cor
;Ultima Alteracao: 03/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item SORTIDO LUPUS
;Ultima Alteracao: 24/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes expedicao sem PEDIDO
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Rotina de C˘digo de Barras
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 09/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sortidas para Isabela Garcia
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 21/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SORTIDOS Isabela Garcia
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C˘digo de Barras  
;Ultima Alteracao: 18/07/2011 por Karina Andrade
;Motivo Alteracao: Add controle qtdade expedida e inclusao de item 
;Ultima Alteracao: 12/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes controle qtdade expedida e inclusao de item 
;Ultima Alteracao: 11/10/2011 por Karina Andrade
;Motivo Alteracao: Ajustes controle qtdade expedida e inclusao de item 
;Ultima Alteracao: 26/01/2012 por Bruno Carvalho
;Motivo Alteracao: P_Pedido n estava sendo aberta ao carregar o form ap˘s impressĆo!  
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Expedicao                           *
;*******************************************************************************
Proc CHAVEC()
FACA_DIGITAC=True
FACA_CHAVEI =True
INICIO_PAGINA=True

While True
  Moveto "ExpedC"
  Moveto [Numero da OE]
  End
  Moveto [Numero da OE]
  ORDEXP=[Numero da OE]

  If OPCAO_FORM="F"
    Then Down
    Else PgDn 
  EndIf
  Moveto [Numero da OE]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

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

                          ORDEXP=[Numero da OE]
                          Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             Case EXCLUIR="S":
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia]) And
                     (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                     Then If [Situacao da OE]="FATURADO"
                             Then Mensagem("Esta Ordem de Expedi‡„o n„o pode ser excluida !// J  foi FATURADO !")
                                  UnLockRecord
                             Else If QuerExcluir("")
                                     Then EXCLUSAO_C()
                                     Else UnLockRecord
                                  EndIf
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="1"
              Then PickForm "1"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If IsBlank([])
            Then If IsBlank(ORDEXP)
                    Then ORDEXP="1"
                    Else ORDEXP=StrVal(NumVal(ORDEXP)+1)
                 EndIf
                 []=ORDEXP
         EndIf
         []=ALINH()
         ORDEXP=[]
         Del
         PickForm "1"
         Moveto [Numero da OE]
         Locate ORDEXP
         If Retval
            Then CHAVEC=0
            Else CHAVEC=1
                 End
                 If Not IsBlank([Numero da OE])
                    Then PgDn
                 EndIf
                 Moveto [Numero da OE]
                 [Numero da OE]=ORDEXP
         EndIf
         If Not IsLockRecord()
            Then Echo Normal
                 Echo Off
                 If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                    (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                    Then Return
                 EndIf
         EndIf
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

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

If INICIO_PAGINA
   Then
        If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf

        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
        EndIf
        If [Situacao da OE]="FATURADO"
           Then MSG_T="Esta Ordem de Expedi‡„o j  foi FATURADO !//"
                Mensagem(MSG_T)
                If Not CHECA_SUPERVISOR()
                   Then CHAVEC=9
                        Return
                EndIf
        EndIf
EndIf
If CHAVEC=0 Or Not INICIO_PAGINA
   Then Moveto [Numero_Carregamento]
   Else Moveto [Numero do Pedido]
EndIf

FACA_CHAVEI=True
INICIO_PAGINA=False

While True

  TECLA=" Esc=Retornar  "
  If Field()="Numero do Pedido"    Or       
     Field()="Numero_Carregamento" Or      
     Field()="Codigo"         
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf

  MSGCAMPO=Field()
  If Field()="Razao Social"
     Then MSGCAMPO="Observa‡Ćo"
  EndIf   

  Prompt TECLA
  Wait Field
       Message MSGCAMPO
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35"

  Switch
  Case RetVal="F1":
       If Field()="Numero do Pedido"    Or       
          Field()="Numero_Carregamento" Or      
          Field()="Codigo"         
          Then CONSULTAF1()
        EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("")
                  Then EXCLUSAO_C()
                       CHAVEC=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Numero do Pedido":
            If QuerDesfazer("")
               Then EXCLUSAO_C()
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Numero_Carregamento":
            If CHAVEC=1
               Then Moveto [Numero do Pedido]
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       Case Field()="Codigo"      : Moveto [Numero_Carregamento]
       Case Field()="Razao Social": Moveto [Codigo]
       OtherWise                  : Left
       EndSwitch
  Case Retval="ENTER":
       Switch
       Case Field()="Numero do Pedido":
            If Not IsBlank([])
               Then If CHAVEC=1
                       Then If [Situacao do Pedido]<>"ABERTO"
                               Then Mensagem("Verificar a Situa‡„o do Pedido !//Status="+[Situacao do Pedido])
                                    Loop
                            EndIf

                            If Not Carrega_Parametros()
                               Then Loop
                            EndIf
                    EndIf
            EndIf

            Moveto [Numero_Carregamento]
       Case Field()="Numero_Carregamento":
            If IsBlank([Numero do Pedido])
               Then Moveto [Codigo]
               Else QuitLoop
            EndIf   
       Case Field()="Codigo":
            If IsBlank([])
               Then Moveto [Razao Social]
               Else QuitLoop
            EndIf   
       Case Field()="Razao Social":
            QuitLoop
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)


;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc ChaveI()
Moveto "ExpedI"

While True
  Calc_Itens()

  Moveto [Codigo do Item]
  End
  Down

  SetaCorRegistro("Editar")
  While True

    TECLA= " Esc=Retornar  F1=Tabelas  F7=Paginar  Alt+F=Fun‡”es  PgDn=Finalizar  "

    Prompt TECLA

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

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F2  ~A~tiva lan‡amentos   " : " Ativa lan‡amentos                              " : "F2",
              "F5  ~R~ecarregar Pedido   " : " Recarregar itens do Pedido                     " : "F5",
              "F6  ~I~mprimir            " : " Imprimir Rela‡„o de Itens                      " : "F6",              
              ;"F9  ~E~ditar              " : " Editar Itens                                   " : "F9",
              "F10 ~L~iberar Ordem       " : " Ordem de Expedi‡„o Liberada                    " : "F10",
              "~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="F1":
         If Field()="Codigo do Item"         
            Then CONSULTAF1()
         EndIf
    Case Retval="F2":
         Del
         CDBarras()
         QuitLoop   
    Case Retval="F5":
         Del
         Carrega_Pedido()
         QuitLoop
    Case RetVal="F6" :
         Del
         If IMPRIME() 
            Then
               FACA_CHAVEI =False
               FACA_DIGITAC=False
               CHAVEI=9
               Return        
               Quitloop
            Else Quitloop EndIf         
    Case Retval="PGDN":
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Expedi‡„o deve ter pelo menos 1(um) Item Ok !")
         EndIf
         FACA_CHAVEI =False
         FACA_DIGITAC=False
         CHAVEI=9
         Return
    Case Retval="F10":
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Expedi‡„o deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf
         Moveto "ExpedC"
         [ExpedC->Situacao da OE]="LIBERADO"
         [Data_Liberacao]=Today()
         [Hora_Liberacao]=Time()
         
         Moveto "ExpedI"
         FACA_CHAVEI =False
         FACA_DIGITAC=False
         CHAVEI=9
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         While True
           PAGINA("ExpedI","MR")
           If EDITAR="S"
              Then CHAVEI=0
                   Mensagem("Edi‡„o n„o permitida !")
              Else If EXCLUIR="S" And [Quantidade_Pedido]<=0
                      Then If QuerExcluir("")
                              Then CHAVEI=8
                                   EXCLUSAO_I()
                                   Calc_Itens()
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
         
    Case Retval="ESC":  
         Del
         Moveto [Codigo do Item]
         If RecordStatus("New")=True
            Then FACA_CHAVEI =False
                 FACA_DIGITAC=False
                 CHAVEC=8 
         EndIf
         CHAVEI=9
         Return
         
   ;Case Retval="ENTER":
   ;     CODIT=[Codigo do Item]
   ;     Del
   ;     Locate ORDEXP,CODIT
   ;     If Retval
   ;        Then CHAVEI=0
   ;             CODIT=[]
   ;        Else CHAVEI=1
   ;             End
   ;             Down
   ;             [Numero da OE  ]=ORDEXP
   ;             [Codigo do Item]=CODIT
   ;             UnLockRecord
   ;             Locate ORDEXP,CODIT
   ;     EndIf
   ;     Return 
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC

Moveto "ExpedC"
        Echo Normal
        Echo Off
        ShowPopup " Impress„o " CENTERED
          "Quantidade do P~e~dido/Expedi‡„o          " : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o    " : "IRP",
          "Quantidade ~P~endente da Epedi‡„o         " : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o " : "IRPP",
          "~C~ancelar                                " : " Cancelar a Opera‡„o                             " : "Cancelar" 
        EndMenu
        To Opcaoc
        echo off

        If OPCAOC="Cancelar" or OPCAOC="Esc"
           Then Return false
        EndIf

        If Opcaoc="IRP" Then 
           Echo Normal
           Echo Off
           ShowPopup " Impress„o " CENTERED
             "Modo ~S~imples"        : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o em Modo Simples       " : "IRPMS",
             "Modo ~G~rade  "        : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o em Modo Grade         " : "IRPMG",
             "Modo Grade p/ C~o~r  " : " Imprime Rela‡„o de Itens do Pedido/Expedi‡„o em Modo Grade por Cor " : "IRPMGC",
             "~C~ancelar    "        : " Cancelar a Opera‡„o                                                " : "Cancelar" 
           EndMenu
           To Opcaoc
           echo off
           
           If OPCAOC="Cancelar" or OPCAOC="Esc"
              Then Return False
           EndIF

              Do_It!
              Dispositivo()
              If OK=""
                 Then CoEditKey
                      Return False
              EndIf
          
              If Opcaoc="IRPMS"  Then Play("OE_0001") EndIf
              If Opcaoc="IRPMG"  Then Play("OE_0003") EndIf
              If Opcaoc="IRPMGC" Then Play("OE_0005") EndIf

        EndIF
        
           If Opcaoc="IRPP" Then
              Echo Normal
              Echo Off
              ShowPopup " Impress„o " CENTERED
                "Modo ~S~imples"        : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o em Modo Simples       " : "IRPPMS",
                "Modo ~G~rade  "        : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o em Modo Grade         " : "IRPPMG",
                "Modo Grade p/ C~o~r  " : " Imprime Rela‡„o de Itens Pendentes da Expedi‡„o em Modo Grade por Cor " : "IRPPMGC",
                "~C~ancelar    "        : " Cancelar a Opera‡„o                                                   " : "Cancelar" 
              EndMenu
              To Opcaoc
              Echo off
           
           If OPCAOC="Cancelar" or OPCAOC="Esc"
              Then Return False
           EndIF
           
              Do_It!
              Dispositivo()
              If OK=""
                 Then CoEditKey
                      Return False
              EndIf
          
                 If Opcaoc="IRPPMS"  Then Play("OE_0002") EndIf
                 If Opcaoc="IRPPMG"  Then Play("OE_0004") EndIf
                 If Opcaoc="IRPPMGC" 
                    Then If SYS_CODIGO_CLIENTE="0227"
                            Then Play("OE_0007") ;Mesmo modelo "OE_0006", por‚m com Observa‡Ćo
                            Else Play("OE_0006") 
                         EndIf 
                 EndIf
                 
          EndIF
Do_It!
ClearAll

View NoWindow "P_Pedido"
Coedit NoWindow "ExpedC"
PickForm "R"
Return True

EndProc ;Imprime

;*******************************************************************************
;* Rotina para Digita Item                                                     *
;*******************************************************************************
Proc DigitaI()
Moveto [Quantidade_Expedida]
While True

      TECLA=" Esc=Retornar  "

      If CHAVEI=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf
      MSGCAMPO=Field()

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35"

      Switch
      Case Retval="ESC":
           If Field()="Quantidade_Expedida"
              Then If QuerDesfazer("")
                      Then If CHAVEI=1
                              Then Del
                              Else Undo
                           EndIf
                           QuitLoop
                   EndIf
              Else Left
           EndIf
      Case Retval="ENTER":
           If Field() = "Quantidade_Expedida"
              Then If [Quantidade_Expedida]>1000
                      then Mensagem("Quantidade Inv lida !")
                           Loop
                   EndIf
                   [Quantidade_Diferenca]=[Quantidade_Expedida]-[Quantidade_Pedido]
                   If [Quantidade_Diferenca]=0
                      Then [Quantidade_Diferenca]=BlankNum()
                   EndIf
                   If [Quantidade_Diferenca]>0
                      Then [Quantidade_Fora_Pedido]=[Quantidade_Diferenca]
                      Else [Quantidade_Fora_Pedido]=BlankNum()
                   EndIf
                   If [Quantidade_Expedida]=0
                      Then [Quantidade_Expedida]=BlankNum()
                   EndIf
									 UnLockRecord
                   QuitLoop
              Else Right
           EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEI=0 And [Quantidade_Pedido]<=0
              Then If QuerExcluir("")
                      Then DEL
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc   ; (DigitaI)

;*******************************************************************************
;* Rotina para Digitacao dos Precos                                            *
;*******************************************************************************
Proc Editar()
Home
Moveto [Quantidade_Expedida]

While True

      TECLA=" Esc=Retornar  Del=Excluir   (Use as Teclas p/ mover)"
      MSGCAMPO=Field()

      VRANT=[Quantidade_Expedida]

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","UP","DOWN","PGUP","PGDN","HOME","END","DEL","RIGHT","LEFT"

      Switch
      Case Retval="ESC":
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL" And [Quantidade_Pedido]<=0:
           If QuerExcluir("")
              Then DEL
                   Calc_Itens()
                   If RecordStatus("New")
                      Then QuitLoop
                   EndIf
           EndIf
      OtherWise:
           TECLAPRESS=RetVal

           If [Quantidade_Expedida]<>VRANT
              Then [Quantidade_Expedida ]= [Quantidade_Expedida]+Dados_QTD
									 Acerta_Item()
                   Calc_Itens()
           EndIf      

           If TECLAPRESS="LEFT" And Field()="Quantidade_Expedida"
              Then Loop
           EndIf
           If (TECLAPRESS="ENTER" or  TECLAPRESS="RIGHT") And Field()="Quantidade_Expedida"
              Then Down
                   Moveto [Quantidade_Expedida]
              Else KeyPress TECLAPRESS
            EndIf
            If RecordStatus("New")
               Then Del
                    QuitLoop
            EndIf
      EndSwitch
EndWhile
EndProc ; (Editar)

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private cc
 
While True
  
  Moveto [Quantidade_Expedida]
  
  If Not Ler_CDBarras(22,00)
     Then Return False
  EndIf

  CODIT=Dados_Item
  ITOK=True
  INCLUI=False  
  
  Moveto "\\Sistemas\\Estoque\\Itens"
  If Len(CODIT)<=10
     Then Moveto [Codigo do Item]
          Locate ALINHM(CODIT,10)
     Else Moveto [Codigo de Barras]
          Locate IndexOrder by "cod_barras" CODIT
  EndIf
  
  If RetVal
     Then CopyToArray REG_BUSCA_LOOKUP
          CODIT=[Codigo do Item   ]
          If [Inativo]="S"
             Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                  ITOK=False
          EndIf
     Else Mensagem("Item n„o cadastrado !")
          ITOK=False
  EndIf
  
  Moveto "ExpedI"

  If Not ITOK
     Then Loop
  EndIf

  CODITANT=CODIT
  cl=0
  While True
		cl=cl+1      

    If Dados_QTD>0
       Then ITOK=False
            Moveto [Codigo do Item]
            Locate CODIT
            If Not RetVal
               Then If Not IsBlank([Expedc->Numero do Pedido])
                      Then If PARAM_INCLUI_ITEM="N"
                            Then Switch
                                  Case SYS_CODIGO_CLIENTE="0222":
                                    If cl=1
                                       Then CODIT=SubStr(CODIT,1,7)+"9" +SubStr(CODIT,9,2)
                                            Loop
                                       Else CODIT=CODITANT     
                                    EndIf
                                  Case SYS_CLIENTE_CONFEC="0079":
                                    If cl=1
                                       Then CODIT=SubStr(CODIT,1,6)+"99"+SubStr(CODIT,9,2)
                                            Loop
                                       Else CODIT=CODITANT     
                                    EndIf
                                 EndSwitch 
                            Else End Down 
                                 [Codigo do Item]=CODIT
                                 ITOK=True
                                 INCLUI=True 
                                 QuitLoop
                           EndIf      
                      Else End Down 
                           [Codigo do Item]=CODIT
                           ITOK=True 
                           QuitLoop
                    EndIf        
               Else ITOK=True
                    If IsBlank([Quantidade_Pedido]) And PARAM_INCLUI_ITEM="S"
                      Then INCLUI=True
                    EndIf  
            EndIf
       Else
            If cl=1
               Then If Not IsBlank([Expedc->Numero do Pedido])
                      Then Switch
                            Case SYS_CODIGO_CLIENTE="0222":
                              CODIT=SubStr(CODIT,1,7)+"9" +SubStr(CODIT,9,2)
                              Loop
                            Case SYS_CLIENTE_CONFEC="0079":
                              CODIT=SubStr(CODIT,1,6)+"99"+SubStr(CODIT,9,2)
                              Loop
                           EndSwitch
                    EndIf        
            EndIf

            ITOK=False
            Moveto [Codigo do Item]
            Locate CODIT
            If Not RetVal
               Then Switch
                      Case Not IsBlank([Expedc->Numero do Pedido]) And 
                           SYS_CODIGO_CLIENTE="0222" Or
                           SYS_CLIENTE_CONFEC="0079":
                        If cl=2
                           Then CODIT=CODITANT
                                Loop
                        EndIf
                    EndSwitch
                    Mensagem("O item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // nĆo existe nesta expedi‡Ćo !")
               Else ITOK=True
            EndIf

    EndIf

		QuitLoop
	EndWhile

  If Not IsBlank([Expedc->Numero do Pedido])
    Then qtdeDif=[Quantidade_Diferenca]*-1
         If qtdeDif<0
           Then qtdeMsg=Dados_QTD
           Else qtdeMsg=Dados_QTD-qtdeDif
         EndIf  
    
         IF ITOK And Dados_QTD>qtdeDif 
         Then If PARAM_ALTERA_QTDE="N" And INCLUI=False
                Then MSG="Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODIT+"// //"
                     MSG=MSG+"Informado "+StrVal(qtdeMsg)+" "+REG_BUSCA_LOOKUP["Unidade Fiscal"]
                     MSG=MSG+" a mais que a quantidade pedida !// //"
                     If [Quantidade_Diferenca]>=0 or [Quantidade_Diferenca]=BlankNum()
                      Then Mensagem(MSG+"InclusĆo bloqueada!")
                           Loop 
                      Else If ConfGeral(MSG+"Deseja incluir somente quantidade pedida?")
                            Then Dados_QTD=qtdeDif   
                            Else Loop
                           EndIf 
                     EndIf      
              EndIf 
        EndIf
  EndIf
  
                       
  Switch
    Case ITOK And 
         (SYS_CODIGO_CLIENTE="0079" Or
          SYS_CLIENTE_CONFEC="0222"): 
      While True
        If Dados_QTD>0
           Then If cl=1 or cl=3
                   Then [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
                   Else [Quantidade_Substituida]=[Quantidade_Substituida]+Dados_QTD
                EndIf
                Acerta_Item()
  
                If [Quantidade_Diferenca]>0 and cl=1
                  Then [Quantidade_Expedida   ]=[Quantidade_Expedida   ]-Dados_QTD
                       Acerta_Item()
  
                       If Not IsBlank([Expedc->Numero do Pedido])
                        Then cl=2
                             Switch
                               Case SYS_CODIGO_CLIENTE="0222": CODIT=SubStr(CODIT,1,7)+"9" +SubStr(CODIT,9,2)
                               Case SYS_CLIENTE_CONFEC="0079": CODIT=SubStr(CODIT,1,6)+"99"+SubStr(CODIT,9,2)
                             EndSwitch
        
                             Moveto [Codigo do Item]
                             Locate CODIT
                             If RetVal
                                Then Loop
                             EndIf
                       EndIf      
                       cl=3
                       CODIT=CODITANT
                       Moveto [Codigo do Item]
                       Locate CODIT
                       Loop
                EndIf
           Else
                If cl=2
                   Then [Quantidade_Substituida]=[Quantidade_Substituida]+Dados_QTD
                   Else If [Quantidade_Expedida   ]<=(Dados_QTD*-1) And IsBlank([Expedc->Numero do Pedido])
                          Then ConfGeral("A quantidade a ser deduzida ["+StrVal(Dados_QTD*-1)
                                         +"]// ‚ igual ou maior "
                                         +"a quantidade j  expedida ["+StrVal([Quantidade_Expedida])+"]. // //"
                                         +"Deseja exluir o item "+CODIT+"?")
                                      If OK="S" Then del EndIf
                               ;conferir 
                          Else [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
                        EndIf  
                EndIf
                Acerta_Item()
                ;conferir
                If Not IsBlank([Quantidade_Substituida]) And
                   [Quantidade_Substituida]<0 and cl=2
                   Then [Quantidade_Substituida ]=[Quantidade_Substituida]-Dados_QTD
                        Acerta_Item()
  
                        cl=3
                        CODIT=CODITANT
                        Moveto [Codigo do Item]
                        Locate CODIT
                        Loop
                EndIf
  
        EndIf
  
  			QuitLoop
  		EndWhile 
      If Dados_QTD>0
         Then If [Quantidade_Diferenca]>0
                Then MSG="Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODITANT+"// //"
                     MSG=MSG+" inseriu "+StrVal([Quantidade_Diferenca])+" a mais que quantidade pedida !//"
                     If Not ConfGeral(MSG+"Deseja realmente informar a mais ?")
                        Then If cl=1 or cl=3
                                Then [Quantidade_Expedida   ]=[Quantidade_Expedida   ]-Dados_QTD
                                Else [Quantidade_Substituida]=[Quantidade_Substituida]-Dados_QTD
                             EndIf
  
                             Acerta_Item()
                             ITOK=False
                     EndIf
              EndIf
  
              If ITOK and cl=2
                 Then Locate CODITANT
                      If Not RetVal
                         Then End
                              Down
                              [Codigo do Item]=CODITANT
                      EndIf
                      [Quantidade_Substituida]=[Quantidade_Substituida]-Dados_QTD
                      [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
                      Acerta_Item()
              EndIf
  
         Else
              If Not IsBlank([Quantidade_Expedida]) And
                 [Quantidade_Expedida]<0
                 Then MSG="Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODITANT+"// //"
                      MSG=MSG+"nĆo tem mais o que deduzir !"
                      Mensagem(MSG)
                      [Quantidade_Expedida   ]=[Quantidade_Expedida   ]-Dados_QTD
                      Acerta_Item()
                      ITOK=False
              EndIf
  
              If ITOK and cl=2
                 Then Locate CODITANT
                      If Not RetVal
                         Then End
                              Down
                              [Codigo do Item]=CODITANT
                      EndIf
                      [Quantidade_Substituida]=[Quantidade_Substituida]-Dados_QTD
                      [Quantidade_Expedida   ]=[Quantidade_Expedida   ]+Dados_QTD
                      Acerta_Item()
  
              EndIf
  
      EndIf
      Calc_Itens()
  
      Moveto [Codigo do Item]
      Locate CODIT
  
    Case ITOK:
      Switch
        Case IsBlank([Quantidade_Expedida]) And Dados_QTD<0:
             MSG="Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODITANT+"// //"
             MSG=MSG+"nĆo existe quantidade a ser deduzida !"
             Mensagem(MSG)
        Case Dados_QTD<0 And [Quantidade_Expedida   ]<=(Dados_QTD*-1) And IsBlank([Quantidade_Pedido]):
             ConfGeral("A quantidade a ser deduzida ["+StrVal(Dados_QTD*-1)
                       +"]// ‚ igual ou maior "
                       +"a quantidade j  expedida ["+StrVal([Quantidade_Expedida])+"]. // //"
                       +"Deseja exluir o item "+CODIT+"?")
                       If OK="S" Then del EndIf
        OtherWise:         
             [Quantidade_Expedida ]= [Quantidade_Expedida]+Dados_QTD
             Acerta_Item()
          
             Calc_Itens()
             Moveto [Codigo do Item]
             Locate CODIT
      EndSwitch       
    Case Not ITOK:
      OK="S"
      If Not IsBlank([ExpedC->Numero do Pedido]) And Dados_QTD>0
         Then MSG="Neste Pedido n„o tem o Item informado !// //"
              MSG=MSG+"Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODIT+"// //"
              If PARAM_INCLUI_ITEM="S"
               Then MSG=MSG+"Confirma inclus„o deste Item ?"
             	      ConfGeral(MSG)
                    If OK="S"
                      Then End
                           Down
                           [Codigo do Item]=CODIT
                           [Quantidade_Expedida ]= [Quantidade_Expedida]+Dados_QTD
                           Acerta_Item()
                    
                           Calc_Itens()
                           Moveto [Codigo do Item]
                           Locate CODIT
                    EndIf
               Else MSG=MSG+"InclusĆo bloqueada !"
                    Mensagem(MSG)
              EndIf
      EndIf  
  EndSwitch
EndWhile

EndProc

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Acerta_Item()
[Quantidade_Diferenca]=([Quantidade_Expedida]-[Quantidade_Pedido])+[Quantidade_Substituida]

If [Quantidade_Diferenca]=0
  Then [Quantidade_Diferenca]=BlankNum()
EndIf
If [Quantidade_Diferenca]>0
   Then [Quantidade_Fora_Pedido]=[Quantidade_Diferenca]
   Else [Quantidade_Fora_Pedido]=BlankNum()
EndIf
If [Quantidade_Expedida]=0
  Then [Quantidade_Expedida]=BlankNum()
EndIf
If [Quantidade_Substituida]=0
  Then [Quantidade_Substituida]=BlankNum()
EndIf

If IsBlank([ExpedC->Numero do Pedido])
   Then [Quantidade_Diferenca  ]=BlankNum()
        [Quantidade_Fora_Pedido]=BlankNum()
        [Quantidade_Substituida]=BlankNum()
Endif   

UnLockRecord
EndProc ;CDBarras()

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Calc_Itens()
Moveto "ExpedI"
Moveto [Quantidade_Fora_Pedido] VSQTDFP =ImageCSum()
Moveto [Quantidade_Pedido     ] VSQTDP  =ImageCSum()
Moveto [Quantidade_Expedida   ] VSQTDE  =ImageCSum()
Moveto [Quantidade_Substituida] VSQTDS  =ImageCSum()

If Not IsBlank([ExpedC->Numero do Pedido])
   Then VSQTDD=(VSQTDE-VSQTDP)+VSQTDS
   Else VSQTDD =BlankNum()
EndIf   

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

Moveto "ExpedC"
[Quantidade_Pedido     ]=VSQTDP
[Quantidade_Expedida   ]=VSQTDE
[Quantidade_Diferenca  ]=VSQTDD
[Quantidade_Fora_Pedido]=VSQTDFP
[Quantidade_Substituida]=VSQTDS

Moveto "ExpedI"
EndProc   ; (ChaveCdBar)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()
Moveto "ExpedI"
FACA_DIGITAF=True
Return

EndProc   ; (ChaveCdBar)

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

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

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

Moveto "ExpedI"
If RecordStatus("New")=True
   Then Del
   Else Scan
          [Quantidade_Pedido]=BlankNum()
        EndScan
EndIf        

Moveto "PedidoI"
Moveto [Numero do Pedido]
Locate [ExpedC->Numero do Pedido]
If Not RetVal
   Then Moveto "ExpedI"
        Return
EndIf

While [Numero do Pedido]=[ExpedC->Numero do Pedido]

  If IsBlank([Quantidade Faturada]) Or
     [Quantidade Faturada]>=0
     Then
          SDPED=[Pedidoi->Quantidade]-[PedidoI->Quantidade Faturada]
          If SDPED>0
             Then
                  Moveto "ExpedI"
                  Moveto [Codigo do Item]
                  Locate [PedidoI->Codigo do Item]
                  If Not RetVal
                     Then End
                          Down
                          [Codigo do Item   ]=[PedidoI->Codigo do Item]
										 Else codite=[Codigo do Item   ]
												  [Codigo do Item   ]=""
												  [Codigo do Item   ]=codite
									EndIf        
                          
                  [Quantidade_Pedido]=[Quantidade_Pedido]+SDPED
                  UnLockRecord
                
                  Moveto "PedidoI"
          EndIf
  EndIf
  
  Skip
  If EOT() Then QuitLoop Endif
EndWhile

Moveto "ExpedI"
Scan
  Acerta_Item()
EndScan
Calc_Itens()
EndProc ; (Carrega_Pedido)

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

If IsEmpty("P_Pedido")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Result=False
   Else 
        UnLockRecord
        KeyPress "F7"
        While True
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndWhile
        
        Moveto "P_Pedido"
        Moveto [Codigo_Empresa]
        Locate [Expedc->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else     
                PARAM_ALTERA_QTDE = [Altera_Qtde_Expedic]
                PARAM_INCLUI_ITEM = [Inclui_Item_Expedic] 

                Result=True
        EndIf
EndIf

Moveto "Expedc"
KeyPress "F7"

Return Result
EndProc ; (Carrega_Parametros)

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

EndProc   ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
DIGITAI()
Calc_Itens()
EndProc

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

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then Controle_Dia()
          [Situacao da OE]="EM ABERTO"
          Carrega_Pedido()
  EndIf
  While FACA_CHAVEI
    While True
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      Controla_EdicaoI()
    EndWhile
  EndWhile
EndWhile
Moveto "ExpedC" 
If CHAVEC=8 Then EXCLUSAO_C() EndIf

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

SaveTables
EndProc

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Vendas\\Bib_Bal"
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(SYS_VERSAO_SO)       Then SYS_VERSAO_SO="Windows" EndIf
If Not IsAssigned(NOMEMPRESA)          Then NOMEMPRESA=""           EndIf

Carrega_Tabelas()

View NoWindow "P_Pedido"
CoEdit NoWindow "ExpedC"

;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

PickForm "1"
Moveto "Pedidoi"   SetHighLight Current Record 119 Field 119
Moveto "ExpedC"
PickForm "F"
OPCAO_FORM        = "F"

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