FORM number_range_create .
  DATA lv_nr_range_nr     LIKE inri-nrrangenr,
         lv_nr_object       LIKE inri-object,
         lv_returncode      LIKE inri-returncode,
         lv_h_ret_code(1)   TYPE c,
         lv_error_occured,
         lv_warning_occured.
  DATA BEGIN OF lt_error_tab OCCURS 5.
      INCLUDE STRUCTURE inriv.
  DATA END OF lt_error_tab.
  DATA BEGIN OF lt_errors_tab OCCURS 5.
      INCLUDE STRUCTURE inoer.
  DATA END OF lt_errors_tab.
  DATA BEGIN OF ls_err.
      INCLUDE STRUCTURE inrer.
  DATA END OF ls_err.
  DATA BEGIN OF lt_interval_tab OCCURS 5.
      INCLUDE STRUCTURE inriv.
  DATA END OF lt_interval_tab.
  DATA BEGIN OF lt_obj_attr_tab OCCURS 5.
      INCLUDE STRUCTURE tnro.
  DATA END OF lt_obj_attr_tab.
  DATA BEGIN OF lt_obj_text_tab OCCURS 5.
      INCLUDE STRUCTURE tnrot.
  DATA END OF lt_obj_text_tab.
  DATA lv_number_numc(12TYPE n" LIKE INRIV-NRLEVEL.

  lv_nr_range_nr '01'.
  lv_nr_object 'ZQM_005'.

  CALL FUNCTION 'NUMBER_GET_NEXT'
    EXPORTING
      nr_range_nr             lv_nr_range_nr
      object                  lv_nr_object
    IMPORTING
      number                  lv_number_numc
      returncode              lv_returncode
    EXCEPTIONS
      interval_not_found      1
      number_range_not_intern 2
      object_not_found        3
      quantity_is_0           4.

* Check if number found...
  CASE sy-subrc.
    WHEN 0.                            "Number found...
    WHEN 1.                            "Interval not found...
*     Create new Interval... first get the old counter from SOOC
*     Pass the obj_type to the key
*     Fill the interval structure for insert
      CLEAR lt_interval_tabREFRESH lt_interval_tab.
      lt_interval_tab-fromnumber '1'.
      lt_interval_tab-tonumber '999999999999'.
      MOVElv_nr_range_nr    TO lt_interval_tab-nrrangenr,
            lv_number_numc         TO lt_interval_tab-nrlevel,
            'I'            TO lt_interval_tab-procind.
      APPEND lt_interval_tab.
*     Insert the new interval
      CALL FUNCTION 'NUMBER_RANGE_INTERVAL_UPDATE'
        EXPORTING
          object           lv_nr_object
        IMPORTING
          error            ls_err
          error_occured    lv_error_occured
          warning_occured  lv_warning_occured
        TABLES
          error_iv         lt_error_tab
          interval         lt_interval_tab
        EXCEPTIONS
          object_not_found 1.
*     Write the Numberrangedata to the Database.
      CALL FUNCTION 'NUMBER_RANGE_UPDATE_CLOSE'
        EXPORTING
          object                 lv_nr_object
        EXCEPTIONS
          no_changes_made        1
          object_not_initialized 2.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
      CALL FUNCTION 'NUMBER_GET_NEXT'
        EXPORTING
          nr_range_nr             lv_nr_range_nr
          object                  lv_nr_object
        IMPORTING
          number                  lv_number_numc
          returncode              lv_returncode
        EXCEPTIONS
          interval_not_found      1
          number_range_not_intern 2
          object_not_found        3
          quantity_is_0           4.

    WHEN 3.                            "Interval not found
*     Create new object... first get the old counter from SOOC
*     Create the object...
      CLEAR lt_obj_attr_tabREFRESH lt_obj_attr_tab.
      MOVElv_nr_object TO lt_obj_attr_tab-object,
            ''        TO lt_obj_attr_tab-yearind,
            'NUMC12'  TO lt_obj_attr_tab-domlen,
            10        TO lt_obj_attr_tab-percentage,
            'X'       TO lt_obj_attr_tab-buffer,
            10        TO lt_obj_attr_tab-noivbuffer.
      APPEND lt_obj_attr_tab.
      CLEAR lt_obj_text_tabREFRESH lt_obj_text_tab.
      MOVEsy-langu TO lt_obj_text_tab-langu,
            lv_nr_object TO lt_obj_text_tab-object,
            TEXT-m01 TO lt_obj_text_tab-txtshort"Issue Number
            TEXT-m01 TO lt_obj_text_tab-txt.      "Issue Number
      APPEND lt_obj_text_tab.
*     Insert the object...
      CALL FUNCTION 'NUMBER_RANGE_OBJECT_UPDATE'
        EXPORTING
          indicator                 'I'  "Insert
          object_attributes         lt_obj_attr_tab
          object_text               lt_obj_text_tab
        IMPORTING
          returncode                lv_h_ret_code
        TABLES
          errors                    lt_errors_tab
        EXCEPTIONS
          object_already_exists     1
          object_attributes_missing 2
          object_not_found          3
          object_text_missing       4
          wrong_indicator           5.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
*     Save the changes..
      CALL FUNCTION 'NUMBER_RANGE_OBJECT_CLOSE'
        EXPORTING
          object                 lv_nr_object
        EXCEPTIONS
          object_not_initialized 1.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
*     Check if an interval already exists
*     Shouldn't occur but we've had already problems with it
      CALL FUNCTION 'NUMBER_GET_NEXT'
        EXPORTING
          nr_range_nr             lv_nr_range_nr
          object                  lv_nr_object
        IMPORTING
          number                  lv_number_numc
          returncode              lv_returncode
        EXCEPTIONS
          interval_not_found      1
          number_range_not_intern 2
          object_not_found        3
          quantity_is_0           4.
      CASE sy-subrc.
        WHEN 0.
        WHEN 1.
*         Fill the interval structure for insert
          CLEAR lt_interval_tabREFRESH lt_interval_tab.
          lt_interval_tab-fromnumber '1'.
          lt_interval_tab-tonumber '999999999999'.
          MOVElv_nr_range_nr    TO lt_interval_tab-nrrangenr,
                lv_number_numc         TO lt_interval_tab-nrlevel,
                'I'            TO lt_interval_tab-procind.
          APPEND lt_interval_tab.
*         Insert the new interval
          CALL FUNCTION 'NUMBER_RANGE_INTERVAL_UPDATE'
            EXPORTING
              object           lv_nr_object
            IMPORTING
              error            ls_err
              error_occured    lv_error_occured
              warning_occured  lv_warning_occured
            TABLES
              error_iv         lt_error_tab
              interval         lt_interval_tab
            EXCEPTIONS
              object_not_found 1.
*         Write the Numberrangedata to the Database.
          CALL FUNCTION 'NUMBER_RANGE_UPDATE_CLOSE'
            EXPORTING
              object                 lv_nr_object
            EXCEPTIONS
              no_changes_made        1
              object_not_initialized 2.
          IF sy-subrc GE 2.                                 "BS310395
            EXIT.
          ENDIF.
          CALL FUNCTION 'NUMBER_GET_NEXT'
            EXPORTING
              nr_range_nr             lv_nr_range_nr
              object                  lv_nr_object
            IMPORTING
              number                  lv_number_numc
              returncode              lv_returncode
            EXCEPTIONS
              interval_not_found      1
              number_range_not_intern 2
              object_not_found        3
              quantity_is_0           4.

        WHEN OTHERS.
          EXIT.
      ENDCASE.
    WHEN OTHERS.

  ENDCASE.
  gs_header-ziss_id lv_number_numc.
ENDFORM.

'SAP Program > ABAP' 카테고리의 다른 글

sorted table 선언  (0) 2018.03.23
amount를 currency에 맞게 conversion input/output  (0) 2018.03.21
Dialog 화면에서 debugging  (0) 2018.02.06
LEAVE LIST-PROCESSING  (0) 2018.02.02
LEAVE TO LIST-PROCESSING  (0) 2018.02.02

설정

트랙백

댓글