;** DES_PED ********************************************************************
;** Pedidos p/ Desmembramento                                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 27/03/2018 por Bruno Carvalho
;Ultima Alteracao:   /  /     por                             
;Motivo Alteracao:   
 
;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()

While True
  Moveto [Sequencia]
  End
  CODIGO=[Sequencia]
  Down Down
  CODIGO=CODIGO+1
  [Sequencia]=CODIGO
  Moveto [Sequencia]
  SetaCorRegistro("Editar")
  While true
      If Field()="Sequencia"
         Then Prompt " Esc=Sair                  Alt+F=Fun‡”es"
         Else Prompt " Esc=Retornar  F1=Tabelas  Alt+F=Fun‡”es"
      EndIf

      TECLA=""
      AguardaTeclasPadrao()
            
      If SubStr(RetVal,1,2)="-1"      
         Then SYS_TECLA_ACIONADA=RetVal 
              Seta_Tecla_Acionada()     
              RetVal="ESC"            
      EndIf
      
      If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED              
              "F3  ~L~impar        " : " Limpar a Rela‡„o de Pedidos   " : "F3",
              "F5  ~D~esmembrar    " : " Desmembramento de Pedidos     " : "F5",
              "F6  ~I~mprimir      " : " Imprimir pedidos desmembrados " : "F6",
              "F7  ~S~ele‡„o       " : " Sele‡„o de Pedidos            " : "F7",
              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="F1"And Field()="Numero do Pedido":
           CONSULTAF1()
      Case RetVal="F3"And Field()="Sequencia":
           Del
           CONFIRMA()
           If OK="S"
              Then EXCLUSAO()
                   QuitLoop
           EndIf
       Case RetVal="F5" Or Retval =-63 :
            Del
            If Desmembramento_Pedido()
               Then Mensagem("Desmembramento processado com sucesso!")
                    If [Numero do Pedido]="" Then Del EndIf     
            EndIf
            QuitLoop
       Case RetVal="F6" Or Retval =-64:
            Del
            Imprimir()
            QuitLoop
       Case RetVal="F7" Or Retval =-65:
            Del
            Selecao()
            QuitLoop
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" And Field()="Sequencia":
           Del
           While True
             PAGINA("DP_REL","MR")
             If EXCLUIR="S"
                Then CONFIRMA()
                     If OK="S"
                        Then Del
                     EndIf
                Else If EDITAR<>"S"
                        Then QuitLoop
                        Else Edita_Entrega()
                     EndIf   
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           If Field()="Numero do Pedido"
              Then If CHAVE=1
                      Then Del
                   EndIf
                   QuitLoop
           EndIf
           CHAVE=9
           Del
           Return
      Case Retval="ENTER" :  
           If Field()="Sequencia"
              Then If IsBlank([]) Then Loop EndIf
                   CODIGO=[]
                   Del
                   Locate CODIGO
                   If Retval
                      Then CHAVE=0
                           Moveto [Numero do Pedido]
                           Loop
                      Else CHAVE=1
                           End Down Down
                           [Sequencia]=CODIGO
                   EndIf
                   If IsLockRecord()
                      Then End 
                           CODIGO=[Sequencia]
                           Down Down
                           Moveto [Sequencia]
                      Else Moveto [Numero do Pedido]
                           Loop     
                  EndIf
                                     
             Else Switch
                    Case Field()="Numero do Pedido" :
                         If IsBlank([])
                             Then Loop
                         EndIf
                         CODIGO=[Sequencia]
                         NPED=[Numero do Pedido]
                         Del
                         Locate NPED
                         If Not Retval
                            Then ;----- Ocorrˆncias de Erros -------------------
                                 GetRecord "\\Sistemas\\Vendas\\PedidoC" NPED To REG_PEDIDO
                                 If Not RetVal
                                    Then Mensagem("Pedido "+NPED+" n„o ‚ modo grade!")
                                    Else If RetVal 
                                            Then Switch
                                                   Case Search ("PEDIDO DESMEMBRADO PELO AGRUPAMENTO",REG_PEDIDO["Observacao do Pedido"])>0 :  
                                                        Mensagem("Pedido "+NPED+" j  foi desmembrado anteriormente !")  
                                                   Case Search ("PEDIDO SORTIDO DESMEMBRADO",REG_PEDIDO["Observacao do Pedido"])>0 :  
                                                        Mensagem("Pedido "+NPED+" j  foi desmembrado anteriormente !")  
                                                   Case Search ("PEDIDO DESMEMBRADO DO PEDIDO",REG_PEDIDO["Observacao do Pedido"])>0 :
                                                        Mensagem("Pedido "+NPED+" j  fez parte do desmembramento em processos anteriores !")
                                                   Case REG_PEDIDO["Situacao do Pedido"]<>"SUSPENSO" And REG_PEDIDO["Situacao do Pedido"]<>"ABERTO" :
                                                        Mensagem("Pedido "+NPED+" com a situa‡„o "+REG_PEDIDO["Situacao do Pedido"])
                                                   OtherWise : End Down Down
                                                               [Sequencia         ] = CODIGO
                                                               [Numero do Pedido  ] = NPED
                                                               [Entrega           ] = ""
                                                               [Numero de Parcelas] = BlankNum()
                                                               UnLockRecord                  
                                                 EndSwitch
                                         EndIf    
                                 EndIf 
                                 
                                 
                                                              
                            Else Mensagem("Pedido j  existe.////Sequˆncia "+StrVal([Sequencia])+" !")          
                         EndIf    
                         QuitLoop
                  EndSwitch
        EndIf
        Right
      EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina De Exclusao                                                          *
;*******************************************************************************
Proc EXCLUSAO()
Home
While RecordStatus("New")=False
  Del
EndWhile
EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona2()
ClearAll

If Upper(VSDGCIDADE)="TODAS"
   Then VSDGCIDADE2=".."
   Else VSDGCIDADE2=VSDGCIDADE
EndIf

{Ask} {\\Sistemas\\Vendas\\PedidoC} Check
Moveto [Codigo da Empresa   ] TypeIn "~VSDGEMPRESA.."
Switch
  Case VSDGOPDT="E": Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  Case VSDGOPDT="I": Moveto [Data_Inclusao      ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  Case VSDGOPDT="N": Moveto [Data de Entrega    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
EndSwitch
Moveto [Codigo              ] TypeIn "~VSDGDESTINAT.."
Moveto [Codigo da Destinacao] TypeIn "~VSDGDESTIN.."
Moveto [Cidade              ] TypeIn VSDGCIDADE2
Moveto [UF                  ] TypeIn "~VSDGESTADO.."
Moveto [Situacao do Pedido  ] 
Switch
  Case VSDGSITUACAOPEDIDO="JUNTAR ABERTO+SUSPENSO"     : TypeIn "ABERTO or SUSPENSO"
  Case VSDGSITUACAOPEDIDO="IGNORAR CANCELADO+SUSPENSO" : TypeIn "not CANCELADO, not SUSPENSO"
  Case VSDGSITUACAOPEDIDO="IGNORAR CANCELADO"          : TypeIn "not CANCELADO"
  Case VSDGSITUACAOPEDIDO<>"TODAS"                     : TypeIn "~VSDGSITUACAOPEDIDO.."
EndSwitch
Moveto [Observacao do Pedido] Check TypeIn "Not PEDIDO DESMEMBRADO"
If Not IsBlank(VSDGMARCA)
   Then Moveto [Numero do Pedido] Example "NPed"
        {Ask} {\\Sistemas\\Vendas\\PedidoI}
        Moveto [Numero do Pedido] Example "NPed"
        Moveto [Codigo do Item  ] Example "Ite" 
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item  ] Example "Ite"
        Moveto [Codigo da Marca ] TypeIn "~VSDGMARCA"        
EndIf        
Do_It!
ClearAll                                        

If VSDGOPDT="E"
   Then Return
EndIf

For i From 1 To 2
  {Ask} {Answer} TypeIn "Fast Delete"
  If i=1
     Then Moveto [Data_Inclusao          ] TypeIn "~VSDGDTINI"
          Moveto [Hora_Inclusao          ] TypeIn "<~VSDGHRINI"
     Else Moveto [Data_Inclusao          ] TypeIn "~VSDGDTFIM"
          Moveto [Hora_Inclusao          ] TypeIn ">~VSDGHRFIM"
  EndIf
  Do_It!
  ClearAll
EndFor

EndProc    ; (Seleciona)

;*******************************************************************************
;* Rotina p/ Regerar a Relacao e tirar os diferentes de ABERTO e SUSPENSO      *
;*******************************************************************************
Proc Regerar_Relacao()
ClearAll

{Ask} {\\Sistemas\\Vendas\\PedidoC}
Moveto [Numero do Pedido    ] Example "NPed"
Moveto [Situacao do Pedido  ] Example "SPed"
{Ask} {\\Sistemas\\Vendas\\DP_REL} 
Moveto [Numero do Pedido    ] Example "NPed"
Moveto [Situacao do Pedido  ] TypeIn "Changeto _SPed"
Do_It!
ClearAll

{Ask} {\\Sistemas\\Vendas\\DP_REL} TypeIn "Delete" 
Moveto [Situacao do Pedido  ] TypeIn "Not ABERTO, Not SUSPENSO"
Do_It!
ClearAll

If Not IsEmpty("DP_REL")
   Then Coedit "DP_REL"
        Moveto [Sequencia]
        SEQ = 0
        Scan
          SEQ         = SEQ+1
          [Sequencia] = SEQ
        EndScan
        Do_It!
        ClearAll
EndIf      

EndProc

;*******************************************************************************
;* Alinha Data no ShowDialogo                                                  *
;*******************************************************************************
Proc Alinha_Data()
Private CONTADOR,AUX_ARRAY_ENTREGA,ii,ui,DATA_VERIFICAR,DATA

CONTADOR = 0
Array AUX_ARRAY_ENTREGA[ArraySize(ARRAY_ENTREGA)]

For ii From 1 To ArraySize(ARRAY_ENTREGA)
  If ii = ArraySize(ARRAY_ENTREGA) And ARRAY_ENTREGA[ii]="" 
     Then QuitLoop 
     Else If ARRAY_ENTREGA[ii]=""
             Then Loop
          EndIf
  EndIf
  DATA_VERIFICAR = BlankDate()
  DATA           = DateVal(ARRAY_ENTREGA[ii])   
  For ui From 1 To ArraySize(ARRAY_ENTREGA)
    DATA_VERIFICAR = DateVal(ARRAY_ENTREGA[ui])
    If DATA > DATA_VERIFICAR
       Then DATA_VERIFICAR = BlankDate()
            QuitLoop
    EndIf
  EndFor
  If DATA_VERIFICAR<>BlankDate()
     Then CONTADOR = CONTADOR + 1
          AUX_ARRAY_ENTREGA[CONTADOR] = DATA
          ARRAY_ENTREGA[ii] = ""
          ii=0
  EndIf    
EndFor   

Release Vars ARRAY_ENTREGA
Array ARRAY_ENTREGA [ArraySize(AUX_ARRAY_ENTREGA)]
For ii From 1 To ArraySize(AUX_ARRAY_ENTREGA)
  ARRAY_ENTREGA[ii]=AlinhM(StrVal(AUX_ARRAY_ENTREGA[ii]),10)
EndFor

If ArraySize(ARRAY_ENTREGA)>1
   Then VSDGPARCELAS = StrVal(ArraySize(ARRAY_ENTREGA))+" parcelas"
   Else VSDGPARCELAS = StrVal(ArraySize(ARRAY_ENTREGA))+" parcela"
EndIf

EndProc ;Alinha_Data()

;********************************************************************************
;* Rotina para a escolha do Numero do Pedido                                    *
;*******************************************************************************
Proc SD_Dialog_Pedido(Disparo,Campo,Evento,Elemento)
Private 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"] =  27:
          Temp=False
          Switch
            Case Campo="TG_NPEDIDO" : CancelDialog
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          Switch
            Case Campo="TG_NPEDIDO"  : 
                 VSDGNPEDIDO = ControlValue("TG_NPEDIDO")
                 If Not Isblank(VSDGNPEDIDO)
                    Then VSDGNPEDIDO=AlinhM(ControlValue("TG_NPEDIDO"),6)
                         AcceptDialog      
                 EndIf
          EndSwitch
   EndSwitch
EndIf
Switch
  Case Campo="TG_NPEDIDO":
     MSG_CAMPO="Informe o numero do pedido"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Mouse Hide
Return Temp

EndProc ;SD_Dialog_Pedido()

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Colecao_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
           Seleciona_Opcoes("Marcas","F1_Temp")
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="TG_CODMARCA"  : CancelDialog
           EndSwitch                     

      Case Evento["KeyCode"] = 13:
           Temp=False          
           If Campo="TG_CODMARCA"  
              Then VSDGMARCA=ControlValue("TG_CODMARCA")
                   If Not IsBlank(VSDGMARCA)
                      Then VSDGMARCA = AlinhM(VSDGMARCA,3)
                           GetRecord "\\Sistemas\\Estoque\\Marcas" VSDGMARCA To REG_MARCA
                           If Not RetVal
                              Then Mensagem("Marca "+VSDGMARCA+" n„o localizada!")
                              Else VSDGNOMMARCA = REG_MARCA["Descricao da Marca"]
                                   If Checa_Opcoes("Marcas",VSDGMARCA)  
                                      Then AcceptDialog
                                      Else Mensagem("Marca "+VSDGMARCA+" n„o localizada!")
                                   EndIf
                           EndIf      
                   EndIf
          EndIf                    
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Colecao_Dialog()

;*******************************************************************************
;* Desmembramento de Pedidos                                                   *
;*******************************************************************************
Proc Desmembramento_Pedido()
Private SEQ,MSG

SEQ  = [Sequencia]

ConfigOpcoes("Marca","Ler","DP_MARCA")

Echo Normal
Echo Off

While True
  ShowDialog "Cole‡Æo" Proc "Colecao_Dialog"
     Trigger "OPEN","ARRIVE"
     Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 10,19 height 5 width 42
  
     Label  @ 00,00 "Informe a Marca" for "TG_CODMARCA"
     Accept @ 01,01  Width 6 "A3" picture "!*!"   Tag "TG_CODMARCA" to VSDGMARCA
     Accept @ 01,06 Width 33 "A30" picture "!*!"  Tag "TG_NOMMARCA" to VSDGNOMMARCA
  
  Enddialog                     
  Mouse Show 

  If Not Retval 
     Then Return False
  EndIf
  
  GetRecord "\\Sistemas\\Estoque\\Marcas" VSDGMARCA To REG_MARCA
  If Not RetVal
     Then Mensagem("Marca "+VSDGMARCA+" n„o localizada!")
          Return False
     Else VSDGNOMMARCA = REG_MARCA["Descricao da Marca"]
  EndIf
  
  GetRecord "\\Sistemas\\Vendas\\DP_CORC" VSDGMARCA To REG_ATIVA
  If RetVal
     Then If REG_ATIVA["Ativa"]="N"
             Then Mensagem("Regra de cores para a marca "+VSDGMARCA+" "+VSDGNOMMARCA+" est  INATIVA!")
                  Return False              
          EndIf
     Else Mensagem("N„o h  regra de cores definida para a marca "+VSDGMARCA+" "+VSDGNOMMARCA+"!")
          Return False
  EndIf              
  
  ConfigOpcoes("Marca","Gravar","DP_MARCA")
 
  AUX_SEQ = [Sequencia]
  Do_iT!
  Moveto "DP_REL"
          
  ;---- Sequencia das Cores da Cole‡Æo ---------------------
  {Ask} {\\Sistemas\\Vendas\\Dp_cori} 
  Moveto [Codigo da Marca     ] Check TypeIn "~VSDGMARCA"
  Moveto [Sequencia           ] Check
  Moveto [Codigo da Cor_Tecido] Check
  Moveto [Fracionado          ] Check 
  Moveto [Status              ] Check
  Do_it!
  
  Moveto "Answer"
  ClearImage
  Moveto "\\Sistemas\\Vendas\\Dp_cori"
  ClearImage
  
  DP_EXEC=Cria_Temp(PrivDir())
  Rename "Answer" DP_EXEC
  
  View DP_EXEC
  Moveto "DP_REL"
  Formkey
  Moveto [Sequencia]
  Locate AUX_SEQ
  
  If IsEmpty(DP_EXEC)
     Then Mensagem("N„o h  regra de cores definida para a marca "+VSDGMARCA+" "+VSDGNOMMARCA+"!")
          Moveto "DP_REL"
          Moveto [Sequencia]
          Locate SEQ
          If Search("EDIT",Upper(SYSMODE()))=0
              Then CoEditKey
          EndIf
          Return False
  EndIf   
  QuitLoop 
EndWhile

If VSDGMARCA="" 
   Then Mensagem("Marca n„o informada!")
        Return False
EndIf    

NLIN_ERRO = 0
ARQERRO=PrivDir()+"ERRO_DP.Txt"
If IsFile(ARQERRO)
   Then Deleta_Arquivo(ARQERRO)
EndIf

TEMP                     = False
VSDGNPEDIDO              = ""
FAZ_PROCESSO             = 0 
NUMERO_PEDIDO_PROCESSADO = ""
GERA_PEDIDO              = True
MSG_REGRA_PED            = ""

Moveto "DP_REL"
Home
Moveto [Sequencia] DP_REL=ImageCCount()
Scan
  Barra(DP_REL, RecNo())
  Aguarde("Aguarde, desmembrando o pedido "+[Numero do Pedido]+" "+BARRA_STRING)
  
  NPARC   = [Numero de Parcelas]
  NPED    = [Numero do Pedido  ]
  VENCTO  = [Entrega           ] 
  AUX_SEQ = [Sequencia         ]

  If IsBlank(NPARC)
     Then Mensagem("Pedido "+NPED+" sem data de entrega informado!") 
          Loop
  EndIf
  
  ;---- Ocorrencia de Erros ----------------------------------------------------
  MSG = ""
  GetRecord "\\Sistemas\\Vendas\\PedidoG" NPED To REG_PEDIDO
  If Not RetVal
     Then MSG = "Pedido "+NPED+" n„o ‚ modo grade!"
  EndIf
  
  GetRecord "\\Sistemas\\Vendas\\PedidoC" NPED To REG_PEDIDO                  
  Switch
    Case MSG<>""    : ;Pedido sem modo GRADE
    Case Not RetVal :
         MSG = "Pedido "+NPED+" n„o foi encontrado!"
    Case Search ("PEDIDO DESMEMBRADO PELO AGRUPAMENTO",REG_PEDIDO["Observacao do Pedido"])>0 :
         MSG = "Pedido "+REG_PEDIDO["Numero do Pedido"]+" j  foi desmembrado anteriormente !"
    Case Search ("PEDIDO SORTIDO DESMEMBRADO",REG_PEDIDO["Observacao do Pedido"])>0 :  
         MSG = "Pedido "+NPED+" j  foi desmembrado anteriormente !"                      
    Case Search ("PEDIDO DESMEMBRADO DO PEDIDO",REG_PEDIDO["Observacao do Pedido"])>0 :
         MSG = "Pedido "+REG_PEDIDO["Numero do Pedido"]+" j  fez parte do desmembramento em processos anteriores !"
    Case REG_PEDIDO["Situacao do Pedido"]<>"SUSPENSO" And REG_PEDIDO["Situacao do Pedido"]<>"ABERTO" :
         MSG = "Pedido "+REG_PEDIDO["Numero do Pedido"]+" com a situa‡„o "+REG_PEDIDO["Situacao do Pedido"]+"!"
  EndSwitch
  
  If MSG<>""
     Then Mensagem(MSG)
          Loop
  EndIf
  
  TEMP=True
  Moveto "DP_REL"
  FormKey
  
  ;Apagando registros
  If Not Monta_Tabela("REINICIAR")
     Then Loop
  EndIf  
  
  ;---- Apagando o Status da Tabela de Exce‡äes p/ iniciar os trabalhos --------
  Moveto DP_EXEC
  Scan
    Moveto [Status] CtrlBackSpace
  EndScan
  Home
  ;[Status]="1" ;Incompleto
  ;[Status]="2" ;Completo
  ;[Status]="3" ;Que no momento nÆo pode ser incluido por ser fracionado
  ;[Status]="4" ;N„o tem a COr_Tecido no pedido
  
  ;---- Processo de Demembramento ----------------------------------------------
  Moveto PEDIDOG_ORIGINAL
  Moveto [Numero do Pedido]
  Locate NPED
  If RetVal 
     Then While [Numero do Pedido] = NPED        
            CopyToArray RegPed
  
            ;---- Gerando PEDIDOG --------------------------------------------
            Moveto TEMP_PEDIDOG
            End Down
            CopyFromArray RegPed
            
            Moveto PEDIDOG_ORIGINAL
            grdant="***"
            Array Array_TM[12]
            Array_Monta_Grade("")
  
            Qtd=0 QtdF=0
            For jk From 1 To 12
              TM=RTrim(SubStr(Array_TM[jk],4,2))
              If TM="" 
                 Then Loop 
              EndIf
          
              Switch
                Case jk=1 : Qtd=RegPed["Qtd1"]  QtdF=RegPed["QtdF1"]  
                Case jk=2 : Qtd=RegPed["Qtd2"]  QtdF=RegPed["QtdF2"]  
                Case jk=3 : Qtd=RegPed["Qtd3"]  QtdF=RegPed["QtdF3"]  
                Case jk=4 : Qtd=RegPed["Qtd4"]  QtdF=RegPed["QtdF4"]  
                Case jk=5 : Qtd=RegPed["Qtd5"]  QtdF=RegPed["QtdF5"]  
                Case jk=6 : Qtd=RegPed["Qtd6"]  QtdF=RegPed["QtdF6"]  
                Case jk=7 : Qtd=RegPed["Qtd7"]  QtdF=RegPed["QtdF7"]  
                Case jk=8 : Qtd=RegPed["Qtd8"]  QtdF=RegPed["QtdF8"]  
                Case jk=9 : Qtd=RegPed["Qtd9"]  QtdF=RegPed["QtdF9"]  
                Case jk=10: Qtd=RegPed["Qtd10"] QtdF=RegPed["QtdF10"] 
                Case jk=11: Qtd=RegPed["Qtd11"] QtdF=RegPed["QtdF11"] 
                Case jk=12: Qtd=RegPed["Qtd12"] QtdF=RegPed["QtdF12"] 
              EndSwitch
              
              If Qtd<=0 
                 Then Qtd = 0
              EndIf
              
              If Qtd=0
                 Then Loop
              EndIf   
          
              If Len(TM)=1
                 Then Item=SubStr(RegPed["Codigo do Item"],1,9)+TM
                 Else Item=SubStr(RegPed["Codigo do Item"],1,8)+TM
              EndIf
              
              GetRecord "\\Sistemas\\Estoque\\Itens" Item To REG_ITEM
              If Not RetVal
                 Then Mensagem("PEDIDO "+NPED+"//Item "+Item+" n„o localizado no cadastro de itens.")
                      Loop
              EndIf
              
              ItemNovo=True 
              Moveto DP_ITEM
              Moveto [Codigo do Item]
              Locate Item
              If RetVal
                 Then ItemNovo = False
              EndIf
          
              If Not ItemNovo
                 Then [Quantidade          ] = [Quantidade               ]+Qtd
                 Else End Down
                      [Codigo do Grupo     ] = REG_ITEM["Codigo do Grupo"]
                      [Codigo da Cor_Tecido] = REG_ITEM["Codigo da Cor_Tecido"]
                      [Codigo do Item      ] = Item
                      [Quantidade          ] = Qtd 
              EndIf
              UnLockRecord
              
              ;Adicionando registros em uma tabela PedidoI tempor ria para utiliz‡Æo
              ;posterior ao gerar tabelas por vencimentos
              ItemNovo=True
              Moveto TEMP_PEDIDOI
              Moveto [Codigo do Item]
              Locate Item
              If RetVal Then ItemNovo=False EndIf

              If Not ItemNovo
                 Then [Quantidade               ]=[Quantidade               ]+Qtd
                      [Quantidade Faturada      ]=[Quantidade Faturada      ]+QtdF
                      [Peso Liquido             ]=[Peso Liquido             ]+RegPed["Peso Liquido"]
                      [Peso Embalagem           ]=[Peso Embalagem           ]+RegPed["Peso Embalagem"]
                      [Volumes                  ]=[Volumes                  ]+RegPed["Volumes"]
                 Else End Down
                      Seq=Seq+1
                      [Numero do Pedido         ]=RegPed["Numero do Pedido"]
                      [Item do Pedido           ]=Seq
                      [Codigo do Item           ]=Item
                      [Codigo da Cor_Tecido     ]=RegPed["Codigo da Cor_Tecido"]
                      [Tamanho                  ]=RegPed["Tamanho"]
                      [Quantidade               ]=Qtd
                      [Quantidade Faturada      ]=QtdF
                      [Preco Unitario           ]=RegPed["Preco Unitario"]
                      
                      [Tipo Desconto Item       ]=RegPed["Tipo Desconto Item"]
                      [Taxa Desconto Unitario   ]=RegPed["Taxa Desconto Unitario"]
                      [Valor Desconto Unitario  ]=RegPed["Valor Desconto Unitario"]
                      [Valor Desconto Item      ]=RegPed["Valor Desconto Item"]
                      
                      [Preco Total              ]=RegPed["Preco Total"]
                      [Preco Unitario Tabela    ]=RegPed["Preco Unitario Tabela"]
                      [Taxa Desconto Total      ]=RegPed["Taxa Desconto Total"]
                      [Valor Desconto Total     ]=RegPed["Valor Desconto Total"]
                      [Peso Liquido             ]=RegPed["Peso Liquido"]
                      [Peso Embalagem           ]=RegPed["Peso Embalagem"]
                      [Volumes                  ]=RegPed["Volumes"]
                      [Codigo da Tabela         ]=RegPed["Codigo da Tabela"]                                         
                      [Tipo Tributacao          ]=RegPed["Tipo Tributacao"]      
                      [CFO                      ]=RegPed["CFO"]
                    
                      [Tributacao de ICMS       ]=RegPed["Tributacao de ICMS"]
                      [Aliquota Reduzida BCICMS ]=RegPed["Aliquota Reduzida BCICMS"]
                      [Aliquota de ICMS         ]=RegPed["Aliquota de ICMS"]
                      [Valor do ICMS            ]=RegPed["Valor do ICMS"]
               
                      [CSOSN                    ]=RegPed["CSOSN"]    
                      [MVA                      ]=RegPed["MVA"]
                      [NCM                      ]=RegPed["NCM"]
                                                  
                      [ICMS_ST_Aliquota         ]=RegPed["ICMS_ST_Aliquota"] 
                      [ICMS_ST_BC               ]=RegPed["ICMS_ST_BC"]            
                      [ICMS_ST_Valor            ]=RegPed["ICMS_ST_Valor"] 
                      [ICMS_BC                  ]=RegPed["ICMS_BC"] 
                      [ICMS_CredSN_Aliquota     ]=RegPed["ICMS_CredSN_Aliquota"] 
                      [ICMS_CredSN_Valor        ]=RegPed["ICMS_CredSN_Valor"] 
                       
                      [Tributacao de IPI        ]=RegPed["Tributacao de IPI"]
                      [Aliquota de IPI          ]=RegPed["Aliquota de IPI"]
                      [Valor do IPI             ]=RegPed["Valor do IPI"]
                      [IPI_CST                  ]=RegPed["IPI_CST"] 
                      [IPI_BC                   ]=RegPed["IPI_BC"]            
                                            
                      [Tributacao de ISSQN      ]=RegPed["Tributacao de ISSQN"] 
                      [Aliquota de ISSQN        ]=RegPed["Aliquota de ISSQN"] 
                      [Codigo_Servico           ]=RegPed["Codigo_Servico"]            
                      [ISSQN_BC                 ]=RegPed["ISSQN_BC"] 
                      [ISSQN_UF                 ]=RegPed["ISSQN_UF"] 
                                               
                      [PIS_CST                  ]=RegPed["PIS_CST"] 
                      [PIS_Aliquota             ]=RegPed["PIS_Aliquota"] 
                      [PIS_BC                   ]=RegPed["PIS_BC"]            
                      [PIS_Valor                ]=RegPed["PIS_Valor"] 
                                               
                      [COFINS_CST               ]=RegPed["COFINS_CST"] 
                      [COFINS_Aliquota          ]=RegPed["COFINS_Aliquota"] 
                      [COFINS_BC                ]=RegPed["COFINS_BC"]            
                      [COFINS_Valor             ]=RegPed["COFINS_Valor"] 
                      UnLockRecord
              EndIf
              
              If [Taxa Desconto Unitario]>0
                 Then [Valor Desconto Unitario]=NDecimal(([Preco Unitario]*[Taxa Desconto Unitario])/100,2)
              EndIf
              If [Quantidade]>0
                 Then [Preco Total]=[Quantidade]*([Preco Unitario]-[Valor Desconto Unitario])
                 Else If [Preco Unitario]>0
                         Then [Preco Total]=[Preco Unitario]-[Valor Desconto Unitario]
                      EndIf
              EndIf
              If [Aliquota Reduzida BCICMS]>0 And
                 [Aliquota de ICMS        ]>0
                 Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
                 Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
              EndIf
              If [Tributacao de IPI]<>"D"
                 Then If Not IsBlank([Tributacao de IPI])
                         Then [Aliquota de IPI]=BlankNum()
                              [Valor do IPI   ]=BlankNum()
                      EndIf
              EndIf
              If [Aliquota de IPI        ]>0
                 Then [Valor do IPI]=Round(([Preco Total]*[Aliquota de IPI])/100,2)
              EndIf
              UnLockRecord  
            EndFor
            Moveto PEDIDOG_ORIGINAL
            Skip
            If Eot() Then QuitLoop EndIF
          EndWhile
  EndIf
  
  ;----- Totalizando Grupo -----------------------------------------------------
  GRUPO = ""
  
  Do_it!
  Sort DP_ITEM On "Codigo do Grupo"
  CoeditKey
  
  Moveto DP_ITEM
  Home
  Scan
    If GRUPO<>[Codigo do Grupo]
       Then If GRUPO<>""
               Then Moveto DP_GRUPO
                    End Down
                    [Codigo do Grupo] = GRUPO
                    [Quantidade     ] = QUANTIDADE
                    UnLockRecord
                    
                    Moveto DP_ITEM     
            EndIf
            QUANTIDADE = 0
            GRUPO      = [Codigo do Grupo] 
    EndIf      
    QUANTIDADE = QUANTIDADE + [Quantidade]
  EndScan
  
  If QUANTIDADE>0
     Then Moveto DP_GRUPO
          End Down
          [Codigo do Grupo] = GRUPO
          [Quantidade     ] = QUANTIDADE
          UnLockRecord
  EndIf
  
  ;----- Totalizando Cor -------------------------------------------------------
  COR=""
  
  Do_it!
  Sort DP_ITEM On "Codigo da Cor_Tecido"
  CoeditKey
  
  Moveto DP_ITEM
  Home
  Scan
    If COR<>[Codigo da Cor_Tecido]
       Then If COR<>""
               Then Moveto DP_COR
                    End Down
                    [Codigo da Cor_Tecido] = COR
                    [Quantidade          ] = QUANTIDADE
                    UnLockRecord
                    
                    Moveto DP_ITEM          
            EndIf
            QUANTIDADE = 0
            COR        = [Codigo da Cor_Tecido] 
    EndIf      
    QUANTIDADE  = QUANTIDADE + [Quantidade]
  EndScan  
  
  ACHOU_COR = True
  Moveto DP_COR
  Home
  Scan
    AUX_COR = [Codigo da Cor_Tecido]
    Moveto DP_EXEC
    Moveto [Codigo da Cor_Tecido]
    Locate AUX_COR
    If Not RetVal
       Then ACHOU_COR = False
            Mensagem("Cor "+AUX_COR+" n„o localizada na regra!")
    EndIf
  EndScan 
  
  If Not ACHOU_COR
     Then Moveto "DP_REL"
           Loop
  EndIf
  Release Vars ACHOU_COR
  
  If QUANTIDADE>0
     Then Moveto DP_COR
          End Down
          [Codigo da Cor_Tecido] = COR
          [Quantidade          ] = QUANTIDADE
          UnLockRecord
  EndIf
  FAZ_PROCESSO = FAZ_PROCESSO + 1
  
  ;---- Processo da separacao dos PEDIDOS em lotes -----------------------------
  Moveto DP_ITEM
  Moveto [Quantidade] TOTAL=ImageCSum()
  
  If NPARC>0
     Then ANT_TOTAL_PARC    = 0
          TOTAL_PARC_ULTIMA = 0
          TOTAL_PARC        = Round(TOTAL / NPARC,0)
          Switch
            Case (TOTAL_PARC * NPARC) - TOTAL > 0 : TOTAL_PARC_ULTIMA = TOTAL_PARC - ((TOTAL_PARC * NPARC) - TOTAL)
            Case TOTAL - (TOTAL_PARC * NPARC) > 0 : TOTAL_PARC_ULTIMA = TOTAL_PARC + (TOTAL - (TOTAL_PARC * NPARC))
          EndSwitch
  EndIf
  
  ;----------- Vencimentos --------------------------------
  Array ARRAY_VENCTO[NPARC]
  CONTA_PARC    = 0
  While True
    PosI = Search("/",VENCTO)
    If PosI > 0
       Then AUX_VENCTO = SubStr(VENCTO,1,PosI-1) 
            VENCTO     = SubStr(VENCTO,PosI+1,Len(VENCTO))
       Else AUX_VENCTO = VENCTO       
    EndIf 
    CONTA_PARC = CONTA_PARC + 1
    ARRAY_VENCTO[CONTA_PARC] = AUX_VENCTO
    If CONTA_PARC = NPARC Then QuitLoop EndIf 
  EndWhile  
  
  ;Total de cada parcela que antecede … ultima parcela OU parcela £nica
  ;TOTAL_PARC
  ;Total da ultima parcela (senÆo ser  0, caso s¢ tenho uma parcela)
  ;TOTAL_PARC_ULTIMA
  
  DEP_EXEC      = NRecords(DP_EXEC)
  CONTA_PARC    = 0
  PARAM_EXCECAO = 20        ;Pode exceder o limite de cada vencimento em at‚ 20%    
  
  ;----- Ignorando cores que nÆo estÆo no pedido ------------------------------- 
  Moveto DP_EXEC
  Scan
    COR_TECIDO = [Codigo da Cor_Tecido]
    
    Moveto DP_COR
    Moveto [Codigo da Cor_Tecido]
    Locate COR_TECIDO
    If Not RetVal
       Then Moveto DP_EXEC
            [Status]="4"
       Else Moveto DP_EXEC      
    EndIf 
  EndScan
  
  ;----- Verificando se h  todas as cores do pedido nas exce‡äes --------------
  
  CONTADOR = 0
  NR       = NRecords(DP_COR)  
  Moveto DP_COR
  Home
  Scan
    COR_TECIDO = [Codigo da Cor_Tecido]
    
    Moveto DP_EXEC
    Moveto [Codigo da Cor_Tecido]
    Locate COR_TECIDO
    If Not RetVal
       Then CONTADOR = CONTADOR + 1      
    EndIf
    Moveto DP_COR
  EndScan
  
  If CONTADOR = NR
     Then Mensagem("N„o h  registros a serem processados!//"+
                   "N„o h  cadastro de regra para cor/itens do pedido "+NPED)
          Moveto "DP_REL"
          Loop            
  EndIf
  
  ;---- Copiando PedidoC Original ------------------------
  NUMERO_PEDIDO_PROCESSADO = ""
  Moveto "\\Sistemas\\Vendas\\PedidoC"   
  Moveto [Numero do Pedido]
  Locate NPED
  CopyToArray REG_PEDIDOC
  While CONTA_PARC <= NPARC
    CONTA_PARC = CONTA_PARC + 1
    
    ;---- Ultimo Vencimento --------------------------------
    If CONTA_PARC = NPARC And TOTAL_PARC_ULTIMA > 0
       Then TOTAL_PARC = TOTAL_PARC_ULTIMA
    EndIf
    
    FIM_PROCESSO     = False
    GERA_PEDIDO      = True
    NAO_GERA_PEDIDO  = 0
    Seq_Pedido       = 0
    Seq_PedidoG      = 0
    TOTAL_PROCESSADO = 0
    GRADE            = "***" 
    
    If Not Gera_PedidoC(CONTA_PARC)
       Then Mensagem("N„o foi poss¡vel continuar com o desmembramento//Verificar a rotina de pedidos!")
            QuitLoop
    EndIf   
    
    ;Sempre quando iniciar um pedido, as cores serÆo re-analisadas para inclusao 
    Moveto DP_EXEC
    Home
    Scan
      If [Status] = "3" Then Moveto [Status] CtrlBackSpace EndIf
    EndScan
      
    INICIO_PEDIDO = True
    While INICIO_PEDIDO     
       Barra(TOTAL_PARC,Seq_Pedido)
       Aguarde("Aguarde, ajustando pedido "+NPED+" "+BARRA_STRING)
  
       FAZ_COR          = False
       CONTADOR         = 0
       CONTA_EXEC       = 0 
       
       ;---- Tabela de Exce‡äes -------------------------------------------------- 
       Moveto DP_EXEC
       Home
       While CONTADOR <= DEP_EXEC
         CONTADOR = CONTADOR + 1
         Moveto [Sequencia]
         Locate CONTADOR
         If RetVal
            Then If [Status]<>"2" And [Status]<>"3" And [Status]<>"4"
                    Then MARCA        = [Codigo da Marca     ]
                         COR_TECIDO   = [Codigo da Cor_Tecido]
                         FAZ_COR      = False
                         If [Fracionado]="N" Then FRACIONADO = False Else FRACIONADO = True EndIF
                         
                         TOTAL_COR    = 0
                         Moveto DP_COR
                         Moveto [Codigo da Cor_Tecido]
                         Locate COR_TECIDO
                         If RetVal
                            Then FAZ_COR   = True
                                 TOTAL_COR = [Quantidade]
                         EndIf  
                         Moveto DP_EXEC
                         
                         QuitLoop
                    Else If [Status]="2" Or [Status]="4" Then CONTA_EXEC = CONTA_EXEC + 1 EndIf         
                 EndIf 
            Else Home
         EndIf    
         If CONTA_EXEC = DEP_EXEC
            Then FIM_PROCESSO = True
                 TOTAL_PARC   = TOTAL_PROCESSADO
                 
                 Moveto DP_EXEC
                 Moveto [Status]
                 Locate "2"
                 If Not RetVal
                    Then NAO_GERA_PEDIDO = TOTAL_PROCESSADO
                 EndIf
                 
                 CONTA_PARC = NPARC+1 
                 QuitLoop
         EndIf         
       EndWhile
         
       If Not FAZ_COR And CONTA_PARC <= NPARC   
          Then Moveto DP_EXEC
               [Status]="4"
               Moveto DP_ITEM
               TOTAL_PROCESSADO = TOTAL_PROCESSADO + [Quantidade]
               NAO_GERA_PEDIDO  = NAO_GERA_PEDIDO + [Quantidade]
               If CONTA_PARC < NPARC 
                  Then ;Se percorreu todas as excecoes e ainda tiver um limite a ser preenchido e 
                       ;as cores das exce‡äes nÆo tem esse limite para esse preenchimento por 
                       ;ser as cores nao fracionadas, este pedido sera encerradi com menos pe‡as 
                       ;Status="2" ou "Status="3" (vide legenda acima)
                       ;TOTAL_PARC = TOTAL_PROCESSADO
                       ;QuitLoop
               EndIf
       EndIf
       
       While FAZ_COR And Not FIM_PROCESSO
         If (CONTA_PARC <> NPARC And (TOTAL_PARC - (TOTAL_PROCESSADO + TOTAL_COR) < 0)) 
            Then AUX_EXCECAO = Round(TOTAL_PARC + ((TOTAL_PARC*PARAM_EXCECAO)/100),0)
                 If AUX_EXCECAO - (TOTAL_PROCESSADO + TOTAL_COR) >=0
                    Then ANT_TOTAL_PARC = TOTAL_PARC 
                         TOTAL_PARC     = TOTAL_PROCESSADO + TOTAL_COR
                    Else Moveto DP_EXEC
                         [Status]="3"
                         Moveto DP_ITEM
                         QuitLoop
                 EndIf
         EndIF
         
         If CONTA_PARC = NPARC 
            Then ;No ultimo vencimento, vÆo todos as pe‡as
                 FRACIONADO = True
         EndIf
          
         SAIR_LOOP       = False
         TOTAL_COR_ATUAL = 0
         Moveto DP_ITEM
         Moveto [Codigo da Cor_Tecido]
         Locate COR_TECIDO
         If RetVal
            Then While [Codigo da Cor_Tecido] = COR_TECIDO
                   ACHOU_COR = True
                   COD_ITEM  = [Codigo do Item]
                   GetRecord "\\Sistemas\\Estoque\\Itens" COD_ITEM To REG_ITEM
                   If Not RetVal
                      Then Mensagem("Item "+COD_ITEM+" n„o localizado no cadastro!")
                      Else If MARCA = REG_ITEM["Codigo da Marca"]
                              Then QTD            = [Quantidade           ]
                                   QTD_PROCESSADA = [Quantidade Processada]
                                   QTD            = QTD - QTD_PROCESSADA
                                   
                                   If QTD <> QTD_PROCESSADA And QTD>0
                                      Then Switch
                                     
                                             Case (TOTAL_PROCESSADO + QTD) <= TOTAL_PARC Or TOTAL_PARC=0 : 
                                                  
                                                  If Adiciona_Pedido()
                                                     Then TOTAL_COR_ATUAL  = TOTAL_COR_ATUAL + QTD
                                                          TOTAL_PROCESSADO = TOTAL_PROCESSADO + QTD
                                                  
                                                          Moveto DP_ITEM
                                                          [Quantidade Processada] = [Quantidade Processada] + QTD
                                                          UnLockRecord 
                                                  EndIF        
                                          
                                             Case (TOTAL_PROCESSADO + QTD) > TOTAL_PARC And FRACIONADO :
                                                  ;Neste caso, ser  analisado grupo a grupo, referente … cor 
                                                  ;para que possa ficar sortidos nos grupos
                                                  QTD = 1
                                                  
                                                  If Adiciona_Pedido()
                                                     Then TOTAL_COR_ATUAL  = TOTAL_COR_ATUAL + QTD
                                                          TOTAL_PROCESSADO = TOTAL_PROCESSADO + QTD
                                                  
                                                          Moveto DP_ITEM
                                                          [Quantidade Processada] = [Quantidade Processada] + QTD
                                                          UnLockRecord
                                                  EndIf         
                                                  
                                             Case (TOTAL_PROCESSADO + QTD) > TOTAL_PARC And Not FRACIONADO : 
                                                  SAIR_LOOP=True     
                                           EndSwitch  
                                      Else If QTD=0 
                                              Then TOTAL_COR_ATUAL = TOTAL_COR_ATUAL + [Quantidade]
                                           EndIf            
                                   EndIf
                                   
                                   If TOTAL_PROCESSADO = TOTAL_PARC 
                                      Then SAIR_LOOP = True
                                   EndIf   
                                      
                                   Moveto DP_COR
                                   Moveto [Codigo da Cor_Tecido]
                                   Locate COR_TECIDO
                                   If RetVal
                                      Then If [Quantidade] = TOTAL_COR_ATUAL 
                                              Then SAIR_LOOP = True
                                                   Moveto DP_EXEC
                                                   [Status]="2"
                                                   Moveto DP_ITEM
                                           EndIf 
                                   EndIf   
                              Else ACHOU_COR=False
                           EndIf    
                   EndIf
                   Moveto DP_ITEM
                   If Not ACHOU_COR
                      Then Moveto DP_EXEC
                           [Status]="4"
                           Moveto DP_ITEM
                           TOTAL_PROCESSADO = TOTAL_PROCESSADO + [Quantidade]
                           NAO_GERA_PEDIDO  = NAO_GERA_PEDIDO + [Quantidade]
                           QuitLoop
                   EndIf
                   Skip
                   If Eot() Then QuitLoop EndIf
                   Locate Next COR_TECIDO
                   If Not RetVal
                      Then If SAIR_LOOP Then QuitLoop EndIf
                           Home
                           Locate Next COR_TECIDO
                   EndIf    
                 EndWhile
         EndIf
         QuitLoop
       EndWhile
       If (TOTAL_PROCESSADO >= TOTAL_PARC And CONTA_PARC < NPARC) Or FIM_PROCESSO 
          Then If ANT_TOTAL_PARC > 0 And Not FIM_PROCESSO
                  Then TOTAL_PARC     = ANT_TOTAL_PARC
                       ANT_TOTAL_PARC = 0
               EndIf
               INICIO_PEDIDO = False
               If NAO_GERA_PEDIDO >= TOTAL_PROCESSADO
                  Then GERA_PEDIDO = False
               EndIf   
       EndIf    
    EndWhile
    
    If Not GERA_PEDIDO 
       Then Moveto "\\Sistemas\\Vendas\\PedidoC"
            Moveto [Numero do Pedido]
            Locate NPED_NOVO
            If RetVal
               Then Del
            EndIf
            Moveto DP_ITEM
       Else Carrega_array_Itens()     
    EndIf
    
    If CONTA_PARC = NPARC
       Then SAIR_PROCESSO = True
            Moveto DP_EXEC
            Home
            Scan          
              If [Status]<>"2"
                 Then SAIR_PROCESSO = False
                      QuitLoop
              EndIf   
            EndScan
            
            If Not SAIR_PROCESSO
               Then NR       = NRecords(DP_EXEC)  
                    CONTADOR = 0 
                    Moveto DP_EXEC
                    Home
                    Scan          
                      If [Status]="4"
                         Then If Not SAIR_PROCESSO Then SAIR_PROCESSO = True EndIF
                              CONTADOR = CONTADOR + 1
                      EndIf   
                    EndScan
                    
                    If NR = CONTADOR 
                       Then GERA_PEDIDO = False
                    EndIf
            EndIf
            If SAIR_PROCESSO Then QuitLoop EndIF     
    EndIf
    Moveto "DP_REL"
  EndWhile
  ;---- Atualiza PedidoC Original ------------------------------------------------
  If NUMERO_PEDIDO_PROCESSADO<>"" And GERA_PEDIDO
     Then Moveto "\\Sistemas\\Vendas\\PedidoC"   
          Moveto [Numero do Pedido]
          Locate NPED
          [Observacao do Pedido] = [Observacao do Pedido] + " [**PEDIDO SORTIDO DESMEMBRADO PARA -> "+NUMERO_PEDIDO_PROCESSADO+"**]"
          [Situacao do Pedido  ] = "CANCELADO"
          UnLockRecord
          
          Do_iT!
          Moveto "DP_REL"
          
          Add PEDIDOI_WORK "\\Sistemas\\Vendas\\PedidoI"
          Add PEDIDOG_WORK "\\Sistemas\\Vendas\\PedidoG"
          
          Delete PEDIDOI_WORK
          Delete PEDIDOG_WORK
          
          Moveto "DP_REL"
          Formkey
          Moveto [Sequencia]
          Locate AUX_SEQ
  EndIf
  
  If Not GERA_PEDIDO   
     Then Mensagem("N„o h  cadastro de regra para cor/itens do pedido "+NPED)
  EndIf
  
  Moveto "DP_REL"
  CoeditKey  
EndScan

If FAZ_PROCESSO=0 
   Then Mensagem("N„o h  registros a serem processados!")
        TEMP = False                           
EndIf

Moveto "DP_REL"
Moveto [Sequencia]
Locate SEQ

If Search("EDIT",Upper(SYSMODE()))=0
   Then CoEditKey
EndIf

If IsFile(ARQERRO)
   Then DISPOSITIVO_OPCAO = "V"
        PDFZEBRA = False
        
        Mensagem("Foi encontrado inconsistˆncias ao gerar o desmembramento deste rela‡„o!//"+
                 "Ser  exibido um relat¢rio informado essas inconsistˆncias.")
        ImpriArq(ARQERRO)
        Deleta_Arquivo(ARQERRO)
EndIf   
Return TEMP

EndProc ;Desmembramento_Pedido()

;*******************************************************************************
;* Rotina gravar/ler configura‡äes/parametros                                  *
;*******************************************************************************
Proc ConfigOpcoes(tipo,operacao,arquivo)
private tipo,operacao,arquivo

arquivo = PrivDir()+arquivo

switch
  case tipo="Marca" :
    Switch
      Case operacao="Ler": 
           VSDGMARCA    = ""         
           VSDGNOMMARCA = ""
           
           If IsFile(arquivo+".sc")
               Then Play arquivo
           EndIf
           
      Case operacao="Gravar" :
           FileWrite        arquivo+".sc" From ";****** Variaveis de Configura‡„o Modelo Relatorio Vise Informatica"+"\n"
           FileWrite Append arquivo+".sc" From "VSDGMARCA=\""+VSDGMARCA+"\""+"\n"
           FileWrite Append arquivo+".sc" From "VSDGNOMMARCA=\""+VSDGNOMMARCA+"\""+"\n"
    EndSwitch  
endswitch

endproc

;*******************************************************************************
;*** Calcula Impostos
;*******************************************************************************
Proc Carrega_array_Itens()
Private CAMPOANT, VRBCICMS_CREDSN, nitens

Aguarde("Somando itens")

;-------- Variaveis para calculo de impostos por item --------------------------
Release Vars It_tpitem, It_prtotal, It_cfop,
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
             It_cst_icms, It_csosn_icms, It_trib_icms, It_red_icms, It_aliq_icms, It_bc_icms, It_vr_icms,
             It_aliq_icmscred, It_vr_icmscred,
             It_mva, It_red_st, It_aliq_st, It_bc_st, It_vr_st,
             It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
             It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
             It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
             It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins 

DynArray It_tpitem[]
DynArray It_prtotal[]
DynArray It_cfop[]

DynArray It_txdescto[]
DynArray It_descto[]
DynArray It_frete[]
DynArray It_seguro[]
DynArray It_outdesp[]

DynArray It_cst_icms[]
DynArray It_trib_icms[]
DynArray It_red_icms[]
DynArray It_aliq_icms[]
DynArray It_bc_icms[]
DynArray It_vr_icms[]

DynArray It_csosn_icms[]
DynArray It_aliq_icmscred[]
DynArray It_vr_icmscred[]

DynArray It_mva[]
DynArray It_red_st[]
DynArray It_aliq_st[]
DynArray It_bc_st[]
DynArray It_vr_st[]

DynArray It_cst_ipi[]
DynArray It_trib_ipi[]
DynArray It_aliq_ipi[]
DynArray It_bc_ipi[]
DynArray It_vr_ipi[]

DynArray It_trib_issqn[]
DynArray It_aliq_issqn[]
DynArray It_bc_issqn[]
DynArray It_vr_issqn[]

DynArray It_cst_pis[]
DynArray It_aliq_pis[]
DynArray It_bc_pis[]
DynArray It_vr_pis[]

DynArray It_cst_cofins[]
DynArray It_aliq_cofins[]
DynArray It_bc_cofins[]
DynArray It_vr_cofins[]

;-------- Variaveis para calculo da nota ---------------------------------------
VRMERC          =0
VRSERV          =0
VRII            =0
VRBC_COMIS      =0
VRBCICMS_CREDSN =0
nitens          =0

GetRecord "\\Sistemas\\Cadastro\\Empresas" [PedidoC->Codigo da Destinacao] To REG_BUSCA_LOOKUP
If RetVal
   Then UF_EMPRESA=REG_BUSCA_LOOKUP["UF Empresa"]
        TPEMPR    =REG_BUSCA_LOOKUP["Tipo da Empresa"]
        ATIVEMPR  =REG_BUSCA_LOOKUP["Atividade"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
EndIf

GetRecord "Destin" [PedidoC->Codigo da Destinacao] To REG_BUSCA_LOOKUP 
If RetVal
   Then OPCAO_RED_BCICMS=REG_BUSCA_LOOKUP["Sem Reducao BCICMS"]
        CALCULO_NF_AUTOMATICO=REG_BUSCA_LOOKUP["Calcula_Nota"]
   Else OPCAO_RED_BCICMS="1"
        CALCULO_NF_AUTOMATICO="A"     
EndIf   

Moveto PEDIDOI_WORK
Scan for [Numero do Pedido]=NPED_NOVO
  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
     Else VRSERV=VRSERV+[Preco Total]
  EndIf
            
  ;-------- Variaveis para calculo imposto do item -------------------------------
  nitens=nitens+1
  It_tpitem[nitens]        =[Tipo do Item            ] 
  It_prtotal[nitens]       =[Preco Total             ] 
  It_cfop[nitens]          =[CFO                     ] 

  It_txdescto[nitens]      =BlankNum()  
  It_descto[nitens]        =BlankNum()  
  It_frete[nitens]         =BlankNum()
  It_seguro[nitens]        =BlankNum()  
  It_outdesp[nitens]       =BlankNum()  

  It_trib_icms[nitens]     =[Tributacao de ICMS      ]
  It_cst_icms[nitens]      =[Tipo Tributacao         ]
  It_red_icms[nitens]      =[Aliquota Reduzida BCICMS]
  It_aliq_icms[nitens]     =[Aliquota de ICMS        ]
  It_bc_icms[nitens]       =[ICMS_BC                 ]
  It_vr_icms[nitens]       =[Valor do ICMS           ]

  It_csosn_icms[nitens]    =[CSOSN                   ]
  It_aliq_icmscred[nitens] =[ICMS_CredSN_Aliquota    ]
  It_vr_icmscred[nitens]   =[ICMS_CredSN_Valor       ]

  It_mva[nitens]           =[MVA                     ]
  It_red_st[nitens]        =[ICMS_ST_Aliquota Reduzida]
  It_aliq_st[nitens]       =[ICMS_ST_Aliquota        ]
  It_bc_st[nitens]         =[ICMS_ST_BC              ]
  It_vr_st[nitens]         =[ICMS_ST_Valor           ]

  It_trib_ipi[nitens]      =[Tributacao de IPI       ]
  It_cst_ipi[nitens]       =[IPI_CST                 ]
  It_aliq_ipi[nitens]      =[Aliquota de IPI         ]
  It_bc_ipi[nitens]        =[IPI_BC                  ]
  It_vr_ipi[nitens]        =[Valor do IPI            ]

  It_trib_ISSQN[nitens]    =[Tributacao de ISSQN     ]
  It_aliq_ISSQN[nitens]    =[Aliquota de ISSQN       ]
  It_bc_ISSQN[nitens]      =[ISSQN_BC                ]
  It_vr_ISSQN[nitens]      =[Valor do ISSQN          ]

  It_cst_pis[nitens]       =[PIS_CST                 ]
  It_aliq_pis[nitens]      =[PIS_Aliquota            ]
  It_bc_pis[nitens]        =[PIS_BC                  ]
  It_vr_pis[nitens]        =[PIS_Valor               ]

  It_cst_cofins[nitens]    =[COFINS_CST              ]
  It_aliq_cofins[nitens]   =[COFINS_Aliquota         ]
  It_bc_cofins[nitens]     =[COFINS_BC               ]
  It_vr_cofins[nitens]     =[COFINS_Valor            ]

  If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
     SubStr(Directory(),1,1)<>"X"                              And
     (It_csosn_icms[nitens]="101" Or It_csosn_icms[nitens]="201")
     Then VRBCICMS_CREDSN  =VRBCICMS_CREDSN+It_prtotal[nitens]
  EndIf   

  If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
     Then
          It_bc_icms[nitens]       =BlankNum()
          It_vr_icms[nitens]       =BlankNum()

          It_bc_st[nitens]         =BlankNum()
          It_vr_st[nitens]         =BlankNum()

          It_vr_icmscred[nitens]   =BlankNum()

          It_bc_ipi[nitens]        =BlankNum()
          It_vr_ipi[nitens]        =BlankNum()

          It_bc_ISSQN[nitens]      =BlankNum()
          It_vr_ISSQN[nitens]      =BlankNum()

          It_bc_pis[nitens]        =BlankNum()
          It_vr_pis[nitens]        =BlankNum()

          It_bc_cofins[nitens]     =BlankNum()
          It_vr_cofins[nitens]     =BlankNum()

  EndIf   
EndScan
LimpAguarde()

Moveto "\\Sistemas\\Vendas\\PedidoC"
Moveto [Numero do Pedido]
Locate NPED_NOVO

CALC_PEDIDO()

EndProc ;Carrega_array_Itens()

;****************************************+**************************************
;* Rotina para Calculo de Valores do Pedido                                    *
;*******************************************************************************
Proc CALC_PEDIDO()             
Aguarde("Calculando valores do pedido")

Moveto "\\Sistemas\\Vendas\\PedidoC"
Moveto [Numero do Pedido]
Locate NPED_NOVO

[Valor Mercadoria]=VRMERC
If [Descricao da Destinacao]="COMPLEMENTO IPI SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO IPI CBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ST"
   Then [Valor Mercadoria  ]=BlankNum()
EndIf
[Valor Servico   ]=VRSERV
If [Taxa de Desconto]>0
   Then VRDESCTO=Round((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-[Valor Desconto]
 
CALCULA_IMPOSTO()

Moveto "\\Sistemas\\Vendas\\PedidoC"
Moveto [Numero do Pedido]
Locate NPED_NOVO

[Valor BCICMS ]=VRBCICMS
[Valor ICMS   ]=VRICMS
[Valor IPI    ]=VRIPI
[Valor BCISSQN]=VRBCISSQN
[Valor ISSQN  ]=VRISSQN
[Valor PIS    ]=VRPIS
[Valor COFINS ]=VRCOFINS

[Valor BCSubstituicao ICMS]=VRBCST
[Valor Substituicao ICMS  ]=VRST              

[Valor Nota Fiscal]=[Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                    [Valor Substituicao ICMS]+[Valor do Seguro]

VRNF=[Valor Nota Fiscal]

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
   Then [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
   Then [Valor BCICMS            ]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ST" 
   Then [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf

;*** 0=BlankNum() **************************************************************
If [Valor BCICMS             ]=0 Then [Valor BCICMS             ]=BlankNum() EndIf
If [Valor ICMS               ]=0 Then [Valor ICMS               ]=BlankNum() EndIf
If [Valor BCSubstituicao ICMS]=0 Then [Valor BCSubstituicao ICMS]=BlankNum() EndIf
If [Valor Substituicao ICMS  ]=0 Then [Valor Substituicao ICMS  ]=BlankNum() EndIf
If [Valor IPI                ]=0 Then [Valor IPI                ]=BlankNum() EndIf
If [Valor BCISSQN            ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
If [Valor ISSQN              ]=0 Then [Valor ISSQN              ]=BlankNum() EndIf
If [Valor do Frete           ]=0 Then [Valor do Frete           ]=BlankNum() EndIf
If [Valor do Seguro          ]=0 Then [Valor do Seguro          ]=BlankNum() EndIf
If [Valor Despesas Acessorias]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf
If [Valor PIS                ]=0 Then [Valor PIS                ]=BlankNum() EndIf
If [Valor COFINS             ]=0 Then [Valor COFINS             ]=BlankNum() EndIf

LimpAguarde()
EndProc     ;  (Calc_Pedidos)

;****************************************+**************************************
;* Rotina para Setar Vari veis de Impostos                                     *
;*******************************************************************************
Proc CALCULA_IMPOSTO()

TP_MOV_ESTOQUE = "S"
VRBCIPI        =0
VRIPI          =0
VRBCICMS       =0
VRICMS         =0
VRBCST         =0
VRST           =0
VRICMS_CREDSN  =0
VRBCISSQN      =0
VRISSQN        =0
VRBCPIS        =0
VRPIS          =0
VRBCCOFINS     =0
VRCOFINS       =0
VRIR           =0
VRNF           =0

MSG_AUTOMATICA="" 

Moveto "\\Sistemas\\Vendas\\PedidoC"
Moveto [Numero do Pedido]
Locate NPED_NOVO
CopyToArray REG_TABELAREFC ; guarda dados registro mestre

;--- Soma dos Items para rateio ------------------------------------------------
MercadoriaRateio_Valor=0
For wi From 1 to DynArraySize(It_prtotal)
  If It_tpitem[wi]="C" ;servi‡o
     Then 
          OutrosRateioOk=False    ;nÆo rateia frete e outros
     Else 
          OutrosRateioOk=True
          If TP_MOV_ESTOQUE="S" And 
             (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
             Then OutrosRateioOk=False
          EndIf
  EndIf
  
  If OutrosRateioOk
     Then MercadoriaRateio_Valor=MercadoriaRateio_Valor+It_prtotal[wi]
  EndIf   
EndFor

;--- Rateio Frete, Seguro, Desconto, Despesas ----------------------------------
Frete_Valor      =0
Seguro_Valor     =0
OutDesp_Valor    =0
Descto_Valor     =0

For wi From 1 to DynArraySize(It_prtotal)

  If It_tpitem[wi]="C" ;servi‡o
     Then OutrosRateioOk=False    ;nÆo rateia frete e outros
          PORC_IT_MERC=0
     Else OutrosRateioOk=True
          PORC_IT_MERC=(It_prtotal[wi]/MercadoriaRateio_Valor)*100 
          If TP_MOV_ESTOQUE="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
             Then OutrosRateioOk=False
          EndIf
  EndIf    

  If OutrosRateioOk
     Then It_txdescto[wi]=TXDESCTO_TOTAL
          It_descto[wi]  =NDecimal((REG_TABELAREFC["Valor Desconto"          ]*PORC_IT_MERC)/100,2)
          If REG_TABELAREFC["Frete Incluso na Nota"]="+"
             Then It_frete[wi]=NDecimal((REG_TABELAREFC["Valor do Frete"     ]*PORC_IT_MERC)/100,2)
             Else It_frete[wi]=0           
          EndIf
          It_seguro[wi] =NDecimal((REG_TABELAREFC["Valor do Seguro"          ]*PORC_IT_MERC)/100,2)
          It_outdesp[wi]=NDecimal((REG_TABELAREFC["Valor Despesas Acessorias"]*PORC_IT_MERC)/100,2)

          Descto_Valor  =Descto_Valor +It_descto[wi]
          Frete_Valor   =Frete_Valor  +It_frete[wi]
          Seguro_Valor  =Seguro_Valor +It_seguro[wi]
          OutDesp_Valor =OutDesp_Valor+It_outdesp[wi]

          If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
          If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
          If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
          If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
          If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf

     Else It_txdescto[wi]=BlankNum()
          It_descto[wi]  =BlankNum()
          It_frete[wi]   =BlankNum()
          It_seguro[wi]  =BlankNum()
          It_outdesp[wi] =BlankNum()
  EndIf

EndFor           
    
;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor ,2)
If REG_TABELAREFC["Frete Incluso na Nota"]="+"
   Then DIF_Frete_Valor=NDecimal(REG_TABELAREFC["Valor do Frete"           ]-Frete_Valor  ,2)
   Else DIF_Frete_Valor=0
EndIf                                           
DIF_Seguro_Valor       =NDecimal(REG_TABELAREFC["Valor do Seguro"          ]-Seguro_Valor ,2)
DIF_OutDesp_Valor      =NDecimal(REG_TABELAREFC["Valor Despesas Acessorias"]-OutDesp_Valor,2)

If DIF_Descto_Valor <>0 Or
   DIF_Frete_Valor  <>0 Or
   DIF_Seguro_Valor <>0 Or
   DIF_OutDesp_Valor<>0 
   Then 
        For wi From 1 to DynArraySize(It_prtotal) 
              
          Switch
            Case It_tpitem[wi]="C" :  ;Igual a Seri‡o
              OutrosRateioOk=False    ;nÆo rateia frete e outros
            OtherWise              :  ;Diferente de servi‡o
              OutrosRateioOk=True     ;rateia frete e outros 
              If TP_MOV_ESTOQUE="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
                 Then OutrosRateioOk=False
              EndIf
          EndSwitch

          If OutrosRateioOk 
             Then 
                  If DIF_Descto_Valor >=0 Or (DIF_Descto_Valor*-1) >=It_descto[wi]
                     Then It_descto[wi] =It_descto[wi] +DIF_Descto_Valor
                          DIF_Descto_Valor=0 
                  EndIf
                  If DIF_Frete_Valor  >=0 Or (DIF_Frete_Valor*-1)  >=It_frete[wi]
                     Then It_frete[wi]  =It_frete[wi]  +DIF_Frete_Valor
                          DIF_Frete_Valor =0
                  EndIf
                  If DIF_Seguro_Valor >=0 Or (DIF_Seguro_Valor*-1) >=It_seguro[wi]
                     Then It_seguro[wi] =It_seguro[wi] +DIF_Seguro_Valor
                          DIF_Seguro_Valor=0
                  EndIf   
                  If DIF_OutDesp_Valor>=0 Or (DIF_OutDesp_Valor*-1)>=It_outdesp[wi]
                     Then It_outdesp[wi]=It_outdesp[wi]+DIF_OutDesp_Valor
                          DIF_OutDesp_Valor=0
                  EndIf   

                  If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
                  If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
                  If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
                  If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
                  If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
        
          EndIf
          If DIF_Descto_Valor =0 And
             DIF_Frete_Valor  =0 And
             DIF_Seguro_Valor =0 And
             DIF_OutDesp_Valor=0
             Then QuitLoop
          EndIf
                                              
        EndFor
EndIf                     
          
;--- Calculando Impostos -------------------------------------------------------
For wi From 1 to DynArraySize(It_prtotal)

  Switch
    Case CALCULO_NF_AUTOMATICO="A":
      
      ;--- Calculando IPI ----------------------------------------------------------
      If It_aliq_ipi[wi]>0
         Then It_bc_ipi[wi]=It_prtotal[wi]
              If REG_TABELAREFC["Frete Incluso na Nota"]="+" And
                 SubStr(It_cfop[wi],1,1)    ="3" And ; entrada import‡Æo  
                 SubStr(It_cst_icms[wi],1,1)="1"     ; item importa‡Æo direta
                 Then It_bc_ipi[wi]=It_bc_ipi[wi]+It_frete[wi]
              EndIf
              It_vr_ipi[wi]=Round((It_bc_ipi[wi]*It_aliq_ipi[wi])/100,2) 
         Else It_bc_ipi[wi]=BlankNum()    
              It_vr_ipi[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando Base de Calculo ICMS para todas as situa‡äes -----------------
      Switch
        Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
          Switch
            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)<>"60": 
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)="60" And
                 Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
        OtherWise:
          Switch
            Case OPCAO_RED_BCICMS=3 And It_red_icms[wi]>0 And It_txdescto[wi]>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
      EndSwitch
      VL_BC_ICMS   =VL_BC_ICMS   +It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_frete[wi]+It_seguro[wi]+It_outdesp[wi] 

      If REG_TABELAREFC["Consumidor Final"]="S" 
         Then VL_BC_ICMS   =VL_BC_ICMS   +it_vr_ipi[wi]
         Else VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
      EndIf   
      VL_RED_BC    =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
      VL_BC_ICMS   =VL_BC_ICMS-VL_RED_BC                   
    
    
      ;--- Calculando Credito ICMS Simples Nacional ------------------------
      If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
         SubStr(Directory(),1,1)<>"X"                              And
         (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")
         Then It_vr_icmscred[wi]  =Round((VL_BC_ICMS*It_aliq_icmscred[wi])/100,2)
         Else It_aliq_icmscred[wi]  =BlankNum()
              It_vr_icmscred[wi]    =BlankNum()
      EndIf   

      ;--- Calculando ICMS ---------------------------------------------------------
      If It_aliq_icms[wi]>0 
         Then It_bc_icms[wi]    =VL_BC_ICMS
              It_vr_icms[wi]    =Round((It_bc_icms[wi]*It_aliq_icms[wi])/100,2)
         Else It_aliq_icms[wi]  =BlankNum()
              It_bc_icms[wi]    =BlankNum()
              It_vr_icms[wi]    =BlankNum()
      EndIf
    
      ;--- Calculando Substituicao Tributaria --------------------------------------
      If It_aliq_st[wi]>0
         Then
              If SYS_CODIGO_CLIENTE="0167"
                 Then VL_BC_ICMS_ST=VL_BC_ICMS_ST-It_frete[wi]     
              EndIf
        
              VL_BC_ICMS_ST=VL_BC_ICMS_ST+Round((VL_BC_ICMS_ST*It_mva[wi])/100,2)
              VL_RED_BCST  =NDecimal((VL_BC_ICMS_ST*It_red_st[wi])/100,2)
              VL_BC_ICMS_ST=VL_BC_ICMS_ST-VL_RED_BCST                   
       
              VL_ICMS_ST=Round((VL_BC_ICMS_ST*It_aliq_st[wi])/100,2)

              ;Comentado para nÆo pegar aliquota do estado caso ICMS esteja em branco
              VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;Switch
              ;  Case It_vr_icms[wi]>0 :
              ;       VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;  OtherWise             :
              ;       VL_ICMS_ST=VL_ICMS_ST-Round((VL_BC_ICMS*UF_ALIQUOTA_ICMS)/100,2)
              ;EndSwitch
        
              It_bc_st[wi]=VL_BC_ICMS_ST
              It_vr_st[wi]=VL_ICMS_ST
      
         Else It_red_st[wi]    =BlankNum() 
              It_aliq_st[wi]   =BlankNum()
              It_bc_st[wi]     =BlankNum()
              It_vr_st[wi]     =BlankNum()
      EndIf
              
      ;--- Calculando ISSQN --------------------------------------------------------
      If It_aliq_issqn[wi]>0
         Then It_bc_issqn[wi]=It_prtotal[wi]
              It_vr_issqn[wi]=Round((It_bc_issqn[wi]*It_aliq_issqn[wi])/100,2) 
         Else It_bc_issqn[wi]=BlankNum()    
              It_vr_issqn[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando PIS ----------------------------------------------------------
      If It_aliq_pis[wi]>0
         Then It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              It_vr_pis[wi]=Round((It_bc_pis[wi]*It_aliq_pis[wi])/100,2) 
         Else It_bc_pis[wi]=BlankNum()    
              It_vr_pis[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando COFINS -------------------------------------------------------
      If It_aliq_cofins[wi]>0
         Then It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              It_vr_cofins[wi]=Round((It_bc_cofins[wi]*It_aliq_cofins[wi])/100,2) 
         Else It_bc_cofins[wi]=BlankNum()    
              It_vr_cofins[wi]=BlankNum()    
      EndIf

    OtherWise:

  EndSwitch

  ;--- Somando Impostos --------------------------------------------------------
  VRBCIPI        =VRBCIPI      +It_bc_ipi[wi]
  VRIPI          =VRIPI        +It_vr_ipi[wi]
  
  If ( (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And It_csosn_icms[wi]="900" )
     Or TPEMPR="DEBITO/CREDITO"
     Then 
          VRBCICMS       =VRBCICMS     +It_bc_icms[wi]
          VRICMS         =VRICMS       +It_vr_icms[wi]
  EndIf
  
  VRICMS_CREDSN  =VRICMS_CREDSN+It_vr_icmscred[wi]
  VRBCST         =VRBCST       +It_bc_st[wi]
  VRST           =VRST         +It_vr_st[wi]
  VRBCISSQN      =VRBCISSQN    +It_bc_issqn[wi]
  VRISSQN        =VRISSQN      +It_vr_issqn[wi]
  VRBCPIS        =VRBCPIS      +It_bc_pis[wi]
  VRPIS          =VRPIS        +It_vr_pis[wi]  
  VRBCCOFINS     =VRBCCOFINS   +It_bc_cofins[wi]
  VRCOFINS       =VRCOFINS     +It_vr_cofins[wi]
                                                                          
EndFor

EndProc ;(IMPOSTO)

;*******************************************************************************
;* Rotina para gerar proximo lancamento                                        *
;*******************************************************************************
Proc ProximaOrdem()
Private i,ok

ok=false
Moveto "\\Sistemas\\Vendas\\PedidoC"

For i From 1 to 10
  Moveto [Numero do Pedido]
  End
  If IsBlank([])
     Then NPED_NOVO="1"
     Else NPED_NOVO=StrVal(NumVal([])+1)
  EndIf
  NPED_NOVO=AlinhM(NPED_NOVO,6)
  Down
  [Numero do Pedido]=NPED_NOVO
  PostRecord KeyViol LeaveLocked
  If RetVal     
     Then ok=True
          QuitLoop
     Else Del
  EndIf    
EndFor

If ok 
   Then REG_PEDIDOC["Numero do Pedido"] = NPED_NOVO
        Moveto [Numero do Pedido]
        Locate NPED_NOVO
        CopyFromArray REG_PEDIDOC
EndIf
Return ok

EndProc ;ProximaOrdem()

;*******************************************************************************
;* Rotina Gera Tabela PedidoC                                                  *
;*******************************************************************************
Proc Gera_PedidoC(PARAM)
Private PARAM

If ProximaOrdem()
   Then [Data de Entrega     ] = DateVal(ARRAY_VENCTO[PARAM])
        [Observacao do Pedido] = [Observacao do Pedido] + " [**PEDIDO DESMEMBRADO PELO SORTIDO N§ "+NPED+"**]"
        UnLockRecord
        
        If NUMERO_PEDIDO_PROCESSADO<>"" Then NUMERO_PEDIDO_PROCESSADO = NUMERO_PEDIDO_PROCESSADO + ", " EndIf
        NUMERO_PEDIDO_PROCESSADO = NUMERO_PEDIDO_PROCESSADO + NPED_NOVO
        Return True
   Else Return False        
EndIf

EndProc ;Gera_PedidoC()  

;*******************************************************************************
;* Rotina Gera Tabela PedidoI                                                  *
;*******************************************************************************
Proc Adiciona_Pedido()
Aguarde("Convertendo pedido modo padr„o")

Barra(TOTAL_PARC,Seq_Pedido)
Aguarde("Ajustando item "+COD_ITEM+" do pedido "+NPED+" "+BARRA_STRING)

Moveto TEMP_PEDIDOI
Moveto [Codigo do Item]
Locate COD_ITEM
If Not RetVal 
   Then Return False 
   Else CopyToArray REG_PEDG
EndIf

Seq_Pedido = Seq_Pedido + 1
Moveto PEDIDOI_WORK    
End Down
[Numero do Pedido         ]=NPED_NOVO
[Item do Pedido           ]=Seq_Pedido
[Codigo do Item           ]=COD_ITEM

[Codigo da Cor_Tecido     ]=REG_ITEM["Codigo da Cor_Tecido"]
[Tamanho                  ]=REG_PEDG["Tamanho"]
[Quantidade               ]=QTD
[Quantidade Faturada      ]=BlankNum()

[Preco Unitario           ]=REG_PEDG["Preco Unitario"]
[Taxa Desconto Unitario   ]=REG_PEDG["Taxa Desconto Unitario"]
[Valor Desconto Unitario  ]=REG_PEDG["Valor Desconto Unitario"]
[Preco Total              ]=[Quantidade]*([Preco Unitario]-[Valor Desconto Unitario])
[Preco Unitario Tabela    ]=REG_PEDG["Preco Unitario Tabela"]
[Taxa Desconto Total      ]=REG_PEDG["Taxa Desconto Total"]
[Valor Desconto Total     ]=REG_PEDG["Valor Desconto Total"]
[Peso Liquido             ]=REG_PEDG["Peso Liquido"]
[Peso Embalagem           ]=REG_PEDG["Peso Embalagem"]
[Volumes                  ]=REG_PEDG["Volumes"]
[ItemSortido              ]="S"

OBS_SORT="[S]"
If [Observacao_Item]<>""
   Then [Observacao_Item] = [Observacao_Item] + " " + OBS_SORT
   Else [Observacao_Item] = OBS_SORT
EndIf            

[Codigo da Tabela         ]=REG_PEDG["Codigo da Tabela"]                                         
[Tipo Tributacao          ]=REG_PEDG["Tipo Tributacao"]      
[CFO                      ]=REG_PEDG["CFO"]
[Tributacao de ICMS       ]=REG_PEDG["Tributacao de ICMS"]
[Aliquota Reduzida BCICMS ]=REG_PEDG["Aliquota Reduzida BCICMS"]
[Aliquota de ICMS         ]=REG_PEDG["Aliquota de ICMS"]
[Valor do ICMS            ]=REG_PEDG["Valor do ICMS"]

[CSOSN                    ]=REG_PEDG["CSOSN"]    
[MVA                      ]=REG_PEDG["MVA"]
[NCM                      ]=REG_PEDG["NCM"]
                            
[ICMS_ST_Aliquota         ]=REG_PEDG["ICMS_ST_Aliquota"] 
[ICMS_ST_BC               ]=REG_PEDG["ICMS_ST_BC"]            
[ICMS_ST_Valor            ]=REG_PEDG["ICMS_ST_Valor"] 
[ICMS_BC                  ]=REG_PEDG["ICMS_BC"] 
[ICMS_CredSN_Aliquota     ]=REG_PEDG["ICMS_CredSN_Aliquota"] 
[ICMS_CredSN_Valor        ]=REG_PEDG["ICMS_CredSN_Valor"]     
[Tributacao de IPI        ]=REG_PEDG["Tributacao de IPI"]
[Aliquota de IPI          ]=REG_PEDG["Aliquota de IPI"]
[Valor do IPI             ]=REG_PEDG["Valor do IPI"]
[IPI_CST                  ]=REG_PEDG["IPI_CST"] 
[IPI_BC                   ]=REG_PEDG["IPI_BC"]            
                      
[Tributacao de ISSQN      ]=REG_PEDG["Tributacao de ISSQN"] 
[Aliquota de ISSQN        ]=REG_PEDG["Aliquota de ISSQN"] 
[Codigo_Servico           ]=REG_PEDG["Codigo_Servico"]            
[ISSQN_BC                 ]=REG_PEDG["ISSQN_BC"] 
[ISSQN_UF                 ]=REG_PEDG["ISSQN_UF"] 
                         
[PIS_CST                  ]=REG_PEDG["PIS_CST"] 
[PIS_Aliquota             ]=REG_PEDG["PIS_Aliquota"] 
[PIS_BC                   ]=REG_PEDG["PIS_BC"]            
[PIS_Valor                ]=REG_PEDG["PIS_Valor"] 
                         
[COFINS_CST               ]=REG_PEDG["COFINS_CST"] 
[COFINS_Aliquota          ]=REG_PEDG["COFINS_Aliquota"] 
[COFINS_BC                ]=REG_PEDG["COFINS_BC"]            
[COFINS_Valor             ]=REG_PEDG["COFINS_Valor"] 
UnLockRecord

If [Taxa Desconto Unitario]>0
   Then [Valor Desconto Unitario]=NDecimal(([Preco Unitario]*[Taxa Desconto Unitario])/100,2)
EndIf
If [Quantidade]>0
   Then [Preco Total]=[Quantidade]*([Preco Unitario]-[Valor Desconto Unitario])
   Else If [Preco Unitario]>0
           Then [Preco Total]=[Preco Unitario]-[Valor Desconto Unitario]
        EndIf
EndIf
If [Aliquota Reduzida BCICMS]>0 And
   [Aliquota de ICMS        ]>0
   Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
   Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
EndIf
If [Tributacao de IPI]<>"D"
   Then If Not IsBlank([Tributacao de IPI])
           Then [Aliquota de IPI]=BlankNum()
                [Valor do IPI   ]=BlankNum()
        EndIf
EndIf
If [Aliquota de IPI        ]>0
   Then [Valor do IPI]=Round(([Preco Total]*[Aliquota de IPI])/100,2)
EndIf
UnLockRecord

;---- Achando o Item do PedidoG ------------------------------------------------
GetRecord "\\Sistemas\\Estoque\\Itens" COD_ITEM To REG_ITEM
If Not RetVal
   Then Return False
EndIF   
GetRecord "\\Sistemas\\Estoque\\TpGrade" REG_ITEM["Codigo da Grade"] To REG_GRADE
If RetVal
   Then Aux_Item      = ""
        POSICAO_GRADE = 0
        For jk From 1 To 12   
          Switch
            Case jk=1 : Aux=REG_GRADE["Codigo Item1"]  
            Case jk=2 : Aux=REG_GRADE["Codigo Item2"]  
            Case jk=3 : Aux=REG_GRADE["Codigo Item3"]  
            Case jk=4 : Aux=REG_GRADE["Codigo Item4"]  
            Case jk=5 : Aux=REG_GRADE["Codigo Item5"]  
            Case jk=6 : Aux=REG_GRADE["Codigo Item6"]  
            Case jk=7 : Aux=REG_GRADE["Codigo Item7"]  
            Case jk=8 : Aux=REG_GRADE["Codigo Item8"]  
            Case jk=9 : Aux=REG_GRADE["Codigo Item9"]  
            Case jk=10: Aux=REG_GRADE["Codigo Item10"] 
            Case jk=11: Aux=REG_GRADE["Codigo Item11"] 
            Case jk=12: Aux=REG_GRADE["Codigo Item12"] 
          EndSwitch
          
          If Rtrim(Aux)<>""
             Then If Len(Aux)=1
                     Then Item     = SubStr(COD_ITEM,1,9)+Aux
                          Aux_Item = SubStr(COD_ITEM,1,9)
                     Else Item     = SubStr(COD_ITEM,1,8)+Aux
                          Aux_Item = SubStr(COD_ITEM,1,8)                            
                  EndIf
                  If Len(Item)=10 And Item=COD_ITEM 
                     Then POSICAO_GRADE=jk 
                          QuitLoop 
                  EndIf
          EndIf
        EndFor        
        
        If Aux_Item<>""
           Then Moveto TEMP_PEDIDOG
                Moveto [Codigo do Item]
                Locate Pattern Aux_Item+".."
                If RetVal
                   Then CopyToArray REG_PEDG
                        
                        ACHOU_ITEM = False
                        Moveto PEDIDOG_WORK
                        Moveto [Numero do Pedido]
                        Locate NPED_NOVO
                        If RetVal
                           Then While [Numero do Pedido] = NPED_NOVO
                                  If [Codigo do item] = REG_PEDG["Codigo do Item"]
                                     Then ACHOU_ITEM = True
                                          QuitLoop
                                  EndIf    
                                  Skip
                                  If Eot() Then QuitLoop EndIf
                                EndWhile       
                        EndIf
                        
                        If Not ACHOU_ITEM
                           Then Seq_PedidoG = Seq_PedidoG + 1
                                For jk From 1 To 12
                                  If jk = POSICAO_GRADE Then Loop EndIf
                                  Switch
                                    Case jk=1 : REG_PEDG["Qtd1"]   = BlankNum()
                                    Case jk=2 : REG_PEDG["Qtd2"]   = BlankNum()
                                    Case jk=3 : REG_PEDG["Qtd3"]   = BlankNum()
                                    Case jk=4 : REG_PEDG["Qtd4"]   = BlankNum()
                                    Case jk=5 : REG_PEDG["Qtd5"]   = BlankNum()
                                    Case jk=6 : REG_PEDG["Qtd6"]   = BlankNum()  
                                    Case jk=7 : REG_PEDG["Qtd7"]   = BlankNum()  
                                    Case jk=8 : REG_PEDG["Qtd8"]   = BlankNum()
                                    Case jk=9 : REG_PEDG["Qtd9"]   = BlankNum()
                                    Case jk=10: REG_PEDG["Qtd10"]  = BlankNum()
                                    Case jk=11: REG_PEDG["Qtd11"]  = BlankNum()
                                    Case jk=12: REG_PEDG["Qtd12"]  = BlankNum()
                                  EndSwitch
                                EndFor
                                REG_PEDG["Numero do Pedido"]=NPED_NOVO
                                REG_PEDG["Item do Pedido"  ]=Seq_PedidoG
                                End Down
                                CopyFromArray REG_PEDG
                           Else AUX_QTD = 0 
                                
                                Moveto TEMP_PEDIDOG
                                Moveto Field "QTD"+StrVal(POSICAO_GRADE)
                                AUX_QTD = []
                                 
                                Moveto PEDIDOG_WORK
                                Moveto Field "QTD"+StrVal(POSICAO_GRADE)
                                [] = [] + AUX_QTD  
                        EndIf
                        
                        AUX_QTD = 0
                        For jk From 1 To 12
                          Moveto Field "QTD"+StrVal(jk)
                          AUX_QTD = AUX_QTD + []                             
                        EndFor
                        
                        [Quantidade               ]=AUX_QTD
                        [Preco Unitario           ]=REG_PEDG["Preco Unitario"]

                        [Tipo Desconto Item       ]=""
                        [Valor Desconto Item      ]=BlankNum()
                        [Taxa Desconto Unitario   ]=BlankNum()
                        [Valor Desconto Unitario  ]=BlankNum()
                        
                      
                        [Preco Total              ]=[Quantidade] * [Preco Unitario] 
                        [Preco Unitario Tabela    ]=REG_PEDG["Preco Unitario Tabela"]
                       
                        [Taxa Desconto Total      ]=BlankNum()
                        [Valor Desconto Total     ]=BlankNum()        
                                                  
                   Else Return False
                EndIf  
         EndIf
   Else Return False
EndIf   

Return True

EndProc ;Gera_PedidoI() 

;*******************************************************************************
;* Encerra Entrega                                                             *
;*******************************************************************************
Proc Verifica_Alteracao_Entrega(PARAM)

ACHOU_DIFERENCA=False

While Not ACHOU_DIFERENCA
  If ArraySize(ARRAY_ENTREGA) <> ArraySize(INICIO_ARRAY_ENTREGA)
     Then ACHOU_DIFERENCA=True
          QuitLoop
  EndIf

  For i From 1 To ArraySize(ARRAY_ENTREGA)
    If ARRAY_ENTREGA[i] <> INICIO_ARRAY_ENTREGA[i]
       Then ACHOU_DIFERENCA=True
             QuitLoop
    EndIf
  EndFor
  QuitLoop
EndWhile

If PARAM<>""
   Then If ACHOU_DIFERENCA
           Then Return True
           Else Return False
        EndIf   
EndIf   
 
If ACHOU_DIFERENCA 
  Then COR_MENSAGEM="ALERTA"
       MSG =        Completa("Foi  detectado  altera‡”es  nas datas de entrega desta rela‡„o.",63," ")+"////"
       MSG =  MSG + Completa("Se sair desta opera‡„o, todas as altera‡”es ser„o perdidas e as",63," ")+"//"
       MSG =  MSG + Completa("datas  de  entrega  inseridas/alteradas  n„o ser„o adicionadas.",63," ")+"//"
       MSG =  MSG + Completa("Deseja realmente sair desta opera‡„o?",63," ")   
       ConfGeral(MSG)
       If OK<>"S"
          Then Return False
       EndIF                               
EndIf

Return True

EndProc ;Verifica_Alteracao_Entrega()

;*******************************************************************************
;* Adiciona Entrega                                                            *
;*******************************************************************************
Proc Adiciona_Entrega()

If Not Verifica_Alteracao_Entrega("Add_Entrega") Or VSDGPARCELAS=""
   Then Return
EndIf
             
NPED = [Numero do Pedido]
GetRecord "\\Sistemas\\Vendas\\PedidoC" NPED To REG_PEDIDO
If Not RetVal
   Then Mensagem("Pedido "+NPED+" n„o foi localizado nos Pedidos!")
        Return
EndIf

ENTREGA = ""
For ii From 1 To ArraySize(ARRAY_ENTREGA)
  If ii<>1 Then ENTREGA = ENTREGA + "/" EndIf
  ENTREGA = ENTREGA + AlinhM(StrVal(ARRAY_ENTREGA[ii]),10)
Endfor

NP = NumVal(Rtrim(SubStr(VSDGPARCELAS,1,Search("P",Upper(VSDGPARCELAS))-1)))

[Entrega           ]=ENTREGA
[Numero de Parcelas]=NP
UnlockRecord

EndProc ;Adiciona_Entrega()

;*******************************************************************************
;* Di logo de Entrega                                                          *
;*******************************************************************************
Proc Sd_Dialog_ENTREGA(Disparo,Campo,Evento,Elemento)

Temp           = True
MSG_CAMPO      = ""                                               
TECLA          = "F9=Adicionar Dt.Entrega  PgDn=Finalizar"
                           
If INICIO_DIALOG
   Then Campo = "TG_ENTREGA"
        INICIO_DIALOG=False
EndIf   

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_ENTREGA"     : If Verifica_Alteracao_Entrega("") 
                                            Then CancelDialog
                                         EndIf   
            Case Campo="TG_DTENTREGA"   : VSDGDTENTREGA = BlankDate()
                                         Campo="TG_ENTREGA"
          EndSwitch
     
     Case Evento["KeyCode"] = -81 And Campo="TG_ENTREGA" :
          If ArraySize(ARRAY_ENTREGA)>0 And ARRAY_ENTREGA[1] <> ""
             Then Adiciona_Entrega()
                  CancelDialog
          EndIf        
     Case Evento["KeyCode"] = -67 And Campo="TG_ENTREGA" : Campo="TG_DTENTREGA"
     
     Case Evento["KeyCode"] = -83 And Campo="TG_ENTREGA" :
          If ArraySize(ARRAY_ENTREGA)>0 And ARRAY_ENTREGA[1] <> ""
             Then ConfGeral("Deseja excluir a data "+ARRAY_ENTREGA[NumVal(VSDGCENTREGA)]+" ?")
                  If OK="S"
                     Then If ArraySize(ARRAY_ENTREGA) = 1 
                            Then ARRAY_ENTREGA[1] = "" 
                                 VSDGPARCELAS = ""
                            Else Indice = NumVal(VSDGCENTREGA)
                                
                                 Array AUX_ARRAY_ENTREGA[ArraySize(ARRAY_ENTREGA)]
                                 For ii From 1 To ArraySize(ARRAY_ENTREGA)
                                   AUX_ARRAY_ENTREGA[ii]=ARRAY_ENTREGA[ii]
                                 Endfor
                                 
                                 Release Vars ARRAY_ENTREGA
                                 CONTADOR=0
                                 Array ARRAY_ENTREGA[ArraySize(AUX_ARRAY_ENTREGA)-1]
                                 For ii From 1 To ArraySize(AUX_ARRAY_ENTREGA)
                                   If DateVal(AUX_ARRAY_ENTREGA[Indice])<>DateVal(AUX_ARRAY_ENTREGA[ii])
                                      Then CONTADOR = CONTADOR + 1 
                                           ARRAY_ENTREGA[CONTADOR]=AUX_ARRAY_ENTREGA[ii]
                                   EndIf
                                 Endfor
                                 Release Vars CONTADOR,AUX_ARRAY_ENTREGA
                                 
                                 If ArraySize(ARRAY_ENTREGA)>1
                                    Then VSDGPARCELAS = StrVal(ArraySize(ARRAY_ENTREGA))+" parcelas"
                                    Else VSDGPARCELAS = StrVal(ArraySize(ARRAY_ENTREGA))+" parcela"
                                 EndIf
                                 RefreshDialog
                          EndIf    
                  EndIf
          EndIf
     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_DTENTREGA"       : Campo="TG_ENTREGA"
                         VSDGDTENTREGA = ControlValue("TG_DTENTREGA")
                         
                         If Isblank(VSDGDTENTREGA)
                            Then Campo="TG_DTENTREGA"
                            Else ACHOU_DATA = False
                                 If ARRAY_ENTREGA[1]<>"" 
                                    Then For ii From 1 To ArraySize(ARRAY_ENTREGA)
                                           If DateVAl(VSDGDTENTREGA) = DateVal(ARRAY_ENTREGA[ii])
                                              Then ACHOU_DATA = True
                                                   QuitLoop
                                           EndIf
                                         EndFor
                                 EndIf
                               
                                 If Not ACHOU_DATA
                                    Then If ARRAY_ENTREGA[1] = ""
                                            Then ARRAY_ENTREGA[1] = AlinhM(StrVal(VSDGDTENTREGA),10)
                                                 VSDGPARCELAS = "1 parcela"
                                            Else Array AUX_ARRAY_ENTREGA[ArraySize(ARRAY_ENTREGA)+1]
                                                 For ii From 1 To ArraySize(ARRAY_ENTREGA)+1
                                                   If ii = ArraySize(ARRAY_ENTREGA)+1
                                                      Then AUX_ARRAY_ENTREGA[ii] = VSDGDTENTREGA
                                                      Else AUX_ARRAY_ENTREGA[ii] = ARRAY_ENTREGA[ii]
                                                   EndIf
                                                 EndFor
                                                 Release Vars ARRAY_ENTREGA
                                                 
                                                 Array ARRAY_ENTREGA[ArraySize(AUX_ARRAY_ENTREGA)]
                                                 For ii From 1 To ArraySize(AUX_ARRAY_ENTREGA)
                                                   ARRAY_ENTREGA[ii] = AUX_ARRAY_ENTREGA[ii]
                                                 EndFor
                                                 Alinha_Data()
                                         EndIf
                                         VSDGDTENTREGA = BlankDate()
                                    Else Mensagem("Data "+StrVal(VSDGDTENTREGA)+" j  foi inserida!")
                                         Campo="TG_DTENTREGA"
                                 EndIF
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
	Case Campo="":
		 MSG_CAMPO=""   
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc Edita_Entrega()
Private CONTADOR,AUX_ARRAY_ENTREGA,ii

If [Numero do Pedido]=""
   Then Return
EndIf   
   
NPED        = [Numero do Pedido]
ENTREGA     = Ltrim(Rtrim([Entrega]))
AUX_ENTREGA = ENTREGA 

If AUX_ENTREGA<>""
   Then CONTADOR     = 0
        DynArray AUX_ARRAY_ENTREGA[]
        
        While AUX_ENTREGA<>""
          CONTADOR = CONTADOR + 1
          AUX_ARRAY_ENTREGA[CONTADOR] = SubStr(AUX_ENTREGA,1,10)
          
          AUX_ENTREGA = Ltrim(Rtrim(SubStr(AUX_ENTREGA,12,Len(AUX_ENTREGA))))
        EndWhile 
        
        If DynArraySize(AUX_ARRAY_ENTREGA)>0
           Then Array ARRAY_ENTREGA[DynArraySize(AUX_ARRAY_ENTREGA)]
                For ii From 1 To DynArraySize(AUX_ARRAY_ENTREGA)
                  ARRAY_ENTREGA[ii] = AUX_ARRAY_ENTREGA[ii]
                EndFor
           Else Array ARRAY_ENTREGA[1]
                ARRAY_ENTREGA[1] = ""
        EndIf
        
        Alinha_Data()
        
        Array INICIO_ARRAY_ENTREGA[ArraySize(ARRAY_ENTREGA)]
        For i From 1 To ArraySize(ARRAY_ENTREGA)
          INICIO_ARRAY_ENTREGA[i] = ARRAY_ENTREGA[i]
        EndFor
   Else Array ARRAY_ENTREGA[1]
        ARRAY_ENTREGA[1] = "" 
        VSDGPARCELAS = ""
        
        Array INICIO_ARRAY_ENTREGA[1]
        INICIO_ARRAY_ENTREGA[1] = ""        
EndIf

While True
  INICIO_DIALOG=True
  
  ENCERRA      = False
  Result       = False
  VSDGDTENTREGA = BlankDate()
  VSDGFLAG     = ""
  VSDGPARCELAS = ""
  
  Switch
    Case ArraySize(ARRAY_ENTREGA)=1 And ARRAY_ENTREGA[1]="" : VSDGPARCELAS = ""  
    Case ArraySize(ARRAY_ENTREGA)=1 : VSDGPARCELAS = StrVal(ArraySize(ARRAY_ENTREGA))+" parcela"
    Case ArraySize(ARRAY_ENTREGA)>1 : VSDGPARCELAS = StrVal(ArraySize(ARRAY_ENTREGA))+" parcelas"
  EndSwitch
    
  Echo Normal
  Echo Off
  ShowDialog "Entrega" Proc "Sd_Dialog_ENTREGA"
  Trigger "OPEN","ARRIVE","CLOSE","SELECT"
  Key "F1","ENTER","ESC","F8",-66,-67,-81,-83,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
       @ 06,10   Height 15 Width 37
  
      Label  @ 01,00 "Dt Entrega" For "TG_DTENTREGA"
      Accept @ 02,01 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTENTREGA" To VSDGDTENTREGA
      
      @ 02,18 ?? VSDGPARCELAS
      PaintCanvas Attribute 26 02, 18, 02,29
    
      Label @ 04,00 "Entrega" For "TG_ENTREGA"
      PickArray @05,01 Height 7 width 33
        Columns 1
         ARRAY_ENTREGA
          Tag "TG_ENTREGA"
           To VSDGCENTREGA   
           
                
  EndDialog
  If Not RetVal 
     Then QuitLoop 
     Else If ENCERRA
             Then QuitLoop
             Else Loop
          EndIf        
  EndIf
EndWhile      

EndProc ;Edita_Entrega()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
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_DESTINAT"      : Campo="TG_EMPRESA"
            Case Campo="TG_MARCA"         : Campo="TG_DESTINAT"
            Case Campo="TG_ESTADO"        : Campo="TG_MARCA"
            Case Campo="TG_CIDADE"        : Campo="TG_ESTADO"
            Case Campo="TG_DESTIN"        : Campo="TG_CIDADE"
						Case Campo="TG_OPDT"          : Campo="TG_DESTIN"
						Case Campo="TG_DTINI"         : Campo="TG_OPDT"
						Case Campo="TG_HRINI"         : Campo="TG_DTINI"
						Case Campo="TG_DTFIM"         : Campo="TG_HRINI"
						Case Campo="TG_HRFIM"         : Campo="TG_DTFIM"
            Case Campo="TG_SITUACAOPEDIDO"     : Campo="TG_HRFIM"
            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" : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT": Campo="TG_MARCA"
                    Case Campo="TG_MARCA"   : Campo="TG_ESTADO"
                    Case Campo="TG_ESTADO"  : Campo="TG_CIDADE" 
                    Case Campo="TG_CIDADE"  : Campo="TG_DESTIN"
                    Case Campo="TG_DESTIN"  : Campo="TG_OPDT"
                    Case Campo="TG_OPDT"    : Campo="TG_DTINI"
                         VSDGOPDT=ControlValue("TG_OPDT")
                         Switch
                           Case VSDGOPDT="E": VSDGDESCOPDT="DATA DE EMISSAO"
                           Case VSDGOPDT="I": VSDGDESCOPDT="DATA DE INCLUSAO"
                           Case VSDGOPDT="N": VSDGDESCOPDT="DATA DE ENTREGA"
                           OtherWise: Campo="TG_OPDT"
                         EndSwitch
                    Case Campo="TG_DTINI"   : Campo="TG_HRINI"
                    Case Campo="TG_HRINI"   : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"   : Campo="TG_HRFIM"
										Case Campo="TG_HRFIM"   : Campo="TG_SITUACAOPEDIDO"
                    Case Campo="TG_SITUACAOPEDIDO" : Campo="YES"
									  
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
	Case Campo="":
		 MSG_CAMPO=""
  Case Campo="TG_OPDT":
     MSG_CAMPO="Op‡„o: Emiss„o/Inclus„o/eNtrega "
  Case Campo="TG_OPCOES":
     MensagemCheckBoxes()   
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog_Desmembramento(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo="OPEN"  
   Then INICIA_DIALOG = False
        AoCriarShowDialog()
        If refazershowdialog 
           Then Campo=CampoAnterior 
                refazershowdialog=false 
        EndIf  
EndIf     

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_OPDTPEEIRF"    : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_OPDTPEEIRF"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="YES" Or Campo="NO": Campo="TG_OPDTPEEIRF"
          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_OPDTPEEIRF"    : Campo="TG_DTINI"
                         If VSDGOPDTPEEIRF="4"
                            Then Campo="TG_MARCA"
                            
                                 VSDGDTINI  =BlankDate()
                                 VSDGDTFIM  =BlankDate()
                                 
                                 Campo="YES"
                         Endif   
                    Case Campo="TG_DTINI" : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM" : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_OPDTPEEIRF" : MSG_CAMPO="Op‡”es: 1=ENTREGA  2=EMISS¶O  3=INCLUS¶O  4=RELA€¶O"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ; SD_Dialog_Desmembramento()

;*******************************************************************************
;* Rotina p/ Impressao dos Pedidos Desmembrados                                *
;*******************************************************************************
Proc Imprimir()
LimpAguarde()

AUX_SEQ = [Sequencia]

Do_It!
ClearAll
Echo Normal
Echo Off

refazershowdialog = false

VSDGOPDTPEEIRF    = ""
VSDGDTINI         = BlankDate()
VSDGDTFIM         = BlankDate()

While True
  INICIA_DIALOG = True
  ShowDialog "Imprimir Pedidos Desmembrados" Proc "SD_Dialog_Desmembramento"
    Trigger "OPEN","ARRIVE","UPDATE"
    Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 02,19   Height 09 Width 72

    Label  @ 00,00 "Op‡äes de Datas" For "TG_OPDTPEEIRF"
    Accept @ 01,04 Width 04 "A1"  Picture "1,2,3,4"  Tag "TG_OPDTPEEIRF"  To VSDGOPDTPEEIRF
    Accept @ 01,09 Width 25 "A20" Picture "!*!"      Tag "TG_NOMOPDTPEEIRF" To VSDGNOMOPDTPEEIRF            
        
    Label  @ 02,00 "Per¡odo Referente de" For "TG_DTINI"
    Label  @ 03,00 "de" For "TG_DTINI"
    Accept @ 03,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,17 "at‚" For "TG_DTFIM"
    Accept @ 03,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM   

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  if refazershowdialog then loop endif
  
  Switch
    Case VSDGDTINI=BlankDate() And VSDGOPDTPEEIRF<>"4" : Mensagem("Data Inicial inv lida!")     Loop
    Case VSDGDTFIM=BlankDate() And VSDGOPDTPEEIRF<>"4" : Mensagem("Data Final Invalida!")       Loop
  EndSwitch
  
  DISPOSITIVO()
  If OK="" Then Loop EndIf
  
  If VSDGOPDTPEEIRF="4"
     Then {Ask} {DP_REL}
          Moveto [Numero do Pedido    ] Example "Ped"
  EndIf         
  {Ask} {PedidoC}
  Moveto [Numero do Pedido    ] Check 
  If VSDGOPDTPEEIRF="4" 
     Then Example "Ped"
  EndIf   
  Moveto [Data de Emissao     ] Check
  Moveto [Data de Entrega     ] Check
  
  if VSDGOPDTPEEIRF="1" Then Moveto [Data de Entrega ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM" endif
  If VSDGOPDTPEEIRF="2" Then Moveto [Data de Emissao ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM" endif
  if VSDGOPDTPEEIRF="3" Then Moveto [Data_Inclusao   ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM" endif    
  
  Moveto [Situacao do Pedido  ]       TypeIn "CANCELADO"   
  Moveto [Codigo              ] Check
  Moveto [Razao Social        ] Check
  Moveto [Observacao do Pedido] Check TypeIn "..DESMEMBRADO.."
  Do_It!
  Clearall
          
  If IsEmpty("Answer")
     Then Mensagem("N„o h  registros a serem processados!")
          Loop 
  EndIf           
          
  DP_IMPRIMIR=Cria_Temp(PrivDir())                        
  Cria_Tabela(DP_IMPRIMIR,"Numero do Pedido(A6),"+
                          "Data de Emissao(D),"+
                          "Data de Entrega(D),"+
                          "Codigo(A4),"+
                          "Razao Social(A40),"+
                          "Observacao do Pedido(M70)")
   
  Add "Answer" DP_IMPRIMIR
  Clearall                    
  
  CRIAR_TABELA = False                           
  Adiciona_Campo(DP_IMPRIMIR,"Entrega(A255),Pedidos Desmembrados(A255)")
  
  If VSDGOPDTPEEIRF="4"
     Then {Ask} {DP_REL}
          Moveto [Numero do Pedido    ] Example "Ped"
          Moveto [Entrega             ] Example "Ent"
          {Ask} TypeIn DP_IMPRIMIR Enter
          Moveto [Numero do Pedido    ] Example "Ped"
          Moveto [Entrega             ] TypeIn "Changeto _Ent"
          Do_it!
          ClearAll
  EndIf
    
  ARQIMP=PrivDir()+"DES_PED.Txt"
  If IsFile(ARQIMP)
     Then Deleta_Arquivo(ARQIMP)
  EndIf  
    
  Cabecalho() 
  
  CoEdit DP_IMPRIMIR
  Scan
    Barra(NRecords(DP_IMPRIMIR), RecNo())
    Aguarde("Aguarde a impressÆo dos pedidos demembrados "+BARRA_STRING)
    
    NUM_PED = [Numero do Pedido] 
    
    Release Vars Aux_Array_Entrega
    
    If VSDGOPDTPEEIRF="4"
       Then ;Data de Entrega da rela‡Æo para conferˆncia
            ENTREGA  = [Entrega]
            CONT_ENT = 0
            DynArray Aux_Array_Entrega[] 
            PosI = SearchFrom("/",ENTREGA,1)
            If PosI > 0
               Then While PosI > 0
                      CONT_ENT = CONT_ENT + 1
                      Aux_Array_Entrega[CONT_ENT] = AlinhM(StrVal(CONT_ENT),3)+ SubStr(ENTREGA,1,PosI-1)
                      ENTREGA  = SubStr(ENTREGA,PosI+1,Len(ENTREGA))
                      PosI     = SearchFrom("/",ENTREGA,1)
                    EndWhile
                    CONT_ENT = CONT_ENT + 1
                    Aux_Array_Entrega[CONT_ENT] = AlinhM(StrVal(CONT_ENT),3)+ ENTREGA
               Else CONT_ENT = 1
                    Aux_Array_Entrega[CONT_ENT] = AlinhM(StrVal(CONT_ENT),3)+ ENTREGA
            EndIf
            
            Array Array_Entrega[DynArraySize(Aux_Array_Entrega)]
            For i From 1 To DynArraySize(Aux_Array_Entrega)    
              Array_Entrega[i] = Substr(Aux_Array_Entrega[i],4,Len(Aux_Array_Entrega[i])) 
            EndFor      
            Release Vars CONT_ENT,Aux_Array_Entrega,PosI,PosF     
    EndIf
    
    PEDIDOS = [Observacao do Pedido]
    PosI = Search("DESMEMBRADO",Upper(PEDIDOS))
    PosF = Search("**]",Upper(PEDIDOS))
    If PosI > 0   
       Then PEDIDOS = SubStr(PEDIDOS,PosI+20,POSF-(POSI+20))
            [Pedidos Desmembrados] = PEDIDOS
            
            CONT_PED = 0
            DynArray Aux_Array_Pedidos[] 
            PosI = SearchFrom(",",PEDIDOS,1)
            If PosI > 0
               Then While PosI > 0
                      CONT_PED = CONT_PED + 1
                      Aux_Array_Pedidos[CONT_PED] = AlinhM(StrVal(CONT_PED),3)+ SubStr(PEDIDOS,1,PosI-1)
                      PEDIDOS  = Ltrim(Rtrim(SubStr(PEDIDOS,PosI+1,Len(PEDIDOS))))
                      PosI     = SearchFrom(",",PEDIDOS,1)
                    EndWhile
                    CONT_PED = CONT_PED + 1
                    Aux_Array_Pedidos[CONT_PED] = AlinhM(StrVal(CONT_PED),3)+ Pedidos
               Else CONT_PED = 1
                    Aux_Array_Pedidos[CONT_PED] = AlinhM(StrVal(CONT_PED),3)+ Pedidos
            EndIf
            
            Array Array_Pedidos[DynArraySize(Aux_Array_Pedidos)]
            For i From 1 To DynArraySize(Aux_Array_Pedidos)    
              Array_Pedidos[i] = Substr(Aux_Array_Pedidos[i],4,Len(Aux_Array_Pedidos[i])) 
            EndFor      
            Release Vars CONT_PED,Aux_Array_Pedidos,PosI,PosF
            
            ;---- N§ de pe‡as do produto original ------------------------------
            Do_iT!
            
            {Ask} {PedidoI} 
            Moveto [Numero do Pedido] TypeIn "~NUM_PED"
            Moveto [Quantidade      ] TypeIn "Calc Sum as Quantidade"
            Do_iT!
            
            NPECAS_ORIGINAL=[Quantidade]
            ClearImage
            Moveto "PedidoI"
            ClearImage
            
            ;---- N§ de pe‡as dos produtos desmembrados ------------------------
            Array Array_NPecas[ArraySize(Array_Pedidos)]
            
            For i From 1 To ArraySize(Array_Pedidos)
              AUX_NPED = Array_Pedidos[i]
              {Ask} {PedidoI} 
              Moveto [Numero do Pedido] TypeIn "~AUX_NPED"
              Moveto [Quantidade      ] TypeIn "Calc Sum as Quantidade"
              Do_iT!
              If Not IsEmpty("Answer")
                 Then Array_NPecas[i] = [Quantidade]
                 Else Array_NPecas[i] = BlankNum()
              EndIf   
              ClearImage
              Moveto "PedidoI"
              ClearImage
            EndFor   
            
            Moveto DP_IMPRIMIR
            CoeditKey
                        
            ;Data de Entrega por per¡odo
            If VSDGOPDTPEEIRF<>"4"
               Then DynArray Aux_Array_Entrega[]
                    For i From 1 To ArraySize(Array_Pedidos)
                      GetRecord "PedidoC" Array_Pedidos[i] To REG_ENTREGA
                      If Retval
                         Then Aux_Array_Entrega[i] = AlinhM(StrVal(i),3)+Strval(REG_ENTREGA["Data de Entrega"])           
                         Else Aux_Array_Entrega[i] = AlinhM(StrVal(i),3)+"  ******  " 
                      EndIf  
                    EndFor
                    Array Array_Entrega[DynArraySize(Aux_Array_Entrega)]
                    For i From 1 To DynArraySize(Aux_Array_Entrega)    
                      Array_Entrega[i] = Substr(Aux_Array_Entrega[i],4,Len(Aux_Array_Entrega[i])) 
                    EndFor      
                    Release Vars i,Aux_Array_Entrega
            EndIf
       Else Array Array_Pedidos[1]
            Array_Pedidos[1] = "N„o foi localizado pedidos desmembrados"
    EndIf    
    Release Vars Aux_Array_Pedidos,PosI,PosF
    
    ;---- ImpressÆo do Arquivo -------------------------------------------------
    Switch
      Case ArraySize(Array_Entrega) > ArraySize(Array_Pedidos) : TM = ArraySize(Array_Entrega) 
      Case ArraySize(Array_Pedidos) > ArraySize(Array_Entrega) : TM = ArraySize(Array_Pedidos)
      OtherWise                                                : TM = ArraySize(Array_Entrega)
    EndSwitch
    
    NLIN = NLIN + TM + 3
    If NLIN >=66
       Then Print File ARQIMP "\f"
            Cabecalho()     
    EndIf
    
    Print File ARQIMP Spaces(2)+Format("W6",[Numero do Pedido])+Spaces(2)+
                      Format("W7",NPECAS_ORIGINAL)+Spaces(2)+
                      Format("W4",[Codigo])+Spaces(1)+
                      Format("W30",[Razao Social])+Spaces(2)+
                      Format("W10",Format("D13",[Data de Emissao]))+Spaces(2)
    
    QTD = 0
    For i From 1 To TM
      If i = 1 
         Then Print File ARQIMP Format("W10",Format("D13",Array_Entrega[i]))+Spaces(2)
              Print File ARQIMP Format("W20",Array_Pedidos[i])+Spaces(2)
              Print File ARQIMP Format("W7,AR",Array_NPecas[i])
         Else If ArraySize(Array_Entrega)>=i  
                 Then Print File ARQIMP Spaces(68)+Format("W10",Format("D13",Array_Entrega[i]))+Spaces(2)
                 Else Print File ARQIMP Spaces(80)
              EndIf    
              If ArraySize(Array_Pedidos)>=i  
                 Then Print File ARQIMP Format("W20",Array_Pedidos[i])+Spaces(2)
                 Else Print File ARQIMP Spaces(22)
              EndIf   
              If ArraySize(Array_NPecas)>=i  
                 Then Print File ARQIMP Format("W7,AR",Array_NPecas[i])
                 Else Print File ARQIMP Format("W7"," ***** ")         
              EndIf
      EndIf
      If ArraySize(Array_NPecas)>=i 
         Then QTD = QTD + Array_NPecas[i]
      EndIf
      Print File ARQIMP "\n"
    EndFor 
    Print File ARQIMP Spaces(76)+CI_INEG+"Total do Demembramento... "+Format("W7,AR",QTD)+CI_FNEG+"\n\n"
  EndScan
  Do_It!
  CleaRall  
  ImpriArq(ARQIMP)
  Deleta_Arquivo(ARQIMP)
  QuitLoop
EndWhile
ClearAll

Monta_Tabela("")

CoEdit "DP_REL"
PickForm "F"

EnDProc ;Imprimir()

;*******************************************************************************
;* Cabe‡calho                                                                   *
;*******************************************************************************
Proc Cabecalho()            

Print File ARQIMP CI_15CPP
Print File ARQIMP "\n\n\n"
Print File ARQIMP Spaces(2)+Fill("-",134) + "\n"
Print File ARQIMP Spaces(2)+Format("W134,AC","PEDIDOS DESMEMBRADOS")+ "\n"
Print File ARQIMP Spaces(2)+Fill("-",134)+ "\n"
Print File ARQIMP "\n\n"
Print File ARQIMP "  Pedido  N§Pe‡as  Pessoa                               Dt.Emissao  Dt.Entrega  "+
                  "Pedidos Desmembrados  N§Pe‡as"+ "\n"
Print File ARQIMP "  ------  -------  -----------------------------------  ----------  ----------  "+
                  "--------------------  -------" + "\n"
NLIN = 10

EndProc ;Cabecalho()

;*******************************************************************************
;* Rotina Filtrar Registros                                                    *
;*******************************************************************************
Proc Selecao()
LimpAguarde()
Do_It!
ClearAll
Echo Normal
Echo Off

OP_SHOW="S"

VSDGEMPRESA        = ""
VSDGDESTINAT       = ""
VSDGMARCA          = ""
VSDGESTADO         = ""
VSDGCIDADE         = ""
VSDGDESTIN         = ""
VSDGOPDT           = ""           
VSDGDTINI          = BlankDate()
VSDGDTFIM          = BlankDate()
VSDGSITUACAOPEDIDO = ""

ShowDialog "Relacao de Pedidos p/ Desmembramento" 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 17 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
  
  Label  @ 02,00 "Pessoa"  For "TG_DESTINAT"
  Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
  Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST

  Label  @ 04,00 "Marca"  For "TG_MARCA"
  Accept @ 05,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
  Accept @ 05,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

  Label  @ 06,02 "Estado"  For "TG_ESTADO"
  Accept @ 07,03 Width 05 "A2"  Picture "!*!" Tag "TG_ESTADO" To VSDGESTADO
  Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMESTADO"  To VSDGNOMESTADO

  Label  @ 08,00 "Cidade"  For "TG_CIDADE"
  Accept @ 09,01 Width 33 "A20" Picture "!*!" Tag "TG_CIDADE"  To VSDGCIDADE

	Label  @ 10,00 "Destinacao"  For "TG_DESTIN"
  Accept @ 11,01 Width 06 "A3"  Picture "#*#" Tag "TG_DESTIN"    To VSDGDESTIN
  Accept @ 11,07 Width 25 "A30" Picture "!*!" Tag "TG_NOMDESTIN" To VSDGNOMDESTIN

	Label  @ 00,35 "Op‡äes de Datas" For "TG_OPDT"
	Accept @ 01,39 Width 04 "A1"  Picture "E,I,N" Tag "TG_OPDT" To VSDGOPDT
	Accept @ 01,44 Width 25 "A20"  Picture "!*!" Tag "TG_DESCOPDT" To VSDGDESCOPDT

  Label  @ 02,35 "Per¡odo Referente" For "TG_DTINI"
  Label  @ 03,39 " de" For "TG_DTINI"
  Accept @ 03,44 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
  Label  @ 03,57 "as" For "TG_DTINI"
  Accept @ 03,61 Width 08 "A5"  Picture "##:##" Tag "TG_HRINI" To VSDGHRINI
  Label  @ 04,39 "at‚" For "TG_DTFIM"
  Accept @ 04,44 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
  Label  @ 04,57 "as" For "TG_DTFIM"
  Accept @ 04,61 Width 08 "A5"  Picture "##:##" Tag "TG_HRFIM" To VSDGHRFIM

  Label  @ 06,35 "Situacao do Pedido"  For "TG_SITUACAOPEDIDO"
  Accept @ 07,36 Width 33 "A30"  Picture "ABERTO,SUSPENSO,CANCELADO,FATURADO,TODAS,!*!" Tag "TG_SITUACAOPEDIDO"  To VSDGSITUACAOPEDIDO

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

EndDialog

If RetVal
   Then LimpaRodape(0)
        Aguarde("Aguarde, Selecionando registros")
        ClearAll
        Seleciona2()
        
        If IsEmpty("Answer")
           Then Mensagem("N„o existem registros conforme sele‡„o !")
           Else View "DP_REL"
                Coedit "Answer"
                Scan
                  GetRecord "\\Sistemas\\Vendas\\PedidoC" [Answer->Numero do Pedido ] To REG_PEDIDO
                  If Not RetVal
                     Then Loop
                     Else If Search("PEDIDO DESMEMBRADO",Upper(REG_PEDIDO["Observacao do Pedido"]))>0
                             Then Loop
                          EndIf
                  EndIf
                  Moveto "DP_REL"
                  Moveto [Numero do Pedido]
                  Locate [Answer->Numero do Pedido]
                  If Not RetVal
                     Then ENTREGA = ""
                          End
                          SEQ=[Sequencia]
                          Down Down
                          [Sequencia         ]=SEQ+1
                          [Codigo da Empresa ]=[Answer->Codigo da Empresa]
                          [Numero do Pedido  ]=[Answer->Numero do Pedido ]
                          [Data de Emissao   ]=[Answer->Data de Emissao  ]
                          [Codigo            ]=[Answer->Codigo           ]
                          [Entrega           ]=""
                          [Numero de Parcelas]=BlankNum()
                          ;-----------------------------------------------------
                          UnLockRecord
                  EndIf        
                  Moveto "Answer"
                EndScan
                Do_It!
                ClearAll
                
                Regerar_Relacao()
        EndIf
EndIf
ClearAll
If IsTable("Answer")
   Then Delete "Answer"
EndIf

Monta_Tabela("")

CoEdit "DP_REL"
PickForm "F"

EndProc

;*******************************************************************************
;* Cabe‡calho                                                                   *
;*******************************************************************************
Proc Cabecalho_Erro()            

CI_15CPP="\15"

Print File ARQERRO CI_15CPP
Print File ARQERRO "\n\n\n"
Print File ARQERRO Spaces(2)+Fill("-",134) + "\n"
Print File ARQERRO Spaces(2)+Format("W134,AC","PEDIDO(S) NAO DESMEMBRADO(S)")+ "\n"
Print File ARQERRO Spaces(2)+Fill("-",134)+ "\n"
Print File ARQERRO "\n\n"
Print File ARQERRO "  Ocorrˆncia de Erros"+"\n"
Print File ARQERRO "  ----------------------------------------------------------------------" + "\n"
NLIN_ERRO = 10

EndProc ;Cabecalho_Erro()

;*******************************************************************************
;* Rotina p/ Gravar Erros                                                      *
;*******************************************************************************
Proc Grava_Erro()

If NLIN_ERRO=0
   Then Cabecalho_Erro()
EndIf
View "Answer"
Scan 
  Print File ARQERRO Spaces(2)+"Pedido "+NPED+" -> COR: "+Format("W4",[Codigo da Cor_Tecido])+" sem regra definida"+"\n"
  If NLIN_ERRO>=66
     Then Print File ARQERRO "\f"
         Cabecalho_Erro()
  EndIf    
EndScan
ClearImage
Release Vars CONTA_ERRO

Moveto "DP_REL"
CoeditKey

PickForm "F" 
Moveto [Sequencia]
Locate AUX_SEQ

EndProc

;*******************************************************************************
;* Rotina p/ Montar Tabelas de Trabalho                                        *
;*******************************************************************************
Proc Monta_Tabela(PARAM)

Switch
  Case PARAM="" Or PARAM="EXCLUIR" : 
       If IsAssigned(DP_ITEM)          Then If IsTable(DP_ITEM)          Then Delete DP_ITEM          EndIf EndIf
       If IsAssigned(DP_GRUPO)         Then If IsTable(DP_GRUPO)         Then Delete DP_GRUPO         EndIf EndIf
       If IsAssigned(DP_COR)           Then If IsTable(DP_COR)           Then Delete DP_COR           EndIf EndIf
       If IsAssigned(DP_EXEC)          Then If IsTable(DP_EXEC)          Then Delete DP_EXEC          EndIf EndIf
       If IsAssigned(TEMP_PEDIDOI)     Then If IsTable(TEMP_PEDIDOI)     Then Delete TEMP_PEDIDOI     EndIf EndIf
       If IsAssigned(TEMP_PEDIDOG)     Then If IsTable(TEMP_PEDIDOG)     Then Delete TEMP_PEDIDOG     EndIf EndIf
       If IsAssigned(PEDIDOI_WORK)     Then If IsTable(PEDIDOI_WORK)     Then Delete PEDIDOI_WORK     EndIf EndIf
       If IsAssigned(PEDIDOG_ORIGINAL) Then If IsTable(PEDIDOG_ORIGINAL) Then Delete PEDIDOG_ORIGINAL EndIf EndIf
  Case PARAM="REINICIAR" :
       Do_it!
       If IsAssigned(DP_ITEM)          Then If IsTable(DP_ITEM)          Then Empty DP_ITEM           EndIf EndIf
       If IsAssigned(DP_GRUPO)         Then If IsTable(DP_GRUPO)         Then Empty DP_GRUPO          EndIf EndIf
       If IsAssigned(DP_COR)           Then If IsTable(DP_COR)           Then Empty DP_COR            EndIf EndIf
       If IsAssigned(TEMP_PEDIDOI)     Then If IsTable(TEMP_PEDIDOI)     Then Empty TEMP_PEDIDOI      EndIf EndIf
       If IsAssigned(TEMP_PEDIDOG)     Then If IsTable(TEMP_PEDIDOG)     Then Empty TEMP_PEDIDOG      EndIf EndIf
       
       If IsAssigned(PEDIDOI_WORK)     Then If IsTable(PEDIDOI_WORK)     Then Delete PEDIDOI_WORK     EndIf EndIf
       If IsAssigned(PEDIDOG_ORIGINAL) Then If IsTable(PEDIDOG_ORIGINAL) Then Delete PEDIDOG_ORIGINAL EndIf EndIf
      
       ;---- Verifica a existˆncia da COR no pedido -------------
       {Ask} {\\Sistemas\\Vendas\\PedidoG} 
       Moveto [Numero do Pedido    ] TypeIn "~NPED"
       Moveto [Codigo da Cor_Tecido] Check 
       Do_it!
       
       Moveto "Answer"
       ClearImage
       Moveto "\\Sistemas\\Vendas\\PedidoG"
       ClearImage
       
       {Ask} {Answer} TypeIn "Fast Delete"
       Moveto [Codigo da Cor_Tecido] Example "Cor"
       {Ask} TypeIn DP_EXEC Enter
       Moveto [Codigo da Cor_Tecido] Example "Cor"
       Do_it!
       
       Moveto DP_EXEC
       ClearImage
       
       If Not IsEmpty("Answer")
          Then Grava_Erro()
               Return False
       EndIf 
      
       ;----PedidoI ---------------------------------------------
       PEDIDOI_WORK=Cria_Temp(PrivDir()) 
       Copy "\\Base\\Sistemas\\Vendas\\PedidoI" PEDIDOI_WORK
       Empty PEDIDOI_WORK
       
       PEDIDOG_WORK=Cria_Temp(PrivDir()) 
       Copy "\\Base\\Sistemas\\Vendas\\PedidoG" PEDIDOG_WORK
       Empty PEDIDOG_WORK 
       
       ;----PedidoG ---------------------------------------------
       {Ask} {\\Sistemas\\Vendas\\PedidoG} Check
       Moveto [Numero do Pedido] TypeIn "~NPED"
       Do_it!
       
       Moveto "Answer"
       ClearImage
       Moveto "\\Sistemas\\Vendas\\PedidoG"
       ClearImage 
      
       PEDIDOG_ORIGINAL=Cria_Temp(PrivDir()) 
       Copy "\\Base\\Sistemas\\Vendas\\PedidoG" PEDIDOG_ORIGINAL
       Empty PEDIDOG_ORIGINAL 
       Add "Answer" PEDIDOG_ORIGINAL
       ClearAll
         
       View PEDIDOI_WORK      ;Itens do Pedido MODO SIMPLES       
       View PEDIDOG_WORK      ;Itens do Pedido MODO GRADE
       View PEDIDOG_ORIGINAL  ;Tabela original apenas dos itens do pedido MODO GRADE para trabalho
       
       View "\\Sistemas\\Vendas\\PedidoC"
       View TEMP_PEDIDOG      ;Tabela tempor ria dos itens do pedido MODO GRADE 
       View TEMP_PEDIDOI      ;Tabela tempor ria dos itens do pedido MODO SIMPLES
       View DP_ITEM
       View DP_GRUPO
       View DP_COR
       View DP_EXEC
       
       CoEdit "DP_REL"
       PickForm "F"
             
       Moveto "DP_REL"
       Moveto [Sequencia]
       Locate AUX_SEQ
EndSwitch

If PARAM="EXCLUIR" Or PARAM="REINICIAR"
   Then Return True
EndIf        

DP_ITEM=Cria_Temp(PrivDir())
Cria_Tabela(DP_ITEM,"Codigo da Marca(A3),"+
                    "Codigo do Grupo(A3),"+
                    "Codigo da Cor_Tecido(A4),"+
                    "Codigo do Item(A10),"+     
                    "Quantidade(N),"+
                    "Quantidade Processada(N)")

DP_GRUPO=Cria_Temp(PrivDir())                       
Cria_Tabela(DP_GRUPO,"Codigo do Grupo(A3),"+
                     "Quantidade(N),"+ 
                     "Quantidade Processada(N)")
               
DP_COR=Cria_Temp(PrivDir())                        
Cria_Tabela(DP_COR,"Codigo da Cor_Tecido(A4),"+
                   "Quantidade(N),"+
                   "Quantidade Processada(N)")
                   
TEMP_PEDIDOI =Cria_Temp(PrivDir()) 
Create TEMP_PEDIDOI Like "\\Base\\Sistemas\\Vendas\\PedidoI"

TEMP_PEDIDOG =Cria_Temp(PrivDir()) 
Copy "\\Base\\Sistemas\\Vendas\\PedidoG" TEMP_PEDIDOG
Empty TEMP_PEDIDOG 

View "\\Sistemas\\Vendas\\PedidoC"
View TEMP_PEDIDOG      ;Tabela tempor ria dos itens do pedido MODO GRADE 
View TEMP_PEDIDOI      ;Tabela tempor ria dos itens do pedido MODO SIMPL
View DP_ITEM
View DP_GRUPO
View DP_COR

Return True
                   
EndProc ;Monta_Tabela()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
SYS_VALOR()

PARAM_COR_TECIDO="S"

{Ask} {\\Sistemas\\Estoque\\Marcas}
Moveto [Codigo da Marca   ] Check
Moveto [Descricao da Marca] Check
Do_it!
Monta_Opcoes("Marcas","F1_Temp")
ClearAll  

Monta_Tabela("")

CoEdit "DP_REL"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
Do_It!
ClearAll

Monta_Tabela("EXCLUIR")

Release Vars All
Release Procs All
