Advertisement
Guest User

Untitled

a guest
Dec 4th, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 15.83 KB | None | 0 0
  1. &---------------------------------------------------------------------
  2. *& Report  ZLIV_dnote
  3. & Created by    :  Larionova-Cojocaru Inga                            
  4. *& Creation date : 27.09.2019
  5.  
  6. *& Requested by  :  Dorin Blindu
  7. *& Description   :  Ex. Training Task.
  8. &---------------------------------------------------------------------
  9. REPORT  zliv_dnote.
  10. &---------------------------------------------------------------------
  11. *& DATABASE TABLES
  12. &---------------------------------------------------------------------
  13. TABLES: tnapr, nast.
  14.  
  15. ---------------------------------------------------------------------
  16. *       FORM ENTRY
  17. ---------------------------------------------------------------------
  18. FORM entry  USING return_code us_screen.
  19.  
  20.   DATA: lv_retcode TYPE sy-subrc.
  21.   PERFORM processing CHANGING lv_retcode."USING    us_screen
  22.  
  23.   IF lv_retcode NE 0.
  24.     return_code = 1.
  25.   ELSE.
  26.     return_code = 0.
  27.   ENDIF.
  28.  
  29. ENDFORM.                    "ENTRY
  30. &---------------------------------------------------------------------
  31. *&      Form  PROCESSING
  32. &---------------------------------------------------------------------
  33. FORM processing  "USING    us_screen  TYPE c
  34.                  CHANGING cv_retcode TYPE sy-subrc.
  35.   DATA: lv_formname TYPE tdsfname,
  36.         lv_fm_name  TYPE rs38l_fnam.
  37.   DATA: ls_likp     TYPE zliv_likp_s ,
  38.         lt_vbpa     TYPE zliv_vbpa_t,
  39.         lt_lips     TYPE zliv_lips_t,
  40.         ls_t001l    TYPE zliv_t001l_s,
  41.         lt_vekp     TYPE zliv_vekp_t,
  42.         lv_tot_mt   TYPE lgmng,
  43.         lv_lordo    TYPE brgew,
  44.         lv_netto    TYPE tarag_vekp,
  45.         lv_vol      TYPE btvol_vekp,
  46.         lv_bezei    TYPE bezei30,
  47.         lv_maktx    TYPE maktx,
  48.         lv_nr_colli TYPE wgds_integer,
  49.         lt_sped1    TYPE zliv_sped_t,
  50.         lt_sped2    TYPE zliv_sped_t,
  51.         lv_bezei_t  TYPE bezei40.
  52.   lv_formname = tnapr-sform.
  53.   PERFORM select_data CHANGING ls_likp
  54.                                lt_vbpa
  55.                                lt_lips
  56.                                ls_t001l
  57.                                cv_retcode
  58.                                lt_vekp
  59.                                lv_tot_mt
  60.                                lv_lordo
  61.                                lv_netto
  62.                                lv_vol
  63.                                lv_bezei
  64.                                lv_maktx
  65.                                lv_nr_colli
  66.                                lt_sped1
  67.                                lt_sped2
  68.                                lv_bezei_t.
  69.   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  70.     EXPORTING
  71.       formname = lv_formname
  72.     IMPORTING
  73.       fm_name  = lv_fm_name.
  74. *    EXCEPTIONS
  75. *      no_form            = 1
  76. *      no_function_module = 2
  77. *      OTHERS             = 3.
  78.  
  79.   CALL FUNCTION lv_fm_name
  80.     EXPORTING
  81.       is_likp          = ls_likp
  82.       it_vbpa          = lt_vbpa
  83.       it_lips          = lt_lips
  84.       is_t001l         = ls_t001l
  85.       it_vekp          = lt_vekp
  86.       iv_tot_mt        = lv_tot_mt
  87.       iv_lordo         = lv_lordo
  88.       iv_netto         = lv_netto
  89.       iv_vol           = lv_vol
  90.       iv_bezei         = lv_bezei
  91.       iv_maktx         = lv_maktx
  92.       iv_nr_colli      = lv_nr_colli
  93.       it_sped1         = lt_sped1
  94.       it_sped2         = lt_sped2
  95.       iv_bezei_t       = lv_bezei_t
  96.     EXCEPTIONS
  97.       formatting_error = 1
  98.       internal_error   = 2
  99.       send_error       = 3
  100.       user_canceled    = 4
  101.       OTHERS           = 5.
  102.   IF sy-subrc <> 0.
  103.     cv_retcode = sy-subrc.
  104.     PERFORM protocol_update.
  105.   ENDIF.
  106.  
  107. ENDFORM.                    " PROCESSING
  108. **&---------------------------------------------------------------------
  109. *
  110. **&      Form  SELECT_DATA
  111. **&---------------------------------------------------------------------
  112.  
  113. FORM select_data  CHANGING cs_likp     TYPE zliv_likp_s
  114.                            ct_vbpa     TYPE zliv_vbpa_t
  115.                            ct_lips     TYPE zliv_lips_t
  116.                            cs_t001l    TYPE zliv_t001l_s
  117.                            cv_retcode  TYPE sy-subrc
  118.                            ct_vekp     TYPE zliv_vekp_t
  119.                            cv_tot_mt   TYPE lgmng
  120.                            cv_lordo    TYPE brgew
  121.                            cv_netto    TYPE tarag_vekp
  122.                            cv_vol      TYPE btvol_vekp
  123.                            cv_bezei    TYPE bezei30
  124.                            cv_maktx    TYPE maktx
  125.                            cv_nr_colli TYPE wgds_integer
  126.                            ct_sped1    TYPE zliv_sped_t
  127.                            ct_sped2    TYPE zliv_sped_t
  128.                            cv_bezei_t  TYPE bezei40.
  129.   DATA: lt_venum_temp TYPE zliv_venum_t,
  130.         lt_venum      TYPE zliv_venum_t,
  131.         ls_venum      TYPE zliv_venum,
  132.         lt_vekp_temp  TYPE zliv_vekp_t,
  133.         ls_vekp_temp  TYPE zliv_vekp,
  134.         ls_lips       TYPE zliv_lips_s,
  135.         ls_vekp       TYPE zliv_vekp,
  136.         lv_matnr      TYPE bapi1003_key-object,
  137.         ls_venum_temp TYPE zliv_venum,
  138.         lt_tvarvc     TYPE zliv_tvarvc_t,
  139.         ls_tvarvc     TYPE zliv_tvarvc,
  140.         lv_augru      TYPE vbak-augru,
  141.         lt_val_num    TYPE STANDARD TABLE OF bapi1003_alloc_values_num,
  142.         lt_val_char   TYPE STANDARD TABLE OF bapi1003_alloc_values_char,
  143.         lt_val_curr   TYPE STANDARD TABLE OF bapi1003_alloc_values_curr,
  144.         lt_bapiret    TYPE STANDARD TABLE OF bapiret2,
  145.         lt_t001l      TYPE zliv_t001l_t,
  146.         lv_index      TYPE sy-tabix VALUE 0,
  147.         ls_val_num    TYPE bapi1003_alloc_values_num,
  148.         ls_val_char   TYPE bapi1003_alloc_values_char,
  149.         lv_lines      TYPE i,
  150.         lv_atflv      TYPE c LENGTH 6,
  151.         lt_line       TYPE ZLIV_COMPOZ_T,
  152.         ls_line       TYPE ZLIV_COMPOZ,
  153.         lv_string     TYPE string,
  154.         lv_string1    TYPE char4,
  155.         lv_string2    TYPE char4,
  156.         lv_string3    TYPE char4,
  157.         lV_FLOAT      TYPE zliv_dec,
  158.         lt_likp       TYPE zliv_likp_t.
  159.  
  160.   SELECT name low
  161.     FROM tvarvc
  162.     INTO CORRESPONDING FIELDS OF TABLE lt_tvarvc
  163.    WHERE tvarvc~name  = 'Z02_ID'     OR
  164.          tvarvc~name  = 'Z02_LGORT'  OR
  165.          tvarvc~name  = 'Z02_OBJ'    OR
  166.          tvarvc~name  = 'Z02_ORDINE' OR
  167.          tvarvc~name  = 'Z02_SPED1'  OR
  168.          tvarvc~name  = 'Z02_SPED2'.
  169.   SELECT likp~vbeln     kna1~name1
  170.          likp~wadat_ist kna1~stras
  171.          likp~kunag     kna1~land1
  172.          likp~vkorg     kna1~pstlz
  173.          likp~inco1     kna1~ort01
  174.          tvkot~vtext    kna1~regio
  175.       UP TO 1 ROWS
  176.     INTO CORRESPONDING FIELDS OF TABLE lt_likp
  177.     FROM likp
  178.    INNER JOIN nast ON nast~objky  = likp~vbeln
  179.     left JOIN kna1 ON kna1~kunnr  = likp~kunag "AND
  180. *                      kna1~spras  = sy-langu
  181.     LEFT JOIN tvkot ON tvkot~vkorg = likp~vkorg AND
  182.                       tvkot~spras = sy-langu
  183.    WHERE likp~vbeln = nast-objky AND
  184.          nast~vstat = 0
  185.      AND
  186.          likp~wadat_ist <> 0.
  187.   IF sy-subrc <> 0.
  188.     cv_retcode = sy-subrc.
  189.     PERFORM protocol_update.
  190.   ELSE.
  191.     READ TABLE lt_likp INTO cs_likp INDEX 1.
  192.     SELECT SINGLE bezei
  193.       INTO cv_bezei
  194.       FROM tinct
  195.      WHERE tinct~spras = 'I' AND
  196.            tinct~inco1 = cs_likp-inco1.
  197.  
  198.     SELECT vepo~venum
  199.       INTO CORRESPONDING FIELDS OF TABLE lt_venum
  200.       FROM vepo
  201.      WHERE vepo~vbeln = cs_likp-vbeln.
  202.     IF sy-subrc <> 0.
  203.       cv_retcode = sy-subrc.
  204.       PERFORM protocol_update.
  205.     ELSE.
  206.       SELECT vepo~venum vepo~unvel
  207.         INTO CORRESPONDING FIELDS OF TABLE lt_venum_temp
  208.         FROM vepo
  209.          FOR ALL ENTRIES IN lt_venum
  210.        WHERE vepo~unvel = lt_venum-venum.
  211.       IF sy-subrc = 0.
  212.         LOOP AT lt_venum INTO ls_venum.
  213.           READ TABLE lt_venum_temp INTO ls_venum_temp WITH KEY
  214.                                                 unvel = ls_venum-venum.
  215.           MODIFY  lt_venum FROM ls_venum_temp TRANSPORTING venum.
  216.         ENDLOOP.
  217.       ENDIF.
  218.  
  219.       SELECT vekp~venum vekp~laeng vekp~breit
  220.              vekp~gewei vekp~btvol vekp~hoehe
  221.              vekp~meabm vekp~brgew vekp~tarag
  222.              vekp~vhilm vekp~voleh
  223.         INTO CORRESPONDING FIELDS OF TABLE lt_vekp_temp
  224.         FROM vekp
  225.          FOR ALL ENTRIES IN lt_venum
  226.        WHERE vekp~venum = lt_venum-venum.
  227.       READ TABLE lt_vekp_temp INTO ls_vekp_temp INDEX 1.
  228.       SELECT SINGLE maktx
  229.         INTO cv_maktx
  230.         FROM makt
  231.        WHERE makt~matnr = ls_vekp_temp-vhilm AND
  232.              makt~spras = sy-langu.
  233.  
  234.       cv_lordo = 0.
  235.       cv_netto = 0.
  236.       cv_vol = 0.
  237.       LOOP AT lt_vekp_temp INTO ls_vekp.
  238.         cv_lordo = cv_lordo + ls_vekp-brgew.
  239.         cv_netto = cv_netto + ls_vekp-tarag.
  240.         cv_vol   = cv_vol + ls_vekp-btvol.
  241.       ENDLOOP.
  242.       SORT lt_vekp_temp BY laeng breit hoehe.
  243.       READ TABLE lt_vekp_temp INTO ls_vekp_temp INDEX 1.
  244.       LOOP AT lt_vekp_temp INTO ls_vekp.
  245.         IF ls_vekp-laeng = ls_vekp_temp-laeng AND
  246.            ls_vekp-breit = ls_vekp_temp-breit AND
  247.            ls_vekp-hoehe = ls_vekp_temp-hoehe.
  248.           ls_vekp_temp-nr_colli = ls_vekp_temp-nr_colli + 1.
  249.         ELSE.
  250.           ls_vekp-nr_colli = ls_vekp_temp-nr_colli.
  251.           APPEND ls_vekp TO ct_vekp.
  252.           ls_vekp-nr_colli      = 0.
  253.           ls_vekp_temp          = ls_vekp.
  254.           ls_vekp_temp-nr_colli = 0.
  255.         ENDIF.
  256.       ENDLOOP.
  257.       IF ls_vekp-laeng = ls_vekp_temp-laeng AND
  258.         ls_vekp-breit = ls_vekp_temp-breit AND
  259.         ls_vekp-hoehe = ls_vekp_temp-hoehe.
  260.         ls_vekp-nr_colli = ls_vekp_temp-nr_colli.
  261.         APPEND ls_vekp TO ct_vekp.
  262.       ENDIF.
  263.       cv_nr_colli = 0.
  264.       LOOP AT ct_vekp INTO ls_vekp.
  265.         cv_nr_colli = cv_nr_colli + ls_vekp-nr_colli.
  266.        lV_FLOAT = lS_VEKP-LAENG.
  267. lv_STRING1 = lV_FLOAT.
  268. CLEAR: lV_FLOAT.
  269. lV_FLOAT = lS_VEKP-BREIT.
  270. lv_STRING2 = lV_FLOAT.
  271. CLEAR: lV_FLOAT.
  272. lV_FLOAT = lS_VEKP-HOEHE.
  273. lv_STRING3 = lV_FLOAT.
  274. CONCATENATE lv_STRING1 lv_STRING2 lv_STRING3 INTO lV_STRING
  275. SEPARATED BY 'X'.
  276. ls_vekp-string = lV_STRING.
  277. MODIFY ct_vekp FROM ls_vekp TRANSPORTING string.
  278. CLEAR: lv_STRING1, lv_STRING2.
  279.       ENDLOOP.
  280.     ENDIF.
  281.     SORT lt_tvarvc BY name.
  282.     READ TABLE lt_tvarvc INTO ls_tvarvc WITH KEY
  283.                                        name = 'Z02_SPED1' BINARY SEARCH.
  284.     SELECT vbpa~vbeln kna1~name2
  285.            vbpa~parvw kna1~stras
  286.            vbpa~lifnr kna1~pstlz
  287.            kna1~stcd1 kna1~ort01
  288.            kna1~name1
  289.            UP TO 1 ROWS
  290.       INTO CORRESPONDING FIELDS OF TABLE ct_sped1
  291.       FROM vbpa
  292.       JOIN kna1 ON kna1~kunnr = vbpa~kunnr
  293.      WHERE vbpa~vbeln = cs_likp-vbeln AND
  294.            vbpa~parvw = ls_tvarvc-low.
  295.     IF sy-subrc <> 0.
  296.       cv_retcode = sy-subrc.
  297.       PERFORM protocol_update.
  298.     ENDIF.
  299.     SORT lt_tvarvc BY name.
  300.     READ TABLE lt_tvarvc INTO ls_tvarvc WITH KEY
  301.                                        name = 'Z02_SPED2' BINARY SEARCH.
  302.     SELECT vbpa~vbeln lfa1~name2
  303.            vbpa~parvw lfa1~stras
  304.            vbpa~lifnr lfa1~pstlz
  305.            lfa1~stcd1 lfa1~ort01
  306.            lfa1~name1
  307.            UP TO 1 ROWS
  308.       INTO CORRESPONDING FIELDS OF TABLE ct_sped2
  309.       FROM vbpa JOIN lfa1 ON lfa1~lifnr = vbpa~lifnr
  310.      WHERE vbpa~vbeln = cs_likp-vbeln AND
  311.            vbpa~parvw = ls_tvarvc-low.
  312.     IF sy-subrc <> 0.
  313.       cv_retcode = sy-subrc.
  314.       PERFORM protocol_update.
  315.     ENDIF.
  316.     SORT lt_tvarvc BY name.
  317.     READ TABLE lt_tvarvc INTO ls_tvarvc WITH KEY
  318.                                        name = 'Z02_SPED1' BINARY SEARCH.
  319.     SELECT vbpa~vbeln kna1~land1
  320.            vbpa~parvw kna1~pstlz
  321.            vbpa~kunnr kna1~ort01
  322.            kna1~name1 kna1~regio
  323.            kna1~stras
  324.            UP TO 1 ROWS
  325.       INTO CORRESPONDING FIELDS OF TABLE ct_vbpa
  326.       FROM vbpa JOIN kna1 ON kna1~kunnr = vbpa~kunnr
  327.      WHERE vbpa~vbeln = cs_likp-vbeln AND
  328.            vbpa~parvw = ls_tvarvc-low.
  329.     IF sy-subrc <> 0.
  330.       cv_retcode = sy-subrc.
  331.       PERFORM protocol_update.
  332.     ENDIF.
  333.     SELECT SUM( lgmng )
  334.       INTO cv_tot_mt
  335.       FROM lips
  336.      WHERE lips~vbeln = nast-objky AND
  337.            lips~lfimg <> 0 .
  338.  
  339.     SORT lt_tvarvc BY name.
  340.     READ TABLE lt_tvarvc INTO ls_tvarvc WITH KEY
  341.                                        name = 'Z02_LGORT' BINARY SEARCH.
  342.     SELECT lips~vbeln lips~matnr lips~meins
  343.            lips~lgort lips~lgmng lips~kdmat
  344.            lips~werks lips~vgbel vbak~augru
  345.            lips~lfimg lips~vgpos vbak~auart
  346.            lips~spart lips~charg makt~maktx
  347.       INTO CORRESPONDING FIELDS OF TABLE ct_lips
  348.       FROM lips
  349.      INNER JOIN vbak ON vbak~vbeln = lips~vgbel
  350.      INNER JOIN makt ON makt~matnr = lips~matnr
  351.      WHERE lips~vbeln = cs_likp-vbeln AND
  352.            lips~lfimg <> 0            AND
  353.            makt~spras = sy-langu.
  354.  
  355.     READ TABLE ct_lips INTO ls_lips INDEX 1.
  356.     SELECT SINGLE vbak~augru
  357.       INTO lv_augru
  358.       FROM vbak
  359.      WHERE vbak~vbeln = ls_lips-vgbel.
  360.     SELECT SINGLE tvaut~bezei
  361.       INTO cv_bezei_t
  362.       FROM tvaut
  363.      WHERE tvaut~augru = lv_augru AND
  364.            tvaut~spras = sy-langu.
  365.     LOOP AT ct_lips INTO ls_lips.
  366.       lv_matnr = ls_lips-matnr.
  367.       CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
  368.         EXPORTING
  369.           objectkey       = lv_matnr
  370.           objecttable     = 'MARA'
  371.           classnum        = 'Z_MAT_COMPOSITION'
  372.           classtype       = '001'
  373.         TABLES
  374.           allocvaluesnum  = lt_val_num
  375.           allocvalueschar = lt_val_char
  376.           allocvaluescurr = lt_val_curr
  377.           return          = lt_bapiret.
  378.  
  379.       DESCRIBE TABLE lt_val_num LINES lv_lines.
  380.       DO lv_lines TIMES.
  381.         lv_index = lv_index + 1.
  382.         READ TABLE lt_val_num INTO ls_val_num INDEX lv_index.
  383.         CALL FUNCTION 'FLTP_CHAR_CONVERSION'
  384.           EXPORTING
  385.             decim = 2
  386.             expon = 0
  387.             input = ls_val_num-value_from
  388.             ivalu = 'X'
  389.             maskn = ' '
  390.           IMPORTING
  391.             flstr = lv_atflv.
  392.         READ TABLE lt_val_char INTO ls_val_char INDEX lv_index.
  393. *        CONCATENATE lv_atflv '%' INTO lv_text_c.
  394. *        CONCATENATE lv_text_c ls_val_char-value_char
  395. *        INTO lv_text SEPARATED BY space.
  396.        ls_line-VALUE = lv_atflv.
  397.        ls_line-PROCENT = '%'.
  398.        ls_line-tdline = ls_val_char-value_char.
  399.         APPEND ls_line TO lt_line.
  400.         CLEAR ls_line.
  401.       ENDDO.
  402.       ls_lips-line = lt_line.
  403.  MODIFY ct_lips FROM ls_lips TRANSPORTING line.
  404.       CLEAR: lt_line,ls_lips, lv_atflv, lv_index,
  405.              ls_val_num, ls_val_char, lt_val_num, lt_val_char  .
  406.     ENDLOOP.
  407. *---------------------------------------------------------------------
  408.  
  409.     IF sy-subrc <> 0.
  410.       cv_retcode = sy-subrc.
  411.       PERFORM protocol_update.
  412.     ELSE.
  413.  
  414.       SELECT t001l~werks adrc~mc_city1
  415.              t001l~lgort adrc~mc_street
  416.              t001l~lgobe
  417.              UP TO 1 ROWS
  418.         INTO CORRESPONDING FIELDS OF TABLE lt_t001l
  419.         FROM t001l
  420.        INNER JOIN twlad ON twlad~werks = t001l~werks
  421.  
  422.        INNER JOIN adrc ON adrc~addrnumber = twlad~adrnr
  423.          FOR ALL entries IN ct_lips
  424.        WHERE t001l~werks = ct_lips-werks AND
  425.              t001l~lgort = ct_lips-lgort AND
  426.              twlad~lgort = t001l~lgort.
  427.       IF sy-subrc <> 0.
  428.         cv_retcode = sy-subrc.
  429.         PERFORM protocol_update.
  430.       ELSE.
  431.         READ TABLE lt_t001l INTO cs_t001l INDEX 1.
  432.       ENDIF.
  433.     ENDIF.
  434.   ENDIF.
  435.  
  436. ENDFORM.                    " SELECT_DATA
  437. &---------------------------------------------------------------------
  438. *&      Form  PROTOCOL_UPDATE
  439. &---------------------------------------------------------------------
  440. FORM protocol_update .
  441.   CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
  442.     EXPORTING
  443.       msg_arbgb = syst-msgid
  444.       msg_nr    = syst-msgno
  445.       msg_ty    = syst-msgty
  446.       msg_v1    = syst-msgv1
  447.       msg_v2    = syst-msgv2
  448.       msg_v3    = syst-msgv3
  449.       msg_v4    = syst-msgv4.
  450. *    EXCEPTIONS
  451. *      OTHERS    = 1.
  452. ENDFORM.                    " PROTOCOL_UPDATE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement