2009 Jan 27 5:30 AM
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.
2009 Jan 27 5:34 AM
2009 Jan 27 5:37 AM
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
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |