;** ITEN_BAL *******************************************************************
;* Gera Arquivo com os itens de balan‡a                                        *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)      
;Desenvolvido    : 09/11/2020 por Bruno Carvalho           
;Ultima Alteracao:   /  /     por                           
;Motivo Alteracao:

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVEC()

FACA_DIGITAC  = True
INICIO_PAGINA = True

While True
  Moveto Tabela_Item 
  Moveto [Codigo do Item]
  End
  Moveto [Codigo do Item]
  COD_ITEM=[Codigo do Item]

  If OPCAO_FORM=OPCAO_FORM_REL
    Then Down
    Else CtrlPgDn
  EndIf
  Moveto [Codigo do Item]

  SetaCorRegistro("Editar")
  While True

  COPIOU_REGISTRO=False
  
  MSGCAMPO=""
  TECLA=strval(Nrecords(Tabela_Item))+" registros" 
  
  AguardaTeclasPadrao()
  
  Switch
    Case Field()="Tipo de Produto" : MSGCAMPO = "TESTE"     
  EndSwitch
  
  If RetVal=-33
     Then MSGCAMPO=""
          TECLA=""
     
          Echo Normal
          Echo Off
 
          ShowPopup " Fun‡”es " CENTERED
           "[F4] ~G~erar Arquivo" : " Gerar o arquivo dos itens para balan‡a" : "F4",
           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=-94  : MsgTeclasPadrao()
    Case RetVal="F3" :
         If OPCAO_FORM=OPCAO_FORM_REL
            Then OPCAO_FORM=OPCAO_FORM_MAN
            Else OPCAO_FORM=OPCAO_FORM_REL
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F4" And OPCAO_FORM = OPCAO_FORM_REL :
         Del
         If RecordStatus("New")=False
            Then Gera_Arquivo()
            Else FastMsg("NÆo h  itens na rela‡Æo!")
                 Loop     
         EndIf
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" :
         Del
         While True
           FACA_DIGITAC  = True
           INICIO_PAGINA = True

           If OPCAO_FORM=OPCAO_FORM_REL
              Then PAGINA(Tabela_Item,"MR")
              Else PAGINA(Tabela_Item,"MT")
           EndIf
           COD_ITEM = [Codigo do Item]
           Switch
             Case EDITAR="S":
                  PickForm OPCAO_FORM_MAN
                  If [Item Excluido]="S"
                     Then Mensagem("Item excluido!") 
                          PickForm OPCAO_FORM
                          Quitloop
                  EndIf
                  Echo Normal
                  Echo Off
                  CHAVEC=0
                  Controla_EdicaoC()
             Case EXCLUIR="S" :
                  If [Item Excluido] = "S"
                     Then FastMsg("Este item ja foi excluido!")
                          QuitLoop
                  EndIf
                  PickForm OPCAO_FORM_MAN   
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia]) 
                     Then If ConfGeral("Deseja excluir este item?")
                             Then [Item Excluido] = "S"
                                  UnLockRecord
                                  Grava_Registros_ItenBal()
                          EndIf
                  EndIf         
             OtherWise: QuitLoop
           EndSwitch
           PickForm OPCAO_FORM_REL
           QuitLoop
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If IsBlank([]) Then FastMsg("InclusÆo nÆo permitida!") Loop EndIf

         COD_ITEM = AlinhM([Codigo do Item],10)
         []=COD_ITEM
              
         GetRecord "Itens" COD_ITEM To REG_ITEM
         If Not RetVal
            Then FastMsg("Item nÆo localizado no cadastro de itens!")
                 Loop    
         EndIf
         
         Del
         PickForm OPCAO_FORM_MAN    
         Moveto [Codigo do Item]
         Locate COD_ITEM
         If Not RetVal
            Then CtrlPgDn
                 [Codigo do Item        ] = COD_ITEM 
                 [Descricao do Item     ] = REG_ITEM["Descricao do Item"     ]
                 [Descricao Complementar] = REG_ITEM["Descricao Complementar"]
                 [Unidade Fiscal        ] = REG_ITEM["Unidade Fiscal"        ]
                 If Checa_Controle(SYS_CONTROLE_DIA)
                   Then CHAVEC=1
                        Return
                   Else Del
                 Endif
         Else If Checa_Controle(SYS_CONTROLE_DIA)
                 Then If [Item Excluido]="S"
                         Then Mensagem("Item excluido!")     
                         Else CHAVEC=0
                              Return
                      EndIf   
              Endif     
         EndIf
         PickForm OPCAO_FORM
         QuitLoop
    EndSwitch                             
  EndWhile
EndWhile

EndProc ;CHAVEC()

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

If INICIO_PAGINA 
   Then VSDGTIPODEPRODUTO = ""
        If CHAVEC=0
           Then Carrega_TipoDeProduto()      
        EndIf
EndIf
INICIO_PAGINA=False

Moveto [Tipo de Produto]
While True
  TECLA=" Esc=Retornar  "

  If CHAVEC=0
     Then TECLA=TECLA + "Del=Excluir  "
     Else TECLA=TECLA + "             "
  EndIf
  TECLA=TECLA + "                                    PgDn"

  MSGCAMPO=Field()
  Switch
    Case Field()="Dias de Validade"          : MSGCAMPO = "Dias de Validade do Produto: 000=NÆo imprimem a validade"
    Case Field()="Imprime Data de Validade"  : MSGCAMPO = "Imprime Data de Validade: Sim ou NÆo"
    Case Field()="Imprime Data de Embalagem" : MSGCAMPO = "Imprime Data de Embalagem: Sim ou NÆo"
    Case Field()="Flag"                      : MSGCAMPO = "[ENTER]=Finalizar"                
  EndSwitch
  
  If Field()="Tipo de Produto"                       
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

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

  Switch
    Case RetVal="F1":
         If Field()="Tipo de Produto"
            Then Echo Normal
                 Echo Off
                 
                 ShowPopup " Tipo de Produto " CENTERED
                 "[~0~] VENDA POR PESO         " : " Venda por Peso          " : "0",
                 "[~1~] VENDA POR UNIDADE      " : " Venda por Unidade       " : "1",
                 "[~2~] EAN-13 POR PESO        " : " EAN-13 por Peso         " : "2",
                 "[~3~] VENDA POR PESO GLACIADO" : " Venda por Peso Glaciado " : "3",
                 "[~4~] VENDA POR PESO DRENADO " : " Venda por Peso Drenado  " : "4",
                 "[~5~] EAN-13 POR UNIDADE     " : " EAN-13 por Unidade      " : "5",
                 Separator,
                 "~C~ancelar                    ": " Cancelar a Opera‡„o     " : "CANCELAR"
                 EndMenu
                 To MenuVar
                 Echo Off

                 If MenuVar="CANCELAR" or MenuVar="Esc"
                    Then Loop
                 EndIf     
                 
                 [Tipo de Produto] = MenuVar                                     
                 Carrega_TipoDeProduto()
         EndIf               
    Case RetVal="PGDN" : 
         Switch
           Case IsBlank([Tipo de Produto]) : 
                Fastmsg("Tipo de produto deve ser informado !")
                Loop
           Case IsBlank([Dias de Validade]) : 
                FastMsg("Dias de validade deve ser informado!")
                Loop     
         EndSwitch
         Grava_Registros_ItenBal()
         CHAVEC=9
         QuitLoop
                    
    Case Retval="FIELDVIEW" or Retval="F35":
         EDITFIELD()
         
    Case Retval="DEL":
         If CHAVEC=0
            Then If ConfGeral("Deseja excluir este item?")
                    Then [Item Excluido] = "S"
                         Grava_Registros_ItenBal()
                         CHAVEC=9
                         QuitLoop
                 EndIf         
         EndIf
         
    Case Retval="ESC":
         Switch
           Case Field()="Tipo de Produto" : 
                If QuerDesfazer("")
                   Then If CHAVEC=0
                           Then Undo   
                           Else Del
                        EndIf
                        DIGITAC= False
                        CHAVEC = 9
                        QuitLoop
                EndIf
           Case Field()="Imprime Data de Embalagem" : 
                If [Imprime Data de Validade]="S"
                   Then Moveto [Dias de Validade]
                   Else Moveto [Imprime Data de Validade]
                EndIf     
           Case Field()="Flag" : Moveto [Imprime Data de Embalagem]     
           OtherWise :        
                Left
         EndSwitch
         
    Case Retval="ENTER":
         If IsBlank([])
            Then If Field()="Tipo de Produto" 
                    Then Fastmsg("Valor inv lido !")
                         Loop
                 EndIf
         EndIf
         Switch
           Case Field()="Tipo de Produto"           : Carrega_TipoDeProduto() 
                                                      Moveto [Imprime Data de Validade] 
           Case Field()="Imprime Data de Validade" : If IsBlank([]) Then []="N" EndIf
                                                     If []="S"
                                                         Then Moveto [Dias de Validade         ]
                                                         Else [Dias de Validade]="000"
                                                              Moveto [Imprime Data de Embalagem]
                                                      EndIf
           Case Field()="Dias de Validade"          : MSG = ""
                                                      Switch
                                                        Case IsBlank([Dias de Validade]) And [Imprime Data de Validade]="S"  :
                                                             MSG = "Informe os dias de validade do produto!"
                                                        Case IsBlank([Dias de Validade]) And [Imprime Data de Validade]<>"S" :
                                                             [Dias de Validade]="000"
                                                        Case [Dias de Validade]="000" And  [Imprime Data de Validade]="S"    :
                                                             MSG = "Informe os dias de validade do produto!"   
                                                      EndSwitch
                                                      If MSG<>""
                                                         Then FastMsg(MSG)
                                                         Else Moveto [Imprime Data de Embalagem]
                                                      EndIf      
           Case Field()="Imprime Data de Embalagem" : If IsBlank([]) Then []="N" EndIf
                                                      Moveto [Flag]
           Case Field()="Flag"                      : Grava_Registros_ItenBal()
                                                      CHAVEC=9
                                                      QuitLoop  
           OtherWise                                : Right
         EndSwitch   
  EndSwitch
EndWhile
EndProc  ;(DigitaC)      

;*******************************************************************************
;* Rotina para Carregar Tipo de Produto                                        *
;*******************************************************************************
Proc Carrega_TipoDeProduto()

Switch
  Case [Tipo de Produto]="0" : VSDGTIPODEPRODUTO = "VENDA POR PESO"
  Case [Tipo de Produto]="1" : VSDGTIPODEPRODUTO = "VENDA POR UNIDADE"
  Case [Tipo de Produto]="2" : VSDGTIPODEPRODUTO = "EAN-13 POR PESO"
  Case [Tipo de Produto]="3" : VSDGTIPODEPRODUTO = "VENDA POR PESO GLACIADO"
  Case [Tipo de Produto]="4" : VSDGTIPODEPRODUTO = "VENDA POR PESO DRENADO"
  Case [Tipo de Produto]="5" : VSDGTIPODEPRODUTO = "EAN-13 POR UNIDADE"
EndSwitch

EndProc ;Carrega_TipoDeProduto()

;*******************************************************************************
;* ROTINA PARA Ler/Gravacao Opcao                                              *
;*******************************************************************************
Proc ConfOpcoes(Opcao)
Private Opcao

Switch
  Case Opcao="Ler":
       If IsFile("Conf_Bal.SC")
           Then Play "Conf_Bal"
       EndIf
       If Not IsAssigned(VSDGPASTA)    Then VSDGPASTA="C:\\BALANCA\\"    EndIf
  Case Opcao="Gravar":
       FileWrite        "Conf_Bal.sc" From ";****** Variaveis de Configura‡„o Caminho Vise Informatica"+"\n"
       FileWrite Append "Conf_Bal.sc" From "VSDGPASTA="+Chr(34)+AjustaPasta(VSDGPASTA)+Chr(34)+"\n"
EndSwitch
EndProc ;

;*******************************************************************************
;* Rotina ShowDialog para Imprimir em arquivo                                  *
;*******************************************************************************
Proc SD_Arquivo(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo="OPEN"
   Then AoCriarShowDialog()
        Campo="TG_TABELA"
EndIf

If Disparo="UPDATE"
   Then Switch
          Case Campo="TG_CONFIG" : Play "\\Sistemas\\CtaRec\\SETPASTA"          
                                   Campo="TG_TABELA"
          OtherWise              : Return Temp
        EndSwitch  
EndIf
               
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Temp=False
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_TABELA"             : Campo="NO"
            Case Campo="TG_CONFIG"             : Campo="TG_TABELA"
            Case Campo="YES"    Or 
                 Campo="NO"     Or              
                 Campo="ARQ_NO"                : Campo="TG_TABELA"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_TABELA"    : Campo="YES"
                    Case Campo="TG_CONFIG"      : 
                         Play "\\Sistemas\\CtaRec\\SETPASTA"
                         Campo="TG_TABELA"
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp           
EndProc

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc AjustaPasta(s)
Private s,ns,i

ns=""
For i From 1 to Len(s)
 If SubStr(s,i,1)=Chr(92)
    Then ns=ns+Chr(92)
 EndIf
 ns=ns+SubStr(s,i,1)
EndFor
Return ns
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","INCONSISTENCIA DE DADOS")+ "\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 para Gerar o Arquivo                                                 *
;*******************************************************************************
Proc Gera_Arquivo()

ConfOpcoes("Ler")    
AUX_VSDGPASTA = VSDGPASTA          

Echo Normal
Echo Off
Do_it!
ClearAll

limparodape(0)
While True

   ShowDialog "Exporta arquivo para balan‡a" Proc "SD_Arquivo"
   Trigger "OPEN","ARRIVE","UPDATE","SELECT"
   Key "F1","ENTER","ESC","TAB",
   -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
    @ 03,12   Height 11 Width 78
     
    @ 01,01 ?? "Caminho padrÆo para arquivos de retorno:"
    @ 02,02 ?? VSDGPASTA
    PaintCanvas Attribute 121 02,01,02,73     

    Label  @ 03,00 "Tabela"  For "TG_TABELA"
    Accept @ 04,01 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 04,09 Width 24 "A25" Picture "!*!" Tag "TG_NOMTAB" To VSDGNOMTAB

    Pushbutton @ 07,25 width 11 "~O~k"         OK     Default Value "Ok" Tag "YES"        To BottonValue
    Pushbutton @ 07,38 width 11 "~C~ancela"    CANCEL                    Tag "NO"         To BottonValue
    Pushbutton @ 07,61 width 14 "Con~f~igurar"                           Tag "TG_CONFIG"  To BottonValue

 EndDialog
 If Not Retval Then QuitLoop EndIf
 
 If Isblank(VSDGTABELA)
    Then FastMsg("A Tabela de Pre‡o deve ser informada!")
         Loop
 EndIf 
 
 If AUX_VSDGPASTA <> VSDGPASTA And AUX_VSDGPASTA <> "" And VSDGPASTA <> ""
    Then ConfOpcoes("Gravar")  
         AUX_VSDGPASTA=VSDGPASTA
 EndIf       
 
 ;---- Cria a pasta de trabalho ------------------------------------------------
 If SubStr(VSDGPASTA,Len(VSDGPASTA),1)="\\"
    Then VSDGPASTA = SubStr(VSDGPASTA,1,Len(VSDGPASTA)-1) 
 EndIF
 
 If DirExists(VSDGPASTA)=0
    Then Cria_Pasta(VSDGPASTA)
         Sleep 2000
 EndIf

 ;---- Arquivo -----------------------------------------------------------------
 If SubStr(VSDGPASTA,Len(VSDGPASTA),1)<>"\\"
    Then VSDGPASTA = VSDGPASTA + "\\"
 EndIF
 
 ARQIMP=VSDGPASTA+"itensmgv.Txt"
 If IsFile(ARQIMP)  Then Deleta_Arquivo(ARQIMP)  EndIf
 
 ARQDEL=VSDGPASTA+"Exclitem.Txt"
 If IsFile(ARQDEL)  Then Deleta_Arquivo(ARQDEL)  EndIf
 
 ARQERRO=PrivDir()+"ERRO_BAL.Txt"
 If IsFile(ARQERRO) Then Deleta_Arquivo(ARQERRO) EndIf
 
 Gera_Dados_Arquivo()
 
 ;---- Imprime Inconsistˆncia de Erros -----------------------------------------
 If DynArraySize(ARRAY_ERRO)>0
    Then NLIN_ERRO = 0
         For ii From 1 To DynArraySize(ARRAY_ERRO)
           If NLIN_ERRO=0
              Then Cabecalho_Erro()
           EndIf
        
           NLIN_ERRO = NLIN_ERRO + 1
           Print File ARQERRO Spaces(2)+ARRAY_ERRO[ii]+"\n"
           
           If NLIN_ERRO>=66
              Then Print File ARQERRO "\f"
                   Cabecalho_Erro()
           EndIf    
         EndFor
         
         If IsFile(ARQERRO)
            Then DISPOSITIVO_OPCAO = "V"
                 PDFZEBRA = False
                 
                 Mensagem("Foi encontrado inconsistˆncias ao gerar o arquivo!//"+
                          "Ser  exibido um relat¢rio informado essas inconsistˆncias.")
                 
                 ImpriArq(ARQERRO)
                 Deleta_Arquivo(ARQERRO)
         EndIf        
 EndIf   

 Switch
   Case GERA_EXCLUIDO And GERA_ARQUIVO         : MSG ="Arquivo de itens para balan‡a gerado em://"+ARQIMP+"////"+
                                                      "Arquivo de exclusÆo gerado em://"+ARQDEL
   Case Not GERA_EXCLUIDO And GERA_ARQUIVO     : MSG ="Arquivo de itens para balan‡a gerado em:////"+ARQIMP
   Case GERA_EXCLUIDO And Not GERA_ARQUIVO     : MSG ="NÆo foi gerado arquivo de itens para balan‡a.////"+"Arquivo de exclusÆo gerado em://"+ARQDEL
   Case Not GERA_EXCLUIDO And Not GERA_ARQUIVO : MSG ="NÆo foi gerado arquivo de itens para balan‡a."                                                                                     
 EndSwitch   
 Mensagem(MSG)
 QuitLoop
EndWhile

Coedit Tabela_Item
PickForm OPCAO_FORM_REL 

EndProc ;Gera_Arquivo()

;*******************************************************************************
;* Rotina p/ gerar dados para arquivo                                          *
;*******************************************************************************
Proc Gera_Dados_Arquivo()

NLIN_ERRO = 0
DynArray ARRAY_ERRO[]

GERA_EXCLUIDO = False
GERA_ARQUIVO  = False

View "Iten_Bal"
While True
  GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM 
  If Not Retval
     Then NLIN_ERRO = NLIN_ERRO + 1
          ARRAY_ERRO[NLIN_ERRO] = Format("W11",[Codigo do Item])+Spaces(31)+Format("W30","SEM CADASTRO")
     Else ;---- Preco do Item --------------------------------------------------
          While True
          
            PRECO="000000"
            GetRecord "\\Sistemas\\Vendas\\TbPrIte" VSDGTABELA,[Codigo do Item] To REG_PRECO 
            If Retval
               Then PRECO = StrVal(REG_PRECO["Preco Unitario"])
               Else NLIN_ERRO = NLIN_ERRO + 1
                    ARRAY_ERRO[NLIN_ERRO] = Format("W11",[Codigo do Item])+Format("W30",REG_ITEM["Descricao do Item"])+Spaces(1)+
                                            Format("W30","ITEM SEM PRECO") 
                               
            EndIf
            
            If PRECO<>"000000"
               Then AUX_PRECO = ""
                    For c From 1 To Len(PRECO)
                      If SubStr(PRECO,c,1) = "." Or SubStr(PRECO,c,1) = ","
                         Then AUX_PRECO = SubStr(PRECO,1,c-1)+SubStr(PRECO,c+1,Len(PRECO))
                      EndIf                                           
                    EndFor
                    If AUX_PRECO<>"" Then PRECO = AUX_PRECO EndIf
                    
                    TM = 6-Len(PRECO)
                    If TM>0
                       Then ZERO = Fill("0",2)
                            PRECO = ZERO+PRECO
                    EndIf        
                    Release Vars AUX_PRECO,ZERO 
            EndIf
            ;-------------------------------------------------------------------
            COD_ITEM = StrVal(NumVal([Codigo do Item]))
            If Len(COD_ITEM)<6
               Then While Len(COD_ITEM)<6
                      COD_ITEM = "0"+COD_ITEM
                    EndWhile
            EndIf
            
            If len(COD_ITEM)>6
               Then NLIN_ERRO = NLIN_ERRO + 1
                    ARRAY_ERRO[NLIN_ERRO] = Format("W11",[Codigo do Item])+Format("W30",REG_ITEM["Descricao do Item"])+Spaces(1)+
                                            Format("W30","CODIGO ITEM MAIS DE 6 DIGITOS") 
                    QuitLoop
            EndIf
            
            If Len(Rtrim(Ltrim(REG_ITEM["Descricao do Item"])))>25
               Then NLIN_ERRO = NLIN_ERRO + 1
                    ARRAY_ERRO[NLIN_ERRO] = Format("W11",[Codigo do Item])+Format("W30",REG_ITEM["Descricao do Item"])+Spaces(1)+
                                            Format("W30","DESCRICAO MAIS DE 25 DIGITOS")
            EndIf                                                                                   
            
            If Len(Rtrim(Ltrim(REG_ITEM["Descricao Complementar"])))>25
               Then NLIN_ERRO = NLIN_ERRO + 1
                    ARRAY_ERRO[NLIN_ERRO] = Format("W11",[Codigo do Item])+Format("W58",REG_ITEM["Descricao Complementar"])+Spaces(1)+
                                            Format("W30","DESC. COMP. MAIS DE 25 DIGITOS")
            EndIf                
            
            Switch
              Case [Imprime Data de Validade] = "S"  : IDV = "1"
              OtherWise                              : IDV = "0"
            EndSwitch
            
            Switch
              Case [Imprime Data de Embalagem] = "S" : IDE = "1"
              OtherWise                              : IDE = "0"
            EndSwitch
            
            ;[Item Excluido], enviado para arquivo espec¡fico e LOOP p/ nao enviar dados para o arquivo principal
            If [Item Excluido]="S"
               Then If Not GERA_EXCLUIDO Then GERA_EXCLUIDO = True EndIf
                    Print File ARQDEL Format("W2",REG_ITEM["Codigo do Departamento"])
                    Print File ARQDEL Format("W6",[Codigo do Item])
                    Print File ARQDEL"\n"
                    QuitLoop
            EndIf
            
            DIAS_VALIDADE=[Dias de Validade]
            Switch
              Case IsBlank([Dias de Validade]) : DIAS_VALIDADE = "000"
              Case Len([Dias de Validade])<3   : NLIN_ERRO = NLIN_ERRO + 1
                                                 ARRAY_ERRO[NLIN_ERRO] = Format("W11",[Codigo do Item])+
                                                 Format("W30",REG_ITEM["Descricao do Item"])+Spaces(1)+
                                                 Format("W30","DIAS DE VALIDADE INVALIDO")
            EndSwitch
            
            ;---- Valores Fixos ------------------------------------------------
            DEPARTAMENTO = "01"                                                  ;REG_ITEM["Codigo do Departamento"]   
            
            If Not GERA_ARQUIVO Then GERA_ARQUIVO = True EndIf
                      
            Print File ARQIMP Format("W2",DEPARTAMENTO)
            Print File ARQIMP Format("W1",[Tipo de Produto])
            Print File ARQIMP Format("W6",COD_ITEM)
            Print File ARQIMP Format("W6",PRECO)
            Print File ARQIMP Format("W3",DIAS_VALIDADE)
            Print File ARQIMP Format("W25",REG_ITEM["Descricao do Item"])
            Print File ARQIMP Format("W25",REG_ITEM["Descricao Complementar"])
            Print File ARQIMP Format("W6","000000")                               ;Informa‡Æo Extra do Item
            Print File ARQIMP Format("W4","0000")                                 ;Imagem do Item
            Print File ARQIMP Format("W6","000000")                               ;Informa‡Æo Nutricional 
            Print File ARQIMP Format("W1",IDV)
            Print File ARQIMP Format("W1",IDE)
            Print File ARQIMP Format("W4","0000")                                 ;C¢digo do Fornecedor  
            Print File ARQIMP Format("W12","000000000000")                        ;Lote
            Print File ARQIMP Format("W11","00000000000")                         ;C¢digo EAN-13 Especial
            Print File ARQIMP Format("W1","1")                                     ;VersÆo do Pre‡o
            Print File ARQIMP Format("W4","0000")                                 ;C¢digo do Som
            Print File ARQIMP Format("W4","0000")                                 ;C¢digo de Tara Pr‚-determinada
            Print File ARQIMP Format("W4","0000")                                 ;C¢digo do Fracionador
            Print File ARQIMP Format("W4","0000")                                 ;C¢digo do Campo Extra 1
            Print File ARQIMP Format("W4","0000")                                 ;C¢digo do Campo Extra 2
            Print File ARQIMP Format("W4","0000")                                 ;C¢digo da Conserva‡Æo
            Print File ARQIMP Format("W12","000000000000")                        ;EAN-13 de Fornecedor
            Print File ARQIMP Format("W6","000000")                               ;Percentual de Glaciamento
            Print File ARQIMP Format("W4","|"+DEPARTAMENTO+"|")                   ;Sequencia de Departamentos Associados ??????????
            Print File ARQIMP Format("W35","")                                    ;Descritivo do Item - Terceira Linha
            Print File ARQIMP Format("W35","")                                    ;Descritivo do Item - Quarta Linha
            Print File ARQIMP Format("W6","000000")                               ;C¢digo do Campo Extra 3
            Print File ARQIMP Format("W6","000000")                               ;C¢digo do Campo Extra 4
            Print File ARQIMP Format("W6","000000")                               ;C¢digo da Midia
            Print File ARQIMP Format("W6","000000")                               ;Pre‡o Promocional
            Print File ARQIMP Format("W1","0")                                    ;Fornecedor Associado ou Solicita Fornecedor
            Print File ARQIMP Format("W5","||0||")                ;??????                 
            Print File ARQIMP Format("W16","0000000000000000")                    ;C¢digo de Fornecedor Associado
            Print File ARQIMP"\n"
            QuitLoop
          EndWhile  
  EndIf    
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile
ClearAll

EndProc ;Gera_Dados_Arquivo()
                          
;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SelecionaFiltro()
ClearAll

{Ask} {Itens}
Moveto [Codigo do Item           ] Check TypeIn "_It"
Moveto [Descricao do Item        ] Check
Moveto [Descricao Complementar   ] Check
Moveto [Unidade Fiscal           ] Check
{Ask} {Iten_Bal}
Moveto [Codigo do Item           ]       TypeIn "_It"
Moveto [Tipo de Produto          ] Check
Moveto [Dias de Validade         ] Check
Moveto [Imprime Data de Validade ] Check
Moveto [Imprime Data de Embalagem] Check
Moveto [Item Excluido            ] Check
Moveto [Codigo_Usuario           ] Check
Moveto [Data_Inclusao            ] Check
Moveto [Hora_Inclusao            ] Check
Moveto [Numero_Controle_Dia      ] Check
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo do Item           ] TypeIn "_It"
Moveto [Tipo de Produto          ] TypeIn "_TpP"
Moveto [Descricao do Item        ] TypeIn "_DescI"
Moveto [Descricao Complementar   ] TypeIn "_DescC" 
Moveto [Unidade Fiscal           ] TypeIn "_UnF" 
Moveto [Dias de Validade         ] TypeIn "_DiasV" 
Moveto [Imprime Data de Validade ] TypeIn "_ImpV" 
Moveto [Imprime Data de Embalagem] TypeIn "_ImpE"
Moveto [Item Excluido            ] TypeIn "_IExc"
Moveto [Codigo_Usuario           ] TypeIn "_CodU" 
Moveto [Data_Inclusao            ] TypeIn "_DatI" 
Moveto [Hora_Inclusao            ] TypeIn "_HorI" 
Moveto [Numero_Controle_Dia      ] TypeIn "_NumD"   
{Ask} TypeIn Tabela_Item Enter TypeIn "Fast Insert"
Moveto [Codigo do Item           ] TypeIn "_It"
Moveto [Tipo de Produto          ] TypeIn "_TpP"
Moveto [Descricao do Item        ] TypeIn "_DescI"
Moveto [Descricao Complementar   ] TypeIn "_DescC" 
Moveto [Unidade Fiscal           ] TypeIn "_UnF" 
Moveto [Dias de Validade         ] TypeIn "_DiasV" 
Moveto [Imprime Data de Validade ] TypeIn "_ImpV" 
Moveto [Imprime Data de Embalagem] TypeIn "_ImpE"
Moveto [Item Excluido            ] TypeIn "_IExc"
Moveto [Codigo_Usuario           ] TypeIn "_CodU" 
Moveto [Data_Inclusao            ] TypeIn "_DatI" 
Moveto [Hora_Inclusao            ] TypeIn "_HorI" 
Moveto [Numero_Controle_Dia      ] TypeIn "_NumD" 
Do_It!
ClearAll

Return True

EndProc  ; (SelecionaFiltro)

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

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
EndWhile
Moveto Tabela_Item
If RecordStatus("Locked") Then UnLockRecord EndIf

PickForm OPCAO_FORM
SaveTables

EndProc

;*******************************************************************************
;* Rotina para Gravar Registros na tabela Iten_Bal                             *
;*******************************************************************************
Proc Grava_Registros_ItenBal()
Private REG_ITENBAL

CopyToArray REG_ITENBAL

Moveto "Iten_Bal"
Moveto [Codigo do Item]
Locate COD_ITEM
If Not RetVal
   Then End Down
        [Codigo do Item] = COD_ITEM
EndIf
[Tipo de Produto          ] = REG_ITENBAL["Tipo de Produto"          ]
[Dias de Validade         ] = REG_ITENBAL["Dias de Validade"         ]
[Imprime Data de Validade ] = REG_ITENBAL["Imprime Data de Validade" ] 
[Imprime Data de Embalagem] = REG_ITENBAL["Imprime Data de Embalagem"]
[Item Excluido            ] = REG_ITENBAL["Item Excluido"            ]
[Codigo_Usuario           ] = REG_ITENBAL["Codigo_Usuario"           ] 
[Data_Inclusao            ] = REG_ITENBAL["Data_Inclusao"            ] 
[Hora_Inclusao            ] = REG_ITENBAL["Hora_Inclusao"            ]           
[Numero_Controle_Dia      ] = REG_ITENBAL["Numero_Controle_Dia"      ] 
UnLockRecord

Moveto Tabela_Item
Controle_Dia()

EndProc ;Grava_Registros_ItenBal()                                            
                             
;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,\\Sistemas\\Estoque\\Bib_Estq"

If Not Isassigned(SYS_CONTROLE_DIA) Then SYS_CONTROLE_DIA="" EndIf

Tabela_Item=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Estoque\\ItBl_Tmp" Tabela_Item
Empty Tabela_Item

SYS_VALOR()
SelecionaFiltro()

OPCAO_FORM_REL = "R"
OPCAO_FORM_MAN = "1"
OPCAO_FORM     = OPCAO_FORM_REL 

Coedit Tabela_Item
PickForm OPCAO_FORM_REL 
While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then PickForm OPCAO_FORM
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All          