Upload/Overwrite a BOM

Nützliche Abap Codes und Code Fragmente

Upload/Overwrite a BOM

Postby Tron » Sun Jan 26, 2020 2:27 pm

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *&---------------------------------------------------------------------*
  2. *& Report  YCS_BOM_UPLOAD                                              *
  3. *&                                                                     *
  4. *&---------------------------------------------------------------------*
  5. *&                                                                     *
  6. *&                                                                     *
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT  ycs_bom_upload                                              .
  10.  
  11.  
  12. DATA gt_exclude TYPE STANDARD TABLE OF syucomm.
  13.  
  14. DATA rc TYPE i.
  15.  
  16. *  Data Filenames: MATNR.txt
  17.  
  18. *  BMK(SORTF);MENGE;MATNR;CATEG;SHKZ
  19.  
  20. *e.g.
  21. *  -SH14;5,00;271252832;L;X
  22. *  -*;6,00;271252838;L;
  23. *  -A10;7,00;271252844;L;X
  24. *  -1U1;2,00;271259006;D;
  25.  
  26. * POPUP Selection def
  27.   BEGIN OF ty_sel,
  28.     component   TYPE stpo_api02-component,
  29.     change_no   TYPE stpo_api02-change_no,
  30.     bom_text    TYPE stko_api01-bom_text,
  31.     checkbox(1),
  32.   END OF ty_sel.
  33. DATA     g_exit.
  34.  
  35. * Data displayed
  36.   gt_seldat TYPE TABLE OF ty_sel.
  37.  
  38.  
  39. * Datenfile
  40. DATA: BEGIN OF it_bom OCCURS 0,
  41.         sortstring TYPE sortp,
  42.         comp_qty   TYPE i,
  43.         component  TYPE matnr,
  44.         item_categ TYPE postp,
  45.         item_no    TYPE sposn,
  46.         item_text2 TYPE potx2,
  47.         bulk_mat   TYPE schgt,
  48.  
  49.       END OF it_bom.
  50.  
  51. TYPES: BEGIN OF t_files,
  52.          fname     TYPE file_table-filename,
  53.          component TYPE matnr,
  54. *      aennr TYPE csap_mbom-aennr,
  55.        END OF t_files.
  56.  
  57. FIELD-SYMBOLS <p> TYPE t_files.
  58.  
  59. * File Table
  60. DATA: it_files TYPE TABLE OF t_files.
  61. DATA: ls_files TYPE t_files.
  62.  
  63. DATA: i        TYPE i,
  64.       gv_heute TYPE csap_mbom-datuv.
  65.  
  66. * Datei
  67. DATA f_name TYPE string.
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.   SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-p00.
  76.  
  77.   PARAMETERS: p_werk TYPE marc-werks OBLIGATORY.
  78.   PARAMETERS: p_stlan TYPE mast-stlan DEFAULT '3' OBLIGATORY.
  79.   PARAMETERS: p_date TYPE d DEFAULT sy-datum.
  80.   SELECTION-SCREEN: END OF BLOCK b1.
  81.  
  82.  
  83.  
  84. *** Drucktaste 1
  85.   SELECTION-SCREEN PUSHBUTTON /22(40) text-pb1 USER-COMMAND pb1.
  86.  
  87.  
  88.  
  89.   p_werk = '1207'.
  90.  
  91. * siehe RSSYSTDB Gui Status %_00
  92. *** "Ausführen" verbieten
  93.   APPEND 'ONLI' TO gt_exclude.
  94. *** "Ausführen + Drucken" verbieten
  95.   APPEND 'PRIN' TO gt_exclude.
  96. *** "Im Hintergrund ausführen" verbieten
  97.   APPEND 'SJOB' TO gt_exclude.
  98. *** Variante sichern verbieten
  99.   APPEND 'SPOS' TO gt_exclude.
  100. *** Variante löschen verbieten
  101.   APPEND 'VDEL' TO gt_exclude.
  102. *** Variante holen
  103.   APPEND 'GET' TO gt_exclude.
  104. *** Variante anzeigen verbieten
  105.   APPEND 'VSHO' TO gt_exclude.
  106. * ZURÜCK unterdrücken
  107. *  APPEND 'E' TO gt_exclude.
  108. * BEENDEN unterdrücken
  109.   APPEND 'ENDE' TO gt_exclude.
  110. * ABBRECHEN unterdrücken
  111.   APPEND 'ECAN' TO gt_exclude.
  112.  
  113. *** Aktuellen Status setzen und obige Funktionen verbieten
  114.   CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
  115.     EXPORTING
  116.       p_status  = sy-pfkey
  117.     TABLES
  118.       p_exclude = gt_exclude.
  119.  
  120. * Datumsformat = DD.MM.JJJJ
  121.   WRITE p_date TO gv_heute.
  122.  
  123.  
  124. *** Selektionsbild (PAI)
  125. AT SELECTION-SCREEN.
  126.  
  127.   CASE sy-ucomm.
  128. *** Drucktasten abfragen
  129.     WHEN 'PB1'.
  130.  
  131.       FREE it_bom.
  132.  
  133.       rc = 0.
  134.  
  135.       PERFORM file_select.
  136.       IF rc NE 0.
  137.         EXIT.
  138.       ENDIF.
  139.  
  140. *    Read the selected files into it_files
  141.       PERFORM update_filetab.
  142.  
  143.       IF g_exit IS INITIAL.
  144.  
  145.         LOOP AT it_files ASSIGNING <p>.
  146.  
  147.  
  148.           rc = 0.
  149.           PERFORM file_upload.
  150.           IF rc NE 0.
  151.             EXIT.
  152.           ENDIF.
  153.  
  154.           PERFORM renew_bom.
  155.           IF rc = 1 OR rc = 2.
  156.             EXIT.
  157.           ENDIF.
  158.  
  159.           rc = 0.
  160.           PERFORM maint_bom.
  161.  
  162.         ENDLOOP.
  163.       ENDIF.
  164.  
  165. *      IF rc NE 0.
  166. * Ausgabe des Protokolls
  167.       CALL FUNCTION 'Y_BAL_LOG'
  168.         EXPORTING
  169.           i_display             = 'X'
  170.           i_refresh             = 'X'
  171.           i_repid               = sy-repid
  172.         EXCEPTIONS
  173.           error_create          = 1
  174.           error_add_message     = 2
  175.           error_refresh         = 3
  176.           error_display_profile = 4
  177.           error_display         = 5
  178.           OTHERS                = 6.
  179.  
  180. *        LEAVE PROGRAM.
  181. *        EXIT.
  182. *      ENDIF.
  183.  
  184. *        MESSAGE s030(29) WITH <p>-component .
  185.  
  186.  
  187.     WHEN OTHERS.
  188.  
  189.  
  190.  
  191. *&---------------------------------------------------------------------*
  192. *&      Form  file_select
  193. *&---------------------------------------------------------------------*
  194. *       text
  195. *----------------------------------------------------------------------*
  196. FORM file_select.
  197.   DATA file_table TYPE filetable WITH HEADER LINE.
  198.   DATA lv_title TYPE string.
  199.   DATA lv_filter TYPE string.
  200.  
  201.   lv_title = 'Open BOM file'(014).
  202.   lv_filter = 'BOM-file(*.TXT)|*.txt'.
  203.  
  204.   REFRESH: it_files,file_table.
  205.  
  206.   CALL METHOD cl_gui_frontend_services=>file_open_dialog
  207.     EXPORTING
  208.       window_title            = lv_title
  209.       initial_directory       = 'C:\temp'
  210.       file_filter             = lv_filter
  211.       multiselection          = 'X'
  212.     CHANGING
  213.       file_table              = file_table[]
  214.       rc                      = rc
  215.     EXCEPTIONS
  216.       file_open_dialog_failed = 1
  217.       cntl_error              = 2
  218.       error_no_gui            = 3
  219.       not_supported_by_gui    = 4
  220.       OTHERS                  = 5.
  221.  
  222.   IF sy-subrc <> 0 OR rc < 1.
  223.     rc = 1.
  224.   ELSE.
  225.     LOOP AT file_table INTO f_name.
  226.       ls_files-fname = f_name.
  227.       APPEND ls_files TO it_files.
  228.     ENDLOOP.
  229.     rc = 0.
  230.   ENDIF.
  231.  
  232. ENDFORM.                    "file_select
  233.  
  234. *&---------------------------------------------------------------------*
  235. *&      Form  file_upload
  236. *&---------------------------------------------------------------------*
  237. *       text
  238. *----------------------------------------------------------------------*
  239. FORM file_upload.
  240.   DATA it_data TYPE TABLE OF tab512.
  241.   DATA ls_data TYPE tab512.
  242.   DATA lv_fname TYPE string.
  243.   DATA lt_split TYPE TABLE OF tab512.
  244.   DATA ls_split TYPE sychar512.
  245.   DATA k TYPE i.
  246.   DATA lv_index TYPE i.
  247.  
  248.   lv_fname = <p>-fname.
  249.   REFRESH it_bom.
  250.  
  251.   CALL METHOD cl_gui_frontend_services=>gui_upload
  252.     EXPORTING
  253.       filename                = lv_fname
  254.       filetype                = 'ASC'
  255.       has_field_separator     = 'X'
  256.     CHANGING
  257.       data_tab                = it_data
  258.     EXCEPTIONS
  259.       file_open_error         = 1
  260.       file_read_error         = 2
  261.       no_batch                = 3
  262.       gui_refuse_filetransfer = 4
  263.       invalid_type            = 5
  264.       no_authority            = 6
  265.       unknown_error           = 7
  266.       bad_data_format         = 8
  267.       header_not_allowed      = 9
  268.       separator_not_allowed   = 10
  269.       header_too_long         = 11
  270.       unknown_dp_error        = 12
  271.       access_denied           = 13
  272.       dp_out_of_memory        = 14
  273.       disk_full               = 15
  274.       dp_timeout              = 16
  275.       not_supported_by_gui    = 17
  276.       error_no_gui            = 18
  277.       OTHERS                  = 19.
  278.  
  279.   IF sy-subrc <> 0 .
  280.     rc = 1.
  281.     EXIT.
  282.   ENDIF.
  283.  
  284.   LOOP AT it_data INTO ls_data.
  285.     lv_index = sy-tabix * 10.
  286.     CLEAR it_bom.
  287.  
  288.     SPLIT ls_data AT ';' INTO TABLE lt_split.
  289.     k = lines( lt_split ).
  290.  
  291.     IF k > 0.
  292. * GET BMK
  293.       READ TABLE lt_split INDEX 1 INTO ls_split.
  294.       IF sy-subrc = 0.
  295.         CONDENSE ls_split NO-GAPS.
  296.         it_bom-sortstring = ls_split.
  297.       ELSE.
  298.         CLEAR  it_bom-sortstring.
  299.       ENDIF.
  300.  
  301. * GET Quantity
  302.       READ TABLE lt_split INDEX 2 INTO ls_split.
  303.       IF sy-subrc = 0.
  304.         CONDENSE ls_split NO-GAPS.
  305.         REPLACE ',' IN ls_split WITH '.' IN CHARACTER MODE.
  306.         it_bom-comp_qty = ls_split.
  307.       ELSE.
  308.         CLEAR  it_bom-comp_qty.
  309.       ENDIF.
  310.  
  311. * GET Component
  312.       READ TABLE lt_split INDEX 3 INTO ls_split.
  313.       IF sy-subrc = 0.
  314.         CONDENSE ls_split NO-GAPS.
  315.         TRANSLATE ls_split TO UPPER CASE.
  316. * Matnr mapping
  317.         CASE ls_split(1).
  318.  
  319.           WHEN 'A'.
  320.             CONCATENATE '5011' ls_split+1 INTO it_bom-component.
  321.           WHEN 'B'.
  322.             CONCATENATE '5012' ls_split+1 INTO it_bom-component.
  323.           WHEN '3'.
  324.             CONCATENATE '5013' ls_split+1 INTO it_bom-component.
  325.           WHEN OTHERS.
  326.             it_bom-component = ls_split.
  327.         ENDCASE.
  328.  
  329.       ELSE.
  330.         CLEAR  it_bom-component.
  331.       ENDIF.
  332.  
  333. * GET Item Category
  334.       READ TABLE lt_split INDEX 4 INTO ls_split.
  335.       IF sy-subrc = 0.
  336.         CONDENSE ls_split NO-GAPS.
  337.         it_bom-item_categ = ls_split.
  338.       ELSE.
  339.         CLEAR  it_bom-item_categ.
  340.       ENDIF.
  341.  
  342. * GET additional Document info text
  343.       IF it_bom-item_categ = 'D'.
  344.  
  345.         READ TABLE lt_split INDEX 5 INTO ls_split.
  346.         IF sy-subrc = 0.
  347.           CONDENSE ls_split NO-GAPS.
  348.           it_bom-item_text2 = ls_split.
  349.         ELSE.
  350.           CLEAR it_bom-item_text2.
  351.         ENDIF.
  352.  
  353.       ELSE.
  354.         CLEAR it_bom-item_text2.
  355.       ENDIF.
  356.  
  357. * GET Bulk Mat hook
  358.       READ TABLE lt_split INDEX 6 INTO ls_split.
  359.       IF sy-subrc = 0 .
  360.         CONDENSE ls_split NO-GAPS.
  361.  
  362.         IF ls_split IS INITIAL.
  363.           CLEAR  it_bom-bulk_mat.
  364.         ELSE.
  365.           it_bom-bulk_mat = 'X'.
  366.         ENDIF.
  367.  
  368.       ELSE.
  369.         CLEAR  it_bom-bulk_mat.
  370.       ENDIF.
  371.  
  372.  
  373.  
  374. * GET Posnr
  375.       it_bom-item_no = lv_index.
  376.  
  377.       APPEND it_bom.
  378.  
  379.  
  380.     ENDIF." k>0
  381.  
  382.  
  383.  
  384. *rc = 1.
  385. ENDFORM.                    "file_upload
  386.  
  387. *&---------------------------------------------------------------------*
  388. *&      Form  renew_bom
  389. *&---------------------------------------------------------------------*
  390. *       text
  391. *----------------------------------------------------------------------*
  392. FORM renew_bom.
  393.  
  394.   CONSTANTS: lc_base_quan TYPE basmn_bi VALUE '1'. "Ticket#4293878 insert
  395. *  DATA lv_ans(1).
  396. *  DATA lv_matnr TYPE matnr.
  397. *  DATA lv_aennr TYPE aennr.
  398.   DATA lv_tstko TYPE stko_api01.
  399. *  DATA ls_stko TYPE stko_api02.
  400. *  DATA lt_stko TYPE TABLE OF stko_api02.
  401. *  DATA ls_stpo TYPE stpo_api02.
  402. *  DATA lt_stpo TYPE TABLE OF stpo_api02.
  403.  
  404. ** Teste ob Materialstückliste schon existiert
  405.  
  406. *  SELECT COUNT(*) FROM mast WHERE
  407. *  matnr = <p>-component AND
  408. *  werks = p_werk AND
  409. *  stlan = p_stlan.
  410.  
  411. * Check BOM exisitence (incl. ChangeNo)
  412. *  CALL FUNCTION 'CSAP_MAT_BOM_READ'
  413. *    EXPORTING
  414. *      material  = <p>-component
  415. *      plant     = p_werk
  416. *      bom_usage = p_stlan
  417. *    TABLES
  418. *      t_stpo    = lt_stpo
  419. *      t_stko    = lt_stko
  420. *    EXCEPTIONS
  421. *      error     = 1
  422. *      OTHERS    = 2.
  423. *
  424. *  IF sy-subrc = 0.
  425. *    READ TABLE lt_stko INDEX 1 INTO ls_stko.
  426. *
  427. *    LOOP AT lt_stpo INTO ls_stpo WHERE change_no NE ' '.
  428. *      EXIT.
  429. *    ENDLOOP.
  430. *
  431. ** check for HEAD change number and POS change number
  432. *    IF ls_stpo-change_no IS INITIAL AND ls_stko-chg_no IS INITIAL.
  433. *    ELSE.
  434. *      PERFORM write_log USING <p>-component 'discarded - Change numbers'(016).
  435. *      CLEAR <p>-component.
  436. *      EXIT.
  437. *    ENDIF.
  438. *
  439. *  ENDIF."sy-subrc
  440.  
  441.  
  442.  
  443. *  IF NOT lt_stko[] IS INITIAL.
  444.  
  445.  
  446.  
  447. * für BOM_OPEN
  448. **    DATA: BEGIN OF tstpo2 OCCURS 0.
  449. **            INCLUDE STRUCTURE stpo_api02.
  450. **    DATA: END OF tstpo2.
  451. **    DATA ls_tstpo2 TYPE stpo_api02.
  452. **
  453. **    REFRESH tstpo2.
  454. **    CALL FUNCTION 'CSAP_MAT_BOM_OPEN'
  455. **      EXPORTING
  456. **        material         = <p>-component
  457. **        plant            = p_werk
  458. **        bom_usage        = p_stlan
  459. **        valid_from       = ls_stko-valid_from
  460. ***       change_no        = lv_aennr
  461. **        fl_no_change_doc = 'X'
  462. **      TABLES
  463. **        t_stpo           = tstpo2
  464. **      EXCEPTIONS
  465. **        error            = 1
  466. **        OTHERS           = 2.
  467. **
  468. **    IF sy-subrc = 0.
  469. **      LOOP AT tstpo2 INTO ls_tstpo2.
  470. **
  471. **        ls_tstpo2-fldelete = 'X'.
  472. **
  473. **        CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN'
  474. **          EXPORTING
  475. **            i_stpo = ls_tstpo2
  476. **          EXCEPTIONS
  477. **            error  = 1
  478. **            OTHERS = 2.
  479. **
  480. **      ENDLOOP.
  481. **
  482. **    ENDIF.
  483. **
  484. **
  485. **    CALL FUNCTION 'CSAP_MAT_BOM_CLOSE'
  486. **      EXCEPTIONS
  487. **        error  = 1
  488. **        OTHERS = 2.
  489. **
  490. **    IF sy-subrc <> 0.
  491. **    ENDIF.
  492.   rc = 0.
  493.  
  494.   CALL FUNCTION 'CSAP_MAT_BOM_DELETE'
  495.     EXPORTING
  496.       material           = <p>-component
  497.       plant              = p_werk
  498.       bom_usage          = p_stlan
  499. *     valid_from         = ls_stko-valid_from
  500. *     change_no          = lv_aennr
  501.       fl_commit_and_wait = 'X'
  502.     EXCEPTIONS
  503.       error              = 1
  504.       OTHERS             = 2.
  505.  
  506.   IF sy-subrc NE 0.
  507. *    MESSAGE ID 'SY' TYPE 'E' NUMBER '002' WITH
  508. *             'Error while trying to delete BOM.'(011).
  509.   ENDIF.
  510.  
  511. *- Materialstückliste anlegen (nur Kopfdaten)
  512. *- Kopfdaten füllen
  513. *  lv_tstko-base_quan = '1.000'.            " Ticket#4293878 delete
  514.   lv_tstko-base_quan = lc_base_quan.        " Ticket#4293878 insert
  515.   lv_tstko-bom_text = 'Bill of Material from file'(012).
  516.  
  517.  
  518.   CALL FUNCTION 'CSAP_MAT_BOM_CREATE'
  519.     EXPORTING
  520.       material   = <p>-component
  521.       plant      = p_werk
  522.       bom_usage  = p_stlan
  523.       valid_from = gv_heute
  524. *     change_no  = <p>-aennr
  525.       i_stko     = lv_tstko
  526.     EXCEPTIONS
  527.       error      = 1.
  528.  
  529.   IF sy-subrc EQ 1.
  530.     MESSAGE ID 'SY' TYPE 'E' NUMBER '002' WITH
  531.              'Error trying to create BOM.'(013).
  532.   ENDIF.
  533.  
  534.  
  535. *  ELSE.
  536.  
  537. * existiert nicht - neu anlegen
  538. *- Materialstückliste anlegen (nur Kopfdaten)
  539. *- Kopfdaten füllen
  540. *    lv_tstko-base_quan = '1.000'.
  541. *    lv_tstko-bom_text = 'Bill of Material from file'(012).
  542. *
  543. *    CALL FUNCTION 'CSAP_MAT_BOM_CREATE'
  544. *      EXPORTING
  545. *        material   = <p>-component
  546. *        plant      = p_werk
  547. *        bom_usage  = p_stlan
  548. *        valid_from = gv_heute
  549. **       change_no  = <p>-aennr
  550. *        i_stko     = lv_tstko
  551. *      EXCEPTIONS
  552. *        error      = 1.
  553. *
  554. *    IF sy-subrc EQ 1.
  555. *      MESSAGE ID 'SY' TYPE 'E' NUMBER '002' WITH
  556. *               'Error trying to create BOM.'(013).
  557. *    ENDIF.
  558. *
  559. *  ENDIF."bom exist
  560.  
  561.  
  562.  
  563. ENDFORM.                    "renew_bom
  564.  
  565. *&---------------------------------------------------------------------*
  566. *&      Form  maint_bom
  567. *&---------------------------------------------------------------------*
  568. *       text
  569. *----------------------------------------------------------------------*
  570. FORM maint_bom.
  571.  
  572. * für BOM_OPEN
  573.   DATA: BEGIN OF tstpo2 OCCURS 0.
  574.           INCLUDE STRUCTURE stpo_api02.
  575.   DATA: END OF tstpo2.
  576.  
  577.   DATA ls_tstpo2 TYPE stpo_api02.
  578.  
  579.   DATA lv_matnr TYPE matnr.
  580.  
  581.   DATA lv_ptext(80).
  582.   DATA lv_txt(6).
  583.   DATA lv_cnt TYPE i.
  584.  
  585.   CHECK NOT <p>-component IS INITIAL.
  586.  
  587. * Böse Falle !
  588.   DO 100 TIMES.
  589.     WAIT UP TO 1 SECONDS.
  590.  
  591.     CALL FUNCTION 'CSAP_MAT_BOM_OPEN'
  592.       EXPORTING
  593.         material         = <p>-component
  594.         plant            = p_werk
  595.         bom_usage        = p_stlan
  596.         valid_from       = gv_heute
  597. *       change_no        = <p>-aennr
  598.         fl_no_change_doc = 'X'
  599.       TABLES
  600.         t_stpo           = tstpo2
  601.       EXCEPTIONS
  602.         error            = 1
  603.         OTHERS           = 2.
  604.  
  605.     IF sy-subrc = 0. " Test(ohne wait) erreicht 4-5 durchläufe !
  606.       EXIT.
  607.     ENDIF.
  608.  
  609.   ENDDO.
  610.  
  611.   IF sy-subrc = 0.
  612.     i = lines( it_bom ).
  613.  
  614.     LOOP AT it_bom.
  615.       lv_cnt = sy-tabix.
  616.       CLEAR ls_tstpo2.
  617.  
  618.  
  619.       MOVE-CORRESPONDING it_bom TO ls_tstpo2.
  620. *      ls_tstpo2-item_categ = 'L'.         "Mußeingabe
  621.  
  622.       IF ls_tstpo2-bulk_mat = 'X' AND ls_tstpo2-item_categ = 'L'.
  623.         ls_tstpo2-rel_cost = space.
  624.         ls_tstpo2-rel_engin = space.
  625.         ls_tstpo2-rel_pmaint = space.
  626.         ls_tstpo2-rel_sales = space.
  627.         ls_tstpo2-rel_prod = 'X'.
  628.       ENDIF.
  629.  
  630. *        CLEAR ls_tstpo2-BULK_MAT.
  631.  
  632.  
  633.       IF ls_tstpo2-item_categ = 'D'.
  634.         ls_tstpo2-document = ls_tstpo2-component.
  635.         CLEAR ls_tstpo2-component.
  636.         CLEAR ls_tstpo2-bulk_mat.
  637.         ls_tstpo2-doc_type = 'SEG'.
  638.       ENDIF.
  639.  
  640.       CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN'
  641.         EXPORTING
  642.           i_stpo = ls_tstpo2
  643.         EXCEPTIONS
  644.           error  = 1
  645.           OTHERS = 2.
  646.  
  647.       IF sy-subrc <> 0.
  648.         IF ls_tstpo2-component IS INITIAL.
  649.           PERFORM write_log USING ls_tstpo2-document 'could not be saved'(009).
  650.         ELSE.
  651.           PERFORM write_log USING ls_tstpo2-component 'could not be saved'(009).
  652.         ENDIF.
  653.  
  654.         rc = 1.
  655.       ENDIF.
  656.  
  657.  
  658. * Fortschrittsanzeige
  659.       lv_ptext = 'bearbeite Material'.
  660.       CONCATENATE lv_ptext ls_tstpo2-component INTO lv_ptext
  661.       SEPARATED BY space.
  662.  
  663.       WRITE lv_cnt TO lv_txt.
  664.       CONDENSE lv_txt NO-GAPS.
  665.       CONCATENATE lv_ptext '-' lv_txt 'von' INTO lv_ptext
  666.       SEPARATED BY space.
  667.  
  668.       WRITE i TO lv_txt.
  669.       CONDENSE lv_txt NO-GAPS.
  670.       CONCATENATE lv_ptext lv_txt INTO lv_ptext
  671.       SEPARATED BY space.
  672.  
  673.  
  674.       CALL FUNCTION 'PROGRESS_INDICATOR'
  675.         EXPORTING
  676.           i_text               = lv_ptext
  677.           i_processed          = lv_cnt
  678.           i_total              = i
  679.           i_output_immediately = 'X'.
  680.  
  681.     ENDLOOP.
  682.  
  683.     CALL FUNCTION 'CSAP_MAT_BOM_CLOSE'
  684.       EXCEPTIONS
  685.         error  = 1
  686.         OTHERS = 2.
  687.  
  688.     IF sy-subrc <> 0.
  689.       break guenther.
  690.     ENDIF.
  691.  
  692.   ELSE.
  693.  
  694.     PERFORM write_log USING <p>-component 'could not be Opened'.
  695.  
  696.   ENDIF.
  697.  
  698.  
  699. ENDFORM.                    "maint_bom
  700.  
  701. *&---------------------------------------------------------------------*
  702. *&      Form  write_log
  703. *&---------------------------------------------------------------------*
  704. *       text
  705. *----------------------------------------------------------------------*
  706. *      -->MATNR      text
  707. *      -->TEXT       text
  708. *----------------------------------------------------------------------*
  709. FORM write_log USING matnr TYPE c text TYPE c.
  710.  
  711.   CALL FUNCTION 'Y_BAL_LOG'
  712.     EXPORTING
  713.       i_msgty               = 'E'
  714.       i_msgid               = '0U'
  715.       i_msgno               = '533'
  716.       i_msgv1               = matnr
  717.       i_msgv2               = text
  718.       i_msgv3               = ' '
  719.       i_repid               = sy-repid
  720.     EXCEPTIONS
  721.       error_create          = 1
  722.       error_add_message     = 2
  723.       error_refresh         = 3
  724.       error_display_profile = 4
  725.       error_display         = 5
  726.       OTHERS                = 6.
  727.  
  728. ENDFORM.                    "write_log
  729.  
  730. *&---------------------------------------------------------------------*
  731. *&      Form  update_filetab
  732. *&---------------------------------------------------------------------*
  733. *       Extract BomNo and ChangeNo from filename
  734. *----------------------------------------------------------------------*
  735. FORM update_filetab.
  736.   DATA lt_split TYPE TABLE OF tab512.
  737.   DATA ls_split TYPE sychar512.
  738.   DATA k TYPE i.
  739.  
  740.   LOOP AT it_files ASSIGNING <p>.
  741.     SPLIT <p>-fname AT '\' INTO TABLE lt_split.
  742.     k = lines( lt_split ).
  743.  
  744.     IF k > 0.
  745.       READ TABLE lt_split INDEX k INTO ls_split.
  746.       SPLIT ls_split AT '.' INTO TABLE lt_split.
  747.       k = lines( lt_split ).
  748.  
  749.       IF k > 1.
  750.         READ TABLE lt_split INDEX 1 INTO ls_split.
  751.         SPLIT ls_split AT '_' INTO TABLE lt_split.
  752.         k = lines( lt_split ).
  753.  
  754.         IF k = 1.
  755.           READ TABLE lt_split INDEX 1 INTO <p>-component.
  756.  
  757. * check if material exist
  758.           CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  759.             EXPORTING
  760.               input  = <p>-component
  761.             IMPORTING
  762.               output = <p>-component.
  763.  
  764.           SELECT COUNT(*) FROM mara WHERE matnr = <p>-component.
  765.           IF sy-subrc NE 0.
  766.             PERFORM write_log USING <p>-component 'Material doesn´t exist.'(015).
  767.             CLEAR <p>-component.
  768.  
  769.           ENDIF.
  770.  
  771.  
  772.         ENDIF."k = 1.
  773.  
  774.       ENDIF."k > 1.
  775.  
  776.     ENDIF."k > 0.
  777.  
  778.  
  779.   DELETE it_files WHERE component = space.
  780.  
  781.   PERFORM f_display_data.
  782.  
  783.  
  784.  
  785. ENDFORM.                    "update_filetab
  786.  
  787. *---------------------------------------------------------------------*
  788. *      Form  f_display_data
  789. *---------------------------------------------------------------------*
  790. FORM f_display_data.
  791.  
  792. * Macro definition
  793.   DEFINE m_fieldcat.
  794.     add 1 to ls_fieldcat-col_pos.
  795.     ls_fieldcat-fieldname   = &1.
  796.     ls_fieldcat-ref_tabname = &2.
  797.     append ls_fieldcat to lt_fieldcat.
  798.  
  799.   TYPE-POOLS: slis.                    " ALV Global types
  800.  
  801.  
  802.   DATA:
  803.     ls_private  TYPE slis_data_caller_exit,
  804.     ls_seldat   TYPE ty_sel,
  805.     ls_fieldcat TYPE slis_fieldcat_alv,
  806.     lt_fieldcat TYPE slis_t_fieldcat_alv.
  807.  
  808.   REFRESH gt_seldat.
  809.  
  810. * Copy entries for selection
  811.   LOOP AT it_files ASSIGNING <p>.
  812.     CLEAR ls_seldat.
  813.     ls_seldat-component = <p>-component.
  814.     SELECT SINGLE maktx FROM makt INTO ls_seldat-bom_text WHERE
  815.     matnr = <p>-component AND spras = sy-langu.
  816.  
  817.     PERFORM check_bom_change_num CHANGING <p>-component.
  818.  
  819.     IF <p>-component IS INITIAL.
  820.       ls_seldat-checkbox = ' '.
  821.       ls_seldat-change_no = 'X'.
  822.     ELSE.
  823.       ls_seldat-checkbox = 'X'.
  824.       ls_seldat-change_no = ' '.
  825.     ENDIF.
  826.  
  827.     APPEND ls_seldat TO gt_seldat.
  828.  
  829. * Build the field catalog chg_kz
  830.   m_fieldcat 'COMPONENT' 'STPO_API02'.
  831.   m_fieldcat 'CHANGE_NO' 'STPO_API02'.
  832.   m_fieldcat 'BOM_TEXT' 'STKO_API01'.
  833.  
  834. * Optimize column width
  835.   ls_private-columnopt = 'X'.
  836.  
  837. * Display data in a POPUP
  838.   CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
  839.     EXPORTING
  840.       i_title              = 'Please select items'
  841.       i_selection          = 'X'
  842.       i_zebra              = 'X'
  843.       it_fieldcat          = lt_fieldcat
  844.       i_tabname            = 'GT_SELDAT'
  845.       i_checkbox_fieldname = 'CHECKBOX'
  846.       is_private           = ls_private
  847.     IMPORTING
  848.       e_exit               = g_exit
  849.     TABLES
  850.       t_outtab             = gt_seldat.
  851.  
  852. * Terminate
  853.   IF g_exit NE space.
  854.     PERFORM write_log USING '' 'Terminate by user'(017).
  855.     EXIT.
  856.   ENDIF.
  857.  
  858.  
  859.   LOOP AT it_files ASSIGNING <p> WHERE component NE ' '.
  860.     READ TABLE gt_seldat WITH KEY component = <p>-component checkbox = 'X' INTO ls_seldat.
  861.     IF sy-subrc NE 0.
  862.       CLEAR <p>-component.
  863.     ENDIF.
  864.  
  865.   DELETE it_files WHERE component = space.
  866.  
  867. ENDFORM.                               " F_DISPLAY_DATA
  868.  
  869. *&---------------------------------------------------------------------*
  870. *&      Form  check_bom_change_num
  871. *&---------------------------------------------------------------------*
  872. *       text
  873. *----------------------------------------------------------------------*
  874. *      -->I_BOM      text
  875. *----------------------------------------------------------------------*
  876. FORM check_bom_change_num CHANGING i_bom TYPE csap_mbom-matnr.
  877.  
  878.   DATA lv_tstko TYPE stko_api01.
  879.   DATA ls_stko TYPE stko_api02.
  880.   DATA lt_stko TYPE TABLE OF stko_api02.
  881.   DATA ls_stpo TYPE stpo_api02.
  882.   DATA lt_stpo TYPE TABLE OF stpo_api02.
  883.  
  884.  
  885. * Check BOM exisitence (incl. ChangeNo)
  886.   CALL FUNCTION 'CSAP_MAT_BOM_READ'
  887.     EXPORTING
  888.       material  = i_bom
  889.       plant     = p_werk
  890.       bom_usage = p_stlan
  891.     TABLES
  892.       t_stpo    = lt_stpo
  893.       t_stko    = lt_stko
  894.     EXCEPTIONS
  895.       error     = 1
  896.       OTHERS    = 2.
  897.  
  898.   IF sy-subrc = 0.
  899.     READ TABLE lt_stko INDEX 1 INTO ls_stko.
  900.  
  901.     LOOP AT lt_stpo INTO ls_stpo WHERE change_no NE ' '.
  902.       EXIT.
  903.     ENDLOOP.
  904.  
  905. * check for HEAD change number and POS change number
  906.     IF ls_stpo-change_no IS INITIAL AND ls_stko-chg_no IS INITIAL.
  907.     ELSE.
  908.       PERFORM write_log USING i_bom 'discarded - Change numbers'(016).
  909.       CLEAR i_bom.
  910.       EXIT.
  911.     ENDIF.
  912.  
  913.   ENDIF."sy-subrc
  914.  
  915. ENDFORM.                    "check_bom_change_num
  916.  
GeSHi ©
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Return to Code Snippets

Who is online

Users browsing this forum: No registered users and 1 guest

cron