Production Order Interface

Hi All,
I am having 2 questions in regards to the interface development:
1. I have to read and validate following details from the production order and prepare a file to write it in to the Network directory.
    -> Get all production order from (Table : AFKO)
    -> Check the status of Production Order
         ( Get OBJNR from table AUFK and check status in table JEST)
    -> Get the details for Operation No. 0020
         Which table do I look for ? (
         Check the status for that operation ( Is it the same table I can use?)
         If status is PCNR(Partially Confirmed)  then which table I can look for to get the open quantity and actual quantity?
         Get details regarding Work Center (Table?). (AFKO->AFVC->CRHD)
2. Second scenario, I am getting a file to update the production order.
     -> I have to update the basic start & finish date, work center & status.
          I can not use BAPI_PRODORDER_CHANGE for it because it does not update work center of particular operation.
          Is BDC is ideal for this situation?
If I am using different table then please correct me.
Thanks for you valuable suggestion.
Harry

Resolved by myself.

Similar Messages

  • PP-WM Interface - Production Order Number to appear in Transfer Order

    Hi
    I ran Material Staging in Production Order for components upon Release. In MF60, listed out the Rel. Order Parts and created Transfer Requirements for these parts. This Transfer Requirements were converted to Transfer Order.
    In the Transfer Order Header, in the Reference Data Tab, the Requirement Number is appearing as P and 1 by default.
    "P" stands for Requirement type 'Production Supply'.
    Actually I wanted it to come as  "F" (Order) and the Production Order number.
    What settings should I do to get this result.
    (When I create a Transfer Requirement Manually, I can input this data. This appears correctly in TO)
    Regards
    Krishnaraj

    answered

  • Creation of Production order in Past dates using RFC

    Hi all,
    I am using RFC to Create a production order based on the datas available from MES systems.Here the process flow is From MES system datas are passed to interface in file format then from interface will calll the RFC so that the RFC will do the function of Creating the Production order & release in SAP.
    Here i face an issue that i have 3 shifts at the end of every shift i have to tranfer the datas from MES to SAP .Which means i have to create 3 Production orders for a day.My issue here is the third shift datas will be availble for me in the next day morning after that only i am able to transfer theses datas to SAP.In this case i want the SAP to create th Production order  for third shift in the Previous day time.
    Ashift - 7AM t0 3PM
    BShift-3PM to 11PM
    CShift-11 PM to Next day morning 7 AM
    I need SAP to create Production order for Shift C on 11 PM of the Previous day when i transfer it on next day morning 7AM.
    Is this possible.
    Thanks in Advance,
    MBN

    Hi,
    I mean the Production Created date as the basic date only.
    My requirement is for the C shift i will get the output from the MES on the next day morning.After that i wwill transfer the production datas to SAP throgh Interface at that time i need the basic start date & time  of the production order to be the C shift starting time that is previous day night 11.00 PM.
    Eg.
    C shift  date 12.04.2010 night 11PM to 7AM
    i transfer the c shift production datas from MES to SAP on 13/04/2010 Morning 7AM.But i want these datas to create basic start date & time of the production order on 12/04/2010  11PM.
    What should be done to get these.
    Thanks in advance,
    MBN

  • Creation Of Production Order without PP module

    Hi PP guru's
    There is one Specific requirment from Client side, the Requirement is
    They are not supposed to implement the PP module in R/3 but they want to get generate the Production Order in R/3 through some interface with lagacy system, based on that they want GR at warehouse,They are using MTS system
    They are doing all Production Planning in the exiting Lagacy system and the production Order will be created via interface from those system
    for that requirment what master data are requred so that we can full fill the client requirment
    valuable suggestion will get awarded
    Thanks in advance

    Dear,
    Technically speaking it is not possible You can shear same thing with your clint also --as there requirement is not specific.
    Hope clears to you.
    Regards,
    R.Brahmnkar

  • Production Order and Internal Order for each item of the sales order

    Hi
       I am developing Make To Order Report where I have to display the MTO Line Items and non MTO Line Items. For non MTO Line Items I have to display Internal order with Planned and Actual Costs and also Production Order with Planned and Actual Costs. Could anybody tell how to get the Internal order no and production order with Planned and Actual costs for each line item for a sales order.
    Thanks
    Naga

    Hi,
    You can get the Production orders, Planned orders, Internal orders generated for Sales order item from AFPO table (use fields KDAUF-Sales order number & KDPOS-Sales order item). Then to identify the order type use order category (AUTYP) from table AUFK.
    Once you have the Production/internal order, you can ge the cost from COSS and COSP table. Use the object number from AUFK to get the cost entries from COSS & COSP.
    You can use the following sample code as reference.
    Hope this is helps.. (Don't forget to mark it... )
    Form GET_COSTS                                                       *
    Get the material cost, labour hours and the labour cost for the      *
    sales order material.                                                *
    There are no interface parameters to be passed to this subroutine.   *
    FORM GET_COSTS.
      DATA V_OBJNR LIKE AUFK-OBJNR.
    DATA v_menge LIKE vbap-kwmeng.
      SELECT SINGLE OBJNR
        INTO V_OBJNR
        FROM AUFK
       WHERE AUFNR EQ AFPO-AUFNR.
      SELECT * FROM COSS
       WHERE OBJNR EQ V_OBJNR
         AND WRTTP IN ('01', '04'). " p_wrttp. "Labour Cost ( Plan, Actual)
        PERFORM GET_VALUES_FROM_COSS.
      ENDSELECT.
      SELECT * FROM COSP
       WHERE OBJNR EQ V_OBJNR
         AND WRTTP IN ('01', '04')         " p_wrttp
         AND KSTAR NE '0000510033'. " EQ p_kstar2.      "Material Cost
        PERFORM GET_VALUE_FROM_COSP.
      ENDSELECT.
    Get the unit cost of the production order by dividing the production
    cost by the order quantity. The result will be multiplied by the
    GL posting qunatity (Delivery quantity) to get the production cost
    for the quantity being deluivered.
      IF NOT AFPO-PSMNG IS INITIAL.
        OUT_REC-LABOUR_HOURS_ACT = OUT_REC-LABOUR_HOURS_ACT / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_HOURS_ACT =
                          OUT_REC-ADDNL_LABOUR_HOURS_ACT / AFPO-PSMNG.
        OUT_REC-LABOUR_HOURS_PLN = OUT_REC-LABOUR_HOURS_PLN / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_HOURS_PLN =
                         OUT_REC-ADDNL_LABOUR_HOURS_PLN / AFPO-PSMNG.
        OUT_REC-LABOUR_COST_ACT = OUT_REC-LABOUR_COST_ACT / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_COST_ACT =
                         OUT_REC-ADDNL_LABOUR_COST_ACT / AFPO-PSMNG.
        OUT_REC-LABOUR_COST_PLN = OUT_REC-LABOUR_COST_PLN / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_COST_PLN =
                         OUT_REC-ADDNL_LABOUR_COST_PLN / AFPO-PSMNG.
        OUT_REC-MATERIAL_COST_ACT = OUT_REC-MATERIAL_COST_ACT / AFPO-PSMNG.
        OUT_REC-ADDNL_MATERIAL_COST_ACT =
                         OUT_REC-ADDNL_MATERIAL_COST_ACT / AFPO-PSMNG.
        OUT_REC-MATERIAL_COST_PLN = OUT_REC-MATERIAL_COST_PLN / AFPO-PSMNG.
        OUT_REC-ADDNL_MATERIAL_COST_PLN =
                         OUT_REC-ADDNL_MATERIAL_COST_PLN / AFPO-PSMNG.
      ENDIF.
    Multiply the calculated Unit Production costs with the GL quantity to
    get the actual production cost of the quantity delivered.
    Calculation for Labour Hours
      OUT_REC-LABOUR_HOURS_ACT = OUT_REC-LABOUR_HOURS_ACT *
                                 OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_HOURS_ACT = OUT_REC-ADDNL_LABOUR_HOURS_ACT *
                                 OUT_REC-QUANTITY.
      OUT_REC-LABOUR_HOURS_PLN = OUT_REC-LABOUR_HOURS_PLN *
                                 OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_HOURS_PLN = OUT_REC-ADDNL_LABOUR_HOURS_PLN *
                                 OUT_REC-QUANTITY.
    Calculation for Material Cost
      OUT_REC-MATERIAL_COST_ACT = OUT_REC-MATERIAL_COST_ACT *
                                  OUT_REC-QUANTITY.
      OUT_REC-ADDNL_MATERIAL_COST_ACT =
          OUT_REC-ADDNL_MATERIAL_COST_ACT * OUT_REC-QUANTITY.
      OUT_REC-MATERIAL_COST_PLN = OUT_REC-MATERIAL_COST_PLN *
                                  OUT_REC-QUANTITY.
      OUT_REC-ADDNL_MATERIAL_COST_PLN =
          OUT_REC-ADDNL_MATERIAL_COST_PLN * OUT_REC-QUANTITY.
    Calculation for Labour cost
      OUT_REC-LABOUR_COST_ACT   = OUT_REC-LABOUR_COST_ACT *
                                   OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_COST_ACT = OUT_REC-ADDNL_LABOUR_COST_ACT *
                                  OUT_REC-QUANTITY.
      OUT_REC-LABOUR_COST_PLN   = OUT_REC-LABOUR_COST_PLN *
                                  OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_COST_PLN = OUT_REC-ADDNL_LABOUR_COST_PLN *
                                  OUT_REC-QUANTITY.
    Get the planned material cost from the total of the planned cost of
    the component materials in the production order confirmations.
      SELECT BWART MENGE MATNR SHKZG FROM AUFM
        INTO (AUFM-BWART, AUFM-MENGE, AUFM-MATNR, AUFM-SHKZG)
       WHERE AUFNR EQ AFPO-AUFNR.
        CHECK AUFM-BWART NE '101'.
        READ TABLE I_MBEW WITH KEY MATNR = AUFM-MATNR
                                   BWKEY = AFPO-DWERK.
        IF SY-SUBRC NE 0.
          SELECT MATNR BWKEY ZPLPR LPLPR PEINH
            FROM MBEW
            INTO I_MBEW
           WHERE MATNR EQ AUFM-MATNR
             AND BWKEY EQ AFPO-DWERK.
            APPEND I_MBEW.
          ENDSELECT.
        ENDIF.
        IF SY-SUBRC EQ 0.
          IF I_MBEW-ZPLPR NE 0.
            IF AUFM-SHKZG EQ 'H'.
              OUT_REC-PLANNED_MATERIAL_COST =
              OUT_REC-PLANNED_MATERIAL_COST +
                           ( I_MBEW-ZPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ELSE.
              OUT_REC-PLANNED_MATERIAL_COST =
              OUT_REC-PLANNED_MATERIAL_COST -
                           ( I_MBEW-ZPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ENDIF.
          ELSEIF I_MBEW-LPLPR NE 0.
            IF AUFM-SHKZG EQ 'H'.
              OUT_REC-CURRENT_MATERIAL_COST =
              OUT_REC-CURRENT_MATERIAL_COST +
                           ( I_MBEW-LPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ELSE.
              OUT_REC-CURRENT_MATERIAL_COST =
              OUT_REC-CURRENT_MATERIAL_COST -
                           ( I_MBEW-LPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ENDIF.
          ENDIF.
        ENDIF.
      ENDSELECT.
    Get the Future material cost per Unit by deviding the calculated
    Future material cost above with the goods reciept quantity to, then
    multiply the unit cost with the GL quantity to get the Future material
    Cost for the Quantity delivered. (Quantity in the entery from GLPCA
    Table).
      IF NOT AFPO-WEMNG IS INITIAL.
        OUT_REC-PLANNED_MATERIAL_COST =
           OUT_REC-PLANNED_MATERIAL_COST / AFPO-WEMNG * OUT_REC-QUANTITY.
        OUT_REC-CURRENT_MATERIAL_COST =
           OUT_REC-CURRENT_MATERIAL_COST / AFPO-WEMNG * OUT_REC-QUANTITY.
      ENDIF.
    ENDFORM.                               " GET_COSTS
    Form GET_VALUE_FROM_COSP                                             *
    Get the Material cost from COSP table.                               *
    There are no interface parameters to be passed to this subroutine.   *
    FORM GET_VALUE_FROM_COSP.
      FIELD-SYMBOLS: <FS> TYPE ANY.
      DATA: V_COMPONENT TYPE I.
    Cummulate the posting values of all the 16 period buckets as to get
    total production order cost. This is to handle the aprtial posting of
    prodction order values in diffrent periods.
      V_COMPONENT = 15.
      DO 16 TIMES.
        ADD 1 TO V_COMPONENT.
        ASSIGN COMPONENT V_COMPONENT OF STRUCTURE COSP TO <FS>.
        IF COSP-WRTTP EQ '04' AND COSP-KSTAR EQ P_KSTAR2.
          ADD <FS> TO OUT_REC-MATERIAL_COST_ACT.
        ELSEIF COSP-WRTTP EQ '04'.
          ADD <FS> TO OUT_REC-ADDNL_MATERIAL_COST_ACT.
        ELSEIF COSP-WRTTP EQ '01' AND COSP-KSTAR EQ P_KSTAR2.
          ADD <FS> TO OUT_REC-MATERIAL_COST_PLN.
        ELSEIF COSP-WRTTP EQ '01'.
          ADD <FS> TO OUT_REC-ADDNL_MATERIAL_COST_PLN.
        ENDIF.
      ENDDO.
    ENDFORM.                               " GET_VALUE_FROM_COSP
    Form GET_VALUES_FROM_COSS                                            *
    Get the Labour cost and Labour hours from the COSS table.            *
    There are no interface parameters to be passed to this subroutine.   *
    FORM GET_VALUES_FROM_COSS.
      FIELD-SYMBOLS: <FS1> TYPE ANY,
                     <FS2> TYPE ANY.
      DATA: V_COMPONENT1 TYPE I,
            V_COMPONENT2 TYPE I.
    Cummulate the posting values of all the 16 period buckets as to get
    total production order cost. This is to handle the aprtial posting of
    prodction order values in diffrent periods.
      V_COMPONENT1 = 15.
      V_COMPONENT2 = 111.
      DO 16 TIMES.
        ADD 1 TO: V_COMPONENT1, V_COMPONENT2.
        ASSIGN COMPONENT V_COMPONENT1 OF STRUCTURE COSS TO <FS1>.
        ASSIGN COMPONENT V_COMPONENT2 OF STRUCTURE COSS TO <FS2>.
        IF COSS-WRTTP EQ '04' AND COSS-KSTAR EQ P_KSTAR1.
          ADD <FS1> TO OUT_REC-LABOUR_COST_ACT.
          ADD <FS2> TO OUT_REC-LABOUR_HOURS_ACT.
        ELSEIF COSS-WRTTP EQ '04'.
          ADD <FS1> TO OUT_REC-ADDNL_LABOUR_COST_ACT.
          ADD <FS2> TO OUT_REC-ADDNL_LABOUR_HOURS_ACT.
        ELSEIF COSS-WRTTP EQ '01' AND COSS-KSTAR EQ P_KSTAR1.
          ADD <FS1> TO OUT_REC-LABOUR_COST_PLN.
          ADD <FS2> TO OUT_REC-LABOUR_HOURS_PLN.
        ELSEIF COSS-WRTTP EQ '01'.
          ADD <FS1> TO OUT_REC-ADDNL_LABOUR_COST_PLN.
          ADD <FS2> TO OUT_REC-ADDNL_LABOUR_HOURS_PLN.
        ENDIF.
      ENDDO.
    ENDFORM.                               " GET_VALUES_FROM_COSS

  • Open production orders and outbound delivery after go-live

    Hello All,
    I tried to search answer for this question but could not find answer.
    Could anybody suggest, what to do with open production orders and outbound delivery after go-live when WM is activated. As, after go-live WM-PP interface will be activated and system should consume material from storage bin specified in control cycle and that will happen for newly created production order after go-live,but what about existing production orders how to update production supply area against work center in production order.
    Similarly with outbound delivery how to update WM status after go-live.
    Thanks in advance

    Thanks to both Jurgen and Sander
    Regarding production order yes, one way is to re-read PP master data in production orders, but is that the only way to handle this or do we have any other option?
    I was aware of re-read PP master data but it will real time consuming and also if it will problematic for already released or partially confirmed production orders.

  • Open TRs not getting deleted after TECO production order

    Hi,
    We're having an issue.  We're using WMPP interface to supply the production line for the production orders.  The auto TRs are generated when the production orders are released. 
    After TECO the production orders, the open TRs are not getting deleted automatically.
    Could anyone know if these TRs get deleted automatically when we do the TECO production order?
    If yes, do we have any restriction or condition based on this, the TRs get deleted?
    Please explain.
    Thank you.
    with regards,
    Muthu.

    Hi Abhijit,
    Thank you for your reply.  It does not help me.
    The auto TR creation is happening now as required.  No issue on this.
    When you do the TECO, it also cancels the TRs.  I tested this also. 
    There're some scenario this open TRs cancellation is not happening.  I do not know when these open TRs are not cancelled.  If you know answer for this, please let me know.
    Thank you for your help and time.
    with regards,
    Muthu.

  • IDOC/BAPI for Production order creation from Legacy system

    Hi all
    We are using an interface to create Production orders from legacy to SAP. Would you recommend an IDOC or a BAPI to create Production orders. If IDOC or BAPI then could you please mention which one?
    thanks a bunch

    Hi John,
    For your purposes, please use BAPI for production order creation from legacy system. There is no standard inbound IDoc available to use. SAP has an IDoc for outbound interface only (message type LOIPRO).
    If there is an inbound IDoc available, I would recommend to use an IDoc.
    IDoc technology has excellent error handling and will allow you to reprocess an error (if any).
    BAPI is also good approach to use and fast in term of  processing.
    For BAPI approach, you can use BAPI BAPI_PRODORD_CREATE.
    Hope this will help.
    Regards,
    Ferry Lianto

  • How to attempt production orders and get feedback by using IDocs

    Hi,
    I'm new new to SAP and R3 respectively mySAP. I need to know how to use IDocs (over file system) to attempt production orders to an extern application and how to get the feedback of the whole orders and single operations.
    I found the IDoc-base-type "PPCC2RECORDER01" to send production orders. Is that the right base type for production orders?
    (In consideration of compatibility and support me was recommend to avoid the old types OPERA2 and CONF21.)
    What IDoc-types do I need to get feedback about a production order and its operations?
    I hope someone is understanding my questions is able to help me. Please apologize my broken English.
    Thanks!
    Hannes

    PROGRAM....... ZRCCLORDPROC
    TITLE......... Production Odrer Idocs
    AUTHOR........ Aveek Ghose
    DATE WRITTEN.. 15/09/2006
    R/3 RELEASE... 4.6C
    =====================================================================*
    COPIED FROM... N/A
    DESCRIPTION...
    *& Creation of production order IDOCs to a given selection
    *& This program selects to an input given via the selection screen the *
    *& corresponding production orders from the database. Then the function
    *& module for creation of planned order idocs is called.               *
    *& In general this report is called from the report RCCLTRAN, but it   *
    *& can also be used for its own.                                       *
    =====================================================================*
    PROGRAM TYPE.. Outbound Interface
    DEV. CLASS.... ZPD1
    LOGICAL DB.... N/A
    =====================================================================*
    SCREENS....... N/A
    GUI TITLE..... N/A
    GUI STATUS.... N/A
    TRANSACTIONS.. N/A
    USER EXITS.... N/A
    =====================================================================*
    CHANGE HISTORY                                                       *
    Date       By        Correction Number & Brief Description     Release
    Tables / Structures
    REPORT  zrcclordproc
            NO STANDARD PAGE HEADING
            MESSAGE-ID ZCUST
            LINE-COUNT 65(0)
            LINE-SIZE 255.
    INCLUDE RCORDO01.                    " PBO-Modules                   *
    INCLUDE RCORDI01.                    " PAI-Modules                   *
    INCLUDE RCORDF01.                    " FORM-Routines                 *
    --> Global data
    TYPE-POOLS: cloi.
    include zprodata.        "Types / constants for Orderselection
    include zrcordtop.                      "Tables / Data for this report
    include zrcordtop1.
    include yrccl_constants.
    TABLES : jcds,
             tvarv,
             zzzz_xref_data.
    TYPES:  BEGIN OF ty_date,
              aufnr  TYPE aufnr,
              aedat  TYPE aufaedat,
              aezeit TYPE co_chg_time,
              erdat  TYPE auferfdat,
              erfzeit TYPE co_ins_time,
              loekz  TYPE aufloekz,
              indicator(1) TYPE c,
           END OF ty_date.
    DATA: is_enhancement type isu_ord_segments_determine.
    DATA: itab_date TYPE STANDARD TABLE OF ty_date
                         INITIAL SIZE 0 WITH HEADER LINE.
    DATA: f_objnr TYPE j_objnr.
    DATA: g_report_sub_head(72) TYPE c,          "Sub-Header hold area
          g_report_head(72)     TYPE c,          "Header hold area
          g_run_date(72)        TYPE c,          "Holds message for Run date
          g_run_time(72)        TYPE c.          "Holds message for Run time
    DATA:
    f_old_date TYPE datum,
    f_old_time TYPE uzeit,
    f_continue(1) TYPE c.
    END OF INSERTION DS001
    --> Überschrift für sonstige Einstellungen
    SELECTION-SCREEN SKIP 2.
    SELECTION-SCREEN BEGIN OF BLOCK miscellaneous WITH FRAME.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN COMMENT 1(30) text-001. "#EC
    SELECTION-SCREEN SKIP 1.
    *>> Logical system comes from Report RCCLTRANS
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(30) text-002.
    SELECTION-SCREEN POSITION 35.
    PARAMETERS opt_sys LIKE tbdlst-logsys.
    SELECTION-SCREEN END OF LINE.
    *>> Messagetype comes from Report RCCLTRANS
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(30) text-003.
    SELECTION-SCREEN POSITION 35.
    PARAMETERS mestyp LIKE tbdme-mestyp.
    SELECTION-SCREEN END OF LINE.
    *>> Messagetype comes from Report RCCLTRANS
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(30) text-004.
    SELECTION-SCREEN POSITION 35.
    PARAMETERS:     p_date     TYPE sydatum.       "last run date
    SELECTION-SCREEN END OF LINE.
    *>> Messagetype comes from Report RCCLTRANS
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(30) text-005.
    SELECTION-SCREEN POSITION 35.
    PARAMETERS:     p_time     TYPE syuzeit.       "last run time
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK MISCELLANEOUS.
    *MOD-006
    *>> Messagetype comes from Report RCCLTRANS
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(30) text-006.
    SELECTION-SCREEN POSITION 35.
    PARAMETERS: p_update   AS   CHECKBOX DEFAULT space.
    SELECTION-SCREEN END OF LINE.
    *MOD-006
    *MOD-006
    *>> Messagetype comes from Report RCCLTRANS
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(30) text-007.
    SELECTION-SCREEN POSITION 32.
    SELECT-OPTIONS: s_rundt FOR sy-datum NO-EXTENSION.
    SELECTION-SCREEN END OF LINE.
    *MOD-006
    *MOD-006
    *>> Messagetype comes from Report RCCLTRANS
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(30) text-008.
    SELECTION-SCREEN POSITION 32.
    SELECT-OPTIONS: s_runtm FOR sy-uzeit NO-EXTENSION.
    SELECTION-SCREEN END OF LINE.
    *MOD-006
    **MOD-006
    *SELECTION-SCREEN BEGIN OF LINE.
    *SELECTION-SCREEN COMMENT 3(30) text-009.
    *SELECTION-SCREEN POSITION 32.
    *SELECT-OPTIONS: s_emat FOR zzzz_xref_data-z_in_value.
    *SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK miscellaneous.
    **MOD-006
    Write selected AUFPL numbers via ranges table to memory ?
    PARAMETERS:
      ordtomem TYPE cloi_x DEFAULT '' NO-DISPLAY.  "X: yes
    do not select from MARC, but use ranges tables directly.   MK 4.0C
    matnr_gl and werks_gl must have the same length.
    PARAMETERS: no_sel  TYPE c DEFAULT ' ' NO-DISPLAY.
    --> Normal selection parameters for ORD comes from the logical db
    *&   Event START-OF-SELECTION
    START-OF-SELECTION.
    --> Select the ORD according to the selected
        MRP controller, Material, work center and plant
    *MOD-006
    Validate the last run date & Time
    PERFORM validate_last_run_date_time.
    *MOD-006
    BEGIN OF INSERTION DS001
    get the entry of the last program run
    select single * for update from ycloidownlprot
                     where logsys = OPT_SYS and
                           downloadtype eq C_DOWNL_PROCESS_ORDERS.
    if YCLOIDOWNLPROT-IN_PROGRESS eq CLOI_TRUE.
    program is already running, do not allow to start again
       write : / text-004, YCLOIDOWNLPROT-USERNAME.
       exit.
    endif.
    YCLOIDOWNLPROT-MANDT        = SY-MANDT.
    YCLOIDOWNLPROT-LOGSYS       = OPT_SYS.
    YCLOIDOWNLPROT-START_DATE   = SY-DATUM.
    YCLOIDOWNLPROT-START_TIME   = SY-UZEIT.
    YCLOIDOWNLPROT-USERNAME     = SY-UNAME.
    YCLOIDOWNLPROT-DOWNLOADTYPE = C_DOWNL_PROCESS_ORDERS.
    YCLOIDOWNLPROT-IN_PROGRESS  = CLOI_TRUE.
    insert or update entry (dependant if entry already exists)
    MODIFY YCLOIDOWNLPROT.
    COMMIT WORK.
    CLEAR CREATED_MASTERIDOCS_PRO.
    EXPORT CREATED_MASTERIDOCS_PRO TO MEMORY ID 'YLOI001'.
    END OF INSERTION DS001
    BEGIN OF INSERTION DS001
    if not sscrfields-ucomm = 'ONLI'.   mk zu 4.0
      exit.
    endif.
    if s_dispo is initial and
        s_matnr is initial and
        s_arbpl is initial and
        s_werks is initial.
       exit.
    endif.
    Send only orders with type 40 - process orders
    p_autyp = '40'.
    END OF INSERTION DS001
    *>> Put the ranges tabs back into matwrk list if no selection (NO_SEL)
      IF no_sel = cloi_true.
        CLEAR t_matwrk_key. REFRESH t_matwrk_key.
        LOOP AT s_matnr.
          t_matwrk_key-matnr = s_matnr-low.
          READ TABLE s_werks  INDEX sy-tabix.
          t_matwrk_key-werks  = s_werks-low.
          APPEND t_matwrk_key.
        ENDLOOP.
        SORT t_matwrk_key BY matnr werks.
        DELETE ADJACENT DUPLICATES FROM t_matwrk_key.
    delete duplicate duplicates from ranges table. Therfore sort by LOW
    (HIGH is not used in this case).
        SORT s_matnr BY low.
        DELETE ADJACENT DUPLICATES FROM s_matnr.
        SORT s_werks BY low.
        DELETE ADJACENT DUPLICATES FROM s_werks.
      ENDIF.
    --> Determine which segments are selected in the message type
      PERFORM ord_segments_determine
        USING mestyp
        CHANGING afpo_x
                 jstk_x
                 afab_x
                 affl_x
                 afvo_x
                 kbed_x
                 jstv_x
                 resb_x
                 kbeu_x
                 afuv_x
                 is_enhancement
                 jstu_x.
    Export the flags to the memory, because the following subroutine
    must not have any parameters !!!
      EXPORT affl_x
             afvo_x
             kbed_x
             resb_x
             kbeu_x
             afuv_x
             TO MEMORY ID 'LOI03'.
    MK 19980326 enhanced selections on header/operation level
    get selection profile for log system from customizing if available
      SELECT SINGLE * FROM tcloi9 WHERE logsys = opt_sys.
    if entry exists for the logical system
      IF sy-subrc = 0.
    if an selection profile for the order is entered, use it for selection
        IF NOT tcloi9-ord_selid IS INITIAL.
          p_selid = tcloi9-ord_selid.
        ENDIF.
        IF NOT tcloi9-ord_opr_selid IS INITIAL AND
           NOT afvo_x IS INITIAL AND NOT affl_x IS INITIAL.
          ord_opr_selid = tcloi9-ord_opr_selid.
        ENDIF.
      ENDIF.
    initialize control key table for selections
      CALL FUNCTION 'CLOI_STEUS_GET'
           EXPORTING
                logsys_to_init         = opt_sys
           IMPORTING
                no_entry_for_logsys    = no_entry_for_logsys
           TABLES
                t_steus                = t_steus
           EXCEPTIONS
                logsys_not_initialized = 1
                OTHERS                 = 2.
    Write structure information into the memory
    perform fill_memory_selobj.
    -> import table with already sent orders
      IMPORT gt_aufnrdone FROM MEMORY ID 'LOIAUFNRTAB'.         "N599845
      SORT gt_aufnrdone BY low.                                 "N599845
    --> Read header information
    GET ioheader.
      Check if material/plant combination is selected MK 4.0C
      CLEAR check_flg.
      IF no_sel = cloi_true.
        READ TABLE t_matwrk_key
                   WITH  KEY matnr = ioheader-matnr
                             werks = ioheader-werks BINARY SEARCH.
        IF sy-subrc  <> 0.
          check_flg = cloi_true.
        ENDIF.
      ENDIF.
    -> check if order was already sent
      IF NOT gt_aufnrdone[] IS INITIAL.                         "N599845
        READ TABLE gt_aufnrdone WITH KEY                        "N599845
          low = ioheader-aufnr                                  "N599845
          TRANSPORTING NO FIELDS                                "N599845
          BINARY SEARCH.                                        "N599845
        IF sy-subrc = 0.                                        "N599845
        -> order already sent
          check_flg = cloi_true.                                "N599845
        ENDIF.                                                  "N599845
      ENDIF.                                                    "N599845
    leave GET routine if check_flg is set.
      CHECK check_flg IS INITIAL.
      CLEAR t_afpo. REFRESH t_afpo.
      CLEAR t_affl. REFRESH t_affl.
      MOVE-CORRESPONDING ioheader TO t_afko.
    GET ioheader LATE.
    BEGIN OF INSERTION DS001
    Check whether the process order has been changed since the last
    run of the program
    clear f_continue.
    if the CHANGED date is greater than the last run or initial
    IF IOHEADER-AEDAT  GT F_OLD_DATE OR
           ( ioheader-aedat  is initial and
             ioheader-aezeit is initial ).
    if the CHANGED date is initial check the creation date
       if ioheader-aedat is initial.
    if the creation date is greater than or equal to the date of the last
    run, if it is equal the creation time must be later or equal to the
    start time of the last run
         IF IOHEADER-ERDAT GT F_OLD_DATE OR
            ( IOHEADER-ERDAT EQ F_OLD_DATE AND
              IOHEADER-ERFZEIT GE F_OLD_TIME ).
           f_continue = 'X'.
         endif.
       else.
         f_continue = 'X'.
       endif.
    if the CHANGED dat is not initial check it against the last run
    ELSEIF IOHEADER-AEDAT  EQ F_OLD_DATE AND
            IOHEADER-AEZEIT GE F_OLD_TIME.
       f_continue ='X'.
    endif.
    Aenderung 295/99  Selektions-Aenderung vom 26. August 99
    Wenn Auftrag bereits techn. abgeschlossen ist, so darf kein IDOC
    erzeugt werden, wenn Auftrag zum löschen vorgemerkt wird.
    CONCATENATE 'OR' IOHEADER-AUFNR INTO F_OBJNR.
    SELECT SINGLE * FROM JEST
                     WHERE OBJNR = F_OBJNR
                     AND   STAT  = 'I0045'.
    IF JEST-INACT EQ SPACE AND SY-SUBRC EQ 0.
       SELECT * FROM JCDS WHERE OBJNR EQ F_OBJNR AND
                                STAT  EQ 'I0045' AND
                                INACT EQ SPACE.
    letzte Aenderung des Status TABG wird geprueft    Beg. WA 354/99
       ENDSELECT.
      IF ( F_OLD_DATE GT JCDS-UDATE OR                         " Beg JB_02
          ( F_OLD_DATE EQ JCDS-UDATE AND
           F_OLD_TIME GT JCDS-UTIME ) ) AND                    " End JB_02
          SY-SUBRC EQ 0.
         CLEAR F_CONTINUE.
       ENDIF.
    ENDIF.
    Ende 295/99
    check f_continue eq 'X'.
    END OF INSERTION DS001
      t_afko-t_afpo = t_afpo[].
      t_afko-t_jstk = t_jstk[].
      t_afko-t_affl = t_affl[].
      t_afko-t_afab = t_afab[].
      APPEND t_afko.
      IF jstk_x = cloi_x.
        t_objnr-objnr = ioheader-objnr.
        APPEND t_objnr.
      ENDIF.
    *---> Remember the orders that are already selected for the global
        selection parameters
      IF ordtomem = cloi_x.                "write order numbers to memory
        t_aufnr_range_done-sign = 'I'.
        t_aufnr_range_done-option = 'NE'.
        t_aufnr_range_done-low = ioheader-aufpl.
        APPEND t_aufnr_range_done.
      ENDIF.
    *---> Remember the orders internal/external keys for AFAB (relationship)
      IF afab_x = cloi_x.
        MOVE-CORRESPONDING ioheader TO t_aufpl_aufnr.
        APPEND t_aufpl_aufnr.
      ENDIF.
    check afpo_x = cloi_x.
    GET ioitem.
    BEGIN OF INSERTION DS001
    Check whether the process order has been changed since the last
    run of the program
    CLEAR F_CONTINUE.
    if the CHANGED date is greater than the last run or initial
    IF IOHEADER-AEDAT  GT F_OLD_DATE OR
           ( ioheader-aedat  is initial and
             ioheader-aezeit is initial ).
    if the CHANGED date is initial check the creation date
       if ioheader-aedat is initial.
    if the creation date is greater than or equal to the date of the last
    run, if it is equal the creation time must be later or equal to the
    start time of the last run
         IF IOHEADER-ERDAT GT F_OLD_DATE OR
            ( IOHEADER-ERDAT EQ F_OLD_DATE AND
              IOHEADER-ERFZEIT GE F_OLD_TIME ).
           f_continue = 'X'.
         endif.
       else.
         f_continue = 'X'.
       endif.
    if the CHANGED date is not initial check it against the last run
    ELSEIF IOHEADER-AEDAT  EQ F_OLD_DATE AND
            IOHEADER-AEZEIT GE F_OLD_TIME.
       f_continue ='X'.
    endif.
    Aenderung 295/99  Selektions-Aenderung vom 26. August 99
    Wenn Auftrag bereits techn. abgeschlossen ist, so darf kein IDOC
    erzeugt werden, wenn Auftrag zum löschen vorgemerkt wird.
    CONCATENATE 'OR' IOHEADER-AUFNR INTO F_OBJNR.
    SELECT SINGLE * FROM JEST
                     WHERE OBJNR = F_OBJNR
                     AND   STAT  = 'I0045'.
    IF JEST-INACT EQ SPACE AND SY-SUBRC EQ 0.
       SELECT * FROM JCDS WHERE OBJNR EQ F_OBJNR AND
                                STAT  EQ 'I0045' AND
                                INACT EQ SPACE.
    letzte Aenderung des Status TABG wird geprueft
       ENDSELECT.
      IF ( F_OLD_DATE GT JCDS-UDATE OR                         " Beg JB_02
          ( F_OLD_DATE EQ JCDS-UDATE AND
           F_OLD_TIME GT JCDS-UTIME ) ) AND                    " End JB_02
          SY-SUBRC EQ 0.
         CLEAR F_CONTINUE.
       ENDIF.
    ENDIF.
    Ende 295/99
    check f_continue eq 'X'.
    END OF INSERTION DS001
      IF afpo_x = cloi_x.
        MOVE-CORRESPONDING ioitem TO t_afpo.
        APPEND t_afpo.
      ENDIF.
    Put matnr and ltrmi in a help structure, which later goes to t_afpo
      IF ioitem-posnr = '0001'.
        MOVE-CORRESPONDING ioitem TO help_afpo.
        APPEND help_afpo.
    put PSP element (internal key) into order header. Unique for positions
        IF t_afko-pspel IS INITIAL.
          t_afko-pspel = ioitem-projn.
        ENDIF.
      ENDIF.
      CHECK affl_x = cloi_x.
    GET iosequen.
      CLEAR t_afvo. REFRESH t_afvo.
      MOVE-CORRESPONDING iosequen TO t_affl.
    GET iosequen LATE.
      t_affl-t_afvo = t_afvo[].
      APPEND t_affl.
      CHECK afvo_x = cloi_x.
    GET iooper.
      CLEAR t_kbed. REFRESH t_kbed.
      CLEAR t_afuv. REFRESH t_afuv.
      CLEAR t_resb. REFRESH t_resb.
      MOVE-CORRESPONDING iooper TO t_afvo.
      "Temporary storing of operation information if for a phase
      "the corresponding operation has is needed
      MOVE-CORRESPONDING iooper TO t_aufpl_aplzl_vornr.
      APPEND t_aufpl_aplzl_vornr.
    check, if selection profile (if exists) for the operation is ok
      IF NOT ord_opr_selid IS INITIAL.
        CALL FUNCTION 'STATUS_CHECK_BY_SELSCHEM'
             EXPORTING
                  objnr          = iooper-objnr
                  selid          = ord_opr_selid
             IMPORTING
                  fullfill       = status_ok
             EXCEPTIONS
                  no_stat_tab    = 1
                  no_stat_scheme = 2
                  OTHERS         = 3.
        IF sy-subrc <> 0.
          status_ok = cloi_x.
        ENDIF.
      ELSE.
        status_ok = cloi_x.
      ENDIF.
    check if control key (STEUS) should not be selected.
      control_key_ok = cloi_x.
      IF no_entry_for_logsys IS INITIAL.
        READ TABLE t_steus WITH KEY
             steus = iooper-steus BINARY SEARCH.
        IF sy-subrc <> 0.
          CLEAR control_key_ok.
        ENDIF.
      ENDIF.
      CHECK NOT status_ok IS INITIAL.
      CHECK NOT control_key_ok IS INITIAL.
    GET iooper LATE.
      t_afvo-t_kbed = t_kbed[].
      t_afvo-t_afuv = t_afuv[].
      t_afvo-t_resb = t_resb[].
      APPEND t_afvo.
      IF jstv_x = cloi_x.
        t_objnr-objnr = iooper-objnr.
        APPEND t_objnr.
      ENDIF.
      CHECK kbed_x = cloi_x.
    GET ioopcap.
      MOVE-CORRESPONDING ioopcap TO t_kbed.
      APPEND t_kbed.
      CHECK resb_x = cloi_x.
    GET ioopcomp.
    do not transfer RESB entries with deletion flag
      CHECK ioopcomp-xloek IS INITIAL.
      MOVE-CORRESPONDING ioopcomp TO t_resb.
      APPEND t_resb.
      CHECK afuv_x = cloi_x.
    GET iosoper.
      CLEAR t_kbeu. REFRESH t_kbeu.
      MOVE-CORRESPONDING iosoper TO t_afuv.
    check if control key (STEUS) should not be selected.
      control_key_ok = cloi_x.
      IF no_entry_for_logsys IS INITIAL.
        READ TABLE t_steus WITH KEY
             steus = iooper-steus BINARY SEARCH.
        IF sy-subrc <> 0.
          CLEAR control_key_ok.
        ENDIF.
      ENDIF.
      CHECK NOT control_key_ok IS INITIAL.
    GET iosoper LATE.
      t_afuv-t_kbeu = t_kbeu[].
      APPEND t_afuv.
      IF jstv_x = cloi_x.
        t_objnr-objnr = iosoper-objnr.
        APPEND t_objnr.
      ENDIF.
      CHECK kbeu_x = cloi_x.
    GET iosocap.
      MOVE-CORRESPONDING iosocap TO t_kbeu.
      APPEND t_kbeu.
    *&   Event END-OF-SELECTION
    END-OF-SELECTION.
    *MOD-006
      DATA: itab_matnr TYPE zzzz_xref_data OCCURS 0.
      DATA: l_wa_matnr TYPE zzzz_xref_data.
      DATA: l_wa_matnr_value TYPE zzzz_xref_data-z_in_value.
      DATA: l_wa_afko TYPE  cloi_afko_struct.
    SELECT *
      FROM zzzz_xref_data
    APPENDING TABLE itab_matnr
    WHERE trans_id = 'ZELCUSMATLOOKUP' AND
           ( z_in_value IN s_matnr OR
             z_out_value IN s_matnr ).
    IF sy-subrc = 0.
         LOOP AT ITAB_MATNR INTO L_WA_MATNR.
           L_WA_MATNR_VALUE = L_WA_MATNR-z_OUT_VALUE.
           S_MATNR-LOW = L_WA_MATNR_VALUE.
           S_MATNR-SIGN = 'I'.
           S_MATNR-OPTION = 'EQ'.
           APPEND S_MATNR.
         ENDLOOP.
       DELETE itab_matnr WHERE NOT in_value IN s_emat.
       SORT itab_matnr BY out_value.
    ENDIF.
    CLEAR: l_wa_matnr.
    **MOD-010
    Data which is not in the material lookup table but in the T_AFKO.
      LOOP AT t_afko INTO l_wa_afko.
       READ TABLE S_MATNR WITH KEY LOW = L_WA_AFKO-MATNR BINARY SEARCH.
        READ TABLE itab_matnr INTO l_wa_matnr
            WITH KEY z_out_value = l_wa_afko-matnr BINARY SEARCH.
        IF sy-subrc NE 0.
          l_wa_afko-rgekz = 'X'.
          MODIFY t_afko FROM l_wa_afko  TRANSPORTING rgekz.
        ENDIF.
       IF NOT P_DATE IS INITIAL.
         IF T_AFKO-GSTRP < p_date OR
                 ( T_AFKO-GSTRP = p_date AND
                   T_AFKO-GSUZP > p_time ).
           L_WA_AFKO-RGEKZ = 'X'.
           MODIFY T_AFKO FROM L_WA_AFKO  TRANSPORTING RGEKZ.
         ENDIF.
       ENDIF.
      ENDLOOP.
    Delete  Data which is not in the material lookup
    table but in the T_AFKO.
    DELETE t_afko WHERE rgekz = 'X'.
    *MOD-010
    *MOD-006
    BEGIN OF INSERTION DS001
      DATA: l_wa_itab_date TYPE ty_date.
    Check whether the process order has been changed since the last
    run of the program
      CLEAR f_continue.
      IF NOT t_afko IS INITIAL.
        SELECT aufnr aedat aezeit erdat erfzeit loekz
        INTO TABLE itab_date
        FROM aufk
        FOR ALL ENTRIES IN t_afko
        WHERE aufnr = t_afko-aufnr.
        IF sy-subrc = 0.
          IF NOT p_date IS INITIAL.
            CLEAR: itab_date.
    Check whether the process order has been changed since the last
    run of the program
            LOOP AT itab_date INTO l_wa_itab_date.
    if the CHANGED date is greater than the last run or initial
              IF l_wa_itab_date-aedat GT p_date OR
                    ( l_wa_itab_date-aedat  IS INITIAL AND
                      l_wa_itab_date-aezeit IS INITIAL ).
    if the CHANGED date is initial check the creation date
                IF l_wa_itab_date-aedat IS INITIAL.
    if the creation date is greater than or equal to the date of the last
    run, if it is equal the creation time must be later or equal to the
    start time of the last run
                  IF l_wa_itab_date-erdat GT p_date OR
                     ( l_wa_itab_date-erdat EQ p_date AND
                       l_wa_itab_date-erfzeit GE p_time ).
                    f_continue = 'X'.
                  ELSE.
                    l_wa_itab_date-indicator = 'X'.
                MODIFY itab_date FROM l_wa_itab_date TRANSPORTING indicator.
                  ENDIF.
                ELSE.
                  f_continue = 'X'.
                ENDIF.
    if the CHANGED dat is not initial check it against the last run
              ELSEIF l_wa_itab_date-aedat  EQ p_date AND
                     l_wa_itab_date-aezeit GE p_time.
                f_continue ='X'.
              ELSE.
                l_wa_itab_date-indicator = 'X'.
                MODIFY itab_date FROM l_wa_itab_date TRANSPORTING indicator.
              ENDIF.
            ENDLOOP.
    *MOD-006
      ELSE.
         CLEAR: ITAB_DATE.
         LOOP AT ITAB_DATE INTO L_WA_ITAB_DATE.
    if the CHANGED date is greater than the last run or initial
           IF L_WA_ITAB_DATE-AEDAT GT P_RUNDT OR
                 ( L_WA_ITAB_DATE-aedat  is initial and
                   L_WA_ITAB_DATE-aezeit is initial ).
    if the CHANGED date is initial check the creation date
             if l_wa_itab_date-aedat is initial.
    if the creation date is greater than or equal to the date of the last
    run, if it is equal the creation time must be later or equal to the
    start time of the last run
               IF L_WA_ITAB_DATE-ERDAT GT P_RUNDT OR
                  ( L_WA_ITAB_DATE-ERDAT EQ P_RUNDT AND
                    L_WA_ITAB_DATE-ERFZEIT GE S_RUNTM-LOW OR
                    L_WA_ITAB_DATE-ERFZEIT LE S_RUNTM-HIGH ).
                 f_continue = 'X'.
               else.
                 l_wa_itab_date-indicator = 'X'.
                 MODIFY ITAB_DATE FROM L_WA_ITAB_DATE
                                   TRANSPORTING INDICATOR.
               endif.
             else.
               f_continue = 'X'.
             endif.
    if the CHANGED dat is not initial check it against the last run
           ELSEIF L_WA_ITAB_DATE-AEDAT  EQ P_RUNDT AND
                  L_WA_ITAB_DATE-AEZEIT GE S_RUNTM-LOW.
             f_continue ='X'.
           ELSE.
             l_wa_itab_date-indicator = 'X'.
             MODIFY ITAB_DATE FROM L_WA_ITAB_DATE
                                TRANSPORTING INDICATOR.
           endif.
         ENDLOOP.
    *MOD-006
          ENDIF.
        ENDIF.
      ENDIF.
    DELETE ITAB_DATE WHERE INDICATOR = 'X'.
    *MOD-006
      CLEAR: itab_date.
      IF s_rundt-high IS INITIAL AND NOT s_rundt IS INITIAL.
        s_rundt-high = sy-datum.
      ENDIF.
      LOOP AT itab_date INTO l_wa_itab_date.
        IF NOT s_rundt IS INITIAL.
    if the CHANGED date is greater than the last run or initial
          IF    ( l_wa_itab_date-aedat  IS INITIAL AND
                  l_wa_itab_date-aezeit IS INITIAL ).
    if the CHANGED date is initial check the creation date
            IF l_wa_itab_date-aedat IS INITIAL.
    if the creation date is greater than or equal to the date of the last
    run, if it is equal the creation time must be later or equal to the
    start time of the last run
              IF ( l_wa_itab_date-erdat GT s_rundt-low AND
                 l_wa_itab_date-erfzeit GT s_runtm-low ) AND
                 ( l_wa_itab_date-erdat LT s_rundt-high AND
                 l_wa_itab_date-erfzeit LT s_runtm-high ).
                f_continue = 'X'.
              ELSE.
                l_wa_itab_date-indicator = 'X'.
                MODIFY itab_date FROM l_wa_itab_date
                                  TRANSPORTING indicator.
              ENDIF.
            ELSE.
              f_continue = 'X'.
            ENDIF.
    if the CHANGED dat is not initial check it against the last run
          ELSEIF ( l_wa_itab_date-aedat  GE s_rundt-low AND
                  l_wa_itab_date-aezeit  GE s_runtm-low ) AND
                 ( l_wa_itab_date-aedat  LE s_rundt-high AND
                 l_wa_itab_date-aezeit LE s_runtm-high ).
            f_continue ='X'.
          ELSE.
            l_wa_itab_date-indicator = 'X'.
            MODIFY itab_date FROM l_wa_itab_date
                               TRANSPORTING indicator.
          ENDIF.
        ENDIF.
      ENDLOOP.
    DELETE itab_date WHERE indicator = 'X'.
    *MOD-006
    **MOD-006
    LOOP AT t_afko INTO l_wa_afko.
       READ TABLE itab_date INTO l_wa_itab_date
                WITH KEY aufnr = l_wa_afko-aufnr BINARY SEARCH.
       IF sy-subrc NE 0.
         l_wa_afko-rgekz = 'X'.
         MODIFY t_afko FROM l_wa_afko  TRANSPORTING rgekz.
       ENDIF.
    ENDLOOP.
    DELETE t_afko WHERE rgekz = 'X'.
    **MOD-006
    -> initialize logical data base to reduce memory consumption
      PERFORM ldb_process_init(sapdbioc)
        CHANGING
          lv_subrc.
    --> add information to the order structure that is not
        selected via logical database:
        - if AFVO-entry is a phase (phflg) --> fill field for
          corresponding operation number (PVZNR)
          The internal node number (aplzl) of the corresponding operation
          is in field PVZKN of the phase
        - relationship information: E1AFABL
          especially: select external numbers for the used
          internal numbers in the table AFAB
        - status information of the order header: E1JSTKL
        - status information of the operation: E1JSTVL
    --> Put matnr and ltrmi in the table t_afko
      SORT t_afko BY aufnr.
      LOOP AT help_afpo.
        READ TABLE t_afko WITH KEY aufnr = help_afpo-aufnr
          ASSIGNING -gltri = help_afpo-ltrmi.
        ENDIF.
      ENDLOOP.
    --> Select entries for order and operation status
      IF NOT t_objnr[] IS INITIAL.
        SELECT objnr stat FROM jest INTO TABLE t_jest2
          FOR ALL ENTRIES IN t_objnr
          WHERE objnr = t_objnr-objnr
          AND   inact <> 'X'.
      ENDIF.
    --> Select entries for relationships from afab for all orders
        into table t_afab_tmp
      SORT t_aufpl_aplzl_vornr BY aufpl aplzl.
      IF afab_x = cloi_x AND NOT t_aufpl_aufnr[] IS INITIAL.
      -> select afab data
        SELECT * FROM afab INTO TABLE t_afab_tmp
          FOR ALL ENTRIES IN t_aufpl_aufnr
          WHERE aufpl_vor = t_aufpl_aufnr-aufpl.
        SELECT * FROM afab APPENDING TABLE t_afab_tmp
          FOR ALL ENTRIES IN t_aufpl_aufnr
          WHERE aufpl_nch = t_aufpl_aufnr-aufpl.
        SORT t_afab_tmp
          BY aufpl_vor aplzl_vor aufpl_nch aplzl_nch aobar mimax.
        DELETE ADJACENT DUPLICATES FROM t_afab_tmp
          COMPARING aufpl_vor aplzl_vor aufpl_nch aplzl_nch aobar mimax.
      -> read external order numbers out of data base
        CLEAR t_aufpl. REFRESH t_aufpl.
        LOOP AT t_afab_tmp ASSIGNING -aufpl_nch.
          COLLECT t_aufpl.
        ENDLOOP.
        CLEAR t_aufpl_aufnr. REFRESH t_aufpl_aufnr.
        IF NOT t_aufpl[] IS INITIAL.
          SELECT aufpl aufnr FROM afko INTO TABLE t_aufpl_aufnr
            FOR ALL ENTRIES IN t_aufpl
            WHERE aufpl = t_aufpl-aufpl.
          SORT t_aufpl_aufnr BY aufpl.
        ENDIF.
      -> add order numbers to afab data
        LOOP AT t_afab_tmp ASSIGNING -aufnr_nch = t_aufpl_aufnr-aufnr.
          ENDIF.
        ENDLOOP.
      -> read operation numbers out of data base
        CLEAR t_aufpl_aplzl. REFRESH t_aufpl_aplzl.
        LOOP AT t_afab_tmp ASSIGNING -aplzl_nch.
          COLLECT t_aufpl_aplzl.
        ENDLOOP.
        IF NOT t_aufpl_aplzl[] IS INITIAL.
          SELECT aufpl aplzl vornr FROM afvc
            APPENDING TABLE t_aufpl_aplzl_vornr
            FOR ALL ENTRIES IN t_aufpl_aplzl
            WHERE aufpl = t_aufpl_aplzl-aufpl
              AND aplzl = t_aufpl_aplzl-aplzl.
          SORT t_aufpl_aplzl_vornr BY aufpl aplzl.
        ENDIF.
      -> add operation numbers to afab data
        LOOP AT t_afab_tmp ASSIGNING -vornr_nch = t_aufpl_aplzl_vornr-vornr.
          ENDIF.
        ENDLOOP.
      ENDIF.                               "afab_x
    --> fill AFAB (relationship information) and status information
      SORT t_aufpl_aufnr BY aufnr.
      LOOP AT t_afko ASSIGNING .
      -> fill order head status information
        IF jstk_x = cloi_x.
          CLEAR t_jstk. REFRESH t_jstk.
          LOOP AT t_jest2 INTO wa_tjest2 WHERE objnr = -t_jstk = t_jstk[].
        ENDIF.
      -> fill afab information
        IF afab_x = cloi_x.
          CLEAR t_aufpl_aufnr.
          READ TABLE t_aufpl_aufnr WITH KEY
            aufnr = -t_afab = t_afab[].
        ENDIF.
      -> fill operation and suboperation status information
        IF jstv_x = cloi_x OR afvo_x = cloi_x.
          LOOP AT .
            -> read status information of suboperation
              IF jstu_x = cloi_x.
                LOOP AT -t_jstu = t_jstu[].
                ENDLOOP.
              ENDIF.
            -> read status information of operation
              IF jstv_x = cloi_x.
                CLEAR t_jstv. REFRESH t_jstv.
                LOOP AT t_jest2 INTO wa_tjest2 WHERE objnr = -t_jstv = t_jstv[].
              ENDIF.
            -> Read operation for a phase
              IF NOT -pvznr = t_aufpl_aplzl_vornr-vornr.
                ENDIF.
              ENDIF.
            ENDLOOP.
          ENDLOOP.
        ENDIF.
      -> collect order numbers
        CLEAR wa_aufnrdone.
        wa_aufnrdone-low = -aufnr.
        APPEND wa_aufnrdone TO lt_aufnrdone.
      ENDLOOP.
    -> append collected order numbers to global table
      APPEND LINES OF lt_aufnrdone TO gt_aufnrdone.
      EXPORT gt_aufnrdone TO MEMORY ID 'LOIAUFNRTAB'.
    -> free large tables
      CLEAR t_jest2. REFRESH t_jest2.
      CLEAR t_afab_tmp. REFRESH t_afab_tmp.
      CLEAR t_aufpl. REFRESH t_aufpl.
      CLEAR t_aufpl_aufnr. REFRESH t_aufpl_aufnr.
      CLEAR t_aufpl_aplzl. REFRESH t_aufpl_aplzl.
      CLEAR t_aufpl_aplzl_vornr. REFRESH t_aufpl_aplzl_vornr.
    -> create idocs
      CALL FUNCTION 'CLOI_MASTERIDOC_CREATE_LOIPRO'
           EXPORTING
                opt_sys      = opt_sys
                message_type = mestyp
           TABLES
                order_data   = t_afko
           EXCEPTIONS
                OTHERS       = 1.
    -> export already selected order numbers via ranges tab to memory
      EXPORT t_aufnr_range_done TO MEMORY ID 'LOI002'.
    **MOD-006
    IMPORT created_masteridocs_pro FROM MEMORY ID 'YLOI001'.
    ycloidownlprot-end_date       = sy-datum.
    ycloidownlprot-end_time       = sy-uzeit.
    ycloidownlprot-idocs_selected = created_masteridocs_pro.
    ycloidownlprot-in_progress    = cloi_false.
    insert or update entry (dependant if entry already exists)
    MODIFY ycloidownlprot.
    COMMIT WORK.
    MESSAGE i967(z001) WITH created_masteridocs_pro.
    **MOD-006
    Update last run date and time
      IF p_update = 'X'.
        PERFORM update_last_run.
      ELSE.
      MESSAGE s000 WITH text-022.
        "Last Run Date and Last Run Time not updated
        LEAVE LIST-PROCESSING.
      ENDIF.
      INCLUDE rcordf01.
    *&      Form  validate_last_run_date_time
          text
    -->  p1        text
    <--  p2        text
    *FORM validate_last_run_date_time.
    IF p_date IS INITIAL OR
        p_time IS INITIAL.
       IF sy-batch IS INITIAL.
         MESSAGE s000 WITH text-017.
         "Last Run date & Last Run Time can not be blank
         LEAVE LIST-PROCESSING.
       ELSE.
         MESSAGE e000 WITH text-017.
         "Last Run date & Last Run Time can not be blank
       ENDIF.
    ENDIF.
    *ENDFORM.                    " validate_last_run_date_time
    *&      Form  update_last_run
          text
    -->  p1        text
    <--  p2        text
    FORM update_last_run.
      CONSTANTS:
            l_c_name    TYPE rvari_vnam  VALUE 'Z_PROC_DATE',
            l_c_name1   TYPE rvari_vnam  VALUE 'Z_PROC_TIME',
            l_c_type    TYPE rsscr_kind  VALUE 'P',
            l_c_numb    TYPE tvarv_numb  VALUE '0000'.
    Update last run date
      UPDATE tvarv SET low  = sy-datum
                 WHERE name = l_c_name AND
                       type = l_c_type AND
                       numb = l_c_numb.
      IF sy-subrc = 0.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
        g_run_date = text-015. "#EC
        "Updation of TVARV table failed for ZLAST_RUN_DATE. Update manually
      ENDIF.
    Update last run time
      UPDATE tvarv SET low  = sy-uzeit
                 WHERE name = l_c_name1 AND
                       type = l_c_type AND
                       numb = l_c_numb.
      IF sy-subrc = 0.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
        g_run_time = text-016. "#EC
        "Updation of TVARV table failed for ZLAST_RUN_TIME. Update manually
      ENDIF.
    ENDFORM.                    " update_last_run

  • We need to avoid rescheduling of Production order in APO

    Currently the production orders are created in ECC with reference to the plan orders transferred from APO. These orders are transferred back to APO as part of standard CIF. Since ECC is the owner of Production orders, we don’t want APO influencing any changes in production order. But there are situations when the APO is rescheduling the production order by automatically triggering heuristics after getting the changes in capacity from ECC via CIF. That is impacting with the schedule of orders already planned by business in ECC. One such known issue is when the capacity of resource has change during the time when order is scheduled. How should we avoid this?

    Hi Anubrata,
    Please check note 161028. This is the standard behaviour. If the SKU is X0 have to be planned by APO!
    This note describes a modification proposal for the following purpose;
    When a planned order is imported into R/3 via the interface, it is never scheduled in R/3 (detailed scheduling: esp. generation of capacity requirements).
    This is the current design of APO <-> R/3 interface.
    However, for such special requirements that the planned order should 'always' be scheduled, you can apply the following source code change.
    This modification enables you to always automatically schedule the planned order that comes over the interface from APO for 'change' and 'create'. If capacity planning is activated, then also capacity requirements are determined in R/3.
    This functionality only works for PP/DS planned orders and not for SNP planned orders. For SNP orders the SNP PPM will always be reexploded after a changed planned order is send back from R/3 to APO and then the order will be rescheduled in APO again.
    Hope that can help you.
    Thanks.
    Regards, Marius

  • Serial Number. Production Order Confirmation. GR. UD. Sales Delivery

    Hi Gurus,
    Please help on this issue to get any user exits .....
    As part of Serial number management, we have a certain issues on serial number confirmation, goods receipt from production order and quality inspection with UD.
    Master data:
    Finished product material master, Workscheduling view, Serial number profile maintained " ASRN"
    Process flow:
    1) Avalon Specific Serial numbers generation for finished goods through production order release status.
                  (A11206000001)
                                        A  - Avalon
                                        1   - PCB Unit 1
                                        12 - Year 2012
                                        06 - Week
                                        000001 - Running serial number for the week.
    2) Production order confirmation through CO11n transaction.
    3) Production order Goods receipt through MIGO transaction against order.
    4) Quality Inspection with Usage Decision through QA32 transaction.
    5) Goods Issue for Delivery.
    SAP Product Error:
    1) System does not track and control the operation wise confirmed serial numbers during order confirmation.
    2) System does not track and control the finally confirmed serial numbers during order goods receipt.
    3) System does not track and control the last goods receipt qty in Usage Decision.
    4)  For semi finished product, if we maintain serial number profile in workscheduling view, system is not showing goods issue material list in Co11n transaction for the finished goods.
    5) Interfacing the serial number reading scanner with SAP,  is not working without entering material number and serial number manually.
    6) System does not tracking and controlling the last Usage Decision done serial number during Goods issue to Sale order Delivery.
    Regards,
    Santha

    Hi Santha,
    This is a bit vast, but I'll try to address at least some of the issues:
    1- serial number in operation confirmation is not possible, for the reason that serailization is part of stock management, and as WIP in an order, this is not stock yet. Actually you cannot confirm the manufactured material either, and those 2 go together.
    For tracking specificly WIP, there's something called WIP batches; you may look into it to see if you can use it.
    2- during GR system will propose those SNs that you have defined for the order at release or creation.
    3- ?
    4- GI in CO11N is provided only for BACKFLUSHED material components. Serialized materials CANNOT be backflushed.
    5- You can use a barcode reader to read the serial number (instead of keyboard entry) when cursor is on the right field in the respective screen.
    6- ?

  • Error while doing Good Issue for Production Order using BAPI

    Hi All,
    I am facing an error like 'u2018Content of order 1011907: MDT218AJ10 transferred to interface (IMSEG): T-86410-71".
    I have written the code as below. Please let me know what is missing when using the BAPI 'BAPI_GOODSMVT_CREATE'. What is the cause of this error ?
    *Action in Transaction (GM_CODE)
    *GM Code for Goods Issue for Production Order is 03
      gs_gmcode-gm_code = '03'.
    *Header Data
    *Posting date
      gs_header-pstng_date = sy-datum.
    *Document date
      gs_header-doc_date   = sy-datum.
    *Item Data
    *Material
      gs_item-material  = zptp_s_rf_migo_261-matnr1.
    *Movement Type
      gs_item-move_type = '261'.
    *Movement Indicator
      gs_item-mvt_ind   = 'F'.
    *Stock Type
      gs_item-stck_type = 'F'.
    *Plant
      gs_item-plant     = gv_plant.
    *Storage Location
      gs_item-stge_loc  = gv_str_loc.
    *Quantity
      gs_item-entry_qnt = zptp_s_rf_migo_261-menge2.
    *Unit
      gs_item-entry_uom = gv_uom.
    *ISO code for unit of measurement
      gs_item-entry_uom_iso = gv_uom.
    *Order Number
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = zptp_s_rf_migo_261-aufnr
        IMPORTING
          output = gs_item-orderid.
    *Reservation Number
      gs_item-reserv_no = gv_resv_num.
    *Reservation Item
      gs_item-res_item = gv_resv_itm.
    *Reservation Type
      gs_item-res_type = gv_resv_type.
      APPEND gs_item TO gt_item.
    Calling BAPI_GOODSMVT_CREATE to create the Material Document Number
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          goodsmvt_header       = gs_header
          goodsmvt_code         = gs_gmcode
        IMPORTING
          goodsmvt_headret      = gs_headret
        TABLES
          goodsmvt_item         = gt_item
          goodsmvt_serialnumber = gt_serial
          return                = gt_return.
    Thanks in Advance.

    hi,
    did you look at message ?
    System says, there are differences between the interface data and the order data. It can be anything. I think you should check
    data in the interface . 
    this is the long explanation of your message :
    Diagnosis
    When calling the function module MB_CREATE_GOODS_MOVEMENT or the BAPI GoodsMovement.CreateFromData (BAPI_GOODSMVT_CREATE) to post a goods receipt for a production order, there are differences between the interface data and the order data.
    Example: The order was created for plant 0001, but plant 0002 is passed on in the interface.
    The system checks this for the material and the order item.
    System response
    Due to this difference, the system cannot post the goods receipt.
    Procedure
    Check the data in the interface (IMSEG-WERKS, IMSEG-AUFNR). If necessary, correct the plant or the order number in the interface.
    << Moderator message - Point begging removed >>
    Edited by: Rob Burbank on Feb 6, 2012 11:24 AM

  • Post GM with reference to Production Order using BAPI_GOODSMVT_CREATE

    Hi Experts,
    We need to post Goods Movement with reference to Production order. In brief, we have to get the functionality of MB1A done. I'm trying to use BAPI_GOODSMVT_CREATE, but its not reflecting the Documented Goods Movements in the Production Order.
    Here is the data i'm using:
    goodsmvt_header : posting date, document date
    goodsmvt_code : 03
    goodsmvt_item:
    material
    plant
    storage loc
    batch
    mov typ : 261
    ENTRY_QNT
    ENTRY_UOM
    ENTRY_UOM_ISO
    order id
    Sometimes it generates material doc and year in exporting parameter, and sometimes it gives message "Content of order zzzzzzz : yyyyyyy transferred to interface (IMSEG): xxxxxxx".
    But despite of this I cannot see the Documented Goods Movements reflecting in the Production Order.
    Can anyone help on this. Is there anything else to be passed or I'm missing any process ?

    Experts,
    I could get the postings done with BAPI_GOODSMVT_CREATE. I was executing BAPI_GOODSMVT_CREATE and then BAPI_TRANSACTION_COMMIT separately, thus the generated Material doc number was not getting posted. When I used the Test Sequence option from SE37 menu, it worked.

  • 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

    Thanks
    Thread closed

  • Production Order and external system non-SAP

    Dear Friends,
    I need to send a Production Order to a external system no SAP, and upload the information back to SAP,
    SAP does something standard to accomplish this task?
    To send Production Order, I created an IDOC with report RCCLORD, this IDOC contains all information of a production order (AUFNR, WERKS,..) and all operations and materials. But I don't know how to process the information returned.
    Also I have read some information about the interface PP-PDC, but I don't know how to use it.
    Please, Can anyone tell me the best way to accomplish this task?
    this is the scenario:
    SAP R/3 -
    > Production Order -
    > External System
    External System -
    > Return information about Production Order -
    > SAP R/3
    Thanks!

    Hi,
    PP-PDC is for confirmations only, see further details
    http://help.sap.com/erp2005_ehp_05/helpdata/en/31/fcbd3411d411d3b6b60000e8359890/frameset.htm
    maybe usage of POI is an option for you. See details here
    http://help.sap.com/erp2005_ehp_05/helpdata/EN/1a/0e347b539911d1898b0000e8322d00/frameset.htm
    BR Sabine

Maybe you are looking for

  • Error while installing the SAP

    i'm having an error poped up everytime i try to install..the error is saying SQL error 942.. Cannot install anymore wht could be the possible solution to continue witht the installation without making it from the start again.

  • Part Paid Invoice Missing From Payment Wizard / Outgoing Payments

    Hi, Having a bit of an issue with a purchase invoice on SAP B1. In brief: The invoice was posted fine, then they paid 3 invoices but the total was short. The user allocated payment manually using outgoing payments to the 3 invoices, but partially pai

  • Moving the caption around on the hero image ...

    Hi All, Is there a particular slide show or composition I can use to allow me to move wording, or a caption around on the hero image so that for instance on image #1 the wording appears on the image in the upper left of the image, then on image #2 th

  • How can i downgrade from os x 10.9 to 10.7 without time machine

    can i downgrade from os x 10.9 dirrectly to 10.7?

  • Help with setting aspect ratio

    Could someone please help me with an aspect ratio problem. I have just updated to iMovie 6 and want to work with an existing movie project created from iMovie (version before the ilife 5 version). On opening the project in the new version it is in wi