Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

[ABAP Source code] Need some help understanding customize table

Former Member
0 Likes
689

Hello SAP Community, I'm trying to manually recalculate how a customized table in SAP is being generated based on the ABAP Source Code. Unfortunately, my knowledge of programming is very limited. Therefore, I would need some help trying to understand the source code for this customize table.

What I understand is this customize table obtains it's information from table MCHA, MCHB, MBEW, MARA, T001, T001W, TCURX. But I'm not exactly sure what are the criterias being used to create the customized table.

Thanks alot.

[quote]

REPORT ZUPDSTKU LINE-COUNT 60

                LINE-SIZE 132

                MESSAGE-ID 00

                NO STANDARD PAGE HEADING.

*

* TABLES *

TABLES: ZMMSTOCK, MCHA, MCHB, MBEW, MARA, T001, T001W, TCURX.

*

SELECT-OPTIONS: S_WERKS FOR MCHB-WERKS.

* VARIABLES *

DATA: ZSTKIND LIKE MSKU-SOBKZ.

DATA: ZNOTCNT TYPE I.

DATA: ZCNTED TYPE I.

DATA: ZVMVER(013)  TYPE P DECIMALS 08.

DATA: ZSTKTOT(013) TYPE P DECIMALS 02.

*

* INTERNAL TABLES *

DATA: BEGIN OF DATEREC,

      YEAR(4) TYPE C,

      MONTH(2) TYPE C,

      DAY(2) TYPE C,

      END OF DATEREC.

DATA: YEAR(4) TYPE C,

      MONTH(2) TYPE C,

      DAY(2) TYPE C.

*

* INITIALISATION  OF VARIABLE *

ZNOTCNT = 0.

ZCNTED = 0.

ZSTKIND = ' '.

*

* SELECTION *

SELECT * FROM MCHB WHERE WERKS IN S_WERKS AND

                       ( CLABS <> 0

                      OR CSPEM <> 0

                      OR CINSM <> 0 ).

  SELECT SINGLE * FROM MARA

          WHERE MATNR = MCHB-MATNR.

  SELECT SINGLE * FROM MCHA

          WHERE CHARG = MCHB-CHARG

            AND MATNR = MCHB-MATNR

            AND WERKS = MCHB-WERKS.

  SELECT SINGLE * FROM MBEW

          WHERE BWKEY = MCHB-WERKS

            AND BWTAR = MCHA-BWTAR

            AND MATNR = MCHB-MATNR.

*

* ASSIGN YEAR & MONTH TO INTERNAL TABLE DATEREC *

  ZSTKIND = 'U'.

  MOVE SY-DATUM TO DATEREC.

  IF DATEREC-MONTH = 1.

    DATEREC-MONTH  = DATEREC-MONTH + 11.

    DATEREC-YEAR   = DATEREC-YEAR - 1.

  ELSE.

    DATEREC-MONTH  = DATEREC-MONTH - 1.

  ENDIF.

*

* SAVE MONTH-END STOCK BALANCE TO ZMMSTOCK TABLE *

  IF SY-SUBRC NE 0.

    WRITE: / MCHB-MATNR,

             MCHB-WERKS,

             MCHB-LGORT,

             MCHB-CHARG,

             'not found'.

  ELSE.

*

* CALCULATE MOVING AVERAGE PRICE IN 8 DECIMAL *

* ZVMVER = MBEW-VMSAL / MBEW-VMKUM. * cky 28.07.2000 previous period

*                                                    valuated stock

    SELECT SINGLE * FROM T001W WHERE WERKS = MCHB-WERKS.

    SELECT SINGLE * FROM T001 WHERE BUKRS = T001W-EKORG.

    SELECT SINGLE * FROM TCURX WHERE CURRKEY = T001-WAERS.

    IF SY-SUBRC NE 0.

      ZVMVER = MBEW-SALK3 / MBEW-LBKUM.

    ELSE.

      ZVMVER = MBEW-SALK3 * 100 / MBEW-LBKUM.

    ENDIF.

*

    SELECT SINGLE * FROM ZMMSTOCK WHERE MATNR = MCHB-MATNR

                                    AND WERKS = MCHB-WERKS

                                    AND LGORT = MCHB-LGORT

                                    AND CHARG = MCHB-CHARG

                                    AND LFGJA = DATEREC-YEAR

                                    AND LFMON = DATEREC-MONTH.

    IF SY-SUBRC = 0.

      WRITE: / MCHB-MATNR,

               MCHB-WERKS,

               MCHB-LGORT,

               MCHB-CHARG,

               DATEREC-MONTH,

               DATEREC-YEAR,

               'exists in table ZMMSTOCK, record not updated'.

      ZNOTCNT = ZNOTCNT + 1.

    ELSE.

      WRITE: / MCHB-MATNR,

               MCHB-WERKS,

               MCHB-LGORT,

               MCHB-CHARG,

               DATEREC-MONTH,

               DATEREC-YEAR,

               'updated to table ZMMSTOCK'.

      ZCNTED = ZCNTED + 1.

      ZMMSTOCK-MATNR = MCHB-MATNR.

      ZMMSTOCK-WERKS = MCHB-WERKS.

      ZMMSTOCK-LGORT = MCHB-LGORT.

      ZMMSTOCK-CHARG = MCHB-CHARG.

      ZMMSTOCK-VMVER = ZVMVER.

      ZMMSTOCK-CVMLA = MCHB-CLABS.

      ZMMSTOCK-CVMSP = MCHB-CSPEM.

      ZMMSTOCK-CINSM = MCHB-CINSM.

      ZMMSTOCK-LFGJA = DATEREC-YEAR.

      ZMMSTOCK-LFMON = DATEREC-MONTH.

      ZMMSTOCK-SOBKZ = ZSTKIND.

      ZMMSTOCK-LWEDT = MCHA-LWEDT.

      ZMMSTOCK-ERSDA = SY-DATUM.

      INSERT ZMMSTOCK.

    ENDIF.

  ENDIF.

ENDSELECT.

*

* DISPLAY SUMMARY OF RECORD UPDATE *

SKIP 3.

WRITE: / 'Update Summary'.

WRITE: / '=============='.

WRITE: / 'Total Records Updated     : ',

         ZCNTED.

WRITE: / 'Total Records Not Updated : ',

         ZNOTCNT.

* end of program

[/quote]

1 REPLY 1
Read only

Former Member
0 Likes
544

Hi,

I hope I understand your request.  The first select statement  (from MCHB) generates a looping structure, so for every record in MCHB that meets the criteria in the select (i.e. werks, clabs, cspem, cinsm) it will attempt to generate a record in your ZMMSTOCK table.

It is not a recommended practice to have so many selects (if any) inside the loop of an outer select.

For context, the loop starts at this:

SELECT * FROM MCHB WHERE WERKS IN S_WERKS AND

                       ( CLABS <> 0

                      OR CSPEM <> 0

                      OR CINSM <> 0 ).

.

.

.

.

and ends at this:

    ENDIF.

  ENDIF.

ENDSELECT.

Regards,

Steve