sexta-feira, 29 de novembro de 2013

Programa Gera arquivo de Itens ( Datasul )


def temp-table tt-item like mgind.item .

def temp-table tt-planilha no-undo
    field it-codigo       as char format "x(16)"
    field descricao       as char format "x(40)"
    field ge-codigo       as char
    field fm-codigo-ori   as char format "x(15)"
    field fm-codigo-nov   as char format "x(15)"
    field fm-cod-com-ori  as char format "x(15)"
    field fm-cod-com-nov  as char format "x(15)"
    index id-tt-planilha as primary it-codigo.
    
def temp-table tt-familia no-undo
    field tipo          as char
    field familia       as char
    field descricao     as char
    field lixo          as char
    index id-tt-familia tipo familia.    
    
input from c:\temp\familias.txt.
repeat:
    create tt-familia.
    import delimiter ";" tt-familia.
end.
input close.    
    
    
    
def var i-novo-codigo     as inte.        
def var i-ge-codigo-novo  as inte.

input from c:\temp\planilha-itens.csv.
repeat:    
    create tt-planilha.
    import delimiter ";" tt-planilha .
    
    if tt-planilha.it-codigo = "260.006" or
       tt-planilha.it-codigo = "289.001" or
       tt-planilha.it-codigo = "" then delete tt-planilha.
    
end.
input close.

def stream s-erros.

output stream s-erros to c:\temp\erros-itens.txt.

put stream s-erros unformatted "ITENS DUPLICADOS" at 1 skip(2).

for each tt-planilha break by tt-planilha.it-codigo :

    if (    first-of(tt-planilha.it-codigo) and not last-of(tt-planilha.it-codigo)) or
       (not first-of(tt-planilha.it-codigo) and     last-of(tt-planilha.it-codigo)) then do:
       disp stream s-erros tt-planilha with width 300.
       
       delete tt-planilha.
       
    end.
    else 
       if tt-planilha.it-codigo = "" then delete tt-planilha.

end.


put stream s-erros unformatted "ITENS NAO CADASTRADOS " at 1 skip(2).

for each tt-planilha :

    
    find mgind.item no-lock where 
         mgind.item.it-codigo = tt-planilha.it-codigo no-error.
    
    if not avail mgind.item then do:
    
       find mgind-ivai.item no-lock where
            mgind-ivai.item.it-codigo = tt-planilha.it-codigo no-error.
            
       if not avail mgind-ivai.item then do:
          disp STREAM S-ERROS tt-planilha with width 300 stream-io.
       end.
       else do:
          create tt-item.
          buffer-copy mgind-ivai.item to tt-item.
       end.
       
    end.
    else do:
          create tt-item.
          buffer-copy mgind.item to tt-item.
    end.
   
    if tt-planilha.fm-cod-com-nov = "Automotivo" then tt-planilha.fm-cod-com-nov = "1000".
    if tt-planilha.fm-cod-com-nov = "Bombas"     then tt-planilha.fm-cod-com-nov = "1100".
    if tt-planilha.fm-cod-com-nov = "Caldeira"   then tt-planilha.fm-cod-com-nov = "1200".
    if tt-planilha.fm-cod-com-nov = "defensivos" then tt-planilha.fm-cod-com-nov = "1500".
    if tt-planilha.fm-cod-com-nov = "DEFINIR" then tt-planilha.fm-cod-com-nov = "9000".
    if tt-planilha.fm-cod-com-nov = "Destilaria" then tt-planilha.fm-cod-com-nov = "1600".
    if tt-planilha.fm-cod-com-nov = "eletrica" then tt-planilha.fm-cod-com-nov = "1700".
    if tt-planilha.fm-cod-com-nov = "epi" then tt-planilha.fm-cod-com-nov = "1800".
    if tt-planilha.fm-cod-com-nov = "Evaporacao" then tt-planilha.fm-cod-com-nov = "2000".
    if tt-planilha.fm-cod-com-nov = "Fermentacao" then tt-planilha.fm-cod-com-nov = "2200".
    if tt-planilha.fm-cod-com-nov = "ferragens geral" then tt-planilha.fm-cod-com-nov = "2300".
    if tt-planilha.fm-cod-com-nov = "Ferramentaria" then tt-planilha.fm-cod-com-nov = "2300".
    if tt-planilha.fm-cod-com-nov = "Fertilizantes" then tt-planilha.fm-cod-com-nov = "2500".
    if tt-planilha.fm-cod-com-nov = "Filtro de Lodo" then tt-planilha.fm-cod-com-nov = "2600".
    if tt-planilha.fm-cod-com-nov = "fabrica acucar" then tt-planilha.fm-cod-com-nov = "2100".
    if tt-planilha.fm-cod-com-nov = "gases" then tt-planilha.fm-cod-com-nov = "2700".
    if tt-planilha.fm-cod-com-nov = "Higiene" then tt-planilha.fm-cod-com-nov = "3200".
    if tt-planilha.fm-cod-com-nov = "informatica" then tt-planilha.fm-cod-com-nov = "2900".
    if tt-planilha.fm-cod-com-nov = "Instrumentacao" then tt-planilha.fm-cod-com-nov = "3000".
    if tt-planilha.fm-cod-com-nov = "laboratorio" then tt-planilha.fm-cod-com-nov = "3100".
    if tt-planilha.fm-cod-com-nov = "Laboratorio" then tt-planilha.fm-cod-com-nov = "3100".
    if tt-planilha.fm-cod-com-nov = "lubrificacao" then tt-planilha.fm-cod-com-nov = "3300".
    if tt-planilha.fm-cod-com-nov = "manut." then tt-planilha.fm-cod-com-nov = "3400".
    if tt-planilha.fm-cod-com-nov = "manutMecanic" then tt-planilha.fm-cod-com-nov = "3400".
    if tt-planilha.fm-cod-com-nov = "Manut. Civil" then tt-planilha.fm-cod-com-nov = "1300".
    if tt-planilha.fm-cod-com-nov = "Materiais escri" then tt-planilha.fm-cod-com-nov = "1900".
    if tt-planilha.fm-cod-com-nov = "mat escrit" then tt-planilha.fm-cod-com-nov = "1900".
    if tt-planilha.fm-cod-com-nov = "Moenda" then tt-planilha.fm-cod-com-nov = "3500".
    if tt-planilha.fm-cod-com-nov = "moveis" then tt-planilha.fm-cod-com-nov = "3600".
    if tt-planilha.fm-cod-com-nov = "pintura" then tt-planilha.fm-cod-com-nov = "3700".
    if tt-planilha.fm-cod-com-nov = "quimico" then tt-planilha.fm-cod-com-nov = "3800".
    if tt-planilha.fm-cod-com-nov = "trat. Caldo" then tt-planilha.fm-cod-com-nov = "3900".
    if tt-planilha.fm-cod-com-nov = "turbinas" then tt-planilha.fm-cod-com-nov = "4000".
    if tt-planilha.fm-cod-com-nov = "Uniformes" then tt-planilha.fm-cod-com-nov = "4100".
    if tt-planilha.fm-cod-com-nov = "CORRETIVOS" then tt-planilha.fm-cod-com-nov = "1400".  
    if tt-planilha.fm-cod-com-nov = "almoxarifado" then tt-planilha.fm-cod-com-nov = "2700".
    if tt-planilha.fm-cod-com-nov = "Geral" then tt-planilha.fm-cod-com-nov = "9000".
    
    
    if tt-planilha.fm-codigo-nov = "fixadores" then assign tt-planilha.fm-codigo-nov = "007".
    if tt-planilha.fm-codigo-nov = "limpeza" then assign tt-planilha.fm-codigo-nov = "028".
    if tt-planilha.fm-codigo-nov = "corretivos" then assign tt-planilha.fm-codigo-nov = "217".
    if tt-planilha.fm-codigo-nov = "epis" then assign tt-planilha.fm-codigo-nov = "017".
    if tt-planilha.fm-codigo-nov = "fertilizantes" then assign tt-planilha.fm-codigo-nov = "215".
    if tt-planilha.fm-codigo-nov = "gases" then assign tt-planilha.fm-codigo-nov = "137".
    if tt-planilha.fm-codigo-nov = "lubrificantes" then assign tt-planilha.fm-codigo-nov = "088".
    if tt-planilha.fm-codigo-nov = "moveis" then assign tt-planilha.fm-codigo-nov = "029".   
    if tt-planilha.fm-codigo-nov = "impressos" then assign tt-planilha.fm-codigo-nov = "138".
    if tt-planilha.fm-codigo-nov = "uniformes" then assign tt-planilha.fm-codigo-nov = "032".
    
    if tt-planilha.fm-codigo-nov = "civil" then assign tt-planilha.fm-codigo-nov = "300".
    if tt-planilha.fm-codigo-nov = "defensivos" then assign tt-planilha.fm-codigo-nov = "301".
    if tt-planilha.fm-codigo-nov = "escritorio" then assign tt-planilha.fm-codigo-nov = "019".
    if tt-planilha.fm-codigo-nov = "ferramentas" then assign tt-planilha.fm-codigo-nov = "231".
    if tt-planilha.fm-codigo-nov = "impresso" then assign tt-planilha.fm-codigo-nov = "138".
    if tt-planilha.fm-codigo-nov = "laboratorio" then assign tt-planilha.fm-codigo-nov = "226".
    if tt-planilha.fm-codigo-nov = "lubrificante" then assign tt-planilha.fm-codigo-nov = "088".
    if tt-planilha.fm-codigo-nov = "produto quimico" then assign tt-planilha.fm-codigo-nov = "299".
    if tt-planilha.fm-codigo-nov = "produto quimico" then assign tt-planilha.fm-codigo-nov = "299".       
    if tt-planilha.fm-codigo-nov = "informatica" then assign tt-planilha.fm-codigo-nov = "302".
    if tt-planilha.fm-codigo-nov = "232" then assign tt-planilha.fm-codigo-nov = "302".
    if tt-planilha.fm-codigo-nov = "produtoquimico" then assign tt-planilha.fm-codigo-nov = "299".     
    if tt-planilha.fm-codigo-nov = "produtoquimicos" then assign tt-planilha.fm-codigo-nov = "299".           
    if tt-planilha.fm-codigo-nov = "214" then assign tt-planilha.fm-codigo-nov = "301".
   
    if tt-planilha.it-codigo = "" then delete tt-planilha.
    
end.


put stream s-erros unformatted "FAMILIAS" at 1 skip(2).

for each tt-planilha break by tt-planilha.fm-codigo-nov:
    if first-of(tt-planilha.fm-codigo-nov) then do:
    
        find tt-familia no-lock where  
             tt-familia.tipo    = "Mat" and
             tt-familia.familia = tt-planilha.fm-codigo-nov no-error.
         
        if not avail tt-familia then do:
           disp stream s-erros tt-planilha.fm-codigo-nov.
        END.
    end.
end.       

put stream s-erros unformatted "FAMILIAS NAO CADASTRADOS " at 1 skip(2).

for each tt-planilha:

    find tt-familia no-lock where 
         tt-familia.tipo    = "Mat" and
         tt-familia.familia = tt-planilha.fm-codigo-nov no-error.
         
    if not avail tt-familia then do:
       disp stream s-erros "mat"  @ tt-familia.tipo with width 300 stream-io.       
       disp stream s-erros tt-planilha with width 300 stream-io.    
       
       delete tt-planilha.
       
    end.     
    else do:
       find tt-familia no-lock where
            tt-familia.tipo = "Com" and
            tt-familia.familia = tt-planilha.fm-cod-com-nov no-error.
         
       if not avail tt-familia then do:
          disp stream s-erros "com"  @ tt-familia.tipo with width 300 stream-io.       
          disp stream s-erros tt-planilha with width 300 stream-io.    
          delete tt-planilha.
       end.     
    end.       
end.

for each tt-planilha where tt-planilha.it-codigo > "",
    each tt-item where tt-item.it-codigo = tt-planilha.it-codigo break by tt-item.un:
    
    if first-of(tt-item.un) then do:
    
       find tt-familia no-lock where
            tt-familia.tipo    = "UN" and
            tt-familia.familia = tt-item.un no-error.
         
       if not avail tt-familia then do:
          disp stream s-erros tt-item.un with width 300 stream-io.    
       end.     
       
    end.
    
end.    


output stream s-erros close.




output to c:\temp\arq-importar.txt.

for each tt-planilha where tt-planilha.it-codigo > "",
    each tt-item where tt-item.it-codigo = tt-planilha.it-codigo:
    
    
    assign i-novo-codigo = i-novo-codigo + 1.
       
    
    assign i-ge-codigo-novo = if tt-item.ge-codigo = 05 then 85 else
                              if tt-item.ge-codigo = 10 then 40 else
                              if tt-item.ge-codigo = 15 then 50 else
                              if tt-item.ge-codigo = 20 then 45 else
                              if tt-item.ge-codigo = 25 then 35 else
                              if tt-item.ge-codigo = 30 then 60 else
                              if tt-item.ge-codigo = 35 then 65 else
                              if tt-item.ge-codigo = 45 then 60 else
                              if tt-item.ge-codigo = 50 then 80 else
                              if tt-item.ge-codigo = 55 then 75 else
                              if tt-item.ge-codigo = 60 then 70 else 80.
                              
     put unformatted
         1                                              at 1   /* Inclusao */
         i-novo-codigo              format "99999"      at 2
         tt-item.descricao-1 + tt-item.descricao-2      at 18
         i-ge-codigo-novo           format "99"         at 78
         tt-planilha.fm-codigo-nov                      at 80
         tt-planilha.fm-cod-com-nov                     at 88
         tt-item.un                                     at 96
         "101"                                          at 98
         1                          format "99"         at 101
         month(tt-item.data-implant)  format "99"       at 103
         day(tt-item.data-implant)    format "99"         
         year(tt-item.data-implant)   format "9999"
         month(tt-item.data-liberac)  format "99"       at 111
         day(tt-item.data-liberac)    format "99"         
         year(tt-item.data-liberac)   format "9999".
         
    if tt-item.tipo-contr = "T" then 
        put 2                         format "99"       at 127.
    else 
    if tt-item.tipo-contr = "D" then 
        put 4                         format "99"       at 127.
        
    put  2                            format "99"       at 129
         tt-item.lote-econ            format "99999999.9999" at 131
         tt-item.it-codigo                                   at 144.
         
         
     find mgind.narrativa no-lock where 
          mgind.narrativa.it-codigo = tt-item.it-codigo no-error.
     if avail mgind.narrativa then do:                                                         
        put unformatted 
            replace(replace(
            mgind.narrativa.descricao[1] + " " +
            mgind.narrativa.descricao[2] + " " +
            mgind.narrativa.descricao[3] + " " +
            mgind.narrativa.descricao[4] + " " +
            mgind.narrativa.descricao[5],chr(10),""),chr(13),"") at 210.
      end.
      else do:
          find mgind-ivai.narrativa no-lock where 
               mgind-ivai.narrativa.it-codigo = tt-item.it-codigo no-error.
          if avail mgind-ivai.narrativa then do:
             put unformatted 
                replace(replace(
                 mgind-ivai.narrativa.descricao[1] + " " +
                 mgind-ivai.narrativa.descricao[2] + " " +
                 mgind-ivai.narrativa.descricao[3] + " " +
                 mgind-ivai.narrativa.descricao[4] + " " +
                 mgind-ivai.narrativa.descricao[5],chr(10),""),chr(13),"") at 210.
          end.
      end.
      
      put skip.
      
end.
output close.      
   
       
       
       
       
       
       
       
                   
       
       
                                 

Nenhum comentário:

Postar um comentário