Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Upload Program(sap-abap)

Former Member
0 Likes
1,177

Hi Friends,

I am using existing program to upload data(MM01 - BASIC VIEW ).But one of the field(MARA-BISMT) for old material number is neither uploading to transaction nor database.I have to uoload for other views(Purchasing, Accounting and so on) also which are depended on this old material number field.

Secondly, Functional guy suggest me to add some of the fileds into it which are not available in upload structure.

Could you guide me how to fix this issue in below code and upload data safely ?


*
* Description : Migration Program for Material Master Basic View
*
* Using xls-structure in Migration Overview: MM-Basic View
*
*----------------------------------------------------------------------*
* NAME           SR    DATE        VER. XLS  DESCRIPTION OF VERSION
*----------------------------------------------------------------------*
*           8804  04.05.2008  1.0  1.0  Original program
*
*           8804  27.05.2004  1.1  1.0  Changed check for pack size
*                                            multi pack size, EAN no,
*                                            does not write to initial
*                                            bdc_fields FORMT and FERTH
*           8804  09.06.2006  1.2  1.0  added flag for intercompany
*                      materials on converting table, also changed FM
*                      ZMM_ADD_OLD_MATNR_TO_CONV_TABL
*----------------------------------------------------------------------*

REPORT  z_basic.

* Structure for batch input
CONSTANTS: c_structure TYPE tabname VALUE 'ZMM_BASIC_VIEW'.

TABLES: makt, t006a, t024l, t002, zpmg, zsf1, zsf2, zsf3, zsf4, zsf5,
        zdrc, zdkb, zcce, zpsz, zcns, zusz, zatc, zmsz, t006, tntp, t179
.

* Internal Tables
DATA: i_data TYPE STANDARD TABLE OF zmm_basic_view.

DATA: i_spras TYPE STANDARD TABLE OF makt-spras.

*-----------------------------------------------------------------------
* selection screen
*-----------------------------------------------------------------------

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.

PARAMETERS: p_file(128) DEFAULT 'U:\My Documents\mm_basic.txt'.

SELECTION-SCREEN SKIP.

PARAMETERS: p_mode LIKE ctu_params-dismode DEFAULT 'N'.

PARAMETERS: p_test NO-DISPLAY DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK block1.

INCLUDE Z_BASIC_A.
*INCLUDE zmigration.

*-----------------------------------------------------------------------
* START-OF-SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.

  PERFORM upload_file.

  PERFORM check_entries.

  PERFORM add_icons.

  IF p_test NE 'X'.
    PERFORM update.
    update_run = 'X'.
  ENDIF.

  PERFORM show_result.

*&---------------------------------------------------------------------*
*&      Form  UPDATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM update.

  CALL FUNCTION 'ZMM_BASIC'
       EXPORTING
            mode   = p_mode
       TABLES
            i_data = i_data
            i_mess = i_mess.

* update conversion table for materials where SAP-number already
* exists and material description also already exist for language in
* field SPRAS_2. This will only happen for inter company materials.
  LOOP AT i_data INTO wa_data WHERE zman_update EQ 'X'.
    CALL FUNCTION 'ZMM_ADD_OLD_MATNR_TO_CONV_TABL'
         EXPORTING
              zzomp         = wa_data-old_matnr
              werks         = '54'  " dummy plant
              matnr         = wa_data-matnr
              bismt         = wa_data-old_matnr
              inter_company = 'X'.

    wa_data-msgtx = 'Conversion table for material updated'.
    wa_data-msgtyp = 'I'.
    WRITE icon_led_yellow AS ICON TO wa_data-icon.

    MODIFY i_data FROM wa_data TRANSPORTING icon msgtyp msgtx.
  ENDLOOP.

ENDFORM.                    " UPDATE

*&---------------------------------------------------------------------*
*&      Form  SHOW_RESULT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_result.

  PERFORM generate_fieldcatalog.

  PERFORM hide_blank_fields.

  PERFORM unhide_message_columns.

  PERFORM move_message_columns.

*  PERFORM add_sorting_to_grid. " sort by first column in file

  IF called_screen_100 EQ space.
    called_screen_100 = 'X'.
    CALL SCREEN 100.
  ENDIF.

ENDFORM.                    " SHOW_RESULT

*&---------------------------------------------------------------------*
*&      Form  check_entries
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_entries.

  DATA: wa_find_new_material TYPE zfind_new_material_number.

  LOOP AT i_data INTO wa_data.
*   if file has been downloaded, it may already contain messages
    CLEAR: wa_data-icon,
           wa_data-msgtyp,
           wa_data-msgtx.

    TRANSLATE wa_data-spras_2 TO UPPER CASE.
    TRANSLATE wa_data-meins TO UPPER CASE.
    TRANSLATE wa_data-gewei TO UPPER CASE.
    TRANSLATE wa_data-voleh TO UPPER CASE.
    TRANSLATE wa_data-zzcce TO UPPER CASE.

*   If the material already exists, only texts should be maintained
    IF NOT wa_data-matnr IS INITIAL.
*     Required fields filled?
      CASE space.
        WHEN wa_data-spras_2.
          wa_data-msgtx = 'Field language key (SPRAS_2) is required'.
        WHEN wa_data-maktx_2.
         wa_data-msgtx = 'Field mat. description (MAKTX_2) is required'.
      ENDCASE.

*     Set old_matnr to SAP number if it is not filled
      IF wa_data-old_matnr IS INITIAL.
        wa_data-old_matnr = wa_data-matnr.
      ENDIF.

      IF wa_data-msgtx EQ space.
*     Language key allowed
        SELECT SINGLE * FROM  t002
               WHERE  spras  = wa_data-spras_2.

        IF sy-subrc NE 0.
          wa_data-msgtx = 'Language key does not exist (spras_2)'.
        ENDIF.
      ENDIF.

      IF wa_data-msgtx IS INITIAL.
        SHIFT wa_data-matnr RIGHT DELETING TRAILING space.
        OVERLAY wa_data-matnr WITH '000000000000000000'.
        SELECT SINGLE * FROM  makt
               WHERE  matnr  EQ wa_data-matnr
               AND    spras  EQ wa_data-spras_2.

        IF sy-subrc EQ 0.
          CONCATENATE 'Mat. description already exists for language'
                      wa_data-spras_2
                      INTO wa_data-msgtx SEPARATED BY space.
          MOVE 'X' TO wa_data-zman_update.
        ENDIF.
      ENDIF.

*     Change material - Find line to insert the new description.
      IF wa_data-msgtx IS INITIAL.
        SELECT spras
               INTO TABLE i_spras
               FROM  makt
               WHERE  matnr  = wa_data-matnr.

        DESCRIBE TABLE i_spras LINES l_lines.
        IF l_lines > 3.
*       All screen fields for descriptions are filled - Must be updated
*       manually -
*      ( or add code to insert into MAKT in an other way... )
          wa_data-msgtx =
'Description must be added manually - only 4 lines available on screen'.
          wa_data-zman_update = 'X'.
*       added to converting table after update run
        ENDIF.
      ENDIF.
    ELSE.
*     Check if required fields are filled
      CASE space.
        WHEN wa_data-spras_2.
          wa_data-msgtx = 'Field language key (SPRAS_2) is required'.
        WHEN wa_data-maktx_1.
         wa_data-msgtx = 'Field mat. description (MAKTX_1) is required'.
        WHEN wa_data-maktx_2.
         wa_data-msgtx = 'Field mat. description (MAKTX_2) is required'.
        WHEN wa_data-mbrsh.
          wa_data-msgtx = 'Field Industry sector (mbrsh) is required'.
        WHEN wa_data-mtart.
          wa_data-msgtx = 'Field Material type (mtart) is required'.
        WHEN wa_data-meins.
       wa_data-msgtx = 'Field Base unit of measure (meins) is required'.
        WHEN wa_data-prdha.
          wa_data-msgtx = 'Field Product hierarchy (prdha) is required'.
        WHEN wa_data-labor.
          wa_data-msgtx = 'Field Laboratory design (labor) is required'.
      ENDCASE.

*     Values allowed?
      IF wa_data-msgtx EQ space.
*     Base unit of measure
        SELECT SINGLE * FROM  t006a
               WHERE  spras  = sy-langu
               AND    mseh3  = wa_data-meins.

        IF sy-subrc NE 0.
          wa_data-msgtx = 'Base unit of measure does not exist (mseh3)'.
        ENDIF.
      ENDIF.

      IF wa_data-msgtx EQ space.
*     Lab./Office
        SELECT SINGLE * FROM  t024l
               WHERE  labor  = wa_data-labor.

        IF sy-subrc NE 0.
          wa_data-msgtx = 'Lab./Office does not exist (labor)'.
        ENDIF.
      ENDIF.

      IF wa_data-msgtx EQ space.
*     Language key
        SELECT SINGLE * FROM  t002
               WHERE  spras  = wa_data-spras_2.

        IF sy-subrc NE 0.
          wa_data-msgtx = 'Language key does not exist (spras_2)'.
        ENDIF.
      ENDIF.

      IF wa_data-msgtx EQ space.
*     Product hierarchy
        SELECT SINGLE * FROM  t179
               WHERE  prodh  = wa_data-prdha.

        IF sy-subrc NE 0.
          wa_data-msgtx = 'Product hierarchy does not exist (PRDHA)'.
        ENDIF.
      ENDIF.
      IF wa_data-msgtx EQ space AND NOT wa_data-zzpmg IS INITIAL.
*     ProdMatGrp (ABC ind)
        SELECT SINGLE * FROM  zpmg
               WHERE  zzpmg  = wa_data-zzpmg.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'ProdMatGrp (ABC ind) does not exist (zzpmg)'.
        ENDIF.
      ENDIF.

      IF wa_data-msgtx EQ space AND NOT wa_data-zzsf1 IS INITIAL.
*     Sort field 1
        SELECT SINGLE * FROM  zsf1
               WHERE  zzsf1  = wa_data-zzsf1.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Sort field 1 does not exist (ZZSF1)'.
        ENDIF.
      ENDIF.

      IF wa_data-msgtx EQ space AND NOT wa_data-zzsf2 IS INITIAL.
*     Sort field 2
        SELECT SINGLE * FROM  zsf2
               WHERE  zzsf2  = wa_data-zzsf2.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Sort field 2 does not exist (ZZSF2)'.
        ENDIF.
      ENDIF.
      IF wa_data-msgtx EQ space AND NOT wa_data-zzsf3 IS INITIAL.
*     Sort field 3
        SELECT SINGLE * FROM  zsf3
               WHERE  zzsf3  = wa_data-zzsf3.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Sort field 3 does not exist (ZZSF3)'.
        ENDIF.
      ENDIF.
      IF wa_data-msgtx EQ space AND NOT wa_data-zzsf4 IS INITIAL.
*     Sort field 4
        SELECT SINGLE * FROM  zsf4
               WHERE  zzsf4  = wa_data-zzsf4.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Sort field 4 does not exist (ZZSF4)'.
        ENDIF.
      ENDIF.
      IF wa_data-msgtx EQ space AND NOT wa_data-zzsf5 IS INITIAL.
*     Sort field 5
        SELECT SINGLE * FROM  zsf5
               WHERE  zzsf5  = wa_data-zzsf5.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Sort field 5 does not exist (ZZSF5)'.
        ENDIF.
      ENDIF.
*     Drug Code
      IF wa_data-msgtx EQ space AND NOT wa_data-zzdrc IS INITIAL.
        SELECT SINGLE * FROM  zdrc
               WHERE  zzdrc  = wa_data-zzdrc.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Drug Code does not exist (zzdrc)'.
        ENDIF.
      ENDIF.
*     Narco Base
      IF wa_data-msgtx EQ space AND NOT wa_data-zzdkb IS INITIAL.
        SELECT SINGLE * FROM  zdkb
               WHERE  zzdkb  = wa_data-zzdkb.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Narco Base does not exist (zzdkb)'.
        ENDIF.
      ENDIF.
*     Country code, Emscope standard
      IF wa_data-msgtx EQ space AND NOT wa_data-zzcce IS INITIAL.
        SELECT SINGLE * FROM  zcce
               WHERE  zzcce  = wa_data-zzcce.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Country code, Emscope standard does not exist (zzcce)'.
        ENDIF.
      ENDIF.
*     Package size
      IF wa_data-msgtx EQ space AND NOT wa_data-zzpsz IS INITIAL.
        CONDENSE wa_data-zzpsz.
        SELECT SINGLE * FROM  zpsz
               WHERE  zzpsz  = wa_data-zzpsz.

        IF sy-subrc NE 0.
          wa_data-msgtx = 'Package size does not exist (zzpsz)'.
        ENDIF.
      ENDIF.
*     Concentration
      IF wa_data-msgtx EQ space AND NOT wa_data-zzcns IS INITIAL.
        SELECT SINGLE * FROM  zcns
               WHERE  zzcns  = wa_data-zzcns.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Concentration does not exist (ZZCNS)'.
        ENDIF.
      ENDIF.
*     Unit Size
      IF wa_data-msgtx EQ space AND NOT wa_data-zzusz IS INITIAL.
        SELECT SINGLE * FROM  zusz
               WHERE  zzusz  = wa_data-zzusz.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Unit Size does not exist (ZZUSZ)'.
        ENDIF.
      ENDIF.
*     ATC-no.
      IF wa_data-msgtx EQ space AND NOT wa_data-zzatc IS INITIAL.
        SELECT SINGLE * FROM  zatc
               WHERE  zzatc  = wa_data-zzatc.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'ATC-no. does not exist (ZZATC)'.
        ENDIF.
      ENDIF.
*     Multi pack size
      IF wa_data-msgtx EQ space AND NOT wa_data-zzmsz IS INITIAL.
        CONDENSE wa_data-zzmsz.
        SELECT SINGLE * FROM  zmsz
               WHERE  zzmsz  = wa_data-zzmsz.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Multi pack size does not exist (ZZMSZ)'.
        ENDIF.
      ENDIF.
*     Weight Unit
      IF wa_data-msgtx EQ space AND NOT wa_data-gewei IS INITIAL.
        SELECT SINGLE * FROM  t006
               WHERE  msehi  = wa_data-gewei.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Weight Unit does not exist (GEWEI)'.
        ENDIF.
      ENDIF.
*     Volume Unit
      IF wa_data-msgtx EQ space AND NOT wa_data-voleh IS INITIAL.
        SELECT SINGLE * FROM  t006
               WHERE  msehi  = wa_data-voleh.

        IF sy-subrc NE 0.
          wa_data-msgtx =
          'Volume Unit does not exist (VOLEH)'.
        ENDIF.
      ENDIF.

*     EAN for Germany will be entered manually by Cato.
      if wa_data-ean11 ne space and wa_data-msgtx eq space.
        data: l_ean_length type i.
        l_ean_length = strlen( wa_data-ean11 ).
        if l_ean_length ne 13 or wa_data-matnr ne space.
          wa_data-msgtx =
        'Enter EAN numbers manually for Germany and common materials'.
        elseif wa_data-numtp is initial.
          wa_data-msgtx = 'EAN category must be given for EAN number'.
        endif.
      endif.
      if wa_data-ean11 eq space and wa_data-numtp ne space.
*       Makes no sense to have an EAN category when there is no EAN
        clear: wa_data-numtp.
      endif.
    ENDIF.  "   IF NOT wa_data-matnr IS INITIAL.

*   Has material already been migrated?
    IF wa_data-msgtx EQ space and wa_data-msgtyp ne 'W'.

      CLEAR: wa_find_new_material.
      MOVE: wa_data-old_matnr TO wa_find_new_material-matnr_old,
            '54' TO wa_find_new_material-werks.

      CALL FUNCTION 'ZFIND_NEW_MATERIAL_NUMBER'
           EXPORTING
                get_from_marc = space
           CHANGING
                wa_data       = wa_find_new_material.

      IF NOT wa_find_new_material-matnr IS INITIAL.
        CONCATENATE: 'Material already created:'
                     wa_find_new_material-matnr
          INTO wa_data-msgtx
          SEPARATED BY space.
        wa_data-msgtyp = 'E'.
      ENDIF.
    ENDIF.
*   Set all messages that are not Warning to Error
    IF wa_data-msgtx NE space AND wa_data-msgtyp EQ space.
      MOVE: 'E' TO wa_data-msgtyp.
    ENDIF.

    MODIFY i_data FROM wa_data.

  ENDLOOP.

ENDFORM.                    " check_entries

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  DATA: local_commands.

  PERFORM user_commands_local CHANGING local_commands.

  IF local_commands EQ 'X'.
*   local user command has been executed - clear ok_code
    CLEAR ok_code.
  ELSE.
    PERFORM user_commands.
  ENDIF.

ENDMODULE.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Form  user_commands_local
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LOCAL_COMMANDS  text
*----------------------------------------------------------------------*
FORM user_commands_local CHANGING p_local_commands.

* Add your own user commands here and overwrite default handling if
* necessary

  DATA: local_ok TYPE ok.

  local_commands = 'X'.

  local_ok = ok_code.

  CASE local_ok.
    WHEN OTHERS.
      CLEAR: local_commands.
  ENDCASE.

ENDFORM.                    " user_commands_local

Pls treat it as urgent.

I ll reward for usefull response.

Thx in Adv.

Bobby

1 REPLY 1
Read only

Former Member
0 Likes
469

Hi,

I didn't recieve any response from you regarding issues in upload program.

Could you pls send some solution for this issue ?

Pls treat it as urgent.

Thx in Adv.

Bobby