Inbound Delv
Dears,
how i can control the delivery cost at the time of inbound delivery, i have this scenario, i m creating PO with confirmation key 0004 (inbound delivery), then vendor confirm the Qty that is going to be sent, after the confirmation i need to enter the Planned delivery cost at the PO level, as i mentioned vendor might confirm partial delivery, but while maintain the Delv. cost in the PO i guess system would propose for the whole PO qty, so how i can control this.
Yes You can . with reference to Inbound delivery no.
Also you can with respect o transport no.
Further you can look to config settings it may help you
TMS Total steps:
Mentioned below are some important terms used in Transportation:
SAP Terminology: Description
1. Forwarding Agent: Agent who provides the transportation
2. Transportation Planning Point : Org. unit responsible for planning shipments with particular features. E.g.: A company has different groups of shipping personnel responsible for organizing shipments by train or ship
3. Shipment Document: The document containing the details of the deliveries, service agents
, routes, stages, planning and execution times.
4. Shipment Type: Shipment types contain all the essential control features for the shipment document such as number ranges, service level, and output and partner determination.
5. Routes: The route determines the itinerary and the means of transport in shipping, and influences transportation scheduling.
6. Shipment Cost Document The shipment cost document is the used for shipment cost processing. It contains the details related to accounting and the cost calculations.
7.Shipment cost type and item categories Shipment cost types and item categories contain all the important control features for the shipment cost document, such as number range, status requirements for the shipment documents, and parameters for shipment costing, parameters for shipment settlement.
8. Master Data:
Purchase Order is created for Vendor if the weekly or monthly orders are not created during the transaction by the system.
Relevant pricing conditions are maintained.
9. Customization:
1. Transportation Relevance is marked for Delivery type, Delivery Item Type, Route.
2. Route Determination is active.
3. Route is determined in the delivery document.
4. Shipment types are created as desired.
5. Shipment pricing procedure is in place.
6. Shipment cost types are created and assigned to shipment types.
7. Purchasing Data is assigned.
8. G/L Account assignments are done.
10. 1.Maintain Transportation Planning Point
The transportation planning point represents a group of employees responsible for organizing transportation activities. Each shipment is assigned to a specific transportation planning point for transportation planning and shipment completion
The transportation planning point is assigned at Co-Code level.
Menu Path: Enterprise Settings > Definition > Logistics Execution > Maintain transportation planning point
10.2.Define Routes
The route determines the itinerary and the means of transport in shipping, and influences transportation scheduling. The description of routes, service agent, distance and lead times are defined in routes.
Menu Path: Logistics Execution > Transport > Basic Transportation Functions > Routes > Define Routes > Define Routes And Stages
10.3.Maintain Route Determination:
Routes are determined depending on the following criteria:
1. Country and departure zone (departure zone of the shipping point)
2. Shipping conditions agreed in the sales order.
The shipping condition is defined in shipping point determination.
3. Transportation group of the material
4. Country and transportation zone (receiving zone) of the ship-to party
Menu Path: Logistics Execution > Transport > Basic Transportation Functions > Routes > Define Routes > Route Determination > Maintain Route Determination
10.4Maintain Transportation Relevance
Delivery types and delivery item categories for which transportation processing is to be carried out must be characterized as relevant for transportation.
All routes that are to be used for the shipment must also be set as relevant for transportation.
Menu Path: Logistics Execution > Transport > Shipments > Maintain Transportation Relevance
10.5.Define Shipment Types:
The shipment types represent the different forms of transportation processing in sales and distribution.
The following forms of transportation processing are distinguished:
1) Individual shipment, one or more deliveries are transported by a single mode of transport from one point of departure to one final destination.
2) Collective shipment, one or more deliveries are transported by a single mode of transport from one or more points of departure to one or more final destinations.
3) Multimodal shipment, deliveries are transported by several modes of transport between one or more points of departure and one or more final destinations.
Menu Path: Logistics Execution > Transport > Shipments > Define Shipment Types
10.6.Define Shipment Cost types
10.7.Pricing
Logistics Execution > Transport > Shipment Costs > Pricing > Pricing Control > Define And Assign Pricing Procedures
10.8 Settlement
Similar Messages
-
Dears,
is there any report which shows me the status the inbound delivery, before i could do GRN i want to see if this Delivery is received of notDear Omer Shelebi,
I am having the same issue. I have to make the VL06I or any of the related transactions to only show the Inbound deliveries for which GR has not been made.
Request you to share your approach. It would be of immense help to me.
Thanks for your answer.
Regards,
Sathish Kumar -
SD:Create Billing Wrt Inbound Deliveries - third party Order
Customer sends his Order forecast, From Interface it comes to SAP System through IDocs SO will be generated,that SO triggers purchase requistion and we have a batch job runs every hour to create purchase orders for Vendor. When the Vendor Sends goods to Customer and the same has notified to the Company, based on that we create Inbound Deliveries(VL31N) and Goods Receipt(MIGO or VL32N PGR) in our SAP System.
We have batch jobs running every hour to create Goods Receipt for inbound deliveries and Billing due(RV60SBAT) list to generate Billing documents.This Billing is created based on the sales order quantity(Since it is Order Related Billing).Now the Customer wants billing based on the delivery quantity they received from vendor.Here we are not doing any Outbound Delivery.
We used one Data Transfer Routine from Order to Billing in item category TAS at data VBRK/VBRP level(We copied the standard routine 003 and done modifications to get the inbound delivery no) This routine navigates from the sales document table(vbep) to the Purchase Requisition table(eban) to the Purchase Order history table (ekbe) and to the Material Document no to obtain Inbound Delivey Number
We are successful to some extent in creation of billing document.but the problem is when there are 3 inbound deliveries for one purchase order, it is creating only one invoice for 1 of 3 inbound deliveries.but we need 3 different invoices for 3 inbound deliveries.
For example
Previous scenario: SO quantity is 100. Delivey quantity is say 20,30,50. Billing Quantity is 100
Present scenario : SO quantity is 100. Delivey quantity is say 20,30,50. Billing Quantity is 20,30,50
Customer wants billing for the quantitiies 20,30,50 not for 100Pradeep,
Whats is your billing qty based on Order- GR qty? or Order - Inbound delv qty. How did you get this?.
The problem lies because it is an order related billing.
Try this make it a Delv related billing w/o any movement type.
The moment you create an inbound delivery and O/P should be send which in turn will create a delivery document and PGI.(you can use this O/p type to do the dirty work)
And after this complex process life becomes simple.
Ravi -
Dear All;
We have a problem with automatic inbound delivery not being created. In case of STO's for same company code between plants, we create an outbound delivery and do a shipment. After the shipment is saved, a PGI is created for sending plant and an automatic inbound delivery should be created at the Receiving plant. In our case after PGI, the inbound delv is not created. We are in 4.7 Version.
Is there any standard program which does this ?
Any pointers to find out why that is not being created would be greatly appreciated.
Thanks!!!!!I am facing the same issue, did you figure out what was the reason and how did you fix it ?
-
Hi guys..facing problem in error fixing.in bdc...prgm is in ECC 6.0..
prgm is
*& Report ZCJI_CNV_POSTGOODSRECEIPT_ALT1
REPORT ZCJI_CNV_POSTGOODSRECEIPT_ALT1.
*REPORT ZCJI_CNV_POSTGOODSRECEIPT_ALT NO STANDARD PAGE HEADING
LINE-SIZE 255.
*Program: ZCJI_CNV_POSTGOODSRECEIPT_ALT *
*Function: This program is used to carry out GR transaction MB0A for
CJI import logistics purchase orders. The objective is to
choose only those purchase orders for which billing has been
carried out already. Once GR document is posted, the status
of delivery document items is also updated.
DATE AUTHOR SCR # CHANGE DESCRIPTION
11/04/03 Ohm Reddy BRD # 90 Initial version
DEVK928402
02/25/04 Ohm Reddy In BDC session for posting Goods
DEVK929329 Receipt document, update document
date with system local date
(SYST-DATLO) rather than with
system date(SYST-DATUM)
06/23/04 Ohm Reddy Post GR only when sales order
DEVK931359 item SKU and PO item SKU matches
03/21/05 Alex Mutia 13829/DEVK934135 *
Phase II modifications: *
1. Added criteria in the selection screen; *
2. Modified record selection logic; *
3. Added fields in the Control Report; *
04/08/05 Alex Mutia 13829/DEVK934262 *
Fixed bug in processing MFRGR field; *
04/13/05 Alex Mutia 13829/DEVK934283 *
1.Fixed bug in assigning error record pointers*
to part-success part-error POs; *
2.Added SO and SO line item numbers in report;*
3.Compressed report to fit in 255 columns; *
04/27/05 Alex Mutia 13829/DEVK934384 *
1.Material documents retrieval changed from *
MSEG to EKBE for performance. *
2.Display empty ALV columns when no records *
were selected for processing; *
TYPE-POOLS: SLIS.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: G_LAYOUT_ALV_SPEC TYPE SLIS_LAYOUT_ALV.
*INCLUDE ZMMCJI_CNV_POSTGR_BDC2.
INCLUDE ZCJI_CNV_PGR_DATA_ALT.
$--"DEVK934135 Begin;-$
INITIALIZATION. "DEVK934135
PERFORM INITIALIZE_VENDOR. "DEVK934135
PERFORM INITIALIZE_PRICE. "DEVK934135
$--"DEVK934135 End;---$
START-OF-SELECTION.
IF P_LIFNR IS INITIAL. "DEVK934135
PERFORM INITIALIZE_VENDOR. "DEVK934135
ENDIF. "DEVK934135
IF P_NETPR IS INITIAL. "DEVK934135
PERFORM INITIALIZE_PRICE. "DEVK934135
ENDIF. "DEVK934135
PERFORM 100_SELECT_DATA.
END-OF-SELECTION.
CHECK: g_return_code IS INITIAL. "DEVK934384
IF NOT itab[] IS INITIAL. "DEVK934384
IF G_RETURN_CODE IS INITIAL AND "DEVK934384
NOT ITAB[] IS INITIAL. "DEVK934384
PERFORM 200_PROCESS_DATA.
PERFORM 300_POST_DOCUMENTS.
PERFORM 399_RETRIEVE_DOCUMENTS.
PERFORM REORG_ITAB.
PERFORM BUILD_HEADER_CATALOG.
PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
SY_COPY = SYST.
PERFORM SHOW_TRANSACTION_ERRORS.
ELSE. "DEVK934384
PERFORM SHOW_EMPTY_LIST. "DEVK934384
ENDIF.
*& Form SELECT_DATA
FORM 100_SELECT_DATA.
PERFORM 110_SELECT_OPEN_PO_QTY.
CHECK: G_RETURN_CODE IS INITIAL.
PERFORM 120_SELECT_PO_BILLED_QTY.
ENDFORM. " 100_SELECT_DATA
*& Form 110_SELECT_OPEN_PO_QTY
FORM 110_SELECT_OPEN_PO_QTY.
$--"DEVK934135 Begin;-$
SELECT T1~VGBEL
T1~VGPOS
T1~VBELN
T1~POSNR
T1~MATNR
T1~LFIMG
T1~MFRGR
T2~LIFEX
T2~LFDAT
FROM LIPS AS T1
INNER JOIN LIKP AS T2
ON T1MANDT EQ T2MANDT AND
T1VBELN EQ T2VBELN
APPENDING CORRESPONDING FIELDS OF TABLE ITAB_LIPS
WHERE T1~MANDT EQ SY-MANDT "client is system client
AND T1~VBELN IN S_VBELN "billing doc in criteria
AND T1~VGBEL IN S_EBELN "po reference in criteria
AND T1~PSTYV EQ 'ELN' "billing item category
AND T1~WERKS EQ 'JDC1' "plant
AND T1~MFRGR NE 'C' "material freight group
AND T2~LIFNR EQ P_LIFNR. "vendor is param vendor
LOOP AT ITAB_LIPS.
ITAB_LIPS-EBELN = ITAB_LIPS-VGBEL.
ITAB_LIPS-EBELP = ITAB_LIPS-VGPOS.
ITAB_LIPS-CHARG = ITAB_LIPS-LIFEX.
ITAB_LIPS-OLDMFRGR
= ITAB_LIPS-MFRGR.
MODIFY ITAB_LIPS.
ENDLOOP.
IF ITAB_LIPS[] IS INITIAL.
MESSAGE i032(zm) WITH text-m11. "DEVK934384
G_RETURN_CODE = 'X'.
EXIT.
ENDIF.
SELECT T1~EBELN
T1~EBELP
T1~LICHA
T2~MATNR
T2~MENGE
T2~LOEKZ
T2~ELIKZ
T2~NETPR
T3~IHREZ
FROM EKET AS T1
INNER JOIN EKPO AS T2
ON T1MANDT EQ T2MANDT AND
T1EBELN EQ T2EBELN AND
T1EBELP EQ T2EBELP
INNER JOIN EKKO AS T3
ON T1MANDT EQ T3MANDT AND
T1EBELN EQ T3EBELN
APPENDING CORRESPONDING FIELDS OF TABLE ITAB
FOR ALL ENTRIES IN ITAB_LIPS
WHERE T1~MANDT EQ SY-MANDT "client is system client
AND T1~EBELN EQ ITAB_LIPS-EBELN "po# matches w/ billing
AND T3~BSART IN ('YT', 'YN'). "po type
IF ITAB[] IS INITIAL.
MESSAGE i032(zm) WITH text-m11. "DEVK934384
G_RETURN_CODE = 'X'.
EXIT.
ENDIF.
$--"DEVK934135 End;---$
delete any duplicate entries in itab table
SORT ITAB BY EBELN EBELP.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING EBELN EBELP.
LOOP AT ITAB.
ITAB-RECID = SY-TABIX.
IF NOT ITAB-IHREZ IS INITIAL.
WHILE ITAB-IHREZ+0(1) EQ ' '.
SHIFT ITAB-IHREZ.
ENDWHILE.
WHILE ITAB-IHREZ+9(1) EQ ' '.
SHIFT ITAB-IHREZ RIGHT.
ITAB-IHREZ+0(1) = '0'.
ENDWHILE.
ENDIF.
MODIFY ITAB.
ENDLOOP.
delete ITAB_LIPS entries that are not there in ITAB
LOOP AT ITAB_LIPS.
SY_COPY-TABIX = SY-TABIX.
CLEAR ITAB.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
SY_COPY-INDEX = SY-TABIX.
IF SY-SUBRC NE 0.
DELETE ITAB_LIPS.
ELSE.
ITAB_LIPS-IHREZ = ITAB-IHREZ.
MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
ITAB-MFRGR = ITAB_LIPS-MFRGR.
ITAB-LIFEX = ITAB_LIPS-LIFEX.
ITAB-OLDMFRGR
= ITAB_LIPS-OLDMFRGR.
MODIFY ITAB INDEX SY_COPY-INDEX.
ENDIF.
ENDLOOP.
select the goods receipts documents created for the above deliveries
SELECT EBELN EBELP BELNR GJAHR
INTO TABLE ITAB_EKBE FROM EKBE
FOR ALL ENTRIES IN ITAB_LIPS
WHERE EBELN = ITAB_LIPS-EBELN
AND EBELP = ITAB_LIPS-EBELP.
select Goods receipt data from MSEG table for the above deliveries
IF NOT ITAB_EKBE[] IS INITIAL.
SELECT EBELN EBELP CHARG BWART MENGE MBLNR MJAHR ZEILE
INTO TABLE ITAB_MSEG FROM MSEG
FOR ALL ENTRIES IN ITAB_EKBE
WHERE MBLNR = ITAB_EKBE-BELNR
AND MJAHR = ITAB_EKBE-GJAHR.
ENDIF.
SORT ITAB_MSEG BY EBELN EBELP CHARG.
calculate the GR qty eligible to be posted
SORT ITAB_LIPS BY EBELN EBELP.
LOOP AT ITAB_LIPS.
ITAB_LIPS-POSTQTY = ITAB_LIPS-LFIMG.
CLEAR ITAB_MSEG.
LOOP AT ITAB_MSEG WHERE EBELN = ITAB_LIPS-EBELN
AND EBELP = ITAB_LIPS-EBELP
AND CHARG = ITAB_LIPS-CHARG.
IF ITAB_MSEG-BWART = '101'.
ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY - ITAB_MSEG-MENGE.
ELSEIF ITAB_MSEG-BWART = '102'.
ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY + ITAB_MSEG-MENGE.
ENDIF.
ENDLOOP.
MODIFY ITAB_LIPS.
CLEAR ITAB_LIPS.
ENDLOOP.
LOOP AT ITAB.
ITAB-RECID = SY-TABIX.
MODIFY ITAB.
LOOP AT ITAB_LIPS WHERE EBELN EQ ITAB-EBELN
AND EBELP EQ ITAB-EBELP.
ITAB_LIPS-RECID = ITAB-RECID.
MODIFY ITAB_LIPS.
ENDLOOP.
ENDLOOP.
free the memory of unnecessary internal tables
$--"DEVK934135 Begin;-$
CLEAR: ITAB_EKBE.
FREE: ITAB_EKBE.
$--"DEVK934135 End;---$
ENDFORM. " 110_SELECT_OPEN_PO_QTY
*& Form 120_SELECT_PO_BILLED_QTY
FORM 120_SELECT_PO_BILLED_QTY.
$--"DEVK934135 Begin;-$
SELECT T1~VBELN
T1~POSNR
T1~FKIMG
T1~AUBEL
T1~AUPOS
APPENDING CORRESPONDING FIELDS OF TABLE ITAB_VBRP
FROM VBRP AS T1
INNER JOIN VBRK AS T2
ON T1MANDT EQ T2MANDT AND
T1VBELN EQ T2VBELN
FOR ALL ENTRIES IN ITAB
WHERE T1~MANDT EQ SY-MANDT "client is system client
AND T1~VBELN EQ ITAB-IHREZ+0(10) "billing doc = your ref.
AND T2~FKSTO EQ ' '. "status NOT cancelled
Match ITAB-IHREZ <-> ITAB_VBRP-VBELN...
ITAB-LICHA <-> ITAB_VBRP-POSNR...
LOOP AT ITAB.
SY_COPY-TABIX = SY-TABIX.
Check your reference (IHREZ) field;
IF ITAB-IHREZ IS INITIAL. "your-ref blank
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E0A.
APPEND GT_ERROR.
ELSE. "your-ref NOT blank
IF ITAB-IHREZ CO ' 0123456789'. "your-ref numeric
ENDIF. "your-ref numeric
IF SY-FDPOS NE 12. "your-ref NOT numeric
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E0A.
APPEND GT_ERROR.
ELSE. "your-ref NOT numeric
Check PO line item (LICHA) field;
IF ITAB-LICHA IS INITIAL. "line item blank
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E01.
APPEND GT_ERROR.
ELSE. "line item NOT blank
IF ITAB-LICHA CO ' 0123456789'. "line item numeric
ENDIF. "line item numeric
IF SY-FDPOS NE 15. "line item NOT numeric
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E01.
APPEND GT_ERROR.
ELSE. "line item NOT numeric
SY_COPY-SUBRC = 4.
READ TABLE ITAB_VBRP
WITH KEY VBELN = ITAB-IHREZ+0(10)
POSNR = ITAB-LICHA+0(6) BINARY SEARCH.
SY_COPY-SUBRC = SY-SUBRC.
IF SY_COPY-SUBRC NE 0.
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E01.
APPEND GT_ERROR.
ELSE. "DEVK934283
ITAB-AUBEL = ITAB_VBRP-AUBEL. "DEVK934283
ITAB-AUPOS = ITAB_VBRP-AUPOS. "DEVK934283
ENDIF.
ENDIF. "line item NOT numeric
ENDIF. "line item blank
ENDIF. "your-ref NOT numeric
ENDIF. "your-ref blank
Check ID - LIFEX;
IF ITAB-LIFEX EQ ' '. "LIFEX is blank
ITAB-ERRFB = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERB.
APPEND GT_ERROR.
ELSE. "LIFEX is NOT blank
Check ID - MFRGR;
IF ITAB-MFRGR NE 'G'. "MFRGR NOT G
ITAB-ERRFC = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERC.
APPEND GT_ERROR.
ENDIF. "MFRGR NOT G
ENDIF. "LIFEX is blank
Check PO - Deletion indicator;
IF ITAB-LOEKZ NE ' '. "LOEKZ NOT blank
ITAB-ERRFD = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERD.
APPEND GT_ERROR.
ENDIF. "LOEKZ NOT blank
Check PO - Delivery completed flag;
IF ITAB-ELIKZ NE ' '. "ELIKZ NOT blank
ITAB-ERRFE = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERE.
APPEND GT_ERROR.
ENDIF. "ELIKZ NOT blank
Check PO - Net price;
IF ITAB-NETPR LT P_NETPR. "price < parameter
ITAB-ERRFF = 'X'.
GT_ERROR-RECID = ITAB-RECID.
CONCATENATE TEXT-ERF
G_NETPR
TEXT-USD
INTO GT_ERROR-ERRTX SEPARATED BY SPACE.
APPEND GT_ERROR.
ENDIF. "ELIKZ NOT blank
IF ITAB-AUPOS EQ '000000'.
CLEAR: ITAB-AUPOS.
ENDIF.
MODIFY ITAB INDEX SY_COPY-TABIX.
ENDLOOP.
LOOP AT ITAB. "DEVK934283
READ TABLE ITAB_LIPS "DEVK934283
WITH KEY VGBEL = ITAB-EBELN "DEVK934283
VGPOS = ITAB-EBELP "DEVK934283
BINARY SEARCH. "DEVK934283
SY_COPY-TABIX = SY-TABIX. "DEVK934283
IF SY-SUBRC EQ 0. "DEVK934283
ITAB_LIPS-AUBEL = ITAB-AUBEL. "DEVK934283
ITAB_LIPS-AUPOS = ITAB-AUPOS. "DEVK934283
MODIFY ITAB_LIPS INDEX SY_COPY-TABIX. "DEVK934283
ENDIF. "DEVK934283
ENDLOOP. "DEVK934283
Transfer errors from ITAB to ITAB_LIPS;
LOOP AT ITAB WHERE ERRFA EQ 'X'
OR ERRFB EQ 'X'
OR ERRFC EQ 'X'
OR ERRFD EQ 'X'
OR ERRFE EQ 'X'
OR ERRFF EQ 'X'.
READ TABLE ITAB_LIPS
WITH KEY VGBEL = ITAB-EBELN
VGPOS = ITAB-EBELP BINARY SEARCH.
SY_COPY-TABIX = SY-TABIX.
IF SY-SUBRC EQ 0.
ITAB_LIPS-ERRFA = ITAB-ERRFA.
ITAB_LIPS-ERRFB = ITAB-ERRFB.
ITAB_LIPS-ERRFC = ITAB-ERRFC.
ITAB_LIPS-ERRFD = ITAB-ERRFD.
ITAB_LIPS-ERRFE = ITAB-ERRFE.
ITAB_LIPS-ERRFF = ITAB-ERRFF.
ITAB_LIPS-NEWMFRGR = 'E'.
MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
ENDIF.
ENDLOOP.
$--"DEVK934135 End;---$
ENDFORM. " 120_SELECT_PO_BILLED_QTY
*& Form 200_PROCESS_DATA
FORM 200_PROCESS_DATA.
PERFORM 210_CONSOLIDATE_DATA.
PERFORM 220_PROCESS_DATA.
ENDFORM. " 200_PROCESS_DATA
*& Form 210_consolidate_data
FORM 210_CONSOLIDATE_DATA.
Get the PO item open qty and billed qty into one table
LOOP AT ITAB.
CLEAR ITAB_LIPS.
LOOP AT ITAB_LIPS WHERE EBELN = ITAB-EBELN
AND EBELP = ITAB-EBELP.
ITAB-IDQTY = ITAB-IDQTY + ITAB_LIPS-POSTQTY. "inbound delv qty
ENDLOOP.
CLEAR ITAB_VBRP.
LOOP AT ITAB_VBRP WHERE VBELN = ITAB-IHREZ
AND POSNR = ITAB-LICHA.
ITAB-FKIMG = ITAB-FKIMG + ITAB_VBRP-FKIMG. "PO item billed qty
ENDLOOP.
CLEAR ITAB_MSEG.
LOOP AT ITAB_MSEG WHERE EBELN = ITAB-EBELN
AND EBELP = ITAB-EBELP.
IF ITAB_MSEG-BWART = '101'.
ITAB-GRQTY = ITAB-GRQTY + ITAB_MSEG-MENGE. "PO item GR qty
ELSEIF ITAB_MSEG-BWART = '102'.
ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE. "PO item GR qty
ELSEIF ITAB_MSEG-BWART = '122'. "DEVK934135
ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE. "PO item GR qty
ENDIF.
ENDLOOP.
ITAB-RCVQTY = ITAB-FKIMG - ITAB-GRQTY. "qty billed but not received
calculate the quantity to be processed for which GRs are to be posted
IF ITAB-RCVQTY > 0 AND ITAB-RCVQTY > ITAB-IDQTY.
ITAB-PROCQTY = ITAB-IDQTY.
ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY < ITAB-IDQTY.
ITAB-PROCQTY = ITAB-RCVQTY.
ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY = ITAB-IDQTY.
ITAB-PROCQTY = ITAB-IDQTY.
ENDIF.
MODIFY ITAB.
CLEAR ITAB.
ENDLOOP.
free the memory of unnecessary internal tables
$--"DEVK934135 Begin;-$
CLEAR: ITAB_MSEG.
FREE: ITAB_MSEG.
$--"DEVK934135 End;---$
ENDFORM. " 210_consolidate_data
*& Form 220_PROCESS_DATA
FORM 220_PROCESS_DATA.
DATA: L0_FISCAL_PERIOD LIKE BAPI0002_4-FISCAL_PERIOD,
L0_FISCAL_YEAR LIKE BAPI0002_4-FISCAL_YEAR,
L0_RETURN LIKE BAPIRETURN1,
L1_FISCAL_PERIOD LIKE BAPI0002_4-FISCAL_PERIOD,
L1_FISCAL_YEAR LIKE BAPI0002_4-FISCAL_YEAR,
L1_RETURN LIKE BAPIRETURN1.
SORT ITAB_LIPS BY VGBEL VGPOS EBELN EBELP
LFDAT DESCENDING POSNR ASCENDING.
SORT ITAB BY EBELN EBELP.
Calculate the GR quanities to be posted for all inbound deliveries
LOOP AT ITAB_LIPS.
AT NEW EBELP.
CLEAR ITAB.
CLEAR V_RCVQTY.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
V_RCVQTY = ITAB-RCVQTY.
ENDAT.
IF ITAB-PROCQTY GT 0.
IF ITAB_LIPS-POSTQTY GT ITAB-PROCQTY.
ITAB_LIPS-PROCQTY = ITAB-PROCQTY.
ITAB_LIPS-NEWMFRGR = 'B'.
ITAB-PROCQTY = 0.
ELSEIF ITAB_LIPS-POSTQTY LT ITAB-PROCQTY.
ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
ITAB_LIPS-NEWMFRGR = 'C'.
ITAB-PROCQTY = ITAB-PROCQTY - ITAB_LIPS-POSTQTY.
ELSEIF ITAB_LIPS-POSTQTY EQ ITAB-PROCQTY.
ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
ITAB_LIPS-NEWMFRGR = 'C'.
ITAB-PROCQTY = 0.
ENDIF.
Compare the Inbound delivery processing quantity with the pending
billing quantity to write it in the report log
IF ITAB_LIPS-POSTQTY LT V_RCVQTY.
ITAB_LIPS-GRIND = 'D'. "GR will be created for ID qty
V_RCVQTY = V_RCVQTY - ITAB_LIPS-POSTQTY.
ELSEIF ITAB_LIPS-POSTQTY GT V_RCVQTY.
ITAB_LIPS-GRIND = 'B'. "GR will be created for Billied qty
V_RCVQTY = 0.
ELSEIF ITAB_LIPS-POSTQTY EQ V_RCVQTY.
ITAB_LIPS-GRIND = 'S'. "Billed qty is equal to ID qty
V_RCVQTY = 0.
ENDIF.
ELSE.
Decide why this inbound delivery could not have GR quantity -
excess GR quantity or unavailable Billing quantity
IF ITAB-RCVQTY LT ITAB-IDQTY.
ITAB_LIPS-GRIND = 'C'. "GR not created - Lack of Billed qty
ENDIF.
IF ITAB-RCVQTY LT 0.
ITAB_LIPS-GRIND = 'A'. "GR not created - GR qty > Bill qty
ENDIF.
ENDIF.
MODIFY ITAB_LIPS.
CLEAR ITAB_LIPS.
ENDLOOP.
$--"DEVK934135-Begin;-$
LOOP AT ITAB_LIPS.
AT NEW EBELP.
CLEAR ITAB.
CLEAR V_RCVQTY.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
V_RCVQTY = ITAB-FKIMG - ITAB-GRQTY.
ENDAT.
IF ITAB_LIPS-ERRFA IS INITIAL.
IF V_RCVQTY EQ 0.
ITAB_LIPS-ERRF1 = 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R01.
APPEND GT_ERROR.
ELSEIF V_RCVQTY LT 0.
ITAB_LIPS-ERRF2 = 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R02.
APPEND GT_ERROR.
ELSEIF V_RCVQTY GT 0.
IF V_RCVQTY EQ ITAB_LIPS-LFIMG.
ITAB_LIPS-ERRF3 = 'X'.
ITAB_LIPS-NEWMFRGR = 'C'.
ELSEIF V_RCVQTY GT ITAB_LIPS-LFIMG.
ITAB_LIPS-ERRF4 = 'X'.
ITAB_LIPS-NEWMFRGR = 'C'.
ITAB_LIPS-PROCQTY = ITAB_LIPS-LFIMG.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R04.
APPEND GT_ERROR.
ELSEIF V_RCVQTY LT ITAB_LIPS-LFIMG.
ITAB_LIPS-ERRF5 = 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R05.
APPEND GT_ERROR.
ENDIF.
ENDIF.
ENDIF.
CLEAR: ITAB_LIPS-BLDAT.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-VGBEL
EBELP = ITAB_LIPS-VGPOS BINARY SEARCH.
SELECT SINGLE FKDAT
FROM VBRK
INTO (ITAB_LIPS-BLDAT)
WHERE VBELN EQ ITAB-IHREZ+0(10).
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = 'C800'
POSTING_DATE = ITAB_LIPS-BLDAT
IMPORTING
FISCAL_YEAR = L0_FISCAL_YEAR
FISCAL_PERIOD = L0_FISCAL_PERIOD
RETURN = L0_RETURN.
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = 'C800'
POSTING_DATE = SY-DATLO
IMPORTING
FISCAL_YEAR = L1_FISCAL_YEAR
FISCAL_PERIOD = L1_FISCAL_PERIOD
RETURN = L1_RETURN.
IF L0_FISCAL_YEAR EQ L1_FISCAL_YEAR AND
L0_FISCAL_PERIOD EQ L1_FISCAL_PERIOD.
ITAB_LIPS-BUDAT = ITAB_LIPS-BLDAT.
ELSE.
ITAB_LIPS-BUDAT = SY-DATLO.
ENDIF.
MODIFY ITAB_LIPS.
CLEAR ITAB_LIPS.
ENDLOOP.
$--"DEVK934135-End;---$
collect all the inbound deliveries for which goods receipt are to be
made / material freight status are to be updated
LOOP AT ITAB_LIPS WHERE ERRFA IS INITIAL "DEVK934135
AND ERRFB IS INITIAL "DEVK934135
AND ERRFC IS INITIAL "DEVK934135
AND ERRFD IS INITIAL "DEVK934135
AND ERRFE IS INITIAL "DEVK934135
AND ERRFF IS INITIAL "DEVK934135
AND ERRF1 IS INITIAL "DEVK934135
AND ERRF2 IS INITIAL "DEVK934135
AND ERRF5 IS INITIAL. "DEVK934135
IF ITAB_LIPS-PROCQTY GT 0 AND ITAB_LIPS-LFIMG NE 0.
ITAB_LIPS_G-VBELN = ITAB_LIPS-VBELN.
ITAB_LIPS_G-BLDAT = ITAB_LIPS-BLDAT. "DEVK934135
ITAB_LIPS_G-BUDAT = ITAB_LIPS-BUDAT. "DEVK934135
ITAB_LIPS_G-IHREZ = ITAB_LIPS-IHREZ. "DEVK934135
APPEND ITAB_LIPS_G.
ENDIF.
ENDLOOP.
SORT ITAB_LIPS_G BY VBELN.
DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_G.
LOOP AT ITAB_LIPS WHERE NOT ERRFA IS INITIAL "DEVK934135
OR NOT ERRFB IS INITIAL "DEVK934135
OR NOT ERRFC IS INITIAL "DEVK934135
OR NOT ERRFD IS INITIAL "DEVK934135
OR NOT ERRFE IS INITIAL "DEVK934135
OR NOT ERRFF IS INITIAL "DEVK934135
OR NOT ERRF1 IS INITIAL "DEVK934135
OR NOT ERRF2 IS INITIAL "DEVK934135
OR NOT ERRF3 IS INITIAL "DEVK934135
OR NOT ERRF4 IS INITIAL "DEVK934135
OR NOT ERRF5 IS INITIAL. "DEVK934135
ITAB_LIPS_X-VBELN = ITAB_LIPS-VBELN.
ITAB_LIPS_X-BLDAT = ITAB_LIPS-BLDAT. "DEVK934135
ITAB_LIPS_X-BUDAT = ITAB_LIPS-BUDAT. "DEVK934135
ITAB_LIPS_X-IHREZ = ITAB_LIPS-IHREZ. "DEVK934135
APPEND ITAB_LIPS_X.
ENDLOOP.
SORT ITAB_LIPS_X BY VBELN.
DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_X.
LOOP AT ITAB_LIPS.
READ TABLE ITAB WITH KEY RECID = ITAB_LIPS-RECID.
SY_COPY-INDEX = SY-TABIX.
IF SY-SUBRC EQ 0.
ITAB-ERRFA = ITAB_LIPS-ERRFA.
ITAB-ERRFB = ITAB_LIPS-ERRFB.
ITAB-ERRFC = ITAB_LIPS-ERRFC.
ITAB-ERRFD = ITAB_LIPS-ERRFD.
ITAB-ERRFE = ITAB_LIPS-ERRFE.
ITAB-ERRFF = ITAB_LIPS-ERRFF.
ITAB-ERRF1 = ITAB_LIPS-ERRF1.
ITAB-ERRF2 = ITAB_LIPS-ERRF2.
ITAB-ERRF3 = ITAB_LIPS-ERRF3.
ITAB-ERRF4 = ITAB_LIPS-ERRF4.
ITAB-ERRF5 = ITAB_LIPS-ERRF5.
MODIFY ITAB INDEX SY_COPY-INDEX.
ENDIF.
ENDLOOP.
Decide the goods receipt item number for the delivery items that are
to be processed. Delivery items with zero quantities are not shown up
in MB0A transaction for GR
CLEAR V_DEL_ZERO.
IF NOT ITAB_LIPS_G[] IS INITIAL.
SELECT VBELN POSNR LFIMG
INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
FOR ALL ENTRIES IN ITAB_LIPS_G
WHERE VBELN = ITAB_LIPS_G-VBELN
AND LFIMG EQ 0.
IF SY-SUBRC EQ 0.
V_DEL_ZERO = 'X'.
CLEAR ITAB_LIPS_Z.
FREE ITAB_LIPS_Z.
SELECT VBELN POSNR LFIMG
INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
FOR ALL ENTRIES IN ITAB_LIPS_G
WHERE VBELN = ITAB_LIPS_G-VBELN.
SORT ITAB_LIPS_Z BY VBELN POSNR.
LOOP AT ITAB_LIPS_Z.
AT NEW VBELN.
CLEAR V_ZEILE.
ENDAT.
IF ITAB_LIPS_Z-LFIMG NE 0.
V_ZEILE = V_ZEILE + 1.
ENDIF.
ITAB_LIPS_Z-ZEILE = V_ZEILE.
MODIFY ITAB_LIPS_Z.
ENDLOOP.
ELSE.
V_DEL_ZERO = ' '.
ENDIF.
ENDIF.
SORT ITAB_LIPS_Z BY VBELN POSNR.
LOOP AT ITAB_LIPS.
IF V_DEL_ZERO = ' '.
ITAB_LIPS-ZEILE = ITAB_LIPS-POSNR.
ELSE.
CLEAR ITAB_LIPS_Z.
READ TABLE ITAB_LIPS_Z WITH KEY VBELN = ITAB_LIPS-VBELN
POSNR = ITAB_LIPS-POSNR BINARY SEARCH.
ITAB_LIPS-ZEILE = ITAB_LIPS_Z-ZEILE.
ENDIF.
MODIFY ITAB_LIPS.
ENDLOOP.
SORT ITAB_LIPS BY VBELN DESCENDING POSNR ASCENDING.
ENDFORM. " 220_PROCESS_DATA
*& Form 300_post_documents
FORM 300_POST_DOCUMENTS.
LOOP AT ITAB_LIPS_G.
PERFORM 310_POST_GR_DOC.
MODIFY ITAB_LIPS_G.
CLEAR ITAB_LIPS_G.
ENDLOOP.
CLEAR: BDCDATA, BDCDATA[].
ITAB_LIPS_R[] = ITAB_LIPS_G[].
ITAB_LIPS_G[] = ITAB_LIPS_X[].
LOOP AT ITAB_LIPS_G.
PERFORM 350_UPDATE_DELIVERY_DOC.
MODIFY ITAB_LIPS_G.
CLEAR ITAB_LIPS_G.
ENDLOOP.
PERFORM close_group.
ENDFORM. " 300_post_documents
*& Form 310_POST_GR_DOC
FORM 310_POST_GR_DOC.
PERFORM 320_POST_GR_HEADER.
LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
AND LFIMG NE 0
AND PROCQTY NE 0
AND ERRFA IS INITIAL
AND ERRFB IS INITIAL
AND ERRFC IS INITIAL
AND ERRFD IS INITIAL
AND ERRFE IS INITIAL
AND ERRFF IS INITIAL
AND ERRF1 IS INITIAL
AND ERRF2 IS INITIAL
AND ERRF5 IS INITIAL.
IF ITAB_LIPS-ZEILE EQ 1.
PERFORM 335_POST_GR_ITEMS.
ELSE.
PERFORM 330_POST_GR_ITEMS.
ENDIF.
ENDLOOP.
PERFORM 340_SAVE_GR_DOC.
ENDFORM. " 310_POST_GR_DOC
*& Form 320_POST_GR_HEADER
FORM 320_POST_GR_HEADER.
DATA: L_BLDAT TYPE SYDATUM,
L_BUDAT TYPE SYDATUM.
WRITE: ITAB_LIPS_G-BLDAT TO L_BLDAT,
ITAB_LIPS_G-BUDAT TO L_BUDAT.
IF ITAB_LIPS_G-IHREZ+0(10) NE '0000000000' AND
ITAB_LIPS_G-IHREZ+0(10) NE ' '.
WHILE ITAB_LIPS_G-IHREZ+0(1) EQ '0'.
SHIFT ITAB_LIPS_G-IHREZ.
ENDWHILE.
ENDIF.
perform bdc_dynpro using 'SAPMM07M' '0201'.
perform bdc_field using 'BDC_CURSOR'
'RM07M-VLIEF'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'MKPF-BKTXT'
ITAB_LIPS_G-IHREZ.
perform bdc_field using 'MKPF-BLDAT'
L_BLDAT.
perform bdc_field using 'MKPF-BUDAT'
L_BUDAT.
perform bdc_field using 'RM07M-BWARTWE'
'101'.
perform bdc_field using 'RM07M-WERKS'
perform bdc_field using 'RM07M-LGORT'
perform bdc_field using 'RM07M-XNUVO'
'X'.
perform bdc_field using 'XFULL'
perform bdc_field using 'RM07M-VLIEF'
ITAB_LIPS_G-VBELN.
perform bdc_dynpro using 'SAPMM07M' '0221'.
perform bdc_field using 'BDC_OKCODE'
'=SELN'.
perform bdc_dynpro using 'SAPMM07M' '0221'.
perform bdc_field using 'BDC_CURSOR'
'MSEG-ERFMG(01)'.
ENDFORM. " 320_POST_GR_HEADER
*& Form 330_POST_GR_ITEMS
FORM 330_POST_GR_ITEMS.
perform bdc_field using 'BDC_OKCODE'
'=KLA'.
perform bdc_dynpro using 'SAPMM07M' '1501'.
perform bdc_field using 'BDC_OKCODE'
'=OK'.
VV_ZEILE = ITAB_LIPS-ZEILE.
PERFORM BDC_FIELD USING 'RM07M-ZEILE'
VV_ZEILE.
perform bdc_dynpro using 'SAPMM07M' '0221'.
perform bdc_field using 'RM07M-XSELK(01)'
'X'.
VV_PROCQTY = ITAB_LIPS-PROCQTY.
perform bdc_field using 'MSEG-ERFMG(01)'
VV_PROCQTY.
perform bdc_field using 'MSEG-CHARG(01)'
ITAB_LIPS-CHARG.
perform bdc_field using 'MSEG-INSMK(01)'
'S'.
ENDFORM. " 330_POST_GR_ITEMS
*& Form 340_SAVE_GR_DOC
FORM 340_SAVE_GR_DOC.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
CLEAR V_FAIL_IND.
PERFORM BDC_TRANSACTION USING 'MB0A'
CHANGING V_FAIL_IND.
ENDFORM. " 340_SAVE_GR_DOC
*& Form 350_UPDATE_DELIVERY_DOC
FORM 350_UPDATE_DELIVERY_DOC.
PERFORM 360_UPDATE_DELIVERY_HEADER.
LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
AND ERRFA IS INITIAL
AND ERRFB IS INITIAL
AND ERRFC IS INITIAL.
AND errfd IS INITIAL
AND errfe IS INITIAL.
PERFORM 370_UPDATE_DELIVERY_ITEMS.
ENDLOOP.
PERFORM 380_SAVE_DELIVERY_DOC.
ENDFORM. " 350_UPDATE_DELIVERY_DOC
*& Form 360_UPDATE_DELIVERY_HEADER
FORM 360_UPDATE_DELIVERY_HEADER.
perform bdc_dynpro using 'SAPMV50A' '0108'.
perform bdc_field using 'BDC_CURSOR'
'LIKP-VBELN'.
perform bdc_field using 'BDC_OKCODE'
'=UELA'.
perform bdc_field using 'LIKP-VBELN'
ITAB_LIPS_G-VBELN.
ENDFORM. " 360_UPDATE_DELIVERY_HEADER
*& Form 370_UPDATE_DELIVERY_ITEMS
FORM 370_UPDATE_DELIVERY_ITEMS.
IF ITAB_LIPS-ERRFD EQ 'X' OR
ITAB_LIPS-ERRFE EQ 'X' OR
ITAB_LIPS-ERRFF EQ 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
ENDIF.
perform bdc_dynpro using 'SAPMV50A' '0270'.
perform bdc_field using 'BDC_CURSOR'
'RV50A-VERUR_LA'.
perform bdc_field using 'BDC_OKCODE'
'=POPO'.
perform bdc_dynpro using 'SAPMV50A' '0111'.
perform bdc_field using 'BDC_CURSOR'
'RV50A-POSNR'.
perform bdc_field using 'BDC_OKCODE'
'=POPO'.
VV_POSNR = ITAB_LIPS-POSNR.
perform bdc_field using 'RV50A-POSNR'
VV_POSNR.
perform bdc_dynpro using 'SAPMV50A' '0270'.
perform bdc_field using 'BDC_CURSOR'
'LIPS-POSNR(01)'.
perform bdc_field using 'BDC_OKCODE'
'=LAPD'.
perform bdc_field using 'RV50A-LIPS_SELKZ(01)'
'X'.
perform bdc_dynpro using 'SAPMV50A' '0570'.
perform bdc_field using 'BDC_CURSOR'
'LIPS-MFRGR'.
perform bdc_field using 'BDC_OKCODE'
'=BACK'.
perform bdc_field using 'LIPS-MFRGR'
ITAB_LIPS-NEWMFRGR.
ENDFORM. " 370_UPDATE_DELIVERY_ITEMS
*& Form 380_SAVE_DELIVERY_DOC
FORM 380_SAVE_DELIVERY_DOC.
perform bdc_dynpro using 'SAPMV50A' '0270'.
perform bdc_field using 'BDC_CURSOR'
'RV50A-VERUR_LA'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
If GR document is not posted successfully, then do not update the
status of delivery document
CLEAR V_FAIL_IND.
PERFORM BDC_TRANSACTION USING 'VL32'
CHANGING V_FAIL_IND.
IF V_FAIL_IND = 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'VL32'
TABLES
DYNPROTAB = BDCDATA.
REFRESH BDCDATA.
ENDIF.
ENDFORM. " 380_SAVE_DELIVERY_DOC
Start new transaction according to parameters *
FORM BDC_TRANSACTION USING TCODE
CHANGING V_FAILURE_IND.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE CTUMODE
UPDATE CUPDATE
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
CLEAR V_FAILURE_IND.
IF L_SUBRC NE 0.
V_FAILURE_IND = 'X'.
CLEAR V_IND.
LOOP AT MESSTAB.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
IF MESSTAB-MSGTYP = 'E'.
ERRORTAB-TCODE = TCODE.
ERRORTAB-VBELN = ITAB_LIPS_G-VBELN.
ERRORTAB-ERROR_TEXT = L_MSTRING.
APPEND ERRORTAB.
V_IND = 'X'.
ENDIF.
ELSE.
IF MESSTAB-MSGTYP = 'E'.
ERRORTAB-TCODE = TCODE.
ERRORTAB-VBELN = ITAB_LIPS_G-VBELN.
ERRORTAB-ERROR_TEXT = TEXT-U01.
APPEND ERRORTAB.
V_IND = 'X'.
ENDIF.
ENDIF.
ENDLOOP.
IF V_IND IS INITIAL.
ERRORTAB-TCODE = TCODE.
ERRORTAB-VBELN = ITAB_LIPS_G-VBELN.
ERRORTAB-ERROR_TEXT = TEXT-U01.
APPEND ERRORTAB.
ENDIF.
ELSE.
IF TCODE = 'MB0A'.
LOOP AT MESSTAB WHERE MSGTYP = 'S'
AND MSGID = 'M7'
AND MSGNR = '060'.
IF NOT MESSTAB-MSGV1 IS INITIAL.
ITAB_LIPS_G-MBLNR = MESSTAB-MSGV1.
ENDIF.
ENDLOOP.
ELSEIF TCODE = 'VL32'.
ITAB_LIPS_G-DLVIND = 'X'.
ENDIF.
ENDIF.
IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
IF E_GROUP_OPENED = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = E_GROUP
USER = E_USER
KEEP = E_KEEP
HOLDDATE = E_HDATE.
E_GROUP_OPENED = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = TCODE
TABLES
DYNPROTAB = BDCDATA.
ENDIF.
REFRESH BDCDATA.
ENDFORM.
*& Form 335_POST_GR_ITEMS
FORM 335_POST_GR_ITEMS.
VV_ZEILE = ITAB_LIPS-ZEILE.
perform bdc_field using 'RM07M-XSELK(01)'
'X'.
VV_PROCQTY = ITAB_LIPS-PROCQTY.
perform bdc_field using 'MSEG-ERFMG(01)'
VV_PROCQTY.
perform bdc_field using 'MSEG-CHARG(01)'
ITAB_LIPS-CHARG.
perform bdc_field using 'MSEG-INSMK(01)'
'S'.
ENDFORM. " 335_POST_GR_ITEMS
*& Form 399_RETRIEVE_DOCUMENTS
&----that is a warning message only ... But if you want to fix it then replace all 000 with 001 in your write statement. The position instead of 000 you have to give 001
write : /000(10)....instead of this
write : /1(10) or write : /(10) or write : /001(10) any thing you can use.
regards
shiba dutta -
Excise tab is not coming in MIGO
Dear All ,
pl help that as user is trying to do G.R wrt inb. delv , let me brief out user had made a qty contract with an import vendor itis having two line items , now an Rel order ( material ) is created wrt this qty contract., now as user is trying to do GR wrt inbound delv so for first line item excise tab is displaying & the ex. tab is not displying for second line item , even i had checked in J1ID for mat & chap i.d combination it is maint. here , pl guide what else to check.
rgds,
sap11The process is as below;
1. ME21N - Create Import PO
2. MIRO - Customs Invoice
3. J1IEX - Capture Bill of Entry
4. MIGO - GR w.r.t. Import PO
5. J1IEX - Post Bill of Entry
6. MIRO - Import Vendor Invoice
7. MIRO - Clearing Agent Invoice
Please check the following
Follow the exactly same process as suggested above.
J1ID - Maintain Excise Indicator as 1 and rest all Excise Details as "NA" for Import Vendor (Also check for Material & Chapter ID Combination, CENVAT Determination, Excise Tax Rates, etc...)
ME21N - Import PO should have a Zero % Tax Code.
Maintain Number range in J1I9 for objects.
Regards -
Hi
while doing MIGO for material type finished goods the system is working fine and changing the movement type in the background
on the other hand same process is not working in case of raw material and while doing migo system is giving following error ' M7064b does not contain any suitable item'
checked for both the material(FG and raw material for any significant difference) , PO history etc.
but could not find any problem
could you suggest what all is needed to be checked in order to resolve it or anyone has faced this problem in the past
ManuHi Manu,
First explain the scenario which you are working on?
Is it a normal purchase or what?
Check out the following things incase of PO with raw materials.
1. Check whether you have released the PO if its subjected to release.
2. Check whether a GR doc already exists for the PO with the same qty.
3. Check whether confirmation option is enabled in the PO. If yes then you have to follow the process of inbound delv.
Regards, -
Hi All,
I have a requirement to create a delivery from sale order. Iam using BAPI_DELIVERYPROCESSING_EXEC bapi to create sale order. I have passed the data as below.
The below code is creating delivery in my ECC 6.0(Sand Box) but my client system is 4.7.
In this 4.7 system delivery not creating and not even giving any error. Please suggest how to resolve this.
tbl_request-document_numb = st_vbap-vbeln. "ZBAGDOCS-DOCUMENT_NUMBER
tbl_request-document_item = st_vbap-posnr.
tbl_request-ship_to = st_vbak-kunnr. "ZBAGMAST-CUSTOMER_ACCOUNT
tbl_request-sold_to = st_vbak-kunnr. "ZBAGMAST-CUSTOMER_ACCOUNT
tbl_request-sales_organisation = st_vbak-vkorg. "Vbak
tbl_request-distribution_channel = st_vbak-vtweg. "Vbak
tbl_request-division = st_vbak-spart. "Vbak
tbl_request-plant = st_vbap-werks. "Vbak
tbl_request-quantity_sales_uom = '1'. "
tbl_request-sales_unit = st_vbap-vrkme.
tbl_request-base_uom = st_vbap-meins.
tbl_request-material = st_vbap-matnr.
tbl_request-delivery_date = st_vbak-bstdk.
tbl_request-delivery_time = '160000'.
tbl_request-transp_plan_date = st_vbak-bstdk.
tbl_request-loading_date = st_vbak-bstdk.
tbl_request-goods_issue_date = st_vbak-bstdk.
tbl_request-extdelv_no = '98765'.
tbl_request-document_type = 'A'. "Delivery
tbl_request-document_type_predecessor = 'A'. "Sales Ord
tbl_request-document_type_delivery = 'LF'.
APPEND tbl_request.
CALL FUNCTION 'BAPI_DELIVERYPROCESSING_EXEC'
TABLES
request = tbl_request
createditems = tbl_items
return = tbl_return.
IF sy-subrc = 0.
MESSAGE ID 'ID' TYPE 'I' NUMBER '899' WITH 'Delivery Number' tbl_items-document_numb 'Created Successfully'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ELSE.
LOOP AT tbl_return.
WRITE:/ tbl_return-type,
tbl_return-id,
tbl_return-number,
tbl_return-message.
ENDLOOP.
Many Thanks In AdvanceFrom FM documentation:
This Business Application Interface (BAPI) is for internal communication
between Advanced Planner and Optimizer (APO) and
the SAP Logistics Execution System (LES).
It has not been released for external use.
We reserve the right to change the interface and
the functions in the interface without prior notification.
But you can use FMs for Outbound delv: RV_DELIVERY_CREATE or RV_DELIVERY_CREATE_SINGLE.
for Inbound delv: BBP_INB_DELIVERY_CREATE -
Implications of using PGR in Vl32N
Hi,
Can any one tell me the implication of using PGR in VL32N please?
My understanding was that it was same as GR in MIGO.
But, somehow in my system , nothing happens when PGR is done.
There are no errors and status is updated to GR processig completed at item level.
Thanks
AHThanks vikrama,
Please again go thru my question. I was asking if PGR was supposed to be the same as GR in MIGO?
Iam assuming you have this EDI set up in your company. So, how do you do statistical gr's for asn's you received?
do you run a batch job to look at all the inbound delv's posted and do a GR for them or do a collective run of PGR;s in Logistic execution for that date to process goods receipt.
Either way, what i need is is the PGR in VL32N creating a material document similar to GR posing in MIGO.
If so is ther any setting for that, because i do it and its doing nothing..
Thanks -
Hi,
I have an issue where i want PGR to be done automatically.
PO - Inbound Delv - TO - TO conf - PGR(automatic)
I have tried with Adopt Putaway quantity - using copy WM quantity to delv quantity and POST GR. but it is not working...
Is there anyother proces for auotmatic PGR.
Regrds,
IndhiraHi indhra,
In Manual method you can use LT12, where choose "adopt putaway qty=2"
For automating the above method, do customizing in WM - Interfaces . You can define Shipping Control for the Movement Type Level and maintain 2 in "copy WM quantity" against the repective W/H No./Mov type combination
i hope it will resolve your query.
regards
rahul -
DELV process code triggers unwanted inbound idoc!
Hi,
I am creating a delvry03 idoc with message type shpord.The process code is DELV.I am sending the idoc from LS to KU.I maintained the outbound parameters in both receiving and sender systems.The outbound is creating perfect.However, there is an unwanted inbound idoc that is being created.All the inbound idocs getting created in this way is in error.I am not able to understand why the inbound idoc is getting created.
I see DELV as both outbound and inbound process codes, but then i am not able to understnad why shpord message type is getting processed.I have not done the distribution model as the receiving system is customer.
Could someone help me out in this weird scenario.ThanksDuplicate in ABAP General deleted. Post in ONE forum only, please.
matt -
SPED inbound delivery creation, serial num not getting copied from out delv
We enabled SPED to create inbound delivery against outbound delivery
We observed Serial numbers are not getting copied from outbound delivery to inbound deliver
can some one help
Moderator message:
Locked. Reason: duplicate.
The new post: STO GR against outbound delivery/inbound delivery
Edited by: Csaba Szommer on Jan 9, 2012 4:16 PMHello Mohammed,
Go through these SAP Help Pages for Delivery Creation from SAP TM. It will help you to check where have you gone wrong is the setup.
Creation of ERP Deliveries from SAP TM:
ERP Logistics Integration - SAP Library
Creation of Delivery Proposals:
Creation of Delivery Proposals - ERP Logistics Integration - SAP Library
Monitoring of Delivery Creation:
Monitoring of Delivery Creation - ERP Logistics Integration - SAP Library
Kindly let me know if it works, or else give me some more detail regarding your steps you are doing and your scenario. It might be helpful to understand and then I can provide you a solution.
Thanks and best regards,
Navin -
WHICH basic type for doing inbound PO closing (to tick delv complete ind)?
Dear SAP Gurus,
The IDoc should tick the delivery complete indicator of a PO, that's it.
I think this should be very simple but I already tried using basic type PORDCH02 but not yet successful.
Need your advise:whether i used the correct basic type? etc.
Regards,
WILL.nobody answers.
-
Link between PO and Inbound Delivery - Delivery confirmation
Hi Gurus,
I have a question regarding the link of Purchase Order and Inbound delivery completed indicator.
This is my scenario. I had created a purhase order with qty 10, then i created a Inbound delivery with 8 qty then i did GR with reference to inbound delivery. Then looking at the purchase order , the PO is set to Delv. Completed. Looking also in the doc flow of the inbound delivery, the status is "complete".
Now , my question, if i go to VL31N and input the purchase order , i am still able to see the open qty which is "2". Is there is no way that the SAP will prompt me after i input the PO number in the VL31n as " Delivery completed" message or someting related to that. Since , in the PO its already Delv. completed?
Thanks.Check the toleance limits set in the delivery tab of purchase order. If the quanytity delivered is with in tolerance limits then system will set delivery completed indicator automatically.
Even though delivery completed indicator set you can further post the GR for remaining qty.
Regards,
B K -
Idoc WHSORD for inbound delivery
Hello,
We want to send inbound deliveries to an external WMS (not SAP WM) by using an output in the inbound delivery.
I tried to use idoc WHSORD (basic type DELVRY01) as for Outbound delivery.
I obtained an error message when processing the output : "The message record of the message control contains a partner role with a partner type LS that cannot be used here. Only the 'KU' and 'LI' partner types are allowed."
<u>Configuration done</u> (same as outbound delivery) :
Output : Medium "6 EDI" / Partner type LS
Partner profile (WE20) : Partner type LS / Partner role LS /Message control : Application E1 / process code DELV.
Finally, I've been able to generate one idoc from the inbound delivery by using medium "A ALE" and partner type LI "vendor". But I need to do it for a LS partner as we do want to maintain partner profile for each vendor.
Is this due to some missing configuration linked to application E1 (i.e allow partner type LS ?) ?
How can we solve this ?
Thanks a lot for your helpHi zhiqiang,
In order to test inbound idocs, you can use transaction WE19 to create manually idocs.
As pre-requisite, you have to maintain ALE configuration : port and partner profiles.
Then in WE19, you can create an idoc from message type : fill all the fields you need to and delete unuse segments. Then click on "Standard inbound" and your idoc will be received in your SAP system.
Check the status in transaction BD87.
To fill correctlly your idoc :
1. You can find documentation on message type in transaction WE60 (when you go in this transaction, check the documention is "active" => Goto => user settings => "Documentation output" and "field value output" must be ticked)
2. In WE19, for some fields, if you press F4, you will get list of possible values.
Good luck,
JP
Maybe you are looking for
-
Dear all, I planned to use an Oracle 10G Release 2 database for a new OWB project. Research on the web just told me that this new version of the database does not support OWB, because of a check for DBA privileges. The website advises to either use a
-
Has anyone ever validated CertPath using J2SDK1.4.0?
I only installed J2SDK1.4.0 I tried many example, but always got such error info: Validation failure, cert[2] :basic constraints check failed: this is not a CA certificate I have tried many situation, including creat and sign certificate with my own
-
SAPbobsCOM.Documents.Lines.Text ReadOnly
I'm trying to do something like this oSapInvoice.Lines.Text = oDocDett.Text where oSapInvoice is a SAPbobsCOM.Documents, but the Text property is readonly. How can I do to copy the column "Item Details" (Text property) in a document line using the SD
-
Recompressing PDF files?
I just got sent a bunch of PDF files (archived newsletter issues) for inclusion on a web page. Unfortunately, they were apparently converted using "High Quality Print" settings or some such, since many of them are 2 and 3 MB in size, obviously unusab
-
How to compare two Universes of two different Datamarts?
Post Author: Shrikant CA Forum: Integrated Solutions Hi.. all I want to compare two universes of different data mart to check the table structure. Can anybody please tell me how to compare two Universes of different Datamarts?How i can achive this us