Advertisement
hxxxrz

Untitled

Aug 13th, 2021
2,820
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 10.73 KB | None | 0 0
  1. **********************************************************************
  2. * Спецификация: ERP.MM314.01. Реализация проверки при создании сбытовой фактуры
  3. * Дата создания: 11.08.2021
  4. * Функциональный консультант: Селиваненко О.
  5. * Разработчик: Федоров К.
  6. *--------------------------------------------------------------------*
  7.   CONSTANTS: lc_program_314 TYPE ztsps_code-prgid VALUE 'ZMM_314',
  8.              lc_variant_314 TYPE ztsps_code-varid VALUE 'DEFAULT'.
  9.  
  10.   DATA: lo_sps_314 TYPE REF TO   zcl_sps_params,
  11.         lv_SWITCH_MM314 TYPE ZSMM_314_ZSPS-SWITCH_MM314,
  12.         lv_AUART TYPE ZSMM_314_ZSPS-AUART,
  13.         lr_CORR_AUART TYPE RANGE OF ZSMM_314_ZSPS-CORR_AUART,
  14.         lv_corr_auart TYPE zsmm_314_zsps-corr_auart,
  15.         lt_isf_text_revo TYPE TABLE OF TLINE,
  16.         lt_isf_text_revn TYPE TABLE OF TLINE,
  17.         lt_isf_text_revd TYPE TABLE OF TLINE.
  18.  
  19.   CREATE OBJECT lo_sps_314
  20.     EXPORTING
  21.       iv_program = lc_program_314
  22.       iv_variant = lc_variant_314.
  23.  
  24.   CALL METHOD lo_sps_314->get
  25.     EXPORTING
  26.       iv_rtabl      = 'ZSMM_314_ZSPS'
  27.       iv_rfeld      = 'SWITCH_MM314'
  28.     IMPORTING
  29.       e_value       = lv_SWITCH_MM314
  30.     EXCEPTIONS
  31.       no_parameter  = 1
  32.       casting_error = 2
  33.     OTHERS          = 3.
  34.  
  35.   IF sy-subrc NE 0.
  36.     CLEAR lv_SWITCH_MM314.
  37.   ENDIF.
  38.  
  39.   IF lv_switch_mm314 = 'X'.
  40.     CALL METHOD lo_sps_314->get
  41.       EXPORTING
  42.         iv_rtabl      = 'ZSMM_314_ZSPS'
  43.         iv_rfeld      = 'AUART'
  44.       IMPORTING
  45.         e_value       = lv_AUART
  46.       EXCEPTIONS
  47.         no_parameter  = 1
  48.         casting_error = 2
  49.       OTHERS          = 3.
  50.  
  51.     IF sy-subrc NE 0.
  52.       CLEAR lv_AUART.
  53.     ENDIF.
  54.  
  55.     CALL METHOD lo_sps_314->get
  56.       EXPORTING
  57.         iv_rtabl      = 'ZSMM_314_ZSPS'
  58.         iv_rfeld      = 'CORR_AUART'
  59.       IMPORTING
  60.         e_value       = lr_CORR_AUART
  61.       EXCEPTIONS
  62.         no_parameter  = 1
  63.         casting_error = 2
  64.       OTHERS          = 3.
  65.  
  66.     IF sy-subrc NE 0.
  67.       CLEAR lr_CORR_AUART.
  68.     ENDIF.
  69.  
  70.     CALL FUNCTION 'READ_TEXT'
  71.       EXPORTING
  72.         ID = 'REVO'
  73.         LANGUAGE = 'R'
  74.         NAME = CONV TDOBNAME( VBRK-VBELN )
  75.         OBJECT = 'VBBK'
  76.       TABLES
  77.         LINES = lt_isf_text_revo
  78.       EXCEPTIONS
  79.         OTHERS   = 8.
  80.  
  81.     CALL FUNCTION 'READ_TEXT'
  82.       EXPORTING
  83.         ID = 'REVN'
  84.         LANGUAGE = 'R'
  85.         NAME = CONV TDOBNAME( VBRK-VBELN )
  86.         OBJECT = 'VBBK'
  87.       TABLES
  88.         LINES = lt_isf_text_revn
  89.       EXCEPTIONS
  90.         OTHERS   = 8.
  91.  
  92.     CALL FUNCTION 'READ_TEXT'
  93.       EXPORTING
  94.         ID = 'REVD'
  95.         LANGUAGE = 'R'
  96.         NAME = CONV TDOBNAME( VBRK-VBELN )
  97.         OBJECT = 'VBBK'
  98.       TABLES
  99.         LINES = lt_isf_text_revd
  100.       EXCEPTIONS
  101.         OTHERS   = 8.
  102.  
  103.     IF ( vbrk-fkart = lv_auart ) AND ( VBRK-ZBLDAT IS NOT INITIAL ).
  104.  
  105.       SELECT SINGLE WADAT_IST
  106.         INTO @DATA(lv_wadat_ist)
  107.         FROM likp
  108.         WHERE VBELN = @xKOMFK-VBELN.
  109.  
  110.       IF sy-subrc <> 0.
  111.         MESSAGE 'wadat_ist не существует в таблице бд likp при VBELN = @xKOMFK-VBELN' TYPE 'I'.
  112.         RETURN.
  113.       ENDIF.
  114.  
  115.       IF VBRK-ZBLDAT < lv_wadat_ist.
  116.         MESSAGE e003(ZMM_314) WITH VBRK-zbldat lv_wadat_ist.
  117.         "Красное сообщение
  118.         "Дата фактуры &1 находится в прошлом относительно Даты отгрузки &2», где &1 – VBRK-ZBLDAT или VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  119.       ENDIF.
  120.  
  121.       IF ( + VBRK-ZBLDAT ) > ( lv_wadat_ist + 5 ).
  122.         IF ( lt_isf_text_revo IS INITIAL ) AND ( lt_isf_text_revn IS INITIAL ) AND ( lt_isf_text_revd IS INITIAL ).
  123.           MESSAGE e001(ZMM_314) WITH lv_wadat_ist.
  124.           "Красное сообщение
  125.           "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  126.         ELSE.
  127.           MESSAGE w001(ZMM_314) WITH lv_wadat_ist.
  128.           "Желтое сообщение
  129.           "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  130.         ENDIF.
  131.       ENDIF.
  132.  
  133.       IF ( VBRK-zbldat > lv_wadat_ist ) AND ( ( + vbrk-zbldat ) <= ( lv_wadat_ist + 5 ) ).
  134.         MESSAGE w002(ZMM_314) WITH VBRK-zbldat lv_wadat_ist.
  135.         "Желтое сообщение
  136.         "Дата СФ &1 отлична от Даты отгрузки &2», где &1 - VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  137.       ENDIF.
  138.     ELSEIF ( vbrk-fkart = lv_auart ) AND ( VBRK-ZBLDAT IS INITIAL ).
  139.       IF VBRK-FKDAT < lv_wadat_ist.
  140.         MESSAGE e003(ZMM_314) WITH VBRK-fkdat lv_wadat_ist.
  141.         "Красное сообщение
  142.         "Дата фактуры &1 находится в прошлом относительно Даты отгрузки &2», где &1 – VBRK-ZBLDAT или VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  143.       ENDIF.
  144.  
  145.       IF ( + VBRK-fkdat ) > ( lv_wadat_ist + 5 ).
  146.         IF ( lt_isf_text_revo IS INITIAL ) AND ( lt_isf_text_revn IS INITIAL ) AND ( lt_isf_text_revd IS INITIAL ).
  147.           MESSAGE e001(ZMM_314) WITH lv_wadat_ist.
  148.           "Красное сообщение
  149.           "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  150.         ELSE.
  151.           MESSAGE w001(ZMM_314) WITH lv_wadat_ist.
  152.           "Желтое сообщение
  153.           "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  154.         ENDIF.
  155.       ENDIF.
  156.  
  157.       IF ( VBRK-fkdat > lv_wadat_ist ) AND ( ( + vbrk-fkdat ) <= ( lv_wadat_ist + 5 ) ).
  158.         MESSAGE w002(ZMM_314) WITH VBRK-fkdat lv_wadat_ist.
  159.         "Желтое сообщение
  160.         "Дата СФ &1 отлична от Даты отгрузки &2», где &1 - VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  161.       ENDIF.
  162.     ENDIF.
  163.  
  164.     LOOP AT lr_corr_auart ASSIGNING FIELD-SYMBOL(<ls_corr_auart>).
  165.       IF <ls_corr_auart>-low = vbrk-fkart.
  166.         lv_corr_auart = <ls_corr_auart>-low.
  167.       ENDIF.
  168.     ENDLOOP.
  169.  
  170.     IF vbrk-fkart = lv_corr_auart.
  171.  
  172.       IF ( xKOMFK-VBTYP = 'C' ) OR ( xKOMFK-VBTYP = 'H' ).
  173.         SELECT SINGLE vbeln
  174.           INTO @DATA(lv_vbeln)
  175.           FROM vbfa
  176.           WHERE vbelv = @xkomfk-vbeln AND ( vbtyp_n = 'J' OR vbtyp_n = 'T' ).
  177.  
  178.         IF sy-subrc <> 0.
  179.           MESSAGE 'vbeln не существует в таблице бд vbfa при vbelv = @xkomfk-vbeln AND ( vbtyp_n = J OR vbtyp_n = T )' TYPE 'I'.
  180.           RETURN.
  181.         ENDIF.
  182.  
  183.         SELECT SINGLE wadat_ist
  184.           INTO @lv_wadat_ist
  185.           FROM likp
  186. *          WHERE vbeln = @vbfa-vbeln.
  187.           WHERE vbeln = @lv_vbeln.
  188.  
  189.         IF sy-subrc <> 0.
  190.           MESSAGE 'wadat_ist не существует в таблице бд likp при vbeln = @lv_vbeln' TYPE 'I'.
  191.           RETURN.
  192.         ENDIF.
  193.       ELSEIF ( xKOMFK-VBTYP = 'K' ) OR ( xKOMFK-VBTYP = 'L' ).
  194.         SELECT SINGLE vbelv
  195.           INTO @DATA(lv_vbelv)
  196.           FROM vbfa
  197.           WHERE vbeln = @xkomfk-vbeln AND vbtyp_v  = 'J'.
  198.  
  199.         IF sy-subrc <> 0.
  200.           MESSAGE 'vbelv не существует в таблице бд vbfa при vbeln = @xkomfk-vbeln AND vbtyp_n = J' TYPE 'I'.
  201.           RETURN.
  202.         ENDIF.
  203.  
  204.         SELECT SINGLE wadat_ist
  205.           INTO @lv_wadat_ist
  206.           FROM likp
  207. *          WHERE vbeln = @vbfa-vbelv.
  208.           WHERE vbeln = @lv_vbelv.
  209.  
  210.         IF sy-subrc <> 0.
  211.           MESSAGE 'wadat_ist не существует в таблице бд likp при vbeln = @lv_vbelv' TYPE 'I'.
  212.           RETURN.
  213.         ENDIF.
  214.       ENDIF.
  215.       IF VBRK-zbldat IS NOT INITIAL.
  216.         IF VBRK-zbldat < lv_wadat_ist.
  217.           MESSAGE e003(ZMM_314) WITH VBRK-zbldat lv_wadat_ist.
  218.           "Красное сообщение
  219.           "Дата фактуры &1 находится в прошлом относительно Даты отгрузки &2», где &1 – VBRK-ZBLDAT или VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  220.         ENDIF.
  221.  
  222.         IF ( + VBRK-zbldat ) > ( lv_wadat_ist + 5 ).
  223.           IF ( xKOMFK-VBTYP = 'C' ) OR ( xKOMFK-VBTYP = 'H' ).
  224.             MESSAGE e001(ZMM_314) WITH lv_wadat_ist.
  225.             "Красное сообщение
  226.             "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  227.           ELSEIF ( xKOMFK-VBTYP = 'K' ) OR ( xKOMFK-VBTYP = 'L' ).
  228.             MESSAGE w001(ZMM_314) WITH lv_wadat_ist.
  229.             "Желтое сообщение
  230.             "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  231.           ENDIF.
  232.         ENDIF.
  233.  
  234.         IF ( VBRK-zbldat > lv_wadat_ist ) AND ( ( + vbrk-zbldat ) <= ( lv_wadat_ist + 5 ) ).
  235.           MESSAGE w002(ZMM_314) WITH VBRK-zbldat lv_wadat_ist.
  236.           "Желтое сообщение
  237.           "Дата СФ &1 отлична от Даты отгрузки &2», где &1 – VBRK-ZBLAD или VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  238.         ENDIF.
  239.       ELSEIF VBRK-zbldat IS INITIAL.
  240.         IF VBRK-fkdat < lv_wadat_ist.
  241.           MESSAGE e003(ZMM_314) WITH VBRK-fkdat lv_wadat_ist.
  242.           "Красное сообщение
  243.           "Дата фактуры &1 находится в прошлом относительно Даты отгрузки &2», где &1 – VBRK-ZBLDAT или VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  244.         ENDIF.
  245.  
  246.         IF ( + VBRK-fkdat ) > ( lv_wadat_ist + 5 ).
  247.           IF ( xKOMFK-VBTYP = 'C' ) OR ( xKOMFK-VBTYP = 'H' ).
  248.             MESSAGE e001(ZMM_314) WITH lv_wadat_ist.
  249.             "Красное сообщение
  250.             "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  251.           ELSEIF ( xKOMFK-VBTYP = 'K' ) OR ( xKOMFK-VBTYP = 'L' ).
  252.             MESSAGE w001(ZMM_314) WITH lv_wadat_ist.
  253.             "Желтое сообщение
  254.             "СФ создается более, чем через 5 дней после Даты отгрузки &1», где &1 - LIKP- WADAT_IST
  255.           ENDIF.
  256.         ENDIF.
  257.  
  258.         IF ( VBRK-fkdat > lv_wadat_ist ) AND ( ( + vbrk-fkdat ) <= ( lv_wadat_ist + 5 ) ).
  259.           MESSAGE w002(ZMM_314) WITH VBRK-fkdat lv_wadat_ist.
  260.           "Желтое сообщение
  261.           "Дата СФ &1 отлична от Даты отгрузки &2», где &1 – VBRK-ZBLAD или VBRK-FKDAT, а &2 - LIKP- WADAT_IST
  262.         ENDIF.
  263.       ENDIF.
  264.     ENDIF.
  265.   ENDIF.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement