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

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

* 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"

Access only one AD group to Revit Server (port 808)

Ревитның File -> Open” тәрәзәсендәге “Revit чилтәре” сул яктагы менюсына бассаң Ревит сәрвәрләре чыга.
Алар C:\ProgramData\Autodesk\Revit Server 2023\Config\rsn.ini файлыннан алына.

Бирелгән Ревит серверына бер генә Active Directory (урысча “Служба каталогов” дип атала) группасына рөхсәт калдырыр өчен, без серверда:

– “Адаптер прослушивателя Windows Communication Foundation Net.TCP (TCP-In)” дигән кагыйдәсендә “Хәвеф-хәтәрсез тоташтыруларга гына рөхсәт итү” дигән күчергечне сайлыйбыз да

– мәҗбүри авторлаштыру, ләкин шифрлаусыз дип куябыз:

– кирәк AD-группасын сайлап өстибез:

– хәвеф-хәтәрсез тоташтыру кагыйдәсе өстибез (мәҗбүри авторлаштыру)

– серверның IPSec параметрлары:

Хәр бер кулланучы санагына (AD-сәясәте аша) менә мондый хәвеф-хәтәрсез тоташтыру кагыйдәсе өстәлгән булырга тиеш:

Файдалынучы санакның IPSec сыйфатлары:

IIS:
Бу кагыйдәне алып ташлыйбыз:

Аноним керүен сүндерәбез дә hәм аның урынына йола буенча/Basic -авторлаштыруны hәм Windows-авторлаштыруны кабызабыз:

Кирәк AD-группасын язабыз:

NB: Касперский яки икенче антивирусның “Чилтәр сакчы” сервис сүндерүнең кирәге юк.

P.S. Кулланучыларга AD-сәясәтен gpmc аша җайлаштырырга була (wfw-файл).

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>

Упражнения при защемлении локтевого нерва (кубитальный канал)

Синдром кубитального канала — это состояние, при котором ущемляется локтевой нерв на уровне локтевого сустава. В этом месте он проходит через узкое пространство, образованное связкой, костью и мышцами и наиболее часто подвержен повреждению.

Консервативное лечение направлено на снятие напряжения мышц и, как следствие, уменьшение давления в канале. Программа упражнений специально подобрана для самостоятельной разработки мышц шеи, плеча и предплечья.

Перед началом лечения рекомендую согласовать данную программу с лечащим врачом или опытным реабилитологом. Будет полезным пройти 2-3 сеанса массажа у опытного массажиста для расслабления мышц и сухожилий, через которые проходит нерв.

Одежда должна быть свободной, обувь желательно снять. Все упражнения (особенно первые дни) выполнять плавно и постепенно. Помните важный принцип: «Слабую боль терпи, сильную — не допускай».

Делайте эти упражнения ежедневно, не менее 2 недель.

Активный поворот шеи

Сидя на стуле, держите спину и шею прямо. Сначала медленно поверните голову вправо, движение должно быть плавным — до ощущения боли в мышцах, а затем вернитесь в исходное положение. Расслабьтесь и повторите движение в другую сторону. Повторить 10 раз в каждую сторону.

Активный боковой наклон шеи

Сидя на стуле, держите спину и шею прямо. Медленно наклоните голову в сторону таким образом, чтобы ваше правое ухо максимально приблизилось к правому плечу, движение должно быть плавным – до ощущения боли в мышцах, а затем вернитесь в исходное положение. Расслабьтесь и повторите движение в другую сторону. Следите, чтобы во время выполнения упражнения вы не крутили головой и не поднимали плечо. Повторите это упражнение 10 раз в каждом направлении.

Активное сгибание шеи

Сидя на стуле, держите спину и шею прямо. Плавно согните голову вперед, стараясь дотронуться подбородком к груди, и удерживайте достигнутое положение 5 секунд. Повторить 10 раз.

Активное разгибание шеи

Сидя на стуле, держите спину и шею прямо. Медленно откиньте голову назад, чтобы подбородок смотрел максимально вверх. Затем вернитесь в исходное положение. Важно во время упражнения сидеть с прямой спиной. Повторить 10 раз.

Вращение плеч

Поднимите плечи вверх и удерживайте 5 секунд. Сожмите лопатки вместе и подержите 5 секунд. Затем потяните лопатки вниз, как бы пытаясь уложить руки в задние карманы брюк, и тоже удерживайте 5 секунд. Повторить 10 раз каждое действие.

Сведение лопаток

Сидя или стоя, руки по бокам. Сожмите лопатки максимально друг к другу и удерживайте 5 секунд. 2 подхода по 15 повторений

Стрекоза

Лягте на живот, положив маленькую подушку под грудь. Разведите руки в стороны, локти прямо, а большой палец по направлению к потолку. Медленно поднимите руки к потолку, напрягите плечи и плавно их опустите. 2 подхода по 15 повторений. Для увеличения эффективности упражнения, можно брать в руки небольшие веса.

Сгибание и разгибание «усиленное»

Аккуратно надавите здоровой рукой на пальцы поврежденной руки с тыльной стороны, чтобы усилить сгибание в запястье. Удерживайте 15-30 секунд. Затем разогните кисть, и осторожно нажмите на пальцы в обратном направлении, чтобы усилить разгибание. Удерживайте также 15-30 секунд. 3 повторения в каждую сторону.

Прямой угол

Пальцы разрабатываемой руки согните под прямым углом (как на фото). Удерживайте 10 секунд. Повторить 5 раз.

Сжатие пальцами

Постарайтесь на протяжении всего дня сжимать между пальцев мелкие предметы: ручки, листы бумаги, кухонные губки и т.д. Сжав предмет, удерживайте его в течение 10 секунд. Повторять по 5 раз для каждого пальца разрабатываемой руки.

Сжатие (укрепление)

Сожмите мягкий резиновый шар и удерживайте сжатие 5 секунд. 2 подхода по 15 повторений.

Упражнения при эпикондилите (локоть теннисиста)

Локоть теннисиста – это заболевание, которое развивается вследствие чрезмерных нагрузок на сухожилия мышц предплечья и воспаление мест крепления их к наружной поверхности локтя. Сопровождается болью при движении, особенно с нагрузкой.

Эти простые упражнения на растяжение мышц руки помогут излечить теннисный локоть и убрать боль.

Одежда должна быть свободной, обувь желательно снять. Все упражнения (особенно первые дни) выполнять плавно и постепенно. Помните важный принцип: «Слабую боль терпи, сильную — не допускай».

Минимальное количество дней выполнения упражнений – 14

Упражнения на растяжку

Сгибание и разгибание

– Сгибание
Осторожно согните запястья вперед. Удерживайте 5 секунд. 2 подхода по 15 повторений.
– Разгибание
Аккуратно разогните запястье назад. Удерживайте 5 секунд. 2 подхода по 15 повторений.

Сгибание и разгибание «усиленное»

Аккуратно надавите здоровой рукой на пальцы поврежденной руки с тыльной стороны, чтобы усилить сгибание в запястье. Удерживайте 15-30 секунд. Затем разогните кисть, и осторожно нажмите на пальцы в обратном направлении, чтобы усилить разгибание. Удерживайте также 15-30 секунд. 3 повторения в каждую сторону.

Супинация и пронация

Согните локоть под 90 градусов и прижмите к телу. Поверните предплечье ладонью вверх, удерживайте 15 секунд. Затем плавно и аккуратно разверните ладонь вниз и тоже удерживайте 15 секунд. Во время упражнения локоть должен быть прижат к телу. 2 подхода по 15 повторений.

Активный локоть

Аккуратно поднесите ладонь разрабатываемой руки к плечу, согнув локоть на столько, на сколько сможете. Затем максимально разогните локоть. 2 подхода по 15 повторений.

Выполняйте упражнения на растяжку пока боль не притупится и рука не привыкнет к нагрузкам.

Упражнения на укрепление

Эксцентричное разгибание

Возьмите небольшой груз (например бутылочку с водой) в разрабатываемую руку ладонью вверх. Здоровой рукой согните запястье, затем медленно отпустите его используя только разрабатываемую руку, чтобы вернуть ее в исходное положение. 3 подхода по 15 повторений. Постепенно увеличивайте вес груза.

Эксцентричное сгибание

Возьмите небольшой груз (например бутылочку с водой) в разрабатываемую руку ладонью вниз. Здоровой рукой разогните запястье вверх, затем медленно отпустите его используя только разрабатываемую руку, чтобы вернуть запястье в исходное положение. 3 подхода по 15 повторений. Постепенно увеличивайте вес груза.

Лучевое сгибание (укрепление)

Возьмите небольшой груз в руку и поверните кисть большим пальцев вверх. Аккуратно согните запястье к верху (к потолку), затем медленно вернитесь в исходное положение. Старайтесь держать предплечье неподвижным. 2 подхода по 15 повторений.

Супинация и пронация (укрепление)

Возьмите небольшой груз или молоток в руку, согните локоть под 90 градусов и прижмите к телу. Медленно и плавно поверните руку ладонь вверх, затем вниз. Во время упражнения локоть должен быть прижат к телу 2 подхода по 15 повторений.

Скрутка запястья

Встаньте прямо и возьмите палочку обеими руками. Держите руки на уровне плеч, ладонями вниз. Затем максимально скрутите палочку согнув кисть в запястье. 2 подхода по 15 повторений.

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.

Лечебная гимнастика при грыже – 12 упражнений для спины

Предлагаем вам комплекс, разработанный специалистами ЛФК в Московском центре реабилитации больных и инвалидов на базе городской клинической больницы № 10.

Упражнения необходимо выполнять лежа, делая более щадящие движения – с меньшей амплитудой или меньшей продолжительностью с больной стороны. Заниматься лучше в одно и то же время, 25–30 минут, делая промежутки для отдыха между упражнениями.

1. Исходное положение: лежа на спине. Поставьте согнутые в локтях руки около грудной клетки. Выгните грудь, делая как бы полумостик, задержитесь в таком положении, опуститесь в исходное положение, расслабьтесь. Оптимальное число повторений – 7–8 раз.

2. Исходное положение: лежа на спине. Согните ноги в коленях, руки вдоль тела. Медленно поднимайте таз вверх, сжимая ягодицы, задержитесь в таком положении, напрягая мышцы спины и поясницы, опуститесь. Оптимальное число повторений – 6–7 раз.

3. Исходное положение: лежа на спине. Ноги выпрямлены, вытянутые руки лежат на полу. Напрягая мышцы спины, попробуйте на несколько сантиметров подняться над полом, опираясь на ладони и плечи. Повторите 3–4 раза.

4. Исходное положение: лежа на спине. Руки за головой. Одно колено согните, подтяните к груди, распрямите, опустите. Повторите упражнение каждой ногой по 6–7 раз.

5. Исходное положение: лежа на спине. Поднимите левую руку и левую ногу одновременно вверх, задержите в воздухе на 8 секунд, опустите. То же проделайте с правой рукой и ногой. Повторите 6–7 раз.

6. Исходное положение: лежа на спине. Руки и ноги выпрямлены. Поднимите вверх одну ногу прямую, другую – согнутую в колене. Задержите на 10–20 секунд. Медленно опустите и повторите упражнение, поменяв согнутую и прямую ноги. Повторите 7–8 раз.

7. Исходное положение: лежа на животе. Ладони рук, согнутых в локтях, прижмите к ушам, верхнюю половину тела приподнимите вверх, задержитесь, опуститесь в исходное положение. Повторите 5–6 раз.

8. Исходное положение: лежа на животе. Ладонями рук, согнутых в локтях, упритесь в пол на уровне грудной клетки. Верхнюю часть тела поднимите вверх, прогнитесь. Опуститесь. Повторите 7–8 раз.

9. Исходное положение: лежа на животе. Руки в стороны, расслаблены, ноги согнуты в коленях. Поболтайте ногами.

10. Встаньте на четвереньки, ладони на ширине плеч, смотрят внутрь. Потянитесь тазом назад, опускаясь на пол, затем сделайте движение вперед, как если бы пришлось подлезать под низенький забор, почти проскользить по полу грудью, выпрямитесь. Повторить 8–10 раз.

11. Стоя на четвереньках, «походите» локтями по полу вперед и назад. Спина ровная.

12. Стоя на четвереньках, коленями перемещайтесь по полу вправо и влево. Повторите 4–6 раз.

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert