Advertisement
ignatov

Untitled

Feb 16th, 2022
5,009
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 5.36 KB | None | 0 0
  1. DATA: distrimodel     LIKE bdi_model OCCURS 0 WITH HEADER LINE,
  2.         change_pointers LIKE STANDARD TABLE OF bdcp,
  3.         change_pointer  LIKE bdcp,
  4.         lt_cp           TYPE TABLE OF bdicpident,
  5.         lv_subty        TYPE p0021-subty,
  6.         lt_0021         TYPE TABLE OF  p0021,
  7.         it_data         TYPE TABLE OF edidd,
  8.         it_data1        TYPE TABLE OF edidd,
  9.         ls_idoc_body    TYPE z1i0021,
  10.         ls_data         TYPE edidd,
  11.         lt_comm_idoc    LIKE edidc OCCURS 0 WITH HEADER LINE,
  12.         s_ctrl_rec      LIKE edidc.
  13.  
  14.   CONSTANTS: lc_message_type TYPE bdcps-mestype  VALUE 'ZFAMILY'.
  15.  
  16.   CALL FUNCTION 'CHANGE_POINTERS_READ'
  17.     EXPORTING
  18.       message_type                = lc_message_type
  19.       read_not_processed_pointers = 'X'
  20.     TABLES
  21.       change_pointers             = change_pointers
  22.     EXCEPTIONS
  23.       error_in_date_interval      = 1
  24.       error_in_time_interval      = 2
  25.       OTHERS                      = 3.
  26.   IF sy-subrc <> 0.
  27.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  28.             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  29.   ENDIF.
  30.  
  31.   LOOP AT change_pointers INTO change_pointer.
  32.  
  33.     IF change_pointer-cretime+0(8) <= sy-datum.
  34.  
  35.       DATA(lv_pernr) = change_pointer-tabkey+1(8).
  36.       DATA(lv_infty) = change_pointer-tabkey+9(4).
  37.       DATA(lv_strlen) = strlen( change_pointer-tabkey ).
  38.  
  39.       IF lv_strlen = 30.
  40.         lv_subty = change_pointer-tabkey+13(1).
  41.         DATA(lv_begda) = change_pointer-tabkey+14(8).
  42.         DATA(lv_endda) = change_pointer-tabkey+22(8).
  43.       ELSE.
  44.         lv_subty = change_pointer-tabkey+13(2).
  45.         lv_begda = change_pointer-tabkey+15(8).
  46.         lv_endda = change_pointer-tabkey+23(8).
  47.       ENDIF.
  48.  
  49.       ls_data-segnam = 'Z1I0021'.
  50.       ls_data-mandt  = sy-mandt.
  51.  
  52.       CALL FUNCTION 'HR_READ_INFOTYPE'
  53.         EXPORTING
  54.           tclas     = 'A'
  55.           pernr     = CONV prelp-pernr( lv_pernr )
  56.           infty     = CONV prelp-infty( lv_infty )
  57.           begda     = CONV prelp-begda( lv_begda )
  58.           endda     = CONV prelp-endda( lv_endda )
  59.         TABLES
  60.           infty_tab = lt_0021.
  61.  
  62.       IF lt_0021 IS NOT INITIAL.
  63.  
  64.         READ TABLE lt_0021 ASSIGNING FIELD-SYMBOL(<fs_0021>) WITH KEY subty = lv_subty.
  65.  
  66.         IF <fs_0021> IS ASSIGNED.
  67.           ls_idoc_body-pernr = <fs_0021>-pernr.
  68.           ls_idoc_body-begda = <fs_0021>-begda.
  69.           ls_idoc_body-endda = <fs_0021>-endda.
  70.           ls_idoc_body-rel_type = <fs_0021>-subty.
  71.           ls_idoc_body-dob = <fs_0021>-fgbdt.
  72.           ls_idoc_body-first_name = <fs_0021>-favor.
  73.           ls_idoc_body-last_name = <fs_0021>-fanam.
  74.           ls_idoc_body-gender_key = <fs_0021>-fasex.
  75.           ls_data-docnum  = change_pointer-cpident.
  76.           ls_data-sdata  = ls_idoc_body.
  77.           APPEND ls_data TO it_data.
  78.         ELSE.
  79.           IF change_pointer-cdchgid EQ 'D'.
  80.             ls_idoc_body-pernr = <fs_0021>-pernr.
  81.             ls_idoc_body-begda = <fs_0021>-begda.
  82.             ls_idoc_body-endda = <fs_0021>-endda.
  83.             ls_idoc_body-rel_type = <fs_0021>-subty.
  84.             ls_data-sdata  = ls_idoc_body.
  85.             ls_data-docnum  = change_pointer-cpident.
  86.             APPEND ls_data TO it_data.
  87.           ENDIF.
  88.         ENDIF.
  89.       ELSE.
  90.         ls_idoc_body-pernr = lv_pernr.
  91.         ls_idoc_body-begda = lv_begda.
  92.         ls_idoc_body-endda = lv_endda.
  93.         ls_idoc_body-rel_type = lv_subty.
  94.         ls_data-sdata  = ls_idoc_body.
  95.         ls_data-docnum  = change_pointer-cpident.
  96.         APPEND ls_data TO it_data.
  97.       ENDIF.
  98.  
  99.     ELSE.
  100.       ls_idoc_body-pernr = lv_pernr.
  101.       ls_idoc_body-begda = lv_begda.
  102.       ls_idoc_body-endda = lv_endda.
  103.       ls_idoc_body-rel_type = lv_subty.
  104.       ls_data-sdata  = ls_idoc_body.
  105.       ls_data-docnum  = change_pointer-cpident.
  106.       APPEND ls_data TO it_data.
  107.     ENDIF.
  108.  
  109.     CALL FUNCTION 'ALE_MODEL_INFO_GET'
  110.       EXPORTING
  111.         message_type = lc_message_type
  112.       TABLES
  113.         model_data   = distrimodel
  114.       EXCEPTIONS
  115.         OTHERS       = 0.
  116.  
  117.     IF distrimodel IS NOT INITIAL.
  118.  
  119.       s_ctrl_rec-mestyp = 'ZFAMILY' .  "Message type
  120.       s_ctrl_rec-idoctp = 'ZHR_IT0021'. "Basic IDOC type
  121.       s_ctrl_rec-rcvprt = 'LS'. "Partner type of receiver
  122.       s_ctrl_rec-rcvprn = 'IDECLNT810'. "Part
  123.  
  124.  
  125.       CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
  126.         EXPORTING
  127.           master_idoc_control            = s_ctrl_rec "rec_control  " Control record of master IDoc
  128.         TABLES
  129.           communication_idoc_control     = lt_comm_idoc "it_control " Control records of created comm. IDocs
  130.           master_idoc_data               = it_data " Data records of master IDoc
  131.         EXCEPTIONS
  132.           error_in_idoc_control          = 1
  133.           error_writing_idoc_status      = 2
  134.           error_in_idoc_data             = 3
  135.           sending_logical_system_unknown = 4
  136.           OTHERS                         = 5.
  137.       IF sy-subrc <> 0.
  138.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  139.                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  140.       ELSE.
  141.         CLEAR lt_cp.
  142.  
  143.         APPEND VALUE #( cpident = change_pointer-cpident ) TO lt_cp.
  144.  
  145.         CALL FUNCTION 'CHANGE_POINTERS_STATUS_WRITE'
  146.           EXPORTING
  147.             message_type           = 'ZFAMILY'
  148.           TABLES
  149.             change_pointers_idents = lt_cp.
  150.       ENDIF.
  151.  
  152.     ENDIF.
  153.   ENDLOOP.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement