Синтаксис шикәр

»Коболны куллану аңны гарип итә; шуңа күрә аны өйрәтү — җинаять булып исәпләнергә тиеш.«

* range-зурлыкны эчке җәдвәлга әйләндерү
mt_kjahr = CORRESPONDING #( mr_kjahr MAPPING kjahr = low ).
* тернар операторы
DATA(bool) = COND #( WHEN i * i > number THEN abap_true ELSE abap_false ).
 
* range-зурлыкны тутыру
mr_tripn = VALUE #( FOR ls_xls_row IN mt_xls_rows
                  ( sign   = msc_range-sign_inclusive
                    option = msc_range-option_eq
                    low    = CONV tripn( |{ ls_xls_row-tripn ALPHA = IN }| ) )
                  ).
 
DATA(lr_nach) = VALUE rseloption( OPTION = 'EQ' SIGN = 'I' ( LOW = 'Z2N' )
                                                             ( LOW = 'NEU' ) ).   
* append ls_goodsmvt_item to lt_goodsmvt_item урнына
  APPEND VALUE #( material   = matnr
                  plant      = from_plant
                  stge_loc   = from_stloc
                  move_plant = to_plant
                  move_stloc = to_stloc
                  move_type = '309'
                  entry_qnt = menge
                  entry_uom = <fs>-meins ) TO lt_goodsmvt_item.
 
* call function 'CONVERSION_EXIT_ALPHA_INPUT' урнына
f_matnr = conv matnr( |{ l_matnr alpha = IN }| ).
 
RESULT = VALUE #( FOR row IN INPUT ( row-text ) ).
* LOOP AT input INTO DATA(row).
*  INSERT row-text INTO TABLE result.
* ENDLOOP.
 
DATA(LINE) = value_pairs[ NAME = 'A' ].
* READ TABLE value_pairs INTO DATA(line) WITH KEY name = 'A'.
 
DATA(EXISTS) = xsdbool( line_exists( value_pairs[ NAME = 'A' ] ) ).
IF line_exists( value_pairs[ NAME = 'A' ] ).
* READ TABLE value_pairs TRANSPORTING NO FIELDS WITH KEY name = 'A'.
* DATA(exists) = xsdbool( sy-subrc = 0 ).

How to save handbooks and e-books from Learning Hub to PDF?

View (list) all pages of the course in Chrome browser.
Or autoplay it if it is in Handbook format (make a cup of tee).
Then carry out the command:

ChromeCacheView.exe /copycache "https://saplearninghub.plateau.com/" "" /CopyFilesFolder "C:\TMP" /UseWebSiteDirStructure 1

All pages in SVG format will be under

C:\TMP\saplearninghub.plateau.com\icontent_e\CUSTOM_eu\sap\self-managed\ebook\%COURSE_NAME%\xml

Now automate converting them to PDF files and merge all of the pdf into one file.
e.g., on Linux:

inkscape –without-gui –file=topic1.svg –export-pdf=filename.pdf

on Windows bat-file (using Bullzip):

rundll32.exe "C:\windows\system32\mshtml.dll",PrintHTML "C:\1\topic1.svg"
rundll32.exe "C:\windows\system32\mshtml.dll",PrintHTML "C:\1\topic2.svg"

ALV-буферларны чистарту

ALV-буферларны чистыртыр өчен менә бу программалар белән файдаланыгыз:

BALVBUFDEL
BCALV_BUFFER_DELETE
BCALV_BUFFER_DEL_SHARED

Берәр элемент мәгълүматлар текстлары үзгәрсә, менә бу Функциягә бәйләнешле Модульга сыйфатын билгели торган зурлык итеп ALV-төзелешне тапшырыгыз:

DD_INT_DELETE_DDFTX

Для ТСД: USF CIBD Ciber toGo Mobile

Ciber toGo Mobile это немецкое решение для ТСД (терминалов сбора данных).

Экран ТСД (EWM):

Dynpro:

process before output.
  module init_0100.
  module status_0100.
  module udapte_screen_0100.
 
process after input.
  module exit_command_0100 at exit-command.
  module user_command_0100.

Логика:

data: go_ledruck type ref to zcl_mde_helper,
      g_fcode    type sy-ucomm.
 
 
module status_0100 output.
  create object go_cont
    exporting
      container_name = 'ALV_TA'.
 
  call method cl_salv_table=>factory
    exporting
      r_container  = go_cont
    importing
      r_salv_table = go_alv_ta
    changing
      t_table      = gt_talist.
 
  go_display = go_alv_ta->get_display_settings( ).
 
* ALV-баганаларын алабыз
  call method go_alv_ta->get_columns
    receiving
      value = go_columns.
 
* ALV-баганаларның киңлеген төзәтү
  go_columns->set_optimize( ).
 
* юлларны буйлы итеп буярга кирәк:
  call method go_display->set_striped_pattern
    exporting
      value = 'X'.
 
  go_selections = go_alv_ta->get_selections(  ).
  go_selections->set_selection_mode( go_selections->single ).
 
  go_alv_ta->display( ).
endmodule.
 
module user_command_0100 input.
  go_klassif->g_dynnr = sy-dynnr.
  case g_fcode.
    when 'F4' or 'ENTER'.
      if go_klassif->are_fields_filled_out( sy-dynnr && sy-repid ).
        call screen 0200.
      endif.
   endcase.
endmodule.
 
module init_0100 output.
  go_klassif = zcl_mde_helper=>instance( ).
endmodule.
 
module status_0100 output.
  set pf-status 'PF_STATUS_ZL_LEIH'.
endmodule.
 
module exit_command_0100 input. " F3 (E)
  leave to screen 0.
endmodule.
 
module udapte_screen_0100 output.
  perform set_cursor_0100.
endmodule.
 
form set_cursor_0100 .
  data(l_focus_field) = go_klassif->get_next_field_to_fill_out( sy-dynnr && sy-repid ).
  if l_focus_field is not initial.
    set cursor field l_focus_field.
  endif.
endform.
method GET_NEXT_FIELD_TO_FILL_OUT.
 
  case i_dynnrrepid.
    when '0100ZL_LEIH'.
      r_ret = 'GO_KLASSIF->' && cond #(
             when g_from_plant is initial then 'G_FROM_PLANT'
             when g_from_stloc is initial then 'G_FROM_STLOC' ).
    when '0200ZL_LEIH'.
      r_ret = 'GO_KLASSIF->' && cond #(
               when g_to_stloc is initial then 'G_TO_STLOC' " иң озыны - иң берсе!!
               when g_ean is initial then 'G_EAN'
               when g_sernr is initial then 'G_SERNR' ).
    when '0300ZL_LEIH'.
      r_ret = 'GO_KLASSIF->' && cond #(
         when g_to_sttyp is initial then 'G_TO_STTYP'
         when g_to_stbin is initial then 'G_TO_STBIN' ).
 endcase.
endmethod.
 
 
method ARE_FIELDS_FILLED_OUT.
 
  r_ret = _false.
 
  case i_dynnrrepid.
    when '0100ZL_PRINT'.
      if g_lenum is not initial.
        r_ret = _true.
        return.
      endif.
    when '0100ZL_LEIH'.
      if g_from_plant is not initial and g_from_stloc is not initial.
        r_ret = _true.
        return.
      endif.
    when '0200ZL_LEIH'.
      if g_ean is not initial and g_sernr is not initial and g_to_stloc is not initial.
        r_ret = _true.
        return.
      endif.
    when '0300ZL_LEIH'.
      if g_to_sttyp is not initial and g_to_stbin is not initial.
        r_ret = _true.
        return.
      endif.
  endcase.
 
endmethod.

Важные слова не важны

В процессе написания кода по заданной спецификации неожиданно обнаружилось, что ключевые слова не являюся зарезервированными.
Поэтому нижеследующий код компилируется и даже выполняется:

TYPES TYPE.
 
DATA USING TYPE TYPE.
 
PERFORM FORM USING USING USING USING.
 
FORM FORM USING USING TYPE TYPE DATA LIKE USING TYPE TYPE TYPE.
 
  DATA = TYPE.
 
  DATA TO TYPE I.
  DATA ADD LIKE TO.
 
  ADD ADD TO TO.
 
  DATA IF.
  DATA EQ.
  DATA ENDIF.
  IF IF EQ EQ.
    MOVE TO TO ENDIF.
  ENDIF.
 
ENDFORM.

Даже если так писать и можно, то этого делать всё-таки не следует:

  • Усложняет восприятие, хотя есть и подсветка кода и uppercase/lowercase
  • Name-conventions
  • Ограничения при работе с БД
  • Это не смешно

Зато есть служебная таблица TRESE, в которой перечисляются разные наименования полей, которые нельзя создавать из-за ограничений в разных БД.
© entropii(нокта)net

Debugger scripting

Бер программа чакырылган барлык ФМ-нарны җыер өчен мин Debugger scripting белән кулланам.

Программаның бөтен боерыклар беркетмәсен RSTPDA_SCRIPT_STATEMENT_TRACE сценарие белән язып була.

Drill down to debugging as usual, select the RSTPDA_SCRIPT_STATEMENT_TRACE
Check the box «Breakpoint reached» and create new one on «CALL FUNCTION» then start the script.

When everything will be done, /h into the command line, press F3 and then stop the script.

The transaction SAS can show the results:

*<SCRIPT:PERSISTENT>
REPORT rstpda_script_template.
 
*<SCRIPT:HEADER>
*<SCRIPTNAME>Z_RSTPDA_SCRIPT_REG_EXPRESSION</SCRIPTNAME>
*<SCRIPT_CLASS>LCL_DEBUGGER_SCRIPT</SCRIPT_CLASS>
*<SINGLE_STEP>X</SINGLE_STEP>
 
*</SCRIPT:HEADER>
 
*<SCRIPT:PRESETTINGS>
 
*</SCRIPT:PRESETTINGS>
 
*<SCRIPT:SCRIPT_CLASS>
*---------------------------------------------------------------------*
*       CLASS lcl_debugger_script DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS LCL_DEBUGGER_SCRIPT DEFINITION INHERITING FROM  CL_TPDA_SCRIPT_CLASS_SUPER  .
 
  PUBLIC SECTION.
    METHODS: PROLOGUE  REDEFINITION,
      INIT    REDEFINITION,
      SCRIPT  REDEFINITION,
      END     REDEFINITION.
  PRIVATE SECTION.
    DATA: TEXT              TYPE STRING,
          IGNORE            TYPE STRING,
          INCLUDE_PATTERN   TYPE STRING,
          F_DELETE_COMMENTS TYPE FLAG,
          F_CONDENSE        TYPE FLAG,
          F_TO_UPPER_CASE   TYPE FLAG,
          F_ISREGEX         TYPE FLAG,
          F_TRACE           TYPE FLAG,
          F_BREAKPOINT      TYPE FLAG,
          T_SOURCE          TYPE ABAPTXT255_TAB,
          T_SOURCES         TYPE STANDARD TABLE OF ABAPTXT255_TAB,
          OLD_INCLUDE       TYPE SYREPID,
          R_OLD_INCLUDE     TYPE RSELOPTION.
 
    METHODS:
      READ_SENTENCE
        IMPORTING
          I_LINE           TYPE I
        RETURNING
          VALUE(E_LINESRC) TYPE STRING.
 
ENDCLASS.                    "lcl_debugger_script DEFINITION
 
*---------------------------------------------------------------------*
*       CLASS lcl_debugger_script IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS LCL_DEBUGGER_SCRIPT IMPLEMENTATION.
  METHOD PROLOGUE.
*** generate abap_source (source handler for ABAP)
    SUPER->PROLOGUE( ).
  ENDMETHOD.                    "prolog
 
*--------------------------------------------------------------------*
* Method INIT
*--------------------------------------------------------------------*
* Asks user some parameters
*--------------------------------------------------------------------*
  METHOD INIT.
    DATA: LT_FIELDS TYPE STANDARD TABLE OF SVAL,
          LS_FIELDS LIKE LINE OF LT_FIELDS,
          L_RETURNCODE(1) TYPE C,
          L_POPUP_TITLE(30)     TYPE C.
 
*--------------------------------------------------------------------*
*   Parameters and title of popup
*--------------------------------------------------------------------*
    L_POPUP_TITLE = 'Introduce expression or regular expression'(001).
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'LCTABLES'.
    LS_FIELDS-FIELDNAME   = 'INFO02'. "just a char 512 in a table
    LS_FIELDS-VALUE       = '^ *SELECT'.
    LS_FIELDS-FIELDTEXT  = 'Expression'(002).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'MEM_ALLOC'.
    LS_FIELDS-FIELDNAME   = 'RECORD'. "just a char 1024 in a table
    LS_FIELDS-VALUE       = ''.
    LS_FIELDS-FIELDTEXT  = 'Expression to ignore'(007).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'TRDIR'.
    LS_FIELDS-FIELDNAME   = 'NAME'. "
*   LS_FIELDS-VALUE       = '^Z.*'.                 
    LS_FIELDS-FIELDTEXT  = 'Include pattern'(008).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'LTAP'.
    LS_FIELDS-FIELDNAME   = 'ZRSTG'. "just a flag in a table
    LS_FIELDS-VALUE       = 'X'.
    LS_FIELDS-FIELDTEXT  = 'Is a Regex'(003).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'TC10'.
    LS_FIELDS-FIELDNAME   = 'TST01'. "just a flag in a table
    LS_FIELDS-VALUE       = 'X'.
    LS_FIELDS-FIELDTEXT  = 'Delete comments'(004).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'TC10'.
    LS_FIELDS-FIELDNAME   = 'TST02'. "just a flag in a table
    LS_FIELDS-VALUE       = 'X'.
    LS_FIELDS-FIELDTEXT  = 'Condense'(005).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'TC78'.
    LS_FIELDS-FIELDNAME   = 'FLG_EOSP'. "just a flag in a table
    LS_FIELDS-VALUE       = 'X'.
    LS_FIELDS-FIELDTEXT  = 'To upper case'(006).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'TC72'.
    LS_FIELDS-FIELDNAME   = 'FLG_EOSP'. "just a flag in a table
    LS_FIELDS-VALUE       = 'X'.
    LS_FIELDS-FIELDTEXT  = 'Breakpoint'(009).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
 
    CLEAR LS_FIELDS.
    LS_FIELDS-TABNAME     = 'TC76'.
    LS_FIELDS-FIELDNAME   = 'FLG_EOSP'. "just a flag in a table
*    LS_FIELDS-VALUE       = 'X'.
    LS_FIELDS-FIELDTEXT  = 'Trace'(010).
    LS_FIELDS-NOVALUEHLP  = 'X'.
    APPEND LS_FIELDS TO LT_FIELDS.
 
 
    CALL FUNCTION 'POPUP_GET_VALUES'
         EXPORTING POPUP_TITLE    = L_POPUP_TITLE
         IMPORTING RETURNCODE     = L_RETURNCODE
         TABLES    FIELDS         = LT_FIELDS.
 
    IF L_RETURNCODE = 'A'.
*     Кулланучы эшен туктата
      CLEAR TEXT. "Should already be initial.
      RETURN. "Method
    ENDIF.
 
    LOOP AT LT_FIELDS ASSIGNING FIELD-SYMBOL(<FS_FIELD>).
      CASE  <FS_FIELD>-FIELDTEXT.
        WHEN 'Expression'(002).
          TEXT = <FS_FIELD>-VALUE.
        WHEN 'Is a Regex'(003).
          F_ISREGEX = <FS_FIELD>-VALUE.
        WHEN 'Delete comments'(004).
          F_DELETE_COMMENTS = <FS_FIELD>-VALUE.
        WHEN 'Condense'(005).
          F_CONDENSE = <FS_FIELD>-VALUE.
        WHEN 'To upper case'(006).
          F_TO_UPPER_CASE = <FS_FIELD>-VALUE.
        WHEN 'Expression to ignore'(007).
          IGNORE = <FS_FIELD>-VALUE.
        WHEN 'Include pattern'(008).
          INCLUDE_PATTERN = <FS_FIELD>-VALUE.
        WHEN 'Breakpoint'(009).
          F_BREAKPOINT = <FS_FIELD>-VALUE.
        WHEN 'Trace'(010).
          F_TRACE = <FS_FIELD>-VALUE.
      ENDCASE.
    ENDLOOP.
 
 
  ENDMETHOD.                    "init
 
*--------------------------------------------------------------------*
* Check if the current sentence has the required expression (excluding
* the desired expression to ignore).
* If found a hit: break execution (dynamic breakpoint) and write trace
*--------------------------------------------------------------------*
  METHOD SCRIPT.
    DATA: L_NEW_INCLUDE TYPE SYREPID,
          L_LINE TYPE I,
          L_LINESRC LIKE LINE OF T_SOURCE,
          LS_NEW_INCLUDE LIKE LINE OF R_OLD_INCLUDE.
 
    CHECK TEXT IS NOT INITIAL.
 
    TRY.
*--------------------------------------------------------------------*
*       Obtain/read include (with some buffering magic) -> T_SOURCE
*--------------------------------------------------------------------*
        L_NEW_INCLUDE     = ABAP_SOURCE->INCLUDE( ).
 
*       Filter includes
*       ---------------
        IF INCLUDE_PATTERN IS NOT INITIAL.
          FIND REGEX INCLUDE_PATTERN IN L_NEW_INCLUDE.
          IF SY-SUBRC <> 0.
            EXIT. "method
          ENDIF.
        ENDIF.
 
        IF L_NEW_INCLUDE = OLD_INCLUDE.
          ."Do nothing: T_SOURCES already has the source.
        ELSEIF R_OLD_INCLUDE IS INITIAL OR L_NEW_INCLUDE NOT IN R_OLD_INCLUDE. "we need to read the source again.
          CLEAR T_SOURCE[].
          READ REPORT L_NEW_INCLUDE INTO T_SOURCE.
          OLD_INCLUDE = L_NEW_INCLUDE.
          IF T_SOURCE[] IS NOT INITIAL.
            LS_NEW_INCLUDE-OPTION = 'EQ'.
            LS_NEW_INCLUDE-SIGN = 'I'.
            LS_NEW_INCLUDE-LOW = L_NEW_INCLUDE.
            APPEND LS_NEW_INCLUDE TO R_OLD_INCLUDE.
            IF F_DELETE_COMMENTS = ABAP_TRUE.
*             Delete comments
              REPLACE ALL OCCURRENCES OF REGEX '(^\*| *").*' IN TABLE T_SOURCE WITH ''.
            ENDIF.
            APPEND T_SOURCE TO T_SOURCES.
 
          ENDIF.
        ELSE.
          READ TABLE R_OLD_INCLUDE WITH KEY LOW = L_NEW_INCLUDE TRANSPORTING NO FIELDS.
          IF SY-SUBRC EQ 0.
            READ TABLE T_SOURCES INDEX SY-TABIX INTO T_SOURCE.
            OLD_INCLUDE = L_NEW_INCLUDE.
          ENDIF.
        ENDIF.
 
*--------------------------------------------------------------------*
*       Read and check line
*--------------------------------------------------------------------*
        IF T_SOURCE[] IS NOT INITIAL.
          L_LINE    = ABAP_SOURCE->LINE( ).
          L_LINESRC = READ_SENTENCE( L_LINE ).
          IF L_LINESRC IS NOT INITIAL.
            IF F_ISREGEX <> ABAP_TRUE.
              IF L_LINESRC CS TEXT.
                MESSAGE S000(ZSD) WITH L_LINESRC 'contains' TEXT.
*               Check if the sentence should be ignored
*               ---------------------------------------
                IF IGNORE IS NOT INITIAL.
                  IF L_LINESRC CS IGNORE.
                    EXIT. "method
                  ENDIF.
                ENDIF.
*               Break and trace
*               ---------------
                IF F_TRACE = ABAP_TRUE.
                  CALL METHOD TRACE->ADD_SRC_INFO. "Add trace to transaction SAS.
                ENDIF.
                IF F_BREAKPOINT = ABAP_TRUE.
                  ME->BREAK( ).
                ENDIF.
              ENDIF.
            ELSE.
              FIND REGEX TEXT IN L_LINESRC.
              IF SY-SUBRC = 0.
*               Check if the sentence should be ignored
*               ---------------------------------------
                IF IGNORE IS NOT INITIAL.
                  FIND REGEX IGNORE IN L_LINESRC.
                  IF SY-SUBRC EQ 0.
                    EXIT. "method
                  ENDIF.
                ENDIF.
 
*               Break and trace
*               ---------------
                MESSAGE S000(ZSD) WITH L_LINESRC 'contains reg. expr.' TEXT.
                IF F_TRACE = ABAP_TRUE.
                  CALL METHOD TRACE->ADD_SRC_INFO. "Add trace to transaction SAS.
                ENDIF.
                IF F_BREAKPOINT = ABAP_TRUE.
                  ME->BREAK( ).
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
 
        ENDIF.
 
      CATCH CX_SY_READ_SRC_LINE_TOO_LONG.
        . " Do nothing.
      CATCH CX_ROOT  .
        . " Do nothing.
    ENDTRY.
  ENDMETHOD.                    "script
 
  METHOD END.
*** insert your code which shall be executed at the end of the scripting (before trace is saved)
*** here
 
  ENDMETHOD.                    "end
 
*--------------------------------------------------------------------*
* METHOD READ_SENTENCE:
* Reads whole sentence as long as it is not larger than 5000 lines.
* To do so... keeps reading lines until it finds a point that is not in a comment.
*--------------------------------------------------------------------*
  METHOD READ_SENTENCE.
    DATA L_LINESRC LIKE LINE OF T_SOURCE.
    DATA L_LINE TYPE I.
 
    L_LINE = I_LINE.
 
    CLEAR E_LINESRC.
    CHECK T_SOURCE[] IS NOT INITIAL.
 
    READ TABLE T_SOURCE INTO L_LINESRC INDEX L_LINE.
    IF SY-SUBRC EQ 0.
      DO 5000 TIMES. "max 5000 lines per sentence
        CONCATENATE E_LINESRC L_LINESRC INTO E_LINESRC SEPARATED BY SPACE.
        IF F_CONDENSE = ABAP_TRUE.
          CONDENSE E_LINESRC.
        ENDIF.
        IF F_TO_UPPER_CASE = ABAP_TRUE.
          TRANSLATE E_LINESRC TO UPPER CASE.
        ENDIF.
 
*       Check if has a ".".
        FIND '.' IN L_LINESRC-LINE.
        IF SY-SUBRC EQ 0.
          EXIT. "FROM DO LOOP.
        ENDIF.
 
        ADD 1 TO L_LINE.
        READ TABLE T_SOURCE INTO L_LINESRC INDEX L_LINE.
        IF SY-SUBRC <> 0. "If end of code
          EXIT. "FROM DO LOOP.
        ENDIF.
      ENDDO.
    ENDIF.
  ENDMETHOD.
ENDCLASS.                    "lcl_debugger_script IMPLEMENTATION
*</SCRIPT:SCRIPT_CLASS>
 
*</SCRIPT:PERSISTENT>

ZCX_SD_EXCEPTION классы

Куллану мисалы:

    if go_quitt->mv_vlgpla <> go_quitt->mv_vlpla.
 
      try.
          raise exception type zcx_sd_exception message e000(zsd) with 'Склад урыны' go_quitt->mv_vlgpla 'сканер аша керткәне белән туры килми!'.
        catch zcx_sd_exception into go_exception.
          go_quitt->show_exception( io_exception   = go_exception
                                    iv_next_screen = sy-dynnr
                                    iv_type = 'E'                 ).
      endtry.
form show_exception using io_exception type ref to zcx_sd_exception
                          iv_next_screen type sydynnr
                          iv_type type symsgty.
  if iv_type is initial.
    sy-msgty = 'E'.
  else.
    sy-msgty = iv_type.
  endif.
 
  sy-msgid = io_exception->get_msgid( ).
  sy-msgno = io_exception->get_msgno( ).
  sy-msgv1 = io_exception->get_msgv1( ).
  sy-msgv2 = io_exception->get_msgv2( ).
  sy-msgv3 = io_exception->get_msgv3( ).
  sy-msgv4 = io_exception->get_msgv4( ).
  Z_ITS_MDE->show_message( iv_next_screen  ).
endform.
class ZCX_SD_EXCEPTION definition
  public
  inheriting from CX_STATIC_CHECK
  create public .
 
public section.
 
  interfaces IF_T100_DYN_MSG .                                                      
  interfaces IF_T100_MESSAGE .
 
  methods CONSTRUCTOR
    importing
      !TEXTID like TEXTID optional
      !PREVIOUS like PREVIOUS optional
      !IT_OTHER_MSG type BAPIRET2_T optional .
  methods DISPLAY_MSG
    importing
      !IV_TYPE type SYST_MSGTY default 'E'
      !IV_LIKE type SYST_MSGTY default 'E' .
  methods DISPLAY_MSG_LIKE_I .                                                        
  methods GET_MSGTY
    returning                                                                         
      value(R_RET) type SYST_MSGTY .
  methods GET_MSGID
    returning                                                                         
      value(R_RET) type SYST_MSGID .
  methods GET_MSGNO
    returning                                                                         
      value(R_RET) type SYST_MSGNO .
  methods GET_MSGV1
    returning                                                                         
      value(R_RET) type SYST_MSGV .
  methods GET_MSGV2
    returning                                                                         
      value(R_RET) type SYST_MSGV .
  methods GET_MSGV3
    returning                                                                         
      value(R_RET) type SYST_MSGV .
  methods GET_MSGV4
    returning                                                                         
      value(R_RET) type SYST_MSGV .
  methods RERAISE
    raising
      ZCX_SD_EXCEPTION .
  methods GET_OTHER_MSGS
    returning
      value(R_RESULT) type BAPIRET2_T .
protected section.
  private section.
    data t_other_msg type bapiret2_t.
 
ENDCLASS.
 
 
CLASS ZCX_SD_EXCEPTION IMPLEMENTATION.
 
  method constructor ##ADT_SUPPRESS_GENERATION.
    call method super->constructor
      exporting
        textid   = textid
        previous = previous.
 
    t_other_msg = it_other_msg.
  endmethod.
 
 
  method display_msg.
    data(lv_like) = iv_like.
    if lv_like is initial.
      lv_like = get_msgty( ).
    endif.
 
    data(lv_msgty) = iv_type.
    if lv_msgty is initial.
      lv_msgty = get_msgty( ).
    endif.
 
    data(lv_msgid) = get_msgid( ).
    data(lv_msgno) = get_msgno( ).
    data(lv_msgv1) = get_msgv1( ).
    data(lv_msgv2) = get_msgv2( ).
    data(lv_msgv3) = get_msgv3( ).
    data(lv_msgv4) = get_msgv4( ).
 
    if not lv_msgid is initial and not lv_msgty is initial.
      message id lv_msgid
            type lv_msgty
           number lv_msgno
             with lv_msgv1 lv_msgv2 lv_msgv3 lv_msgv4
          display like lv_like.
    endif.
  endmethod.
 
 
  method display_msg_like_i.
    me->display_msg(
        iv_type = 'I'
        iv_like = get_msgty( )
    ).
  endmethod.
 
 
  method get_msgid.
    r_ret = cond #( when if_t100_message~t100key-msgid is not initial then if_t100_message~t100key-msgid else 'ZSD' ).
  endmethod.
 
 
  method get_msgno.
    r_ret = cond #( when if_t100_message~t100key-msgno is not initial or if_t100_message~t100key-msgid is not initial
                    then if_t100_message~t100key-msgno
                    else '556' ). "Хата җибәрү
  endmethod.
 
 
  method get_msgty.
    r_ret = cond #( when if_t100_dyn_msg~msgty is not initial then if_t100_dyn_msg~msgty else 'E' ).
  endmethod.
 
 
  method get_msgv1.
    r_ret = if_t100_dyn_msg~msgv1.
  endmethod.
 
 
  method get_msgv2.
    r_ret = if_t100_dyn_msg~msgv2.
  endmethod.
 
 
  method get_msgv3.
    r_ret = if_t100_dyn_msg~msgv3.
  endmethod.
 
 
  method get_msgv4.
    r_ret = if_t100_dyn_msg~msgv4.
  endmethod.
 
 
  method get_other_msgs.
    r_result = me->t_other_msg.
  endmethod.
 
 
  method reraise.
    data(lv_msgid) = me->get_msgid( ).
    data(lv_msgty) = me->get_msgty( ).
    data(lv_msgno) = me->get_msgno( ).
    data(lv_msgv1) = me->get_msgv1( ).
    data(lv_msgv2) = me->get_msgv2( ).
    data(lv_msgv3) = me->get_msgv3( ).
    data(lv_msgv4) = me->get_msgv4( ).
 
    raise exception type zcx_sd_exception
      message id lv_msgid
      type lv_msgty
      number lv_msgno
      with lv_msgv1 lv_msgv2 lv_msgv3 lv_msgv4.
  endmethod.
ENDCLASS.

Юнит-тестлары

class ltc_simu_tester definition deferred.
class ycl_simu definition local friends ltc_simu_tester.
 
class ltc_simu_tester definition for testing
risk level harmless
duration medium.
 
  private section.
    data: m_cut type ref to ycl_simu.
    methods: setup,
    methods some for testing raising cx_static_check.
 
endclass.
 
class ltc_simu_tester implementation.
 
  method setup.
    " Initialize Class Under Test:
    "-----------------------------
    m_cut = ycl_simu=>factory( ).
 
    " test double injection:
    "-----------------------
*    data(lo_tmp) = new zsd_td_mat_custo( ).
*    lo_tmp->property = 'zsd_cl_snmathandl_standard'.
*    m_cut->o_mat_custo = lo_tmp.
 
  endmethod.
 
  method some.
    test-injection test_select.
      sflight_tab = value  #( ( carrid = 'AA' connid = '17' fldate = '20.10.2020' price = '422.94' currency = 'USD' planetype = '747-400' )
                              ( carrid = 'AA' connid = '17' fldate = '08.01.2021' price = '422.94' currency = 'USD' planetype = '747-400' ) ).
    end-test-injection.
    data(ls_result) = m_cut->select( i_1 = 2 ).
    cl_abap_unit_assert=>assert_equals( exp = '10'            " Data object with expected type
                                        act = ls_result-id ). " Data object with current value 
 
    test-injection test_select.
      sflight_tab = value  #( ( carrid = 'AA' connid = '17' fldate = '20.10.2020' price = '422.94' currency = 'USD' planetype = '747-400' )
                              ( carrid = 'AA' connid = '17' fldate = '08.01.2021' price = '422.94' currency = 'USD' planetype = '747-400' ) ).
    end-test-injection.
    ls_result = m_cut->select( i_1 = 3 ).
    cl_abap_unit_assert=>assert_equals(  exp = '11' act = ls_result-id ).
 
  endmethod.
 
endclass.

method select.
 
  test-seam test_select.
    select *
           from sflight
           where carrid = 'LH'
           into table @data(sflight_tab).
  end-test-seam.
 
  r_ret = 2. " erwartet 10!
 
endmethod.

db02 өчен SQL-сорау җибәрү синтаксисы

Эклипс SQL-консоленә:

    select o~matnr, o~sernr, e~equnr, e~objnr up to 100 rows
      from objk as o
        inner join equi as e on e~equnr = o~equnr
        inner join jest as j on j~objnr = e~objnr
      where o~matnr = '000000000000065035'
        and j~stat  = 'I0184'
        and j~inact = ''
        and o~taser = 'SER03'
        and o~equnr not in (
          select o0~equnr
            from objk as o0
              inner join equi as e0 on e0~equnr = o0~equnr
              inner join jest as j0 on j0~objnr = e0~objnr
            where
              j0~stat <> 'I0184'
              and o0~taser = 'SER03'
              and o0~equnr = o~equnr
              and j0~inact = '') " group by o~matnr, o~sernr, e~equnr, e~objnr  
              order by o~sernr.

DBACOCKPIT өчен

select o.matnr, o.sernr, e.equnr, e.objnr
from objk as o 
inner join equi as e on e.equnr = o.equnr
inner join jest as j on j.objnr = e.objnr
where o.matnr = '000000000000065035' and j.stat = 'I0184'
  and j.inact = ''
  and o.taser = 'SER03'
and o.equnr not in ( select o0.equnr from objk as o0
              inner join equi as e0 on e0.equnr = o0.equnr
              inner join jest as j0 on j0.objnr = e0.objnr
            where
              j0.stat <> 'I0184'
              and o0.taser = 'SER03'
              and o0.matnr = '000000000000065035'
              and o0.equnr = o.equnr
              and j0.inact = '') group by o.matnr, o.sernr /* , e.equnr, e.objnr */
 order by o.sernr limit 100

Кто хочет на новый проект с командировками?

(суммарно эта страница весит 50 мб)

Read the rest of this article

Берничә әйбәт программалар

Получить внешние вызовы ФМ, транзакций и многого другого внутри программы можно с помощью программы — RSINCL00.

Транзакция BIBS — примеры пользовательского интерфейса и кода.

Транзакция DWDM — демо примеры с использованием Enjoy контролов.

Программа ADBC_DEMO — демо программа ADBC API (для подключения к внешним базам данных).

Транзакция SE83 — библиотека примеров с ALV и прочими контролами.

Программа BALVBT01 — демонстрация множественного использования ALV.

Программа SHOWICON — список всех иконок.

Программа SHOWCOLO — все цвета используемые во WRITE или ALV.

Программа SHOWLINE — всевозможные линии во write отчётах.

Программа SHOWSYMB — символы.

Программа AFX_CODE_SCANNER (или RPR_ABAP_SOURCE_SCAN) — поиск в исходных кодах.

Программа RSBDCOS0 — выполнение системных команд на сервере.

Программа REPTRAN — массовая выгрузка исходников.

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить