Output Configuration and Determination in SAP SD

Looking for just the transaction and steps(see below) but want to understand more about Output Configuration and how the outputs are determined in SD, keep reading.
SPRO -> SD-> Basic Functions-> output control–> output determination-> determination using condition technique-> maintain O.deter.for sales documents-> Maintain output types. Use transaction code V30.
Go to V/30 and follow these steps.
- Select output types and click on “New Entries”
- Enter output type and description, enter “Access Sequence” and check “Access to conditions”
- Specify Transmission and Partner function and check the timings to either schedule a periodic job, immediate or through the application transaction.
Output is a medium using which Business communicates with its business partners during sales order processing like Order Confirmation / acknowledgement, Delivery note, Packing list & Invoice. SAP controls output determination using condition technique. Outputs can be triggered manually or automatically in the sales document. Automatic determination requires maintenance of output condition record. Print programs and layout sets control content which should be displayed in the output.
Condition technique
Condition Technique refer to the method by which the system determines output/pricing from information stored in condition records. In SD, the various elements used in the condition technique are set up and controlled in Customizing.
Output determination procedure is determined on the basis of sales document type (sales order type, delivery type, billing type). Standard output determination procedure for sales order (OR), Delivery (LF) and Billing (F2) is V100000. Output procedure contains output types,which can be processed when that sales document is created. One document can have >1 output types like Delivery note and Packing list in delivery.
Output type controls Medium (Like Print, Fax, EDI), Time of sending the output –e.g.immediately or in a batch, Which partner function of Business partner it can be sent, Language & Criteria for which output condition record can be maintained for automatic output determination. It offers flexibility of changing the key controls in the Sales documents like If order confirmation for a customer is scheduled to be printed in a batch but the customer wants it immediately then time of dispatch control can be changed in the sales order.
Output Configuration in SAP SD
The Output Determination component offers output functions to help manage sales transactions with customers and within an organization. Employees can send and receive output. Output is directly linked to the corresponding sales transaction like sending an order confirmation via EDI as soon an order is created.
The components of condition technique are:
- Condition Tables
- Output Types
- Access Sequences
- Assignment of Messages to Partner Functions
- Procedures
- Procedure Assignments
Condition Tables
A condition Table consists of one or more condition keys and a data part. The condition keys can be selected according to the data combination for which a message is to be found. The keyfields come from the field catalog. Do not change any standard Condition tables. If needed new condition tables are to be created. Copy an existing condition table and make the necessary changes. Choose the name between 501 to 999. Enter a description for the condition table. Select the desired fields from the field catalog. Generate the table. Specify the condition tables in the access sequences.
Output Types
It represents different outputs such as Order Confirmation, delivery notes and etc.. Assign it to the access sequence. Provide a description Detailed data – Output Type, Time, Partner Function, Condition Access, Print Parameters. Do not change the existing types, copy them and change instead.
Access Sequences
Is the search strategy which the system would use to search for condition records valid for a condition type. Has to be a four digit alphanumeric name which is unique.
Procedures
It defines the Condition Types and the Sequence that it should be processed.
Procedure Assignments
Finally the Output Procedure is to be attached to the Sales document.
Sample ABAP program to generate outputs
Assign the output types to represent the following conditions. These output types then result in the creation of IDocs – EDI 870.
- Change in Delivery date
- Delivery drop
- Post Goods Issue
- Order Cancellation
REPORT ZNDCOUT NO STANDARD PAGE HEADING LINE-SIZE 132. ************************************************************************ * Program : Assign the output types to represent the following * conditions. These output types then result in the creation * of IDocs - EDI 870. * - Change in Delivery date * - Delivery drop * - Post Goods Issue * - Order Cancellation * Author : Arnigs * ********************************Tables********************************** TABLES: ZNOPENORD, VBAK, VBAP, VBEP, VBFA, LIKP, * mkpf, NAST, KNVP, VBUV. ************************************************************************ *************************Selection-Screen******************************* SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. PARAMETERS : P_KUNN2 LIKE KNVP-KUNN2 OBLIGATORY. * select-options : s_kunnr for knvp-kunnr. C:NDVK932932 PARAMETERS : P_ORDMET LIKE VBAK-BSARK. SELECTION-SCREEN END OF BLOCK B1. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (31) TEXT-015 FOR FIELD P_KS_OCR. PARAMETERS: P_KS_OCR LIKE TNAPR-KSCHL. SELECTION-SCREEN POSITION 47. SELECTION-SCREEN COMMENT (10) TEXT-016 FOR FIELD P_KS_OCR. PARAMETERS: TIME LIKE SY-UZEIT. SELECTION-SCREEN END OF LINE. PARAMETERS: P_KS_IO LIKE TNAPR-KSCHL, "I:NDVK932735 P_KS_R LIKE TNAPR-KSCHL, P_KS_DCH LIKE TNAPR-KSCHL, P_KS_DCR LIKE TNAPR-KSCHL, P_KS_GI LIKE TNAPR-KSCHL. SELECTION-SCREEN END OF BLOCK B2. SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003. SELECT-OPTIONS: S_ERDAT FOR SY-DATUM, S_ERZET FOR LIKP-ERZET OBLIGATORY. SELECTION-SCREEN END OF BLOCK B3. SELECTION-SCREEN BEGIN OF BLOCK B5 WITH FRAME TITLE TEXT-005. PARAMETERS : P_DIFF TYPE I. SELECTION-SCREEN END OF BLOCK B5. SELECTION-SCREEN BEGIN OF BLOCK B6 WITH FRAME TITLE TEXT-006. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (31) TEXT-007 FOR FIELD UP_OCR. PARAMETERS: UP_OCR AS CHECKBOX. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (31) TEXT-008 FOR FIELD UP_REJ. PARAMETERS: UP_REJ AS CHECKBOX. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (31) TEXT-009 FOR FIELD UP_DCH. PARAMETERS: UP_DCH AS CHECKBOX. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (31) TEXT-010 FOR FIELD UP_DCR. PARAMETERS: UP_DCR AS CHECKBOX. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (31) TEXT-011 FOR FIELD UP_GI. PARAMETERS: UP_GI AS CHECKBOX. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK B6. ************************************************************************ ************************Internal Tables********************************* DATA: BEGIN OF ITAB_OPEN_ORDERS OCCURS 0, VBELN LIKE VBAK-VBELN, MAHDT LIKE VBAK-MAHDT, END OF ITAB_OPEN_ORDERS. DATA : BEGIN OF TEMP_ITAB_ORDERS OCCURS 0, VBELN LIKE VBAK-VBELN, MAHDT LIKE VBAK-MAHDT, END OF TEMP_ITAB_ORDERS. DATA : BEGIN OF ITAB_REJ_ORDERS OCCURS 0, VBELN LIKE VBAK-VBELN, END OF ITAB_REJ_ORDERS. DATA : ITAB_DCH_ORDERS LIKE ITAB_REJ_ORDERS OCCURS 0 WITH HEADER LINE. DATA : ITAB_DCR_ORDERS LIKE ITAB_REJ_ORDERS OCCURS 0 WITH HEADER LINE. DATA : ITAB_GI_ORDERS LIKE ITAB_REJ_ORDERS OCCURS 0 WITH HEADER LINE. DATA : ITAB_NEW_ORDERS LIKE ITAB_REJ_ORDERS OCCURS 0 WITH HEADER LINE. *NDVK932735 begins DATA : BEGIN OF ITAB_ORDERS OCCURS 0, VBELN LIKE VBAK-VBELN, KSCHL LIKE TNAPR-KSCHL, END OF ITAB_ORDERS. DATA : TEMP_INC_ORDERS LIKE ITAB_REJ_ORDERS OCCURS 0 WITH HEADER LINE. DATA : ITAB_INC_ORDERS LIKE ITAB_REJ_ORDERS OCCURS 0 WITH HEADER LINE. * NDVK932735 ends DATA : BEGIN OF ITAB_FINAL_ORDERS OCCURS 0, VBELN LIKE VBAK-VBELN, KSCHL LIKE TNAPR-KSCHL, PSTATUS TYPE C, END OF ITAB_FINAL_ORDERS . DATA : BEGIN OF ITAB_NAST OCCURS 0, OBJKY LIKE NAST-OBJKY, VSTAT LIKE NAST-VSTAT, END OF ITAB_NAST. DATA : BEGIN OF ITAB_KNVP OCCURS 0, KUNNR LIKE KNVP-KUNNR, END OF ITAB_KNVP. * NDVK932932 Begins DATA : BEGIN OF TEMP_OPEN_ORDERS OCCURS 0, OBJKY LIKE NAST-OBJKY, END OF TEMP_OPEN_ORDERS. * NDVK932932 Ends DATA: I_TLINE LIKE TLINE OCCURS 1 WITH HEADER LINE. ************************************************************************ ***************************Variables************************************ DATA : DAT LIKE SY-DATUM, DIFF TYPE I, OBJ_NAME LIKE THEAD-TDNAME. * data : time like sy-uzeit value '003000'. DATA : DATE LIKE SY-DATUM. ************************************************************************ start-of-selection. * if s_kunnr is initial. "C:NDVK932932 PERFORM GET_SOLD-TO. * endif. "C:NDVK932932 * NDVK932932 Begins * IF UP_OCR <> SPACE. * PERFORM GET_ORDERS. "I:NDVK932735 * PERFORM GET_INC_ORDERS. "I:NDVK932735 * PERFORM GET_ITAB_NEW_ORDERS. ** perform del_inc_orders. "I:NDVK932735 * ENDIF. * NDVK932932 Ends * if up_dch <> space or up_dcr <> space. "C:NDVK932932 IF UP_DCH <> SPACE OR UP_DCR <> SPACE OR UP_OCR <> SPACE."I:NDVK932932 PERFORM GET_ITAB_OPEN_ORDERS. IF NOT ITAB_OPEN_ORDERS[] IS INITIAL. * NDVK932932 Begins IF UP_OCR <> SPACE. PERFORM GET_ORDERS. PERFORM GET_INC_ORDERS. PERFORM GET_ITAB_NEW_ORDERS. ENDIF. * NDVK932932 Ends IF UP_DCH <> SPACE. PERFORM GET_PROMISED_DDATES. PERFORM GET_ITAB_DCH_ORDERS. ENDIF. IF UP_DCR <> SPACE. PERFORM GET_ITAB_DCR_ORDERS. ENDIF. ELSE. WRITE:/ 'NO NEW DELIVERIES OR DELIVERY CHANGE TO SEND ACKNLGEMNT'. ENDIF. ENDIF. IF UP_GI <> SPACE. PERFORM GET_ITAB_GI_ORDERS. ENDIF. IF UP_REJ <> SPACE. PERFORM GET_ITAB_REJ_ORDERS. ENDIF. PERFORM GET_ITAB_FINAL_ORDERS. IF NOT ITAB_FINAL_ORDERS[] IS INITIAL. PERFORM SEND_ACK. ELSE. WRITE:/ 'NO ORDERS AVAILABLE TO SEND ACKNOWLEDGEMENT'. ENDIF. *---------------------------------------------------------------------* * FORM SEND_ACKNOWLEDGEMENT * *---------------------------------------------------------------------* * This form sends the acknowledgement to the Sold-to party * *---------------------------------------------------------------------* FORM SEND_ACK. DATA: TMP_KSCHL LIKE NAST-KSCHL. WRITE:/35 'Error Report'. SKIP. WRITE:/10 ' Orders', 35 'Message Type', 55 'Status'. SKIP. LOOP AT ITAB_FINAL_ORDERS. IF ( ITAB_FINAL_ORDERS-KSCHL NE P_KS_OCR AND "I:NDVK932735 ITAB_FINAL_ORDERS-KSCHL NE P_KS_IO ). "I:NDVK932735 SELECT OBJKY VSTAT INTO TABLE ITAB_NAST FROM NAST WHERE KAPPL = 'V1' AND OBJKY = ITAB_FINAL_ORDERS-VBELN AND KSCHL = ITAB_FINAL_ORDERS-KSCHL AND SPRAS = 'E' AND PARNR = P_KUNN2 AND PARVW = 'RE'. IF ITAB_NAST[] IS INITIAL. ITAB_FINAL_ORDERS-PSTATUS = 'E'. MODIFY ITAB_FINAL_ORDERS. ELSE. READ TABLE ITAB_NAST WITH KEY VSTAT = '0'. IF SY-SUBRC <> 0. ITAB_FINAL_ORDERS-PSTATUS = 'A'. MODIFY ITAB_FINAL_ORDERS. ENDIF. ENDIF. REFRESH ITAB_NAST. ENDIF. "I:NDVK932735 IF ITAB_FINAL_ORDERS-PSTATUS = SPACE. MOVE ITAB_FINAL_ORDERS-KSCHL TO TMP_KSCHL. EXPORT TMP_KSCHL TO MEMORY ID 'OUTPUT_TYPE_STATUS1'. SUBMIT RSNAST00 WITH S_KAPPL EQ 'V1' WITH S_OBJKY EQ ITAB_FINAL_ORDERS-VBELN WITH S_KSCHL EQ ITAB_FINAL_ORDERS-KSCHL WITH S_NACHA EQ '6' AND RETURN. ELSEIF ITAB_FINAL_ORDERS-PSTATUS = 'E'. WRITE:/10 ITAB_FINAL_ORDERS-VBELN, 35 ITAB_FINAL_ORDERS-KSCHL, 55 'ENTRY NOT AVAILABLE IN NAST'. ELSE. WRITE:/10 ITAB_FINAL_ORDERS-VBELN, 35 ITAB_FINAL_ORDERS-KSCHL, 55 'ALREADY PROCESSED'. ENDIF. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form GET_ITAB_DCR_ORDERS *&---------------------------------------------------------------------* * This form creates the list of lowes special order for which delivery * has been created within the specified time period. If the period is * not specified, this form will select the orders for which the * delivery has been created either yesterday or today. *----------------------------------------------------------------------* FORM GET_ITAB_DCR_ORDERS. IF S_ERDAT IS INITIAL. DAT = SY-DATUM - 1. SELECT A~VBELV INTO TABLE ITAB_DCR_ORDERS FROM VBFA AS A INNER JOIN LIKP AS B ON A~VBELN = B~VBELN FOR ALL ENTRIES IN ITAB_OPEN_ORDERS WHERE A~VBELV = ITAB_OPEN_ORDERS-VBELN AND A~VBTYP_N = 'J' AND ( ( B~ERDAT => DAT AND B~ERZET => S_ERZET-LOW ) AND ( B~ERDAT <= SY-DATUM AND B~ERZET <= S_ERZET-HIGH ) ). ELSE. SELECT A~VBELV INTO TABLE ITAB_DCR_ORDERS FROM VBFA AS A INNER JOIN LIKP AS B ON A~VBELN = B~VBELN FOR ALL ENTRIES IN ITAB_OPEN_ORDERS WHERE A~VBELV = ITAB_OPEN_ORDERS-VBELN AND A~VBTYP_N = 'J' AND ( ( B~ERDAT => S_ERDAT-LOW AND B~ERZET => S_ERZET-LOW ) AND ( B~ERDAT <= S_ERDAT-HIGH AND B~ERZET <= S_ERZET-HIGH ) ). ENDIF. SORT ITAB_DCR_ORDERS. DELETE ADJACENT DUPLICATES FROM ITAB_DCR_ORDERS. ENDFORM. " GET_ITAB_DCR_ORDERS *&---------------------------------------------------------------------* *& Form GET_ITAB_REJ_ORDERS *&---------------------------------------------------------------------* * This form selects orders which were rejected either yesterday or * today. It can also select order which were rejected during a * specific period if the period is entered on the selection * screen. *----------------------------------------------------------------------* FORM GET_ITAB_REJ_ORDERS. IF S_ERDAT IS INITIAL. DAT = SY-DATUM - 1. SELECT A~VBELN FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN INTO TABLE ITAB_REJ_ORDERS FOR ALL ENTRIES IN ITAB_KNVP "I:NDVK932932 * where ( a~kunnr in S_KUNNR and "C:NDVK932932 WHERE ( A~KUNNR = ITAB_KNVP-KUNNR AND "I:NDVK932932 A~BSARK = P_ORDMET AND B~ABGRU <> SPACE AND ( B~AEDAT => DAT AND B~AEDAT <= SY-DATUM ) ). ELSE. SELECT A~VBELN FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN INTO TABLE ITAB_REJ_ORDERS FOR ALL ENTRIES IN ITAB_KNVP "I:NDVK932932 * where a~kunnr in S_KUNNR and "C:NDVK932932 WHERE A~KUNNR = ITAB_KNVP-KUNNR AND "I:NDVK932932 A~BSARK = P_ORDMET AND B~ABGRU <> SPACE AND ( B~AEDAT => S_ERDAT-LOW AND B~AEDAT <= S_ERDAT-HIGH ). ENDIF. SORT ITAB_REJ_ORDERS. DELETE ADJACENT DUPLICATES FROM ITAB_REJ_ORDERS. ENDFORM. " GET_ITAB_REJ_ORDERS *&---------------------------------------------------------------------* *& Form GET_ITAB_GI_ORDERS *&---------------------------------------------------------------------* * This form selects the orders belonging to a particular sold-to * and ordering method, which have been goods issued either * yesterday or today. It can also select orders which were goods * issued in a certain period if the period is entered on * the selection screen. *----------------------------------------------------------------------* FORM GET_ITAB_GI_ORDERS. IF S_ERDAT IS INITIAL. DAT = SY-DATUM - 1. SELECT A~VBELN INTO TABLE ITAB_GI_ORDERS FROM VBAK AS A INNER JOIN VBFA AS B ON A~VBELN = B~VBELV * inner join mkpf as c on b~vbeln = c~mblnr "C:NDVK932735 FOR ALL ENTRIES IN ITAB_KNVP "I:NDVK932932 * where a~kunnr in s_kunnr and "C:NDVK932932 WHERE A~KUNNR = ITAB_KNVP-KUNNR AND "I:NDVK932932 A~BSARK = P_ORDMET AND B~VBTYP_N = 'R' AND * NDVK932735 Begins * ( ( c~cpudt => dat and c~cputm => s_erzet-low ) and * ( c~cpudt <= sy-datum and c~cputm <= s_erzet-high ) ). ( ( B~ERDAT => DAT AND B~ERZET => S_ERZET-LOW ) AND ( B~ERDAT <= SY-DATUM AND B~ERZET <= S_ERZET-HIGH ) ). * NDVK932735 Ends ELSE. SELECT A~VBELN INTO TABLE ITAB_GI_ORDERS FROM VBAK AS A INNER JOIN VBFA AS B ON A~VBELN = B~VBELV * inner join mkpf as c on b~vbeln = c~mblnr "C:NDVK932735 FOR ALL ENTRIES IN ITAB_KNVP "I:NDVK932932 * where a~kunnr in S_KUNNR and "C:NDVK932932 WHERE A~KUNNR = ITAB_KNVP-KUNNR AND "I:NDVK932932 A~BSARK = P_ORDMET AND B~VBTYP_N = 'R' AND * NDVK932735 Begins * ( ( c~cpudt => s_erdat-low and c~cputm => s_erzet-low ) and * ( c~cpudt <= s_erdat-high and c~cputm <= s_erzet-high ) ). ( ( B~ERDAT => S_ERDAT-LOW AND B~ERZET => S_ERZET-LOW ) AND ( B~ERDAT <= S_ERDAT-HIGH AND B~ERZET <= S_ERZET-HIGH ) ). * NDVK932735 Ends ENDIF. SORT ITAB_GI_ORDERS. DELETE ADJACENT DUPLICATES FROM ITAB_GI_ORDERS. ENDFORM. " GET_ITAB_GI_ORDERS *&---------------------------------------------------------------------* *& Form GET_ITAB_DCH_ORDERS *&---------------------------------------------------------------------* * This form first stores all the orders for which the difference * between the promised delivery date and the current date is less * than the number of days specified in the selection screen in an * internal table (temp_itab_orders). * Then if there is a change in the delivery dates for those orders * the orders are selected to send acknowledgement. *----------------------------------------------------------------------* FORM GET_ITAB_DCH_ORDERS. LOOP AT ITAB_OPEN_ORDERS. DIFF = ITAB_OPEN_ORDERS-MAHDT - SY-DATUM . IF DIFF >= 0 AND DIFF <= P_DIFF. TEMP_ITAB_ORDERS = ITAB_OPEN_ORDERS. APPEND TEMP_ITAB_ORDERS. ENDIF. ENDLOOP. * Check for the change in the delivery date. If this date is different * from the promised date, we need to send the acknowledgement. IF NOT TEMP_ITAB_ORDERS[] IS INITIAL. SELECT VBELN INTO TABLE ITAB_DCH_ORDERS FROM VBEP FOR ALL ENTRIES IN TEMP_ITAB_ORDERS WHERE VBELN = TEMP_ITAB_ORDERS-VBELN AND * edatu <> temp_itab_orders-mahdt. "C:NDVK933006 EDATU > TEMP_ITAB_ORDERS-MAHDT. "I:NDVK933006 SORT ITAB_DCH_ORDERS BY VBELN. DELETE ADJACENT DUPLICATES FROM ITAB_DCH_ORDERS. ENDIF. ENDFORM. " GET_ITAB_DCH_ORDERS *&---------------------------------------------------------------------* *& Form GET_ITAB_OPEN_ORDERS *&---------------------------------------------------------------------* * This Forms retrieves all the open orders for a given sold-to, * ordering method. It only selects the orders that have not been * rejected. *----------------------------------------------------------------------* FORM GET_ITAB_OPEN_ORDERS. SELECT B~VBELN INTO TABLE ITAB_OPEN_ORDERS FROM ZNOPENORD AS A INNER JOIN VBAK AS B ON A~VBELN = B~VBELN INNER JOIN VBAP AS C ON A~VBELN = C~VBELN * NDVK932932 begins FOR ALL ENTRIES IN ITAB_KNVP * where a~kunnr in s_kunnr and "I:NDVK932735 WHERE A~KUNNR = ITAB_KNVP-KUNNR AND * NDVK932932 ends B~BSARK = P_ORDMET AND C~ABGRU = SPACE. SORT ITAB_OPEN_ORDERS BY VBELN. DELETE ADJACENT DUPLICATES FROM ITAB_OPEN_ORDERS COMPARING VBELN. CLEAR ITAB_OPEN_ORDERS. ENDFORM. " GET_ITAB_OPEN_ORDERS *&---------------------------------------------------------------------* *& Form GET_ITAB_FINAL_ORDERS *&---------------------------------------------------------------------* * This form collects all the orders which were selected earlier * * into an final internal table. * *----------------------------------------------------------------------* FORM GET_ITAB_FINAL_ORDERS. LOOP AT ITAB_NEW_ORDERS. ITAB_FINAL_ORDERS-VBELN = ITAB_NEW_ORDERS-VBELN. ITAB_FINAL_ORDERS-KSCHL = p_ks_ocr. APPEND ITAB_FINAL_ORDERS. ENDLOOP. * NDVK932735 Begins LOOP AT ITAB_INC_ORDERS. ITAB_FINAL_ORDERS-VBELN = ITAB_INC_ORDERS-VBELN. ITAB_FINAL_ORDERS-KSCHL = P_KS_IO. APPEND ITAB_FINAL_ORDERS. ENDLOOP. * NDVK932735 Ends LOOP AT ITAB_DCH_ORDERS. ITAB_FINAL_ORDERS-VBELN = ITAB_DCH_ORDERS-VBELN. ITAB_FINAL_ORDERS-KSCHL = P_KS_DCH. APPEND ITAB_FINAL_ORDERS. ENDLOOP. LOOP AT ITAB_DCR_ORDERS. ITAB_FINAL_ORDERS-VBELN = ITAB_DCR_ORDERS-VBELN. ITAB_FINAL_ORDERS-KSCHL = P_KS_DCR. APPEND ITAB_FINAL_ORDERS. ENDLOOP. LOOP AT ITAB_REJ_ORDERS. ITAB_FINAL_ORDERS-VBELN = ITAB_REJ_ORDERS-VBELN. ITAB_FINAL_ORDERS-KSCHL = P_KS_R. APPEND ITAB_FINAL_ORDERS. ENDLOOP. LOOP AT ITAB_GI_ORDERS. ITAB_FINAL_ORDERS-VBELN = ITAB_GI_ORDERS-VBELN. ITAB_FINAL_ORDERS-KSCHL = P_KS_GI. APPEND ITAB_FINAL_ORDERS. ENDLOOP. SORT ITAB_FINAL_ORDERS BY VBELN. ENDFORM. " GET_ITAB_FINAL_ORDERS *&---------------------------------------------------------------------* *& Form GET_ITAB_NEW_ORDERS *&---------------------------------------------------------------------* * This section of the code is to retrieve all the new Lowe's * Special orders. It can retrieve the orders which were created in * last 30 minutes or during a specific time period. *----------------------------------------------------------------------* FORM GET_ITAB_NEW_ORDERS. * IF S_ERDAT IS INITIAL. * * TIME = SY-UZEIT - TIME. * * IF SY-UZEIT < '120000' AND TIME > '120000'. * DATE = SY-DATUM - 1. * ELSE. * DATE = SY-DATUM. * ENDIF. * * SELECT B~VBELN * INTO TABLE ITAB_NEW_ORDERS * FROM ZNOPENORD AS A * INNER JOIN VBAK AS B ON A~VBELN = B~VBELN * INNER JOIN VBAP AS C ON A~VBELN = C~VBELN * WHERE A~KUNNR IN S_KUNNR AND "NDVK932735 * B~BSARK = P_ORDMET AND * B~ERDAT => DATE AND * B~ERZET => TIME AND * C~ABGRU = SPACE. * * ELSE. * SELECT B~VBELN * INTO TABLE ITAB_NEW_ORDERS * FROM ZNOPENORD AS A * INNER JOIN VBAK AS B ON A~VBELN = B~VBELN * INNER JOIN VBAP AS C ON A~VBELN = C~VBELN * WHERE A~KUNNR IN S_KUNNR AND "NDVK932735 * B~BSARK = P_ORDMET AND * ( ( B~ERDAT => S_ERDAT-LOW AND B~ERZET => S_ERZET-LOW ) AND * ( B~ERDAT <= S_ERDAT-HIGH AND B~ERZET <= S_ERZET-HIGH ) ) AND * C~ABGRU = SPACE. * * ENDIF. * SORT ITAB_NEW_ORDERS. * * DELETE ADJACENT DUPLICATES FROM ITAB_NEW_ORDERS. LOOP AT ITAB_ORDERS WHERE KSCHL = P_KS_OCR. READ TABLE TEMP_INC_ORDERS WITH KEY VBELN = ITAB_ORDERS-VBELN BINARY SEARCH. IF SY-SUBRC <> 0. ITAB_NEW_ORDERS-VBELN = ITAB_ORDERS-VBELN. APPEND ITAB_NEW_ORDERS. ENDIF. ENDLOOP. ENDFORM. " GET_ITAB_NEW_ORDERS *&---------------------------------------------------------------------* *& Form GET_PROMISED_DDATES *&---------------------------------------------------------------------* * This form reads the Text field (Z222) 'Reuested delivery date' * of sales orders and gets the promised delivery dates. *----------------------------------------------------------------------* FORM GET_PROMISED_DDATES. LOOP AT ITAB_OPEN_ORDERS. OBJ_NAME = ITAB_OPEN_ORDERS-VBELN. CALL FUNCTION 'READ_TEXT' EXPORTING * CLIENT = SY-MANDT ID = 'Z222' LANGUAGE = 'E' NAME = OBJ_NAME OBJECT = 'VBBK' * ARCHIVE_HANDLE = 0 * IMPORTING * header = TABLES LINES = I_TLINE EXCEPTIONS ID = 1 LANGUAGE = 2 NAME = 3 NOT_FOUND = 4 OBJECT = 5 REFERENCE_CHECK = 6 WRONG_ACCESS_TO_ARCHIVE = 7 OTHERS = 8. READ TABLE I_TLINE INDEX 1. ITAB_OPEN_ORDERS-MAHDT = I_TLINE-TDLINE. MODIFY ITAB_OPEN_ORDERS. CLEAR OBJ_NAME. CLEAR I_TLINE. REFRESH I_TLINE. ENDLOOP. ENDFORM. " GET_PROMISED_DDATES *&---------------------------------------------------------------------* *& Form GET_SOLD-TO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GET_SOLD-TO. SELECT KUNNR INTO TABLE ITAB_KNVP FROM KNVP WHERE KUNN2 = P_KUNN2 AND PARVW = 'RE' AND VKORG = '0300'. * sort itab_knvp. "C:NDVK932735 * delete adjacent duplicates from itab_knvp. "C:NDVK932735 IF SY-SUBRC = 0. SORT ITAB_KNVP BY KUNNR. DELETE ADJACENT DUPLICATES FROM ITAB_KNVP. * NDVK932932 Begins * loop at itab_knvp. * s_kunnr-sign = 'I'. * s_kunnr-option = 'EQ'. * s_kunnr-low = itab_knvp-kunnr. * append s_kunnr. * endloop. * NDVK932932 Ends ENDIF. ENDFORM. " GET_SOLD-TO *&---------------------------------------------------------------------* *& Form GET_INC_ORDERS *&---------------------------------------------------------------------* * This form gets the incomplete orders *----------------------------------------------------------------------* FORM GET_INC_ORDERS. * NDVK932932 Begins *loop at itab_orders where kschl = p_ks_io. * temp_inc_orders-vbeln = itab_orders-vbeln. * append temp_inc_orders. * endloop. * NDVK932932 Ends SELECT VBELN * into table itab_inc_orders "C:NDVK932932 INTO TABLE TEMP_INC_ORDERS "I:NDVK932932 FROM VBUV * for all entries in temp_inc_orders "C:NDVK932932 FOR ALL ENTRIES IN ITAB_ORDERS "I:NDVK932932 * where vbeln = temp_inc_orders-vbeln. "C:NDVK932932 WHERE VBELN = ITAB_ORDERS-VBELN. "I:NDVK932932 * NDVK932932 Begins SORT TEMP_INC_ORDERS. LOOP AT ITAB_ORDERS WHERE KSCHL = P_KS_IO. READ TABLE TEMP_INC_ORDERS WITH KEY VBELN = ITAB_ORDERS-VBELN BINARY SEARCH. IF SY-SUBRC = 0. ITAB_INC_ORDERS-VBELN = ITAB_ORDERS-VBELN. APPEND ITAB_INC_ORDERS. ENDIF. ENDLOOP. * NDVK932932 Begins ENDFORM. " GET_INC_ORDERS *&---------------------------------------------------------------------* *& Form DEL_INC_ORDERS *&---------------------------------------------------------------------* * Deletes incomplete orders from the new orders internal table *----------------------------------------------------------------------* FORM DEL_INC_ORDERS. LOOP AT ITAB_INC_ORDERS. READ TABLE ITAB_NEW_ORDERS WITH KEY VBELN = ITAB_INC_ORDERS-VBELN BINARY SEARCH. IF SY-SUBRC = 0. DELETE ITAB_NEW_ORDERS WHERE VBELN = ITAB_INC_ORDERS-VBELN. ENDIF. ENDLOOP. ENDFORM. " DEL_INC_ORDERS *&---------------------------------------------------------------------* *& Form GET_ORDERS *&---------------------------------------------------------------------* * This form gets all the orders from NAST entries for which we * need to send either the order creation acknowledgement or * incomplete order acknowledgement *----------------------------------------------------------------------* FORM GET_ORDERS. * Open order internal table cannot be used in the select statement * below because of type mismatch between nast-objky and vbak-vbeln. LOOP AT ITAB_OPEN_ORDERS. TEMP_OPEN_ORDERS-OBJKY = ITAB_OPEN_ORDERS-VBELN. "I:NDVK932932 APPEND TEMP_OPEN_ORDERS. "I:NDVK932932 ENDLOOP. SELECT OBJKY KSCHL INTO TABLE ITAB_ORDERS FROM NAST FOR ALL ENTRIES IN TEMP_OPEN_ORDERS "I:NDVK932932 WHERE KAPPL = 'V1' AND OBJKY = TEMP_OPEN_ORDERS-OBJKY AND "I:NDVK932932 KSCHL IN (P_KS_OCR, P_KS_IO) AND SPRAS = 'E' AND PARNR = P_KUNN2 AND PARVW = 'RE' AND VSTAT = '0'. SORT ITAB_ORDERS. ENDFORM. " GET_ORDERS