Export xls using BDC

REPORT  ysdr7900 MESSAGE-ID yy.
*-----------------------------------------------------------------------
*                         P R O G R A M
*                     D E S C R I P T I O N
*
* Create commodity codes from excel sheet.
*
*-----------------------------------------------------------------------
*  Transaction: ZSD122
*-----------------------------------------------------------------------
TYPES: BEGIN OF st_inrec,
         land1  TYPE land1,
         stawn  TYPE stawn,
         text1  TYPE bezei40,
         bemeh  TYPE bemeh,
       END OF st_inrec.
*-----------------------------------------------------------------------
* Table Types
*-----------------------------------------------------------------------
*types: tt_
*-----------------------------------------------------------------------
* Global Internal Tables
*-----------------------------------------------------------------------
DATA: gi_ycppvas  TYPE STANDARD TABLE OF ycppvas.
DATA: gi_excel    TYPE STANDARD TABLE OF alsmex_tabline.
DATA: gi_inrec    TYPE STANDARD TABLE OF st_inrec,
      gi_inrec_update TYPE STANDARD TABLE OF st_inrec.

*-----------------------------------------------------------------------
* Global variables
*-----------------------------------------------------------------------
DATA: g_run TYPE char1,
      g_noof_lines  TYPE sytabix,
      g_excel TYPE alsmex_tabline,
      g_inrec TYPE st_inrec,
      g_inrec_update TYPE st_inrec.

*-----------------------------------------------------------------------
* Includes
*-----------------------------------------------------------------------
INCLUDE: ybcl1000, ybatch2.
*-----------------------------------------------------------------------
* Selection screen.
*-----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE text-010.
PARAMETERS: a_file(128) TYPE c LOWER CASE OBLIGATORY
            DEFAULT 'C:\Users\dkniolje\Desktop\New commodity code 18069029.xlsx',
            a_trtext LIKE ko013-as4text OBLIGATORY
            DEFAULT 'R????? Transport description'.
SELECTION-SCREEN END OF BLOCK 2.

*-----------------------------------------------------------------------
* at selection screen
*-----------------------------------------------------------------------
AT SELECTION-SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR a_file.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name = 'M:\files\*.*'
    IMPORTING
      file_name  = a_file.
*-----------------------------------------------------------------------
* START-OF-SELECTION.
*-----------------------------------------------------------------------
START-OF-SELECTION.

  PERFORM upload_from_excel.
  PERFORM process_data.
  PERFORM close_bdc.
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  UPLOAD_FROM_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM upload_from_excel .
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = a_file
      i_begin_col             = 1
      i_begin_row             = 1
      i_end_col               = 256
      i_end_row               = 65536
    TABLES
      intern                  = gi_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  REFRESH gi_inrec.
  LOOP AT gi_excel INTO g_excel.
    IF g_excel-row = 1.
      CONTINUE.
    ENDIF.
    AT NEW row.
      CLEAR g_inrec.
    ENDAT.
    CASE g_excel-col.
      WHEN 1.
*        UNPACK g_excel-value TO g_inrec-land1.
        g_inrec-land1 = g_excel-value.
      WHEN 2.
        g_inrec-stawn = g_excel-value.
      WHEN 3.
        g_inrec-text1 = g_excel-value.
      WHEN 4.
        g_inrec-bemeh = g_excel-value.
    ENDCASE.
    AT END OF row.
      APPEND g_inrec TO gi_inrec.
    ENDAT.
  ENDLOOP.
ENDFORM.                    " UPLOAD_FROM_EXCEL

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

  PERFORM check_ins_or_upd.
  PERFORM insert_new_commodity_codes.
  PERFORM update_commodity_codes.

ENDFORM.                    "process_data
*&---------------------------------------------------------------------*
*&      Form  CHECK_INS_OR_UPD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_ins_or_upd .
  DATA: l_land1 TYPE land1.
* Check if it is a insert or an update of T604
  REFRESH gi_inrec_update.
  LOOP AT gi_inrec INTO g_inrec.
    SELECT SINGLE land1 INTO l_land1
      FROM t604
      WHERE land1 = g_inrec-land1
      AND   stawn = g_inrec-stawn.
    IF sy-subrc = 0.
      APPEND g_inrec TO gi_inrec_update.
      DELETE gi_inrec.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " CHECK_INS_OR_UPD
*&---------------------------------------------------------------------*
*&      Form  UPDATE_COMMODITY_CODES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM update_commodity_codes .
  DATA: l_noof_lines  TYPE sytabix,
        l_sy_tabix    TYPE sytabix.

  l_noof_lines = lines( gi_inrec_update ).

  LOOP AT gi_inrec_update INTO g_inrec_update.
    l_sy_tabix = sy-tabix.
    REFRESH gi_bdcdata.
    PERFORM dynpro USING: 'X' 'SAPLSVIX' '0210',
                          ' ' 'MARK_CHECKBOX(01)' 'X',
                          ' ' 'MARK_CHECKBOX(02)' 'X'.
    PERFORM dynpro USING: 'X' 'SAPLSVIX' '0100',
                          ' ' 'D0100_FIELD_TAB-LOWER_LIMIT(01)' g_inrec_update-land1,
                          ' ' 'D0100_FIELD_TAB-LOWER_LIMIT(02)' g_inrec_update-stawn.
    PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                          ' ' 'V_T604-TEXT1' g_inrec_update-text1,
                          ' ' 'V_T604-BEMEH' g_inrec_update-bemeh,
                          ' ' 'BDC_OKCODE' '=SAVE'.

    IF g_noof_lines = 0 AND "Commodity codes inserted
        l_sy_tabix = 1.
      PERFORM dynpro USING: 'X' 'SAPLSTRD' '0300',
                            ' ' 'BDC_OKCODE' '=INSA'.  "Create new transport
      PERFORM dynpro USING: 'X' 'SAPLSTR8' '0102',
                            ' ' 'KO013-AS4TEXT' a_trtext,
                            ' ' 'BDC_OKCODE' '=CREA'.  "Create new transport
      PERFORM dynpro USING: 'X' 'SAPLSTRD' '0300',
                            ' ' 'BDC_OKCODE' '=LOCK'.
    ELSE.
      PERFORM dynpro USING: 'X' 'SAPLSTRD' '0300',
                            ' ' 'BDC_OKCODE' '=LOCK'.
    ENDIF.
*    ELSE.
*      PERFORM dynpro USING: 'X' 'SAPLSTRD' '0300',
*                            ' ' 'BDC_OKCODE' '=LOCK'.
*    ENDIF.
    PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                          ' ' 'BDC_OKCODE' '=UEBE'.
    PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                          ' ' 'BDC_OKCODE' '=BACK'.

    CALL TRANSACTION 'OVE1' USING gi_bdcdata MODE 'A'.
*    CALL TRANSACTION 'OVE1' USING gi_bdcdata MODE 'N'.
    IF sy-subrc NE 0.
      PERFORM open_bdc
      USING 'YSDR7900'.
      PERFORM insert_bdc USING 'OVE1'.
      WRITE:/ 'Error. Go to transaction SM35 ',
              'Process session YSDR7900'.
    ELSE.
      WRITE:/ g_inrec_update-land1,
              g_inrec_update-stawn,  ' updated'.
    ENDIF.
  ENDLOOP.
  WRITE: l_noof_lines, 'Records updated'.

ENDFORM.                    " UPDATE_COMMODITY_CODES
*&---------------------------------------------------------------------*
*&      Form  INSERT_NEW_COMMODITY_CODES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM insert_new_commodity_codes .
  DATA: l_sy_tabix  TYPE sytabix,
        l_count     TYPE i.

  g_noof_lines = lines( gi_inrec ).
  CLEAR l_count.
  SELECT COUNT( * ) INTO l_count
    FROM t604
    WHERE  stawn = g_inrec-stawn.
  REFRESH gi_bdcdata.
  LOOP AT gi_inrec INTO g_inrec.
    l_sy_tabix = sy-tabix.
    IF l_sy_tabix = 1.
      PERFORM dynpro USING: 'X' 'SAPLSVIX' '0210',
                            ' ' 'MARK_CHECKBOX(02)' 'X'.
      PERFORM dynpro USING: 'X' 'SAPLSVIX' '0100',
                            ' ' 'D0100_FIELD_TAB-LOWER_LIMIT(01)' g_inrec-stawn.
      IF l_count = 1. "Exactly one record exist for this commodity code
        PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                              ' ' 'BDC_OKCODE' '=NEWL'.  "New Entries
      ELSE.
        PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                              ' ' 'BDC_OKCODE' '=NEWL'.  "New Entries
      ENDIF.
    ENDIF.
    IF l_sy_tabix = g_noof_lines.
*     last record in gi_inrec.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                            ' ' 'V_T604-LAND1' g_inrec-land1,
                            ' ' 'V_T604-STAWN' g_inrec-stawn,
                            ' ' 'V_T604-TEXT1' g_inrec-text1,
                            ' ' 'V_T604-BEMEH' g_inrec-bemeh,
                            ' ' 'BDC_OKCODE' '=SAVE'.
    ELSE.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                            ' ' 'V_T604-LAND1' g_inrec-land1,
                            ' ' 'V_T604-STAWN' g_inrec-stawn,
                            ' ' 'V_T604-TEXT1' g_inrec-text1,
                            ' ' 'V_T604-BEMEH' g_inrec-bemeh,
*                           ' ' 'BDC_OKCODE' '=NEXT'.
*Hej Rene. Jeg havde lavet programmet uden translate.
*Det som er kommenteret ud var starten på og få translate med,
*      men jeg kunne ikke få det til at virke.
                            ' ' 'BDC_OKCODE' '=UEBE'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                            ' ' 'VIM_MARKED(01)' 'X',
                            ' ' 'BDC_OKCODE' '=TEXT'. "Translate
      PERFORM dynpro USING: 'X' 'SAPMSSY0' '0120',
                            ' ' 'BDC_OKCODE' '=AMAR'.
      PERFORM dynpro USING: 'X' 'SAPMSSY0' '0120',
                            ' ' 'BDC_OKCODE' '=ENTR'.
      PERFORM dynpro USING: 'X' 'SAPLSVIM' '0100',
                            ' ' 'VIM_D0100_WORKAREA-TEXT1(12)' 'CZ text',
                            ' ' 'BDC_OKCODE' '/ENTR'.
      PERFORM dynpro USING: 'X' 'SAPLSVIM' '0100',
                            ' ' 'VIM_D0100_WORKAREA-TEXT1(02)' 'danish text',
                            ' ' 'VIM_D0100_WORKAREA-TEXT1(09)' 'spanish text',
                            ' ' 'BDC_OKCODE' '=OKAY'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                            ' ' 'BDC_OKCODE' '=SAVE'.
      PERFORM dynpro USING: 'X' 'SAPLSTRD' '0300',
                            ' ' 'BDC_OKCODE' '=LOCK'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                            ' ' 'BDC_OKCODE' '/00'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                            ' ' 'BDC_OKCODE' '=BACK'.
    ENDIF.
  ENDLOOP.
  IF g_noof_lines <> 0.
    PERFORM dynpro USING: 'X' 'SAPLSTRD' '0300',
                          ' ' 'BDC_OKCODE' '=INSA'.  "Create new transport
    PERFORM dynpro USING: 'X' 'SAPLSTR8' '0102',
                          ' ' 'KO013-AS4TEXT' a_trtext,
                          ' ' 'BDC_OKCODE' '=CREA'.  "Create new transport
    PERFORM dynpro USING: 'X' 'SAPLSTRD' '0300',
                          ' ' 'BDC_OKCODE' '=LOCK'.
    IF g_noof_lines = 1. "Only 1 line in input file
      PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                            ' ' 'BDC_OKCODE' '=SAVE'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                            ' ' 'BDC_OKCODE' '=UEBE'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                            ' ' 'BDC_OKCODE' '=ENDE'.
    ELSE.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0040',
                            ' ' 'BDC_OKCODE' '=UEBE'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                            ' ' 'BDC_OKCODE' '=BACK'.
      PERFORM dynpro USING: 'X' 'SAPL080E' '0020',
                            ' ' 'BDC_OKCODE' '=BACK'.
    ENDIF.

*
*    CALL TRANSACTION 'OVE1' USING gi_bdcdata MODE 'A'.
*    CALL TRANSACTION 'OVE1' USING gi_bdcdata MODE 'N'.
*    IF sy-subrc NE 0.
      PERFORM open_bdc
      USING 'YSDR7900'.
      PERFORM insert_bdc USING 'OVE1'.
      WRITE:/ 'Error. Go to transaction SM35 ',
              'Process session YSDR7900'.
*    ELSE.
*      WRITE: g_noof_lines, 'Records inserted'.
*    ENDIF.
  ENDIF.

ENDFORM.                    " INSERT_NEW_COMMODITY_CODES

Comments

Popular posts from this blog

Export data to xls using OOPS

Factory method ALV sap abap

Delete Selected Record in ALV Report