0% found this document useful (0 votes)
169 views5 pages

Code

This document contains ABAP code for validating purchase order data. It defines variables and data types for purchase order fields. It retrieves variant configuration data and checks if purchase order fields match the configuration. It also checks if purchase order item tax codes match configured rules and existing contract terms. Validation errors are displayed if fields do not pass the checks.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
169 views5 pages

Code

This document contains ABAP code for validating purchase order data. It defines variables and data types for purchase order fields. It retrieves variant configuration data and checks if purchase order fields match the configuration. It also checks if purchase order item tax codes match configured rules and existing contract terms. Validation errors are displayed if fields do not pass the checks.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

CONSTANTS: cc_user TYPE rvari_vnam VALUE 'ZMM_VAT_DETERMINATION_USER', "

ABAP: Name of Variant Variable


cc_bukrs TYPE rvari_vnam VALUE 'ZFI_COMPANY_CODE_BRAZIL'. "
ABAP: Name of Variant Variable

TYPES:
BEGIN OF tvarv_type,
name TYPE rvari_vnam, " ABAP: Name of Variant Variable
sign TYPE tvarv_sign, " ABAP: ID: I/E (include/exclude values)
opti TYPE tvarv_opti, " ABAP: Selection option (EQ/BT/CP/...)
low TYPE tvarv_val, " ABAP/4: Selection value (LOW or HIGH value,
external format)
high TYPE tvarv_val, " ABAP/4: Selection value (LOW or HIGH value,
external format)
END OF tvarv_type.

DATA: lw_tvarv TYPE TABLE OF tvarv_type,


ls_tvarv TYPE tvarv_type.

DATA: r_bukrs TYPE RANGE OF ekko-bukrs, " Company Code


ls_bukrs LIKE LINE OF r_bukrs. " Receiver company code

SELECT name sign opti low high FROM tvarvc " Table of Variant Variables
(Client-Specific)
INTO TABLE lw_tvarv
WHERE ( name = cc_user OR name = cc_bukrs )
AND type = 'S'.

IF sy-subrc IS INITIAL.
READ TABLE lw_tvarv INTO ls_tvarv
WITH KEY name = cc_bukrs.

IF sy-subrc IS INITIAL.
REFRESH: r_bukrs.
CLEAR: ls_bukrs.

ls_bukrs-sign = ls_tvarv-sign.
ls_bukrs-option = ls_tvarv-opti.
ls_bukrs-low = ls_tvarv-low.
ls_bukrs-high = ls_tvarv-high.
APPEND ls_bukrs TO r_bukrs.

IF i_ekko-bukrs IN r_bukrs.
READ TABLE lw_tvarv INTO ls_tvarv
WITH KEY name = cc_user
low = sy-uname.

IF sy-subrc IS INITIAL. "Antes de ir para PRD remover para cima at o


comentrio.

TYPES: BEGIN OF iva_type,


mtuse TYPE zzmtuse,
mwskz TYPE mwskz, " Tax on sales/purchases
code
incide_piscofins TYPE char1, " Piscofins of type CHAR1
fornec_equiparado TYPE char1, " Equiparado of type
CHAR1
incide_ipi TYPE char1, " Ipi of type CHAR1
incide_icms TYPE char1, " Icms of type CHAR1
operacao_intraestado TYPE char1, " Intraestado of type
CHAR1
pertence_grup50 TYPE char1, " Grup50 of type CHAR1
fornec_optante_simples TYPE char1, " Optante_simples of type
CHAR1
END OF iva_type.

DATA: ls_ekko_func TYPE zstr_mm_ekko_iva, "


ls_ekpo_func TYPE zstr_mm_ekpo_iva, "
ls_ekpo TYPE zstr_mm_ekpo_iva, "
ls_ekpo_contr TYPE ekpo, " Purchasing Document Item
ls_iva TYPE iva_type.

DATA: lw_ekpo TYPE TABLE OF zstr_mm_ekpo_iva, "


lw_ekpo_contr TYPE TABLE OF ekpo, " Purchasing Document Item
lw_iva TYPE TABLE OF iva_type.

IF sy-tcode EQ 'ME21N' OR sy-tcode EQ 'ME22N' OR sy-tcode EQ 'ME23N'


OR
sy-tcode EQ 'ME29N' OR sy-tcode EQ 'ME51N' OR sy-tcode EQ 'ME52N'
OR
sy-tcode EQ 'ME53N' OR sy-tcode EQ 'ME54N'.

LOOP AT tekpo.
MOVE-CORRESPONDING tekpo TO ls_ekpo.
APPEND ls_ekpo TO lw_ekpo.
ENDLOOP. " LOOP AT tekpo

* Verifica se o IVA escolhido est na lista sugerida.


MOVE-CORRESPONDING i_ekko TO ls_ekko_func.

LOOP AT lw_ekpo INTO ls_ekpo_func.


CALL FUNCTION 'ZF_MM_DETERMINA_IVAS'
EXPORTING
i_ekko = ls_ekko_func
i_ekpo = ls_ekpo_func
TABLES
t_iva = lw_iva.

IF NOT lw_iva[] IS INITIAL.


READ TABLE lw_iva INTO ls_iva
WITH KEY mwskz = ls_ekpo_func-mwskz.

IF NOT sy-subrc IS INITIAL.


"Cdigo IVA item & escolhido diferente da lista sugerida. Opo Invlida.
MESSAGE e307(zmm_specif) WITH ls_ekpo_func-ebelp.
ENDIF. " IF NOT sy-subrc IS INITIAL
ENDIF. " IF NOT lw_iva[] IS INITIAL
ENDLOOP. " LOOP AT lw_ekpo INTO ls_ekpo_func

* Verifica se o IVA do Item do Pedido e do Contrato so iguais.


DELETE lw_ekpo WHERE konnr IS INITIAL.

IF NOT lw_ekpo[] IS INITIAL.


SELECT * FROM ekpo " Purchasing Document Item
INTO TABLE lw_ekpo_contr
FOR ALL ENTRIES IN lw_ekpo
WHERE ebeln = lw_ekpo-konnr AND
matnr = lw_ekpo-matnr.

IF sy-subrc IS INITIAL.
DELETE lw_ekpo_contr WHERE loekz = 'L'.
SORT lw_ekpo_contr BY ebeln matnr.

LOOP AT lw_ekpo INTO ls_ekpo_func.


READ TABLE lw_ekpo_contr INTO ls_ekpo_contr
WITH KEY ebeln = ls_ekpo_func-konnr
matnr = ls_ekpo_func-matnr
BINARY SEARCH.

IF sy-subrc IS INITIAL.
IF ls_ekpo_contr-mwskz <> ls_ekpo_func-mwskz.
"Cdigo IVA do item & diferente do Contrato. No permitida alterao.
MESSAGE e306(zmm_specif) WITH ls_ekpo_func-ebelp.
ENDIF. " IF ls_ekpo_contr-mwskz <> ls_ekpo_func-mwskz
ENDIF. " IF sy-subrc IS INITIAL
ENDLOOP. " LOOP AT lw_ekpo INTO ls_ekpo_func
ENDIF. " IF sy-subrc IS INITIAL
ENDIF. " IF NOT lw_ekpo[] IS INITIAL
ENDIF. " IF sy-tcode EQ 'ME21N' OR sy-tcode EQ 'ME22N' OR sy-tcode EQ
'ME23N' OR

ENDIF. " IF sy-subrc IS INITIAL


ENDIF. " IF i_ekko-bukrs IN r_bukrs
ENDIF. " IF sy-subrc IS INITIAL
ENDIF. " IF sy-subrc IS INITIAL
* Fim - x_tanaka (Accenture) - 30/07/2017 - Determinao de IVA

TABLES: zbc_spec_rules. " Specification rules table


TYPES: BEGIN OF ty_ekpo,
ebeln TYPE ekpo-ebeln, " Purchasing Document Number
ebelp TYPE ekpo-ebelp, " Item Number of Purchasing Document
END OF ty_ekpo.
TYPES: BEGIN OF ty_t001k,
bukrs TYPE t001k-bukrs, " Company Code
END OF ty_t001k.
DATA: lv_ind(2) TYPE n. " Ind(2) of type Numeric Text Fields
DATA: lv_char(25) TYPE c. " Char(25) of type Character
DATA: lv_ebeln TYPE ekko-ebeln. " Purchasing Document Number
DATA: lv_bukrs TYPE t001k-bukrs, " Company Code
lr_evart TYPE RANGE OF evart. " Agreement Type
DATA: lt_ekpo TYPE STANDARD TABLE OF ty_ekpo,
lwa_ekpo TYPE ty_ekpo.
DATA: lt_t001k TYPE STANDARD TABLE OF ty_t001k,
lwa_t001k TYPE ty_t001k,
lr_t001k TYPE RANGE OF bukrs, " Company Code
lwa_r_t001k LIKE LINE OF lr_t001k.
DATA: lwa_evart LIKE LINE OF lr_evart.
DATA : lwa_lfb1 TYPE lfb1. " Vendor Master (Company Code)
FIELD-SYMBOLS: <f1>.

SELECT SINGLE *
FROM zbc_spec_rules " Specification rules table
WHERE zzmodule = 'MM'
AND zzobj_name = 'ME31K'
AND zzsfc_spec = '2-2.05.01.01-0745'
AND zzrule = 'ZMM_GROUP_CONTRACT'.
DO 12 TIMES.
lv_ind = sy-index.
CONCATENATE 'ZBC_SPEC_RULES-ZZPARAM' lv_ind
INTO lv_char.
ASSIGN (lv_char) TO <f1>.
CHECK <f1> IS NOT INITIAL.
lwa_evart-sign = 'I'.
lwa_evart-option = 'EQ'.
lwa_evart-low = <f1>.
APPEND lwa_evart TO lr_evart.
ENDDO.
IF i_ekko-bsart NOT IN lr_evart.
IF tekpo[] IS NOT INITIAL.
SELECT bukrs " Company Code
INTO TABLE lt_t001k
FROM t001k " Valuation area
FOR ALL ENTRIES IN tekpo
WHERE bwkey = tekpo-werks.
LOOP AT lt_t001k INTO lwa_t001k.
CLEAR lwa_r_t001k.
lwa_r_t001k-sign = 'I'.
lwa_r_t001k-option = 'EQ'.
lwa_r_t001k-low = lwa_t001k-bukrs.
APPEND lwa_r_t001k TO lr_t001k.
ENDLOOP. " LOOP AT lt_t001k INTO lwa_t001k
ENDIF. " IF tekpo[] IS NOT INITIAL
IF tekpo[] IS NOT INITIAL.
SELECT ebeln ebelp
INTO CORRESPONDING FIELDS OF TABLE lt_ekpo
FROM ekpo " Purchasing Document Item
FOR ALL ENTRIES IN tekpo
WHERE matnr = tekpo-matnr
AND zzkdatb <= i_ekko-kdatb
AND zzkdate >= i_ekko-kdatb
AND bukrs IN lr_t001k
AND loekz = ''.
ENDIF. " IF tekpo[] IS NOT INITIAL
CLEAR lv_ebeln.
IF lt_ekpo[] IS NOT INITIAL.
SELECT ebeln UP TO 1 ROWS
INTO lv_ebeln
FROM ekko " Purchasing Document Header
FOR ALL ENTRIES IN lt_ekpo
WHERE ebeln = lt_ekpo-ebeln
AND bsart IN lr_evart.
ENDSELECT.
ENDIF. " IF lt_ekpo[] IS NOT INITIAL
IF lv_ebeln IS NOT INITIAL.
MESSAGE e104(zmm_specif) WITH lv_ebeln. " Group contract & already
existing
ENDIF. " IF lv_ebeln IS NOT INITIAL
ENDIF. " IF i_ekko-bsart NOT IN lr_evart

IF NOT i_ekko-lifnr IS INITIAL.


CLEAR lwa_lfb1.
SELECT SINGLE *
FROM lfb1 " Vendor Master (Company Code)
INTO lwa_lfb1
WHERE lifnr = i_ekko-lifnr
AND bukrs = i_ekko-bukrs.
IF sy-subrc NE 0.
mmpur_message 'E' 'M8' '632' i_ekko-lifnr i_ekko-bukrs '' ''.
ENDIF. " IF sy-subrc NE 0
ENDIF. " IF NOT i_ekko-lifnr IS INITIAL
BREAK-POINT 'X_PDHAWAN'.
IF sy-uname = 'X_PDHAWAN'.
DATA:it_bekpo TYPE STANDARD TABLE OF bekpo WITH HEADER LINE , " Transfer
Structure Items for Purchasing Documents
lv_lines TYPE i. " Lines of type Integers
IF sy-tcode = 'ME21N' OR sy-tcode = 'ME22N'.
MOVE-CORRESPONDING ekpo to it_bekpo.
* it_bekpo[] = ekpo[].
SORT it_bekpo BY werks.
DELETE ADJACENT DUPLICATES FROM it_bekpo COMPARING werks.
DESCRIBE TABLE it_bekpo LINES lv_lines.
IF lv_lines > 1.
MESSAGE 'Can not be created using different plant code' TYPE 'E'.
ENDIF. " IF lv_lines > 1
ENDIF. " IF sy-tcode = 'ME21N' OR sy-tcode = 'ME22N'
ENDIF. " IF sy-uname = 'X_PDHAWAN'

You might also like