W Pub: ABAP Prog Propios Autor

Carga masiva de papeles

  1. REPORT Z01BC_PRG_UPLOAD_PAPELES. "v1.5
  2. * Dado un filez de entrada con la siguiente estructura:
  3. *
  4. *;1250;Papel;Objeto;Descripcin
  5. *;1251;Campo;Valor-Low;Valor-Low;Valor-Low;etc...
  6. *;1252;campo;valor-low;valor-high
  7. *
  8. * ( El separador puede ser cualquier character y debe colocarse como
  9. * ejemplo en la primera posicin de cada lnea.
  10. * Recordad no poner el separado dentro del contenido. )
  11. *
  12. * 1250, sirve para indentificar el papel
  13. * 1251, sirve para identificar un campo con valor low
  14. * 1252, sivve para identificar un campo con valor low y high
  15. *
  16. * Se genera un fichero resultante para poder subirlo a las
  17. * diferentes machines por la transaccin PFCG
  18. *
  19. * No se inserta directamente en tablas para evitar problemas de
  20. * transportes
  21. tables: agr_1250, agr_1251, agr_define, agr_time, AGR_TEXTS.
  22.  
  23. selection-screen begin of block b01 with frame.
  24. parameter: filez_in like rlgrap-filename,
  25.            f_pc radiobutton group bol,
  26.            f_ho radiobutton group bol.
  27. selection-screen end of block b01.
  28. parameter: mandtdes like sy-mandt default sy-mandt.
  29.  
  30. selection-screen begin of block b02 with frame.
  31. parameter: filez_ou like rlgrap-filename,
  32.            f_pco radiobutton group boo,
  33.            f_hoo radiobutton group boo.
  34. selection-screen end of block b02.
  35.  
  36. data: intab(65534) occurs 0 with header line,
  37.       outab(65534) occurs 0 with header line,
  38.       car(1),
  39.       regs(1024) occurs 0 with header line,
  40.       i_1250 like agr_1250 occurs 0 with header line,
  41.       i_1251 like agr_1251 occurs 0 with header line,
  42.       i_define like agr_define occurs 0 with header line,
  43.       i_texts like agr_texts occurs 0 with header line,
  44.       begin of cs occurs 0,
  45.          agr_name like agr_1251-agr_name,
  46.          counter  like agr_1251-counter,
  47.       end of cs,
  48.       begin of agrs_list occurs 0,
  49.          agr_name like agr_define-agr_name,
  50.       end of agrs_list.
  51.  
  52. at selection-screen on value-request for filez_ou.
  53.   data: fichero_in like rlgrap-filename.
  54.   call function 'WS_FILENAME_GET'
  55.   exporting
  56.     def_filename  = filez_ou
  57.     mask          = ',all files,*.*,data files,*.dat,text files,*.txt.'
  58.     mode          = 'o'
  59.     title         = 'Selecciona un fichero...'
  60.   importing
  61.     filename      = filez_ou
  62.   exceptions
  63.     inv_winsys       = 04
  64.     no_batch         = 04
  65.     selection_cancel = 04
  66.     selection_error  = 04.
  67.  
  68. at selection-screen on value-request for filez_in.
  69.   data: fichero_in like rlgrap-filename.
  70.   call function 'WS_FILENAME_GET'
  71.   exporting
  72.     def_filename  = filez_in
  73.     mask          = ',all files,*.*,data files,*.dat,text files,*.txt.'
  74.     mode          = 'o'
  75.     title         = 'Selecciona un fichero...'
  76.   importing
  77.     filename      = filez_in
  78.   exceptions
  79.     inv_winsys       = 04
  80.     no_batch         = 04
  81.     selection_cancel = 04
  82.     selection_error  = 04.
  83.  
  84. end-of-selection.
  85.   perform data_ini.
  86.   perform load_filez.
  87.   perform work_filez.
  88.   perform down_filez.
  89.  
  90. form down_filez.
  91. *descargamos el fichero
  92. * Creamos Fecha
  93.    outab = 'DATE'.    outab+50 = sy-datum. append outab.
  94. * Creamos Release
  95.    outab = 'RELEASE'. outab+50 = '46C'.    append outab.
  96. * Papeles creados...
  97.   loop at agrs_list.
  98.      outab = 'LOADED_AGRS'. outab+50 = agrs_list. append outab.
  99.   endloop.
  100. * Creamos Defines
  101.   loop at i_define.
  102.      outab = 'AGR_DEFINE'. i_define-mandt = mandtdes.
  103.      outab+50 = i_define. append outab.
  104.   endloop.
  105. * Creamos  AGR_1250
  106.   loop at i_1250.
  107.      outab = 'AGR_1250'. i_1250-mandt = mandtdes.
  108.      outab+50 = i_1250. append outab.
  109.   endloop.
  110. * Creamos  AGR_1250
  111.   loop at i_1251.
  112.      outab = 'AGR_1251'. i_1251-mandt = mandtdes.
  113.      outab+50 = i_1251. append outab.
  114.   endloop.
  115. * Creamos  AGR_1250
  116.   loop at i_texts.
  117.      outab = 'AGR_TEXTS'. i_texts-mandt = mandtdes.
  118.      outab+50 = i_texts. append outab.
  119.   endloop.
  120.   perform save_filez_n.
  121.   message s398(00) with 'Operacin finalizada!'.
  122. endform.
  123.  
  124. form data_ini.
  125. * Refrescamos variables
  126.   clear:   i_1250, i_1251, cs, intab, outab, car, i_define,
  127.            i_texts.
  128.   refresh: i_1250, i_1251, cs, intab, outab, i_define,
  129.            i_texts.
  130. endform.
  131.  
  132. form work_filez.
  133. * Procesamos los registros del fichero
  134.   loop at intab.
  135.     car = intab+0(1). "First char
  136.     shift intab left.
  137.     split intab at car into table regs.
  138.     loop at regs.
  139.        case regs.
  140.           when '1250'. Perform work_cab.
  141.                        exit.
  142.           when '1251'. perform work_det using 'L'.
  143.                        exit.
  144.           when '1252'. perform work_det using 'H'.
  145.                        exit.
  146.           when others. continue.
  147.        endcase.
  148.     endloop.
  149.   endloop.
  150. endform.
  151.  
  152. form work_det using modor.
  153. * Procesamos los campos
  154. data: sytabix like sy-tabix,
  155.       bkp like regs.
  156.   sytabix = sy-tabix.
  157.   add 1 to i_1251-node.
  158.   do.
  159.     add 1 to sytabix.
  160.     read table regs index sytabix.
  161.     if sy-subrc ne 0.
  162.        read table cs with key agr_name = i_1250-agr_name.
  163.        cs-counter = i_1251-counter - 1.
  164.        modify table cs.
  165.        exit.
  166.     endif.
  167.     case sy-tabix.
  168.       when 2. subtract 1 from i_1251-node.
  169.               i_1251-field = regs.
  170.               add 1 to i_1251-node.
  171.       when others.
  172.               if modor = 'H'.
  173.                  case sy-tabix.
  174.                     when 3. i_1251-low  = regs.
  175.                     when 4. i_1251-high = regs.
  176.                  endcase.
  177.               else.
  178.                  i_1251-low = regs.
  179.               endif.
  180.               append i_1251.
  181.               add 1 to: i_1251-counter, cs-counter.
  182.     endcase.
  183.   enddo.
  184. endform.
  185.  
  186. form work_cab.
  187. * Procesamos la cabecera
  188. data: sytabix like sy-tabix.
  189.    sytabix = sy-tabix.
  190.    add 1 to sytabix.
  191.    read table regs index sytabix.
  192.    clear i_1250.
  193. * Leemos el papel
  194.    read table cs with key agr_name =  regs.
  195.    if sy-subrc ne 0.
  196.       clear cs.
  197.       select max( counter ) into cs-counter from  agr_1250
  198.              where  agr_name  = regs.
  199.       if cs-counter = 0.
  200.          cs-counter = 1.
  201.       else.
  202.          add 1 to cs-counter.
  203.       endif.
  204.       cs-agr_name = regs.
  205.       append cs.
  206.    else.
  207.      add 1 to cs-counter.
  208.      modify table cs.
  209.    endif.
  210.    i_1250-agr_name = regs.
  211. * Leemos el objeto
  212.    add 1 to sytabix.
  213.    read table regs index sytabix.
  214.    i_1250-counter = cs-counter.
  215.    i_1250-object = regs.
  216.    i_1250-node   = 4. "Parece que siempre comienza por el 4
  217.    i_1250-modified = 'U'.
  218. * Leemos la descripcin
  219.    add 1 to sytabix.
  220.    read table regs index sytabix.
  221. * Creamos definicin
  222.    read table i_define with key agr_name = regs.
  223.    if sy-subrc ne 0.
  224.       clear i_define.
  225.       I_define-agr_name   =
  226.       agrs_list-agr_name  = i_texts-agr_name = i_1250-agr_name.
  227.       i_define-create_usr = 'ZLOADER'.
  228.       i_define-create_dat = sy-datum.
  229.       i_define-create_tim = sy-uzeit.
  230.       i_texts-text        = regs.
  231.       i_texts-spras       = sy-langu.
  232.       i_texts-line        = 0.
  233.       append: i_define, i_texts, agrs_list.
  234.    endif.
  235.    i_1250-atext = regs.
  236.    append i_1250.
  237.    clear i_1251.
  238.    move-corresponding i_1250 to i_1251.
  239. endform.
  240.  
  241. * Rutinas de fichero...
  242. form load_filez.
  243.    case 'X'.
  244.      when f_pc. perform load_from_pc tables intab
  245.                                      using filez_in.
  246.      when f_ho. perform load_from_host tables intab
  247.                                        using filez_in.
  248.    endcase.
  249. endform.
  250.  
  251. form save_filez_n.
  252.    case 'X'.
  253.      when f_pco. perform save_to_pc tables outab
  254.                                    using filez_ou.
  255.      when f_hoo. perform save_to_host tables outab
  256.                                      using filez_ou.
  257.    endcase.
  258. endform.
  259.  
  260. *{ Host Module
  261. form save_to_host tables my_tab
  262.                   using p_filez.
  263.    open dataset p_filez for output in text mode.
  264.    loop at my_tab.
  265.      transfer my_tab to p_filez.
  266.    endloop.
  267.    close dataset p_filez.
  268. endform.
  269.  
  270. form load_from_host tables my_tab
  271.                      using p_filez.
  272.    open dataset p_filez for input in text mode.
  273.    check sy-subrc eq 0.
  274.    do.
  275.      read dataset p_filez into my_tab.
  276.      if sy-subrc ne 0. exit. endif.
  277.      append my_tab.
  278.    enddo.
  279.    close dataset p_filez.
  280. endform.
  281.  
  282. *{ PC Module
  283. form save_to_pc tables my_tab
  284.                   using p_filez.
  285.    if p_filez is initial.
  286.       call function 'DOWNLOAD'
  287.       exporting
  288.         filename                 = p_filez
  289.         filetype                 = 'ASC'
  290.       tables
  291.         data_tab                 = my_tab
  292.       exceptions
  293.         invalid_filesize         = 4
  294.         invalid_table_width      = 4
  295.         invalid_type             = 4
  296.         no_batch                 = 4
  297.         unknown_error            = 4
  298.         gui_refuse_filetransfer  = 4
  299.         customer_error           = 4
  300.         others                   = 4.
  301.    else.
  302.       call function 'WS_DOWNLOAD'
  303.        EXPORTING
  304.          FILENAME                = p_filez
  305.          FILETYPE                = 'ASC'
  306.         tables
  307.           data_tab               = my_tab
  308.        EXCEPTIONS
  309.         FILE_OPEN_ERROR          = 4
  310.          FILE_WRITE_ERROR        = 4
  311.          INVALID_FILESIZE        = 4
  312.          INVALID_TYPE            = 4
  313.          NO_BATCH                = 4
  314.          UNKNOWN_ERROR           = 4
  315.          INVALID_TABLE_WIDTH     = 4
  316.          GUI_REFUSE_FILETRANSFER = 4
  317.          CUSTOMER_ERROR          = 4
  318.          OTHERS                  = 4.
  319.    endif.
  320.    check sy-subrc ne 0.
  321.    message e398(00) with 'Error al descargar fichero.'.
  322. endform.
  323.  
  324. form load_from_pc tables my_tab
  325.                   using p_filez.
  326.    if p_filez is initial.
  327.       call function 'UPLOAD'
  328.       exporting
  329.       filename                      = p_filez
  330.       filetype                      = 'ASC'
  331.    tables
  332.       data_tab                     = my_tab
  333.    exceptions
  334.       conversion_error              = 4
  335.       invalid_table_width           = 4
  336.       invalid_type                  = 4
  337.       no_batch                      = 4
  338.       unknown_error                 = 4
  339.       gui_refuse_filetransfer       = 4
  340.       others                        = 4.
  341.    else.
  342.       call function 'WS_UPLOAD'
  343.       EXPORTING
  344.          FILENAME                      = p_filez
  345.          FILETYPE                      = 'ASC'
  346.       tables
  347.          data_tab                      = my_tab
  348.       EXCEPTIONS
  349.          CONVERSION_ERROR              = 4
  350.          FILE_OPEN_ERROR               = 4
  351.          FILE_READ_ERROR               = 4
  352.          INVALID_TYPE                  = 4
  353.          NO_BATCH                      = 4
  354.          UNKNOWN_ERROR                 = 4
  355.          INVALID_TABLE_WIDTH           = 4
  356.          GUI_REFUSE_FILETRANSFER       = 4
  357.          CUSTOMER_ERROR                = 4
  358.          OTHERS                        = 4.
  359.    endif.
  360.    check sy-subrc ne 0.
  361.    message e398(00) with 'Error al cargar fichero.'.
  362. endform.