Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

How to check the Production order exits

Hi Experts

Modification to processing of Command Orders & Tickets

We require a modification to the processing being performed on sales data originating from the Command Concrete system and potentially from other systems yet to come online (e.g. Pinkenba Cement plant).

The Sap process involved is ZINT_INBOUND_POLLING and within that, ZINT_CSTPORD_ROUTINES.

The problem

Currently there is an assumption that every sales order (and its deliveries) will include a product which is made to order, i.e. for which a production order will be required.

In ZINT_CSTPORD_ROUTINES, a check is made to identify the production order linked to the sales order. If there is no such production order (usually because of the customeru2019s credit status) then processing of the ticket is terminated.

This assumption would fall down if an order was to be raised (in Command) on which there is no concrete material. For example, if we sold a bag of pigment or a screed to a customer. In this case the item would be sold from stock and there would be no need for a production order.

The solution

In the routine which checks for the existence of a production order, modify the code as follows:

Inspect each item on the sales order

If (and only if) there is at least one item with a category of u201CZTACu201D then check for a production order, otherwise process the order in the usual manner.

----


ZINT_CSTPORD_ROUTINES -

&----


*& Form process_inbound_data

&----


  • Create prod. orders from ticket data extracted from the COMMAND

  • system. Note that large portions of the code in this routine

  • have been copied from the retired ZPPU_COMMAND_PRODUCTION

  • interface program. This was done (1) because the old code works

  • and (2) to save development time.

----


  • -->T_ZINT_IDATA Internal table of interface data

  • -->T_ZINT_PARAM Internal table of interface parameters

  • -->T_ZINT_MSLOG Internal table of messages

  • -->P_ZINT_ID Interface ID

  • -->P_ZINT_TY Inteface type

  • -->P_ZINT_IS IDOC group for interface

  • -->P_ZINT_DL Flag: delete IDOC group when complete

  • -->P_ZINT_AL Flag: run in standalone mode

  • -->P_ZINT_NW Flag: do not log warning messages

  • -->P_ZINT_SQ Interface sequence number

  • <--P_ZINT_RC Return code (<>0=>error)

----


form process_inbound_data tables t_zint_idata structure zint_idata

t_zint_param structure zint_param

t_zint_mslog structure zint_mslog

using p_zint_id type zint_id

p_zint_ty type zint_ty

p_zint_is type zint_is

p_zint_dl type zint_dl

p_zint_al type zint_al

p_zint_nw type zint_nw

p_zint_sq type zint_sq

changing p_zint_rc type zint_rc.

.....................................

...........................................

.......................................................

program is continuing .............

                                              • I WANT TO WRITE A CODING HERE **********************

CHECK IF PRODUCTION ORDER REQUIRED

IF NOT THEN GO TO PERFORM UPDATE DATA

if production order required then check

for each item on sales order item list

with item category = 'ZTAC' then

return true

next

end function

...................................

if there is no production code

these has to be check from VBAP TABLE field VBELN and PSTYV (ZTAC,ZTAN Etc)

select * from Vbap WHERE VBELN = '00000269951' and VBAP.PSTYV = 'ZTAC','ZTAN' Etc

**************************************************************************************

  • No production order?

elseif lva_prodord is initial.

clear v_messg.

call function 'CONVERSION_EXIT_ALPHA_OUTPUT'

exporting

input = lva_filemat

importing

output = lva_filemat.

  • No production order found - log a warning message.

concatenate 'Production Order not be found for'

'Command order' lva_cmdord

'Material' lva_filemat

'Customer' lwa_02-customer

into v_messg separated by space.

perform write_log_entry

tables t_zint_mslog

using 'E' 'ZINT_CSTPORD_ROUTINES'

'FIND_SAP_PRODORD'

v_messg

p_zint_nw

lwa_01-ticketnumber. " RJS

continue.

endif.

  • Production Order WAS found... Continue creating IDOCS

lwa_hdrlevel-postg_date = lwa_01-ticketdate.

  • Obtain the storage location parameter value.

read table t_zint_param with key zint_fn = 'LGORT'.

if sy-subrc ne c_noerr.

perform write_log_entry

tables t_zint_mslog

using 'E' 'ZINT_CSTPORD_ROUTINES'

'PROCESS_INBOUND_DATA'

'Parameter LGORT is missing from ZINT_PARAM'

p_zint_nw

lwa_01-ticketnumber. " RJS

exit.

endif.

loop at l_it_05 into lwa_05

where ticketnumber = lwa_01-ticketnumber.

clear lwa_gm_item_create.

lva_filemat = lwa_05-material.

if lva_filemat eq lva_prodmat.

concatenate 'Command ticket-' lwa_05-ticketnumber

into lwa_hdrlevel-conf_text.

lwa_hdrlevel-conf_quan_unit = lwa_05-unitofmeasure.

lwa_hdrlevel-yield = lwa_05-quantity.

  • check whether the confirmed value + current delivery value is equal *

  • the production order qty. If the production order value is less

  • than the total delivered value, set final conf indicator and clear

  • reservations

lva_wemng = lva_wemng + lwa_05-quantity.

if lva_wemng < lva_psmng.

lwa_hdrlevel-clear_res = c_false.

lwa_hdrlevel-fin_conf = ' '.

else.

lwa_hdrlevel-clear_res = c_true.

lwa_hdrlevel-fin_conf = 'X'.

endif.

move: 'Z1BP_PP_HDRLEVEL' to t_idoc_data-segnam,

lwa_hdrlevel to t_idoc_data-sdata.

append t_idoc_data.

clear lva_formmat.

lva_formmat = lwa_05-material.

lwa_gm_item_create-material = lva_formmat.

lwa_gm_item_create-plant = lwa_03-plant.

lwa_gm_item_create-ref_date = lwa_01-ticketdate.

lwa_gm_item_create-prod_date = lwa_01-ticketdate.

lwa_gm_item_create-move_type = '101'.

lwa_gm_item_create-spec_stock = 'E'.

lwa_gm_item_create-sales_ord = lva_saleord.

lwa_gm_item_create-entry_qnt = lwa_05-quantity.

lwa_gm_item_create-entry_uom = lwa_05-unitofmeasure.

lwa_gm_item_create-orderid = lva_prodord.

lwa_gm_item_create-move_mat = lva_formmat.

lwa_gm_item_create-move_plant = lwa_03-plant.

lwa_gm_item_create-mvt_ind = 'F'.

clear t_idoc_data.

move: 'E1BP2017_GM_ITEM_CREATE' to t_idoc_data-segnam,

lwa_gm_item_create to t_idoc_data-sdata.

append t_idoc_data.

else.

clear: lva_loggr,

lva_formmat.

lva_formmat = lwa_05-material.

select single loggr into lva_loggr from marc

where matnr = lva_formmat

and werks = lwa_03-plant.

if sy-subrc ne 0.

clear v_messg.

  • No logistics handling group - log a warning message.

concatenate 'No logistics handling group for material'

lva_formmat

'in plant'

lwa_03-plant

into v_messg separated by space.

perform write_log_entry

tables t_ldata

using 'W' 'ZINT_CSTPORD_ROUTINES'

'PROCESS_INBOUND_DATA'

v_messg

p_zint_nw

lwa_01-ticketnumber. " RJS

clear lva_loggr.

endif.

if lwa_03-satsur eq 'T'.

lwa_e1edl21-lprio = 30.

else.

lwa_e1edl21-lprio = 20.

endif.

else.

if lwa_03-satsur eq 'T'.

lwa_e1edl21-lprio = 10.

else.

lwa_e1edl21-lprio = ' '.

endif.

endif.

lwa_e1edl21-berot = lwa_04-driver.

move: 'E1EDL21' to t_idoc_data-segnam,

lwa_e1edl21 to t_idoc_data-sdata.

append t_idoc_data.

lwa_e1edl55-qualf = '001'.

lwa_e1edl55-refnr = lva_saleord.

move: 'E1EDL55' to t_idoc_data-segnam,

lwa_e1edl55 to t_idoc_data-sdata.

append t_idoc_data.

  • Loop at materials - create delivery entry for each

loop at l_it_05 into lwa_05

where ticketnumber = lwa_01-ticketnumber.

clear t_idoc_data.

lwa_e1edl24-matnr = lwa_05-material.

lwa_e1edl24-werks = lwa_03-plant.

lwa_e1edl24-vfdat = lwa_01-ticketdate.

lwa_e1edl24-lfimg = lwa_05-quantity.

lwa_e1edl24-vrkme = lwa_05-unitofmeasure.

lwa_e1edl24-lgort = t_zint_param-zint_fv.

clear lva_loggr.

lva_formmat = lwa_05-material.

clear lva_loggr.

select single loggr into lva_loggr from marc

where matnr = lva_formmat

and werks = lwa_03-plant.

if sy-subrc ne 0.

  • No logistics handling group - log a warning message.

concatenate 'No logistics handling group for material'

lva_formmat

'in plant'

lwa_03-plant

into v_messg separated by space.

perform write_log_entry

tables t_ldata

using 'W' 'ZINT_CSTPORD_ROUTINES'

'PROCESS_INBOUND_DATA'

v_messg

p_zint_nw

lwa_01-ticketnumber. " RJS

lva_loggr = 'BBIN'.

endif.

if lva_loggr is initial.

move: 'E1EDL24' to t_idoc_data-segnam,

lwa_e1edl24 to t_idoc_data-sdata.

append t_idoc_data.

endif.

endloop.

clear: lva_xabln,

lva_vbeln,

l_vbfa.

  • Matching ticket against a Delivery?

select single xabln vbeln into (lva_xabln,lva_vbeln) from likp

where xabln = lwa_01-ticketnumber.

if sy-subrc = 0.

  • If found, does this delivery match the sales order?

select * from vbfa into l_vbfa

where vbelv = lva_saleord

and vbeln = lva_vbeln.

exit.

endselect.

endif.

  • No matching delivery found, or Matching delivery, but for other Sls Ord

if lva_xabln is initial

or ( lva_vbeln <> space and l_vbfa is initial ).

if not lva_saleord is initial.

perform create_delivery_idocs tables t_zint_mslog

using s_idcgp

lwa_01-ticketnumber

p_zint_nw.

else.

concatenate 'Error finding a Sales Order for ticket "'

lwa_01-ticketnumber

'" reprocess the file AFTER'

' the sales order issues have been fixed'

into lva_outtext.

perform write_log_entry tables t_zint_mslog

using 'E'

'ZINT_CSTPORD_ROUTINES'

'PROCESS_INBOUND_DATA'

lva_outtext

p_zint_nw

lwa_01-ticketnumber. " RJS

endif.

else.

concatenate 'Command Ticket "'

lwa_01-ticketnumber

'" has already been processed into delivery "'

lva_vbeln

'"'

into lva_outtext.

perform write_log_entry tables t_zint_mslog

using 'I'

'ZINT_CSTPORD_ROUTINES'

'PROCESS_INBOUND_DATA'

lva_outtext

p_zint_nw

lwa_01-ticketnumber. " RJS

refresh t_idoc_data.

endif.

endif.

refresh t_idoc_data.

  • Write out all messages collected so far

perform update_data tables t_zint_mslog

using p_zint_id p_zint_ty.

endloop.

  • Write out all messages collected so far

perform update_data tables t_zint_mslog

using p_zint_id p_zint_ty.

endform. " process_inbound_data

Thnaks

Regards

Tags:
Former Member
Not what you were looking for? View more on this topic or Ask a question