;** RM_0020 ********************************************************************
;* Extrato Fac‡„o                                                              *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 03/06/2014 por Bruno Carvalho
;Ultima Alteracao: 06/06/2014 por Bruno Carvalho
;Motivo Alteracao: Inlcuido op‡Æo para quando corte nÆo for informado 
;Ultima Alteracao: 26/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog   
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/01/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes TG_REFERENCIA
;Ultima Alteracao: 08/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Edit->Coedit                 
;Ultima Alteracao: 25/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog   

;*******************************************************************************
;* Sele‡„o                                                                     *
;*******************************************************************************
Proc Selecao()

;SITUACAO: - PROGRAMADA
;          - EM PRODUCAO
;          - SUSPENSA
;          - FINALIZADA
;          - TODOS

;---- Programa‡Æo do Corte -----------------------------------------------------
{Ask} {Cfacc} 
Moveto [Numero_Corte             ] Check TypeIn "_NProgC , ~VSDGCORTE.. ,as Numero do Lancamento"
Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa    ] Check
Moveto [Data_Programacao         ] Check TypeIn "as DATA"
Moveto [Situacao_Programacao     ] Check TypeIn "as SITUACAO"
Moveto [Observacoes              ] Check

{Ask} {Cfacri}
Moveto [Numero_Corte             ] TypeIn "_NProgC"
Moveto [Codigo do Item           ] Check
Moveto [Tipo do Item             ] Check
Moveto [Referencia               ] Check TypeIn "~VSDGREFERENCIA.."
Moveto [Descricao do Item        ] Check
Moveto [Codigo da Cor_Tecido     ] Check
Moveto [Descricao da Cor_Tecido  ] Check
Moveto [Quantidade Programada    ] Check
Moveto [Unidade Fiscal           ] Check
Do_It!
ClearAll

Adiciona_Dados("Cfacc")
                            
;---- Producao do Corte --------------------------------------------------------
{Ask} {Pcfacc}
Moveto [Numero_Producao_Corte    ] Check TypeIn "_NProdC, as Numero do Lancamento"  
Moveto [Numero_Programacao_Corte ] Check TypeIn "~VSDGCORTE.."
Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa    ] Check
Moveto [Data_Producao            ] Check TypeIn "as DATA"
Moveto [Destino_Producao         ] Check
Moveto [Codigo                   ] Check
Moveto [Razao Social             ] Check
Moveto [Situacao_Producao        ] Check TypeIn "as SITUACAO"
Moveto [Observacoes              ] Check
Moveto [Lancamento RqCabeca_PCFAC] Check TypeIn "as REQUISICAO"

{Ask} {Pcfacri}
Moveto [Numero_Producao_Corte    ] TypeIn "_NProdC"
Moveto [Codigo do Item           ] Check
Moveto [Tipo do Item             ] Check
Moveto [Referencia               ] Check TypeIn "~VSDGREFERENCIA.."
Moveto [Descricao do Item        ] Check
Moveto [Codigo da Cor_Tecido     ] Check
Moveto [Descricao da Cor_Tecido  ] Check
Moveto [Quantidade Produzida     ] Check
Moveto [Unidade Fiscal           ] Check
Do_It!
ClearAll

Adiciona_Dados("Pcfacc")

;---- Programacao da Confec‡Æo -------------------------------------------------
{Ask} {Pfacc}
Moveto [Numero_Programacao       ] Check TypeIn "_NProgF, as Numero do Lancamento"  
Moveto [Numero_Corte             ] Check TypeIn "~VSDGCORTE.."
Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa    ] Check
Moveto [Data_Programacao         ] Check TypeIn "as DATA"
Moveto [Destino_Producao         ] Check
Moveto [Codigo                   ] Check
Moveto [Razao Social             ] Check
Moveto [Situacao_Programacao     ] Check TypeIn "as SITUACAO"
Moveto [Observacoes              ] Check
Moveto [Lancamento RqCabeca_PFACC] Check TypeIn "as REQUISICAO"

{Ask} {Pfacri}
Moveto [Numero_Programacao       ] TypeIn "_NProgF"
Moveto [Codigo do Item           ] Check
Moveto [Tipo do Item             ] Check
Moveto [Referencia               ] Check TypeIn "~VSDGREFERENCIA.."
Moveto [Descricao do Item        ] Check
Moveto [Codigo da Cor_Tecido     ] Check
Moveto [Descricao da Cor_Tecido  ] Check
Moveto [Quantidade Programada    ] Check
Moveto [Unidade Fiscal           ] Check
Do_It!
ClearAll

Adiciona_Dados("Pfacc")

;---- Producao da Confec‡Æo ----------------------------------------------------
{Ask} {Rfacc}
Moveto [Numero_Producao          ] Check TypeIn "_NProdF, as Numero do Lancamento"  
Moveto [Numero_Programacao       ] Check TypeIn "_NProgC"
Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa    ] Check
Moveto [Data_Producao            ] Check TypeIn "as DATA"
Moveto [Destino_Producao         ] Check
Moveto [Codigo                   ] Check
Moveto [Razao Social             ] Check
Moveto [Situacao_Producao        ] Check TypeIn "as SITUACAO"
Moveto [Observacoes              ] Check
Moveto [Lancamento RqCabeca_RFACC] Check TypeIn "as REQUISICAO"

{Ask} {Rfacri}
Moveto [Numero_Producao          ] TypeIn "_NProdF"
Moveto [Codigo do Item           ] Check
Moveto [Tipo do Item             ] Check
Moveto [Referencia               ] Check TypeIn "~VSDGREFERENCIA.."
Moveto [Descricao do Item        ] Check
Moveto [Codigo da Cor_Tecido     ] Check
Moveto [Descricao da Cor_Tecido  ] Check
Moveto [Quantidade Produzida     ] Check
Moveto [Unidade Fiscal           ] Check

{Ask} {Pfacc}
Moveto [Numero_Programacao       ] TypeIn "_NProgC"  
Moveto [Numero_Corte             ] Check TypeIn "~VSDGCORTE.."
Do_It!
ClearAll

Adiciona_Dados("Rfacc")

;---- Requisi‡Æo do Corte ------------------------------------------------------
{Ask} {\\Sistemas\\Estoque\\RqCabeca}
Moveto [Numero do Lancamento     ] Check TypeIn "_NLanc" 
Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa    ] Check
Moveto [Codigo do Documento      ] Check
Moveto [Data de Ocorrencia       ] Check TypeIn "as DATA"
Moveto [Numero do Corte          ] Check TypeIn "~VSDGCORTE.."
{Ask} {\\Sistemas\\Estoque\\RqItem}
Moveto [Numero do Lancamento     ] Check TypeIn "_NLanc"
Moveto [Codigo do Item           ] Check TypeIn "_CodI"
Moveto [Tipo do Item             ] Check
Moveto [Descricao do Item        ] Check
Moveto [Quantidade               ] Check
Moveto [Unidade Interna          ] Check
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item           ] TypeIn "_CodI"
Moveto [Referencia               ] Check TypeIn "~VSDGREFERENCIA.."
Moveto [Codigo da Cor_Tecido     ] Check
Moveto [Descricao da Cor_Tecido  ] Check
Do_It!
ClearAll

Adiciona_Dados("Requisicao")

EndProc ;Selecao()

;*******************************************************************************
;* Adiciona Dados                                                              *
;*******************************************************************************
Proc Adiciona_Dados(PARAM)
Private PARAM,EMPRESA,COD_EMP,NOM_EMP,CONT_PROD_CORTE,CONT_PROD_CONFECCAO,Tab_Ant

If IsEmpty("Answer") 
   Then Return
EndIf

Switch
  Case PARAM = "Cfacc"      : PROCESSA = "Programacao de Corte"
  Case PARAM = "Pcfacc"     : PROCESSA = "Producao de Corte"
  Case PARAM = "Pfacc"      : PROCESSA = "Programacao da Confeccao"
  Case PARAM = "Rfacc"      : PROCESSA = "Producao da Confeccao"
  Case PARAM = "Requisicao" : PROCESSA = "Requisi‡„o do Corte"
  OtherWise                 : PROCESSA = ""
EndSwitch  

CONT_PROD_CORTE     = 0
CONT_PROD_CONFECCAO = 0
CONT_REQUISICAO     = 0

NR = NRecords("Answer")

View "\\Sistemas\\Estoque\\RqCabeca"
View "\\Sistemas\\Estoque\\RqItem"
View Tabela
CoEdit "Answer"
Scan
  Barra(NR, RecNo())       
  Aguarde("Aguarde, processando "+PROCESSA+" "+BARRA_STRING)

  Moveto Tabela
  End Down 
  [Codigo da Empresa      ] = [Answer->Codigo da Empresa       ]   
  [Nome Fantasia Empresa  ] = [Answer->Nome Fantasia Empresa   ]    
  
  Switch
    Case PARAM="Pcfacc"     : [Corte Programacao] = [Answer->Numero_Programacao_Corte]
    Case PARAM="Cfacc"      : [Corte Programacao] = [Answer->Numero do Lancamento]
    Case PARAM="Requisicao" : [Corte Programacao] = [Answer->Numero do Corte]
    OtherWise               : [Corte Programacao] = [Answer->Numero_Corte] 
  EndSwitch
  
  Diferenca_Requisicao      = BlankNum()
  TP_MOV                    = ""
  TP_OP                     = ""
  
  Switch
    Case PARAM="Cfacc": [Codigo         ] = [Answer->Codigo da Empresa      ]
                        [Razao Social   ] = [Answer->Nome Fantasia Empresa  ]
                        [Etapa          ] =  "CORTE"
    OtherWise         : If PARAM <> "Requisicao"
                           Then GetRecord "\\Sistemas\\Estoque\\RqCabeca" [Answer->REQUISICAO] To REG_REQUISICAO 
                                If RetVal
                                   Then TP_MOV = REG_REQUISICAO["Tipo de Movimento"]
                                        TP_OP  = REG_REQUISICAO["Tipo de Operacao"]
                                EndIf        
                        EndIf
                        
                        If PARAM="Pcfacc"
                           Then [Etapa          ] = "CORTE"
                                [Codigo         ] = [Answer->Codigo da Empresa      ]
                                [Razao Social   ] = [Answer->Nome Fantasia Empresa  ]
                                [Requisicao     ] = [Answer->REQUISICAO             ]
                           Else If PARAM = "Requisicao"
                                   Then Switch
                                          Case [Answer->Codigo do Documento]="PROG" : [Razao Social] = "PROGRAMACAO"
                                          OtherWise                                 : [Razao Social] = "PRODUCAO"
                                         EndSwitch   
                                        [Etapa          ] = "REQUISICAO"
                                        [Requisicao     ] = [Answer->Numero do Lancamento]
                                   ELse [Etapa          ] = [Answer->Destino_Producao]
                                        [Codigo         ] = [Answer->Codigo          ]
                                        [Razao Social   ] = [Answer->Razao Social    ]
                                        [Requisicao     ] = [Answer->REQUISICAO      ]
                                EndIf        
                        EndIf

                        ;---- Requisi‡Æo ---------------------------------------
                        CODIGO_ITEM = [Answer->Codigo do Item]
                        If [Etapa] <> "REQUISICAO" And [Etapa] <> "CORTE"
                           Then GetRecord "P_DestI" VSDGEMPRESA,[Etapa] To REG_DESTINO
                                If RetVal
                                   Then REG_DESTINO = REG_DESTINO["Retorno_Destino"]
                                        If (TP_MOV = "E" And TP_OP = "D" And REG_DESTINO = "P") Or
                                           (TP_MOV = "E" And TP_OP = "P" And REG_DESTINO = "P")
                                           Then CODIGO_ITEM = [Answer->Codigo do Item]
                                                If [Tipo do Item]<>"P"
                                                   Then CODIGO_ITEM = MudaCodigoPara(CODIGO_ITEM,"P")
                                                EndIf    
                                           Else CODIGO_ITEM = MudaCodigoPara([Answer->Codigo do Item],"S")
                                        EndIf   
                                EndIf  
                        EndIf
      
                        If [REQUISICAO] <>""
                           Then Tab_Ant = Table()
                                Requisicao = [REQUISICAO]
                                Moveto "\\Sistemas\\Estoque\\RqItem"
                                Moveto [Numero do Lancamento]
                                Locate Requisicao
                                If RetVal
                                   Then 
                                        While Requisicao = [Numero do Lancamento]
                                          If CODIGO_ITEM = [Codigo do Item]
                                             Then Diferenca_Requisicao = [Quantidade]
                                                  QuitLoop
                                           EndIf
                                           Skip
                                           If Eot() Then QuitLoop EndIf
                                        EndWhile
                                EndIf
                                Moveto Tab_Ant
                        EndIf                   
  EndSwitch     
  
  If VSDGCODMODELO = "02" 
     Then SEQUENCIA = BlankNum() 
          Switch
            Case [Etapa] = "CORTE"      : SEQUENCIA = 1 
            Case [Etapa] = "FACCAO"     : SEQUENCIA = DynArraySize(DESTINO)+2 
            Case [Etapa] = "INTERNO"    : SEQUENCIA = DynArraySize(DESTINO)+3
            Case [Etapa] = "REQUISICAO" : SEQUENCIA = DynArraySize(DESTINO)+4 
            OtherWise                   : For wi From 1 To DynArraySize(DESTINO) 
                                            If DESTINO[wi] = [Etapa]
                                               Then SEQUENCIA = wi+1  
                                                    QuitLoop
                                            EndIf   
                                          EndFor 
          Endswitch
          NIVEL     = ""
          SEQUENCIA = AlinhM(StrVal(SEQUENCIA),2)
          Switch
            Case PARAM="Cfacc"  :     NIVEL = "01"
                                      SEQUENCIA = SEQUENCIA + "1" + "1"
            Case PARAM="Pcfacc"     : NIVEL = "01"
                                      SEQUENCIA = SEQUENCIA + "2"
                                      CONT_PROD_CORTE = CONT_PROD_CORTE + 1
                                      SEQUENCIA = SEQUENCIA + StrVal(CONT_PROD_CORTE)
            Case PARAM="Pfacc"      : NIVEL = "02" 
                                      SEQUENCIA = SEQUENCIA + "1" + "1"
            Case PARAM="Rfacc"      : NIVEL = "02"
                                      SEQUENCIA = SEQUENCIA + "2"
                                      CONT_PROD_CONFECCAO = CONT_PROD_CONFECCAO + 1
                                      SEQUENCIA = SEQUENCIA + StrVal(CONT_PROD_CONFECCAO)
            Case PARAM="Requisicao" : NIVEL = "04"
                                      SEQUENCIA = SEQUENCIA + "3"
                                      CONT_REQUISICAO = CONT_REQUISICAO + 1
                                      SEQUENCIA = SEQUENCIA + StrVal(CONT_REQUISICAO)                      
          EndSwitch 
           
          If NIVEL = "02"
             Then If [Etapa]="FACCAO" Or [Etapa]="INTERNO" 
                     Then NIVEL = "03"
                  EndIf   
          EndIf   
          
          [Etapa] = NIVEL+Completa(SubStr([Etapa],1,18),20," ")+SEQUENCIA  
          
          
     Else If TP_MOV<>"" And TP_OP<>""
             Then [Operacao] = TP_MOV + "/" + TP_OP
             Else [Operacao] = " - " 
          EndIf                  
                   
          NIVEL = 0                                                       
          Switch 
            Case PARAM="Cfacc"      : NIVEL = "11" 
            Case PARAM="Pcfacc"     : NIVEL = "12"   
            Case PARAM="Pfacc"      : NIVEL = "21" 
            Case PARAM="Rfacc"      : NIVEL = "22" 
            Case PARAM="Requisicao" : NIVEL = "30" 
          EndSwitch
              
          [Etapa          ] = SubStr(NIVEL,1,1)+Completa([Etapa],19," ")+NIVEL   
  EndIf
    
  [Numero Lancamento      ] = [Answer->Numero do Lancamento    ]
  [Data                   ] = [Answer->DATA                    ]   
  [Codigo do Item         ] = [Answer->Codigo do Item          ]
  [Tipo do Item           ] = [Answer->Tipo do Item            ]
  [Descricao do Item      ] = [Answer->Descricao do Item       ]
  
  If PARAM<>"Requisicao"
     Then [Unidade Fiscal         ] = [Answer->Unidade Fiscal         ]
          If PARAM="Pcfacc" Or PARAM="Rfacc"
             Then [Situacao       ] = "PRODUCAO"
             Else [Situacao       ] = [Answer->SITUACAO               ]
          EndIf   
          [Observacoes            ] = [Answer->Observacoes            ]
          [Referencia             ] = [Answer->Referencia             ]
          [Codigo da Cor_Tecido   ] = [Answer->Codigo da Cor_Tecido   ]
          [Descricao da Cor_Tecido] = [Answer->Descricao da Cor_Tecido]
     Else [Situacao               ] = "REQ"
          [Unidade Fiscal         ] = [Answer->Unidade Interna        ]
          [Referencia             ] = [Answer->Referencia             ]
          [Codigo da Cor_Tecido   ] = [Answer->Codigo da Cor_Tecido   ]
          [Descricao da Cor_Tecido] = [Answer->Descricao da Cor_Tecido]
  EndIf          
          
  Switch
    Case PARAM="Cfacc"  Or PARAM="Pfacc" : [Quantidade Programada  ] = [Answer->Quantidade Programada  ]
                                           [Status                 ] = "PROG" 
    Case PARAM="Pcfacc" Or PARAM="Rfacc" : [Quantidade Produzida   ] = [Answer->Quantidade Produzida   ]
                                           [Status                 ] = "PROD"
    Case PARAM="Requisicao"              : [Quantidade Programada  ] = [Answer->Quantidade]
                                           [Quantidade Produzida   ] = [Answer->Quantidade]
                                           [Status                 ] = "REQ"                                         
  Endswitch 
   
  If [Requisicao]<>""
     Then Switch
            Case [Quantidade Produzida ] > 0 : [Diferenca Requisicao] = Diferenca_Requisicao - [Quantidade Produzida ]
            Case [Quantidade Programada] > 0 : [Diferenca Requisicao] = Diferenca_Requisicao - [Quantidade Programada]
          EndSwitch
  EndIf           
   
  ;Switch
  ;  Case PARAM="Pfacc"  Or PARAM="Pcfacc" : [Diferenca Requisicao] = [Quantidade Produzida ] - Diferenca_Requisicao
  ;  Case PARAM="Rfacc"                    : [Diferenca Requisicao] = [Quantidade Programada] - Diferenca_Requisicao
  ;Endswitch       
  
  
  If [Diferenca Requisicao] = 0
     Then [Diferenca Requisicao] = BlankNum()
  EndIf   
  UnLockRecord
  
  Moveto "Answer"    
EndScan
Do_It!
ClearAll

EndProc ;Adiciona_Dados()

;*******************************************************************************
;* Rotina SD_Dialog                                                            *
;*******************************************************************************
Proc Processa()
Private i,Tabela2,NIVEL
                  
If VSDGCODMODELO = "02"
   Then ;---- ETAPA ------------------
        Tabela2 = Cria_Temp(PrivDir())
        Copy Tabela Tabela2
EndIf                          
                   
If VSDGOPRELCODALF = "1"
   Then ;---- Agrupa Itens por Referˆncia --------------------------------------
        {Ask} TypeIn Tabela Enter Check
        Moveto [Quantidade Programada  ] Check TypeIn "Calc Sum as Quantidade Programada" 
        Moveto [Quantidade Produzida   ] Check TypeIn "Calc Sum as Quantidade Produzida"
        If VSDGCODMODELO = "02" 
           Then Moveto [Etapa          ] Check
        EndIf
        Moveto [Codigo do Item         ] Check
        Moveto [Descricao do Item      ] Check 
        Moveto [Codigo da Cor_Tecido   ] Check
        Moveto [Descricao da Cor_Tecido] Check
        Moveto [Diferenca Requisicao   ] Check TypeIn "Calc Sum as Diferenca Requisicao"
        Moveto [Nivel                  ] Check
        Do_It!
        ClearAll
        
        Empty Tabela
        
        {Ask} {Answer} 
        Moveto [Codigo da Empresa      ] Example "CodE"
        Moveto [Nome Fantasia Empresa  ] Example "NomF"  
        Moveto [Corte Programacao      ] Example "Cort"  
        If VSDGCODMODELO = "01" 
           Then Moveto [Etapa          ] Example "Dest"
        EndIf      
        Moveto [Numero Lancamento      ] Example "NLan"  
        Moveto [Data                   ] Example "Data"  
        Moveto [Codigo                 ] Example "Cod"  
        Moveto [Razao Social           ] Example "RazS"  
        Moveto [Situacao               ] Example "Sit"  
        Moveto [Requisicao             ] Example "Req"  
        ;Moveto [Observacoes            ] Example "Obs"  
        Moveto [Tipo do Item           ] Example "TipI"  
        Moveto [Referencia             ] Example "Ref"  
        Moveto [Unidade Fiscal         ] Example "UnF"  
        Moveto [Quantidade Produzida   ] Example "QtdZ"  
        Moveto [Quantidade Programada  ] Example "QtdG"  
        Moveto [Diferenca Requisicao   ] Example "DifR"  
        Moveto [Operacao               ] Example "Oper"  
        Moveto [Status                 ] Example "Stat"  
        
        {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
        Moveto [Codigo da Empresa      ] Example "CodE"
        Moveto [Nome Fantasia Empresa  ] Example "NomF"  
        Moveto [Corte Programacao      ] Example "Cort"  
        If VSDGCODMODELO = "01" 
           Then Moveto [Etapa          ] Example "Dest"
        EndIf  
        Moveto [Numero Lancamento      ] Example "NLan"  
        Moveto [Data                   ] Example "Data"  
        Moveto [Codigo                 ] Example "Cod"  
        Moveto [Razao Social           ] Example "RazS"  
        Moveto [Situacao               ] Example "Sit"  
        Moveto [Requisicao             ] Example "Req"  
        ;Moveto [Observacoes            ] Example "Obs"  
        Moveto [Tipo do Item           ] Example "TipI"  
        Moveto [Referencia             ] Example "Ref"  
        Moveto [Unidade Fiscal         ] Example "UnF"  
        Moveto [Quantidade Produzida   ] Example "QtdZ"  
        Moveto [Quantidade Programada  ] Example "QtdG"  
        Moveto [Diferenca Requisicao   ] Example "DifR"  
        Moveto [Operacao               ] Example "Oper"
        Moveto [Status                 ] Example "Stat"  
        Do_It!
        ClearAll
EndIf     

If VSDGCODMODELO = "02"
   Then NLANCTO = " *** "

        View Tabela
        Coedit Tabela2
        Scan
          If NLANCTO <> [Numero Lancamento]
             Then NLANCTO = [Numero Lancamento]
             Else Loop
          EndIf   
          ETAPA   = [Etapa] 
          Moveto Tabela
          Moveto [Numero Lancamento]
          Locate NLANCTO
          If Retval
             Then Moveto [Etapa]
                  [Etapa] = ETAPA
          EndIf
          Moveto Tabela2
        EndScan
        Do_It!
        ClearAll
EndIf        

{Ask} TypeIn Tabela Enter
Moveto [Data] Check
Do_It!
ClearAll

Array DATA[NRecords("Answer")]
CONT_DATA = 0
View "Answer"
Scan
  CONT_DATA = CONT_DATA + 1
  DATA[CONT_DATA] = [Data]
EndScan
ClearAll

NR = NRecords(Tabela)

NIVEL = 0
For wi From 1 To ArraySize(DATA)
  For i From 1 To 3
    Switch          
      Case i = 1 : PESQUISA = "PROG"
      Case i = 2 : PESQUISA = "PROD"
      Case i = 3 : PESQUISA = "REQ"
    EndSwitch
                    
    Coedit Tabela
    Scan For [Status]=PESQUISA And DATA[wi] = [Data]
      Barra(NR, RecNo())       
      Aguarde("Aguarde, Ajustando "+PESQUISA+BARRA_STRING)  
      NIVEL = NIVEL + 1 
      [Nivel] = NIVEL       
      If VSDGCODMODELO = "01" 
           Then [Etapa] = Completa([Etapa],22," ")+AlinhM(StrVal(NIVEL),3)
        EndIf
    EndScan
    Do_It!
    ClearAll
  EndFor  
Endfor     
                   
If VSDGCODMODELO = "02"
   Then Delete Tabela2
EndIf                      
                    
Array Tabela_Faccao[3]
Tabela_Faccao[1] = "Pcfacc"
Tabela_Faccao[2] = "Pfacc"
Tabela_Faccao[3] = "Rfacc"

Tabela2 = Cria_Temp(PrivDir())
Copy Tabela Tabela2
                                                                      
For i From 1 To ArraySize(Tabela_Faccao)
  View Tabela_Faccao[i]
  View Tabela
  CoEdit Tabela2
  Scan for [Status]="REQ"
    NIVEL = [Nivel]
    REQ   = [Numero Lancamento]
    
    Moveto Tabela_Faccao[i]
    Switch
      Case i = 1 : Moveto [Lancamento RqCabeca_PCFAC]
      Case i = 2 : Moveto [Lancamento RqCabeca_PFACC]
      Case i = 3 : Moveto [Lancamento RqCabeca_RFACC]
      OtherWise  : QuitLoop
    Endswitch
    Locate REQ
    If ReTval
       Then Moveto Tabela
            Moveto [Nivel]
            Locate NIVEL
            If ReTval 
               Then Del
            EndIf
    EndIF
    Moveto Tabela2               
  EndScan
  Do_It!
  ClearAll
EndFor
                    
Delete Tabela2                    
 
Sort Tabela on "Nivel" 
Clearall     

EndProc ;Processa() 

;*******************************************************************************
;* Rotina SD_Dialog                                                            *
;*******************************************************************************
Proc Destinos()
Private CONTADOR

CONTADOR = 0
DynArray DESTINO[]

View "P_facd"
Scan 
  If [Destino]="OUTROS" Or [Retorno_Destino]="P"
     Then Loop
  EndIf   
  CONTADOR = CONTADOR + 1
  DESTINO[CONTADOR] = [Destino]
EndScan
ClearAll

EndProc ;Destinos()

;*******************************************************************************
;* Rotina SD_Dialog                                                            *
;*******************************************************************************
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 : 
          If Campo="TG_REFERENCIA"
            Then Seleciona_Opcoes("Referencia","9,21")
            Else Dialog_F1()
          EndIf   
     Case Evento["KeyCode"] =  27 : Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_REFERENCIA"    : Campo="TG_EMPRESA"
            Case Campo="TG_CORTE"         : Campo="TG_REFERENCIA"
            Case Campo="TG_OPRELCODALF"   : Campo="TG_CORTE"
            Case Campo="TG_CODMODELO"     : Campo="TG_OPRELCODALF"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140   :
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13 : Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    :  
                         If VSDGEMPRESA = ""
                            Then VSDGNOMEMP = ""
                                 Mensagem("Dever  ser informado a empresa !")
                            Else Campo="TG_REFERENCIA"
                         EndIf        
                    Case Campo="TG_REFERENCIA" : Campo="TG_CORTE"         
                    Case Campo="TG_CORTE"      : Campo="TG_OPRELCODALF"
                         ;If VSDGCORTE=""
                         ;   Then ;Mensagem("A programa‡„o do corte dever  ser informada !")
                         ;   Else Campo="TG_MODELO"
                         ;EndIf   
                    Case Campo="TG_OPRELCODALF" : Campo="TG_CODMODELO"
                         VSDGOPRELCODALF = ControlValue("TG_OPRELCODALF")
                         Switch
                           Case VSDGOPRELCODALF = "2" : VSDGNOMOPRELCODALF = "REFERENCIA+COR"
                           Case VSDGOPRELCODALF = "3" : VSDGNOMOPRELCODALF = "CODIGO DO ITEM"
                           OtherWise                  : VSDGNOMOPRELCODALF = "REFERENCIA"
                                                        VSDGOPRELCODALF    = "1"
                         EndSwitch   
                    Case Campo="TG_CODMODELO"  : Campo = "YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="":
       MSG_CAMPO=""
  Case Campo="TG_OPRELCODALF":
       MSG_CAMPO="1=REFERENCIA   2=REFERENCIA+COR  3=CODIGO DO ITEM"     
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("1   Por Referˆncia/Lan‡amentos")
ModeloRelatoriosAdd("2   Por Referˆncia/Tipo Item/Destino/Lan‡amentos")
ModeloRelatoriosAdd("Fim")

EndProc ;ModeloRelatoriosCarregaLista


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

If Not IsAssigned(NOMEMPRESA) Then NOMEMPRESA=""  EndIf

ARQIMP = PrivDir()+"RM_0020.Txt"
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf

{Ask} {\\Sistemas\\Estoque\\Itens} 
Moveto [Referencia] Check
Do_It!
ClearAll

Coedit "Answer"
Monta_Opcoes("Referencia","") 
Do_It!
ClearAll   

VSDGEMPRESA        = ""
VSDGNOMEMP         = ""
VSDGCORTE          = ""
VSDGREFERENCIA     = ""
VSDGOPRELCODALF    = ""

ModeloRelatoriosCarregaLista()

While True

  ShowDialog "Extrato de Movimenta‡„o" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 03,08 Height 16 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 "A27" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 03,01 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA" To VSDGREFERENCIA

    Label  @ 04,00 "Corte"  For "TG_CORTE"
    Accept @ 05,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_CORTE" To VSDGCORTE
    Accept @ 05,09 Width 25 "A25" Picture "!*!"        Tag "TG_NOMCORTE" To VSDGNOMCORTE

    Label  @ 06,00 "Op‡”es de Relat¢rio" For "TG_OPRELCODALF"
    Accept @ 07,04 Width 04 "A1"  Picture "1,2,3" Tag "TG_OPRELCODALF" To VSDGOPRELCODALF
    Accept @ 07,09 Width 25 "A30"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSDGNOMOPRELCODALF 

    Label  @ 09,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 10,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 10,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO        

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf

  If VSDGCORTE="" And VSDGREFERENCIA=""
     Then Mensagem("A programa‡„o do corte ou a referˆncia dever  ser informada !")
          Loop
  EndIf  
  
  DISPOSITIVO()
  If OK="" Then Loop EndIf  

  Tabela = Cria_Temp(PrivDir())
  Copy "\\Base\\Sistemas\\Faccao\\Rm_0020" Tabela
  Empty(Tabela)

  Destinos()
  Selecao()
  
  If IsEmpty(Tabela)
     Then Mensagem("N„o existem registros a processar") 
          Loop
  EndIf
  Processa()
    
  Switch
    Case VSDGCODMODELO = "01" And VSDGCORTE="" And VSDGOPRELCODALF = "1" : REP = "6"  ;Referencia
    Case VSDGCODMODELO = "01" And VSDGCORTE="" And VSDGOPRELCODALF = "1" : REP = "7"  ;Referencia/Cor
    Case VSDGCODMODELO = "01" And VSDGCORTE="" And VSDGOPRELCODALF = "1" : REP = "8"  ;Codigo  
    Case VSDGCODMODELO = "02" And VSDGCORTE="" And VSDGOPRELCODALF = "1" : REP = "9"  ;Referencia   
    Case VSDGCODMODELO = "02" And VSDGCORTE="" And VSDGOPRELCODALF = "2" : REP = "10" ;Referencia/Cor     
    Case VSDGCODMODELO = "02" And VSDGCORTE="" And VSDGOPRELCODALF = "3" : REP = "11" ;Codigo                                         
    Case VSDGCODMODELO = "01" And VSDGOPRELCODALF = "1"                  : REP = "2"  
    Case VSDGCODMODELO = "01" And VSDGOPRELCODALF = "2"                  : REP = "3"
    Case VSDGCODMODELO = "01" And VSDGOPRELCODALF = "3"                  : REP = "1"
    Case VSDGCODMODELO = "02" And VSDGOPRELCODALF = "1"                  : REP = "R"
    Case VSDGCODMODELO = "02" And VSDGOPRELCODALF = "2"                  : REP = "4"
    Case VSDGCODMODELO = "02" And VSDGOPRELCODALF = "3"                  : REP = "5"
  EndSwitch     
  
  IMPRIREL(Tabela,REP)
  
EndWhile
ClearAll
Release Vars All
Release Procs All
