* This program can be a model for any ABAP recursion.
* This is often needed to navigate down hierarchical data.
* One example is BOM.
* Important point is to chack for stack overflow
* and give RIGHT MESSAGE so that corrective action can be taken.
*&---------------------------------------------------------------------*
* Sample Program Showing Recursion in ABAP
* Simple BOM Tree walking in ABAP
* Takes Care of Diagnostics as well - detects Loops
* Hence never experience Stack Overflow!
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*
* has INCLUDE zjncinclude with FORM zjnc_dump_list
*&---------------------------------------------------------------------*
REPORT zjncrecursion.
INCLUDE zjncinclude. " From www.sap-img.com
TABLES: makt.
CONSTANTS: maxlevels TYPE i VALUE 10.
TYPES: BEGIN OF ty_usage,
parent TYPE makt-matnr,
child TYPE makt-matnr,
usage TYPE mseg-menge,
END OF ty_usage.
DATA: wa_usage TYPE ty_usage,
it_usage TYPE STANDARD TABLE OF ty_usage. " USAGE data
TYPES: BEGIN OF ty_stack,
level TYPE h_level,
matnr TYPE makt-matnr,
menge TYPE mseg-menge,
END OF ty_stack.
DATA: istackpos TYPE i,
wa_stack TYPE ty_stack,
it_stack TYPE STANDARD TABLE OF ty_stack. "BOM Stack
TYPES: BEGIN OF ty_reqd,
matnr TYPE makt-matnr,
menge TYPE mseg-menge,
END OF ty_reqd.
DATA: wa_reqd TYPE ty_reqd,
it_reqd TYPE STANDARD TABLE OF ty_reqd. "NET Requirement of
RAW Material
PARAMETERS: p_build TYPE makt-matnr, "Target to Build
p_menge TYPE mseg-menge. "Quantity to Build
INITIALIZATION.
PERFORM f_usage_data.
START-OF-SELECTION.
istackpos = 0.
MOVE istackpos TO wa_stack-level.
MOVE p_build TO wa_stack-matnr.
MOVE p_menge TO wa_stack-menge.
APPEND wa_stack TO it_stack. " 1st PUSH
PERFORM f_explode USING p_build.
SORT it_reqd BY matnr.
PERFORM zjnc_dump_list USING 'IT_REQD' 'WA_REQD' 'Net RAW
Requirement'.
*&--------------------------------------------------------------------*
*& Form f_Explode
*&--------------------------------------------------------------------*
FORM f_explode USING p_pmatnr.
DATA: icount TYPE i,
totalreq TYPE mseg-menge.
istackpos = istackpos + 1. " PUSH
IF istackpos GE maxlevels.
PERFORM f_dumpstack. " terminate
LEAVE PROGRAM.
ENDIF.
icount = 0.
LOOP AT it_usage INTO wa_usage WHERE parent = p_pmatnr.
icount = icount + 1.
MOVE istackpos TO wa_stack-level.
MOVE wa_usage-child TO wa_stack-matnr.
MOVE wa_usage-usage TO wa_stack-menge.
APPEND wa_stack TO it_stack. " PUSH
PERFORM f_explode USING wa_usage-child.
ENDLOOP.
IF icount = 0. " then LEAF
totalreq = '1.0'.
LOOP AT it_stack INTO wa_stack.
totalreq = totalreq * wa_stack-menge.
ENDLOOP.
MOVE p_pmatnr TO wa_reqd-matnr.
MOVE totalreq TO wa_reqd-menge.
COLLECT wa_reqd INTO it_reqd.
ENDIF.
DELETE it_stack INDEX istackpos. " POP
istackpos = istackpos - 1. " POP
ENDFORM. "f_Explode
*&--------------------------------------------------------------------*
*& Form f_dumpstack
*&--------------------------------------------------------------------*
FORM f_dumpstack.
PERFORM zjnc_dump_list USING 'IT_STACK' 'WA_STACK' 'LOOP in BOM
STACK'.
ENDFORM. "f_dumpstack
*&--------------------------------------------------------------------*
*& Form f_usage_data for Hungry Bengali ABAPer in Kolkata
*&--------------------------------------------------------------------*
FORM f_usage_data.
MOVE 'FISHCURRY' TO wa_usage-parent.
MOVE 'SPICES' TO wa_usage-child.
MOVE 10 TO wa_usage-usage.
APPEND wa_usage TO it_usage.
MOVE 'FISHCURRY' TO wa_usage-parent.
MOVE 'MIRCHI' TO wa_usage-child.
MOVE 5 TO wa_usage-usage.
APPEND wa_usage TO it_usage.
MOVE 'FISHCURRY' TO wa_usage-parent.
MOVE 'ALOO' TO wa_usage-child.
MOVE 8 TO wa_usage-usage.
APPEND wa_usage TO it_usage.
MOVE 'SPICES' TO wa_usage-parent.
MOVE 'MIRCHI' TO wa_usage-child.
MOVE 2 TO wa_usage-usage.
APPEND wa_usage TO it_usage.
MOVE 'SPICES' TO wa_usage-parent.
MOVE 'JEERA' TO wa_usage-child.
MOVE 3 TO wa_usage-usage.
APPEND wa_usage TO it_usage.
MOVE 'SPICES' TO wa_usage-parent.
MOVE 'HALUD' TO wa_usage-child.
MOVE 7 TO wa_usage-usage.
APPEND wa_usage TO it_usage.
ENDFORM. "f_usage_data
BADI, BAPI'S, BDC, HR, Interview Questions, Programming, Reports, RFC, TCodes, ABAP-Java, ALE, IDOCs, ALV's, BSP, BTE, Data Dictionary, Dialog Programming, FICO, SD, MM, Function Modules, Interactive Reports, Internal Tables, Locking, Logical Database, OOPS,PM,PP,QM,R/3,BW,SCRIPTS,SMART FORMS
Friday, July 25, 2008
Recursion with Loop Checking in SAP
Subscribe to:
Post Comments (Atom)
Archives
-
▼
2008
(112)
-
▼
July
(54)
- The R/3 Basis System: Overview
- Position of the Basis System Within the R/3 System
- Application Servers in SAP
- Work Processes in SAP ABAP
- Overview of the Components of Application Programs...
- Structure of an Application Program in SAP ABAP
- Screens in SAP ABAP
- Structure of ABAP Programs
- Processing Blocks in ABAP Programs
- ABAP Statements in SAP ABAP
- Logical Databases and Contexts in SAP ABAP
- Memory Structures of an ABAP Program
- Creating and Changing ABAP Programs in SAP ABAP
- Opening a Program from the Repository Browser in S...
- Opening Programs in the ABAP Editor
- Opening Programs Using Forward Navigation in SAP ABAP
- Maintaining Program Attributes in SAP ABAP
- Editing Programs in SAP ABAP
- ABAP Syntax
- Processing Data in SAP ABAP
- LESSON 25 CALLING PROGRAM AND PASSING DATA
- LESSON 26 TECHNIQUES FOR LIST CREATION AND SAP QUARY
- LESSON 29 SELECTION SCREENS ABAP REPORT
- ABAP Interview Questions -SQL , Tables , Basic
- Dialog Programming Interview Questions(FAQ's)
- Performance Tuning Faqs in abap
- SAP BASIS LAYER Interview Questions
- SAP ABAPDATA DICTIONARY Interview Questions
- SAP ABAP LOGICAL DATABASE Interview Questions
- SAP ABAP Dialog Programming FAQ
- More than 100 ABAP Interview Faq's
- SAP Workflow Items Sent To Everyone If Agent Not D...
- How to delete an editor lock in sap?
- How can I insert my company logo in the sap abap s...
- sap abap program for Issuing an Unix Command from ...
- Difference for Stock Transfer and Transfer Posting...
- Add a Field To New Condition Table in Pricing in SAP
- Unified Access to All SAP ABAP HR Infotypes
- SAP HR ABAP Logical Database
- Processing Payroll infotypes/Cluster in SAP HR ABAP
- FAQ ON SCRIPTS 1
- FAQ ON SCRIPTS 2
- FAQ ON SCRIPTS 3
- General - Reporting Tree in ABAP
- List Box in ABAP Report
- Example Code For Drill Down Report in SAP ABAP
- TABStrips in ABAP
- A demo program to create subscreen in your ABAP Pr...
- Tree type report in ABAP
- Recursion with Loop Checking in SAP
- ABAP Clipboard Utilities for Beautiful Commented Code
- Create Push Buttons in Application Tool Bar IN SAP...
- Single Bit Processing in Hexadecimal Fields in SAP...
- Showing posts with label ABAP Enhancement. Show al...
-
▼
July
(54)
No comments:
Post a Comment