Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

RFC logic

Former Member
0 Likes
649

Guys,

following is the code in one of the subroutine in an RFC.I need to add the logic in the current flow.

logic:

1 If company = c750

select * from ztable where company = input_buf-company

customer = input_buf-customer

If the customer is registersd in ztable i need to chech if the

material in the purchase order has Div (Q/L) if yes then only the PO is created else the PO is not

created.

2. If the customer is not registerd in the ztable the current logic shd. work .

Please guide me looking at the code where exactly the logic is to be inserted.

Guys,

following is the code in one of the subroutine in an RFC.I need to add the logic in the current flow.

logic:

1 If company = c750

select * from ztable where company = input_buf-company

customer = input_buf-customer

If the customer is registersd in ztable i need to chech if the

material in the purchase order has Div (Q/L) if yes then only the PO is created else the PO is not

created.

2. If the customer is not registerd in the ztable the current logic shd. work .

Please guide me looking at the code where exactly the logic is to be inserted.

2 REPLIES 2
Read only

Former Member
0 Likes
580

cudnt understand anything....

Read only

0 Likes
580

current logic is as follows:

FORM po_verify_rtn.

TABLES: mard.

DATA: BEGIN OF in_buf OCCURS 10,

company(4),

customer(10),

ship_to(10),

po_date(8),

customer_po_number(15),

po_line_no(5),

material(18),

quantity(6),

folio_no(6), "for SEM

language(1),

po_type(4),

ship_method(2).

DATA: END OF in_buf.

DATA: BEGIN OF out_buf OCCURS 10,

return_flag(1),

po_date(8),

ship_to(10),

customer_po_number(15),

po_line_no(5),

po_material(18),

so_material(18),

description(40),

quantity(6),

sales_price(11),

sales_amount(11),

stock_yn(1),

remark(55),

so_no(10),

folio_no(6), "for SEM

dna_sna(10),

etd(8),

*>>>> START OF INSERTION BY GSPN <<<<

currency(3),

po_type(4),

atp(10),

*>>>> END OF INSERTION BY GSPN <<<<

END OF out_buf.

DATA: BEGIN OF temp_itab OCCURS 10,

material(18),

folio_no(6).

DATA: END OF temp_itab.

DATA: error_cnt(4) TYPE n,

temp_value(8) TYPE p DECIMALS 2,

temp_price(8) TYPE p DECIMALS 2,

temp_company(4),

temp_customer LIKE knvv-kunnr,

country_code LIKE zmst0-aland,

seca_rate LIKE zmst0-std_exch_rate,

cust_group LIKE knvv-kdgrp,

temp_etd LIKE sy-datum,

temp_atp_qty(7),

open_po_qty(7) TYPE p,

gr_qty(7) TYPE p,

credit_limit(11) TYPE p DECIMALS 2,

payment_due(11) TYPE p DECIMALS 2,

check_require_dup(1),

check_all_cnt TYPE i,

check_dup_cnt TYPE i,

temp_plant LIKE zmst0-werks,

orig_parts LIKE mara-matnr,

alt_parts LIKE mara-matnr,

alt_change_yn(1),

l_atp(7) TYPE p,

temp_atp_qty1(7) TYPE p,

temp_po_qty(7) TYPE p,

temp_lgort LIKE zmst0-lgort.

CLEAR in_buf. REFRESH in_buf.

CLEAR out_buf. REFRESH out_buf.

*

LOOP AT input_buf.

MOVE input_buf TO in_buf.

  • MAPPING CUSTOMER FOR SALES ORDER - 2007.07.03 SH.JUNG

CLEAR zsb2b_user_map.

SELECT SINGLE * FROM zsb2b_user_map

WHERE

company = in_buf-company

AND customer = in_buf-customer.

IF sy-subrc = 0.

MOVE zsb2b_user_map-po_customer TO temp_customer.

MOVE zsb2b_user_map-po_company TO temp_company.

ELSE.

MOVE in_buf-company TO temp_company.

MOVE in_buf-customer TO temp_customer.

ENDIF.

TRANSLATE in_buf-customer_po_number TO UPPER CASE.

TRANSLATE in_buf-folio_no TO UPPER CASE.

IF in_buf-folio_no NE space.

check_require_dup = 'Y'.

ENDIF.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = in_buf-ship_to

IMPORTING

output = in_buf-ship_to.

  • TEMP BY SH.JUNG

  • IF TEMP_COMPANY = 'C750'.

  • TEMP_COMPANY = 'C710'.

  • ENDIF.

  • TEMP BY SH.JUNG

APPEND in_buf.

ENDLOOP.

CLEAR zmst0.

CLEAR: temp_lgort, temp_plant.

SELECT SINGLE * FROM zmst0 WHERE bukrs = temp_company.

MOVE zmst0-aland TO country_code. "for Decimal Point

MOVE zmst0-std_exch_rate TO seca_rate. "for SECA Customer

  • Add by sh.jung. 20060801. storage location.

MOVE zmst0-lgort TO temp_lgort. "for sales location

MOVE zmst0-werks TO temp_plant.

IF temp_company = 'C310' OR temp_company = 'C330'.

CLEAR: knvv, cust_group.

SELECT SINGLE kdgrp INTO cust_group FROM knvv

WHERE kunnr = temp_customer

AND vkorg = 'S31A'

AND vtweg = '11'

AND spart = 'B'.

ENDIF.

LOOP AT in_buf.

IF sy-tabix = 1.

CLEAR zsb2b_user_mast.

  • SELECT SINGLE * FROM ZSB2B_USER_MAST

  • WHERE COMPANY = IN_BUF-COMPANY

  • AND CUSTOMER = IN_BUF-CUSTOMER.

SELECT SINGLE * FROM zsb2b_user_mast

WHERE company = temp_company

AND customer = temp_customer.

IF in_buf-company = 'C330'.

MOVE 'US99' TO temp_plant.

ELSE.

MOVE zsb2b_user_mast-werks TO temp_plant.

ENDIF.

*

CLEAR: order_header_in,

order_partners.

REFRESH: order_partners.

*

order_header_in-doc_type = zsb2b_user_mast-auart.

    • INSERT GSPN BY KJH 2006.02.13

IF order_header_in-doc_type EQ space.

order_header_in-doc_type = in_buf-po_type.

ENDIF.

    • END OF INSERT BY KJH

order_header_in-sales_org = zsb2b_user_mast-vkorg.

order_header_in-distr_chan = '11'.

order_header_in-division = 'B'.

TRANSLATE in_buf-customer_po_number TO UPPER CASE.

order_header_in-purch_no = in_buf-customer_po_number.

order_header_in-purch_date = in_buf-po_date.

  • IF IN_BUF-COMPANY = 'C310' OR IN_BUF-COMPANY = 'C330'.

  • IF CUST_GROUP = '90' OR CUST_GROUP = '92' OR CUST_GROUP = '93'

.

  • ORDER_HEADER_IN-DLV_BLOCK = '91'. "SVC:irregular S/O

  • ENDIF.

  • ENDIF.

*

  • IF IN_BUF-COMPANY = 'C390' AND ZSB2B_USER_MAST-AUART = 'YSTD'.

  • ORDER_HEADER_IN-DLV_BLOCK = '01'. "Checking for Cash Receipt

  • ENDIF.

IF in_buf-company = 'C710'. "GCS

IF in_buf-ship_method <> space. "Shipping Method

order_header_in-ship_cond = in_buf-ship_method.

ENDIF.

ENDIF.

*

order_partners-partn_role = 'AG'.

order_partners-partn_numb = in_buf-customer.

APPEND order_partners.

order_partners-partn_role = 'WE'.

order_partners-partn_numb = in_buf-ship_to.

APPEND order_partners.

ENDIF.

*

CLEAR: salesdocument,

sold_to_party,

ship_to_party,

billing_party,

return,

order_items_in,

order_items_out,

order_schedule_ex,

order_incomplete,

messagetable.

  • ORDER_CONDITION_EX. "for SEDA

REFRESH: order_items_in,

order_items_out,

order_schedule_ex,

order_incomplete,

messagetable.

  • ORDER_CONDITION_EX. "for SEDA

order_items_in-po_itm_no = in_buf-po_line_no.

TRANSLATE in_buf-material TO UPPER CASE.

order_items_in-material = in_buf-material.

order_items_in-req_qty = in_buf-quantity * 1000.

order_items_in-purch_no_c = in_buf-folio_no. "for SEM

  • Set the Storage Location Code for SSA, GCS.

order_items_in-store_loc = temp_lgort.

order_items_in-plant = temp_plant.

  • IF IN_BUF-COMPANY = 'C710' OR IN_BUF-COMPANY = 'C720'.

  • ORDER_ITEMS_IN-STORE_LOC = 'L010'.

  • ENDIF.

APPEND order_items_in.

*

CALL FUNCTION 'BAPI_SALESORDER_SIMULATE'

EXPORTING

order_header_in = order_header_in

IMPORTING

salesdocument = salesdocument

sold_to_party = sold_to_party

ship_to_party = ship_to_party

billing_party = billing_party

return = return

TABLES

order_items_in = order_items_in

order_partners = order_partners

order_items_out = order_items_out

order_schedule_ex = order_schedule_ex

order_incomplete = order_incomplete

messagetable = messagetable.

  • ORDER_CONDITION_EX = ORDER_CONDITION_EX. "for SEDA

CLEAR out_buf.

MOVE-CORRESPONDING in_buf TO out_buf.

CLEAR order_items_out.

READ TABLE order_items_out INDEX 1.

IF sy-subrc = 0.

MOVE order_items_out-mat_entrd TO out_buf-po_material.

MOVE order_items_out-material TO out_buf-so_material.

MOVE '0' TO out_buf-return_flag.

IF in_buf-language = 'P'.

MOVE 'Sucesso !!' TO out_buf-remark.

ELSEIF in_buf-language = 'S'.

MOVE 'Exitoso' TO out_buf-remark.

ELSEIF in_buf-language = 'F'.

MOVE 'Succes' TO out_buf-remark.

ELSE.

MOVE 'Success' TO out_buf-remark.

ENDIF.

  • Q DIVISION SPECIFICATION DO NOT DISPLAY - START- 2005.06.01 SHYEO

CLEAR mara.

SELECT SINGLE * FROM mara WHERE matnr = out_buf-so_material.

*

IF mara-spart = 'Q'.

SPLIT order_items_out-short_text AT ';'

INTO out_buf-description temp_maktx .

ELSE.

MOVE order_items_out-short_text TO out_buf-description.

ENDIF.

  • Q DIVISION SPECIFICATION DO NOT DISPLAY - END- 2005.06.01 SHYEO

  • MOVE ORDER_ITEMS_OUT-SHORT_TEXT TO OUT_BUF-DESCRIPTION.

ELSE.

MOVE in_buf-material TO out_buf-po_material.

MOVE in_buf-material TO out_buf-so_material.

MOVE 'Z' TO out_buf-return_flag.

IF in_buf-language = 'P'.

MOVE 'Favor checar os dados !!' TO out_buf-remark.

MOVE 'Favor checar os dados !!' TO out_buf-description.

ELSEIF in_buf-language = 'S'.

MOVE 'Favor de checar dato!!' TO out_buf-remark.

MOVE 'Favor de checar dato!!' TO out_buf-description.

ELSEIF in_buf-language = 'F'.

MOVE 'S''il vous plait, verifiez vos donnees!!'

TO out_buf-remark.

MOVE 'S''il vous plait, verifiez vos donnees!!'

TO out_buf-description.

ELSE.

MOVE 'Please check data !!' TO out_buf-remark.

MOVE 'Please check data !!' TO out_buf-description.

ENDIF.

ENDIF.

*

temp_price = order_items_out-net_value1 /

order_items_out-req_qty.

MOVE order_items_out-net_value1 TO temp_value.

*

"SET COUNTRY COUNTRY_CODE. "for Decimal Point

WRITE temp_price TO out_buf-sales_price NO-GROUPING.

WRITE temp_value TO out_buf-sales_amount NO-GROUPING.

"SET COUNTRY SPACE.

*>>>> START OF INSERTION BY GSPN <<<<

out_buf-currency = order_items_out-currency.

CLEAR mara.

SELECT SINGLE mstav INTO mara-mstav FROM mara

WHERE matnr = in_buf-material

AND mstav IN ('D', 'E', 'S').

IF sy-subrc = 0.

CLEAR tvmst.

SELECT SINGLE * FROM tvmst WHERE spras = 'E'

AND vmsta = mara-mstav.

MOVE tvmst-vmstb TO out_buf-dna_sna.

ENDIF.

*// DNA parts cannot be ordered.

IF mara-mstav <> space.

out_buf-return_flag = '2'.

  • OUT_BUF-REMARK = 'Part is not available - please remove.'.

  • change desc. 2006.02.07 by sh.jung

out_buf-remark = 'Part cannot be supplied, please check for alt.

parts.'.

ENDIF.

*// Maximum order quantity.

IF esvc_company = 'C710' AND in_buf-quantity > 200.

  • 2008.10.10. SEONG1.LEE, for SETK customers

  • out_buf-return_flag = '2'.

  • out_buf-remark = 'Maximum order quantity is 200 '.

CLEAR: KNA1.

SELECT SINGLE * FROM KNA1 WHERE KUNNR EQ temp_customer.

IF KNA1-LAND1 EQ 'TR'. "Turkey

ELSE.

out_buf-return_flag = '2'.

out_buf-remark = 'Maximum order quantity is 200 '.

ENDIF.

  • 2008.10.10. SEONG1.LEE, for SETK customers

ENDIF.

    • INSERT GSPN BY KJH IN 2006.02.03

CLEAR zmst0.

  • SELECT SINGLE * FROM ZMST0 WHERE BUKRS = IN_BUF-COMPANY.

SELECT SINGLE * FROM zmst0 WHERE bukrs = temp_company.

CLEAR mard-labst.

SELECT SINGLE labst INTO mard-labst FROM mard

WHERE matnr EQ in_buf-material

AND werks EQ zmst0-werks

AND lgort EQ zmst0-lgort.

CLEAR l_atp.

l_atp = mard-labst.

out_buf-atp = l_atp.

    • END OF INSERT

*>>>> END OF INSERTION BY GSPN <<<<

*

CLEAR order_schedule_ex.

READ TABLE order_schedule_ex INDEX 1.

IF order_schedule_ex-confir_qty > 0.

MOVE 'Y' TO out_buf-stock_yn.

ELSE.

MOVE 'N' TO out_buf-stock_yn.

*>>>> START OF DELETION BY GSPN <<<<<

  • CLEAR MARA.

  • SELECT SINGLE MSTAV INTO MARA-MSTAV FROM MARA

  • WHERE MATNR = IN_BUF-MATERIAL

  • AND MSTAV IN ('D', 'E', 'S').

  • IF SY-SUBRC = 0.

  • CLEAR TVMST.

  • SELECT SINGLE * FROM TVMST WHERE SPRAS = 'E'

  • AND VMSTA = MARA-MSTAV.

  • MOVE TVMST-VMSTB TO OUT_BUF-DNA_SNA.

    • DNA/SNA & Available Stock = 0 -> Error: for SEA/SECA/SEASA

  • ELSE. " Select E.T.D.

*>>>> END OF DELETION BY GSPN <<<<<<<

*>>>> START OF INSERTION BY GSPN <<<<

IF mara-mstav = space.

*>>>> END OF INSERTION BY GSPN <<<<

  • Start of E.T.D. Select ------------------------------------*

DO 1 TIMES. " Start of Selecting E.T.D.

CLEAR: temp_atp_qty, temp_etd. "A.T.P. Check

CALL FUNCTION 'Z_ATP_CHECK'

EXPORTING

material = out_buf-so_material

werks = order_items_out-plant

IMPORTING

atp = temp_atp_qty.

IF temp_atp_qty > 0.

temp_etd = sy-datum + 1. "D+1 Days

MOVE temp_etd TO out_buf-etd.

EXIT.

ENDIF.

CLEAR : zvkopo, ekbe, ekes, open_po_qty.

SELECT menge ebeln ebelp bedat "In-transit Check

INTO (zvkopo-menge ,zvkopo-ebeln ,zvkopo-ebelp,

zvkopo-bedat)

FROM zvkopo

WHERE matnr = out_buf-so_material

AND werks = order_items_out-plant

AND bstyp = 'F'

AND loekz = ' '

AND elikz = ' '

ORDER BY bedat DESCENDING.

IF sy-subrc = 0.

MOVE zvkopo-menge TO open_po_qty.

ENDIF.

IF out_buf-etd NE space.

EXIT.

ENDIF.

CLEAR gr_qty.

SELECT * FROM ekbe

WHERE ebeln = zvkopo-ebeln

AND ebelp = zvkopo-ebelp

AND bewtp = 'E'

AND bwart IN ('101' ,'102').

IF ekbe-bwart = '101' OR ekbe-bwart = '103'.

ADD ekbe-menge TO gr_qty.

ELSEIF ekbe-bwart = '102' OR ekbe-bwart = '104'.

gr_qty = gr_qty - ekbe-menge.

ENDIF.

ENDSELECT.

open_po_qty = open_po_qty - gr_qty. "P/O QTY - G/R QTY

IF open_po_qty > 0.

CLEAR: ekes, temp_etd.

SELECT * FROM ekes

WHERE ebeln = zvkopo-ebeln

AND ebelp = zvkopo-ebelp

AND ebtyp = 'LA'

ORDER BY eindt DESCENDING.

IF sy-subrc = 0 AND ekes-dabmg < ekes-menge

AND ekes-eindt <> '00000000'.

temp_etd = ekes-eindt + 15. "D+15 Days

IF temp_etd <= sy-datum.

temp_etd = sy-datum + 1.

ENDIF.

MOVE temp_etd TO out_buf-etd.

EXIT.

ENDIF.

ENDSELECT.

ENDIF.

ENDSELECT.

ENDDO. " End of Selecting E.T.D.

IF out_buf-etd EQ space.

MOVE '00000000' TO out_buf-etd.

ENDIF.

  • End of E.T.D. Select ------------------------------------*

ENDIF.

ENDIF.

  • Start of Checking Credit Limit Problems -------------------*

IF out_buf-stock_yn = 'N'.

IF in_buf-company = 'C710'.

CLEAR: knkk, credit_limit, payment_due.

  • SELECT SINGLE KLIMK SKFOR CTLPC INTO

  • (CREDIT_LIMIT, PAYMENT_DUE, KNKK-CTLPC) FROM KNKK

  • WHERE KUNNR = IN_BUF-CUSTOMER

  • AND KKBER = IN_BUF-COMPANY.

SELECT SINGLE klimk skfor ctlpc INTO

(credit_limit, payment_due, knkk-ctlpc) FROM knkk

WHERE kunnr = temp_customer

AND kkber = temp_company.

IF sy-subrc = 0 AND

( knkk-ctlpc = '009' OR knkk-ctlpc = '010' ).

IF credit_limit < payment_due.

IF in_buf-language = 'P'.

MOVE 'Excedeu Lim. Cred. ou Duplic. em Aberto'

TO out_buf-description.

ELSE.

MOVE 'Exceed the Credit Limit !!!!!!'

TO out_buf-description.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

  • End of Checking Credit Limit Problems ---------------------*

MOVE salesdocument TO out_buf-so_no.

IF return CA 'abcdefghijklmnopqrstuvwxyz' OR

return CA 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

MOVE '2' TO out_buf-return_flag.

IF return-type = 'E' AND return-code = 'V1382'.

MOVE 'Parts not found !!' TO out_buf-remark.

ELSE.

MOVE return TO out_buf-remark.

ENDIF.

ELSE.

DESCRIBE TABLE messagetable LINES error_cnt.

IF error_cnt > 0.

READ TABLE messagetable INDEX 1.

MOVE '2' TO out_buf-return_flag.

IF messagetable-type = 'W' AND

messagetable-id = 'V4' AND

messagetable-number = 115.

CONCATENATE 'P/O No. already exists in'

messagetable-message_v1 INTO out_buf-remark

SEPARATED BY space.

ELSE.

MOVE messagetable TO out_buf-remark.

ENDIF.

ELSE.

DESCRIBE TABLE order_incomplete LINES error_cnt.

IF error_cnt > 0.

READ TABLE order_incomplete INDEX 1.

MOVE '2' TO out_buf-return_flag.

*>>>> START OF DELETION BY GSPN <<<<<

  • CONCATENATE 'Incomplete Error: '

  • ORDER_INCOMPLETE-FIELD_NAME

  • '(Quantity or Value)'

  • INTO OUT_BUF-REMARK.

*>>>> END OF DELETION BY GSPN <<<<<<<

*>>>> START OF INSERTION BY GSPN <<<<

LOOP AT order_incomplete.

IF sy-tabix = 1.

CONCATENATE 'Missing data: '

order_incomplete-field_text

INTO out_buf-remark.

ELSE.

CONCATENATE out_buf-remark ','

order_incomplete-field_text

INTO out_buf-remark.

ENDIF.

ENDLOOP.

*>>>> END OF INSERTION BY GSPN <<<<

ENDIF.

ENDIF.

ENDIF.

IF alt_change_yn = 'Y'.

MOVE orig_parts TO out_buf-po_material.

MOVE 'Alternate parts shipped !!!!!!' TO out_buf-description.

ENDIF.

APPEND out_buf.

ENDLOOP.

LOOP AT out_buf.

MOVE out_buf TO output_buf.

APPEND output_buf.

ENDLOOP.

*

ENDFORM. " PO_VERIFY_RTN