Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Code

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 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