AVG/Quorum Location

Hi all,
We've been tasked in creating a automatic failover between SQL servers that reside in different datacenters in the result of a complete datacenter failure.
We've worked with AVG before, and have used file share witness as the quorum. The problem we see is, because we only have two datacenters, the file share has to reside in a datacenter that accommodates
one of the SQL servers, therefore if that datacenter goes down, so does the quorum, and the cluster will fail.
Therefore I can only see two ways round this - either host the file share quorum in a third datacenter/remote location, or create two clusters, each with a file share quorum, one in each DC with
write databases on each primary node, so if we did lose one datacenter only one cluster gets knocked out.
Or is there a more elegant solution? The goal is to have automatic failover.
Thanks,

AGs don't need a quorum, only FCIs need a quorum, see below.
AGs don't need quorums
You are talking about stretching a FCI over two sites and probably subnets. This requires SAN level replication which is very expensive. see
here for details.
You could have an FCI in each site with AGs stretching between but failover is manual.
Perhaps transactional MERGE (master - master) replication will give you what you need but it does require a lot of looking after.

Similar Messages

  • Quorum location for Failover cluster file share witness

    So, I've done quite a bit of searching for what I'm about to propose and I've been able to find nothing.
    I currently have a multi site failover cluster hosting separate 2-node SQL clusters at each site connected through an Availability Group.  For the failover cluster I am using a file share witness hosted on a server at the primary site.  Both sites
    are built entirely on vSphere 5.5 and have full replication for the production servers.  If the primary site goes down (disaster), I'll need to force quorum in the secondary site to a new file share witness.
    Well, I got to thinking...
    Why not just replicate the server hosting the file share?  I completely understand the reasoning behind not putting the file share witness on DFS, but a replicated virtual server, why not?  If the primary site fails, the replicated server hosting
    the file share witness is brought online with the rest of the production servers in the DR site.  In that case, the only thing that changes is the server IP address, but ultimately, the server name and share where quorum is hosted all stays the same.
    Ultimately this prevents needing to find a 3rd geographical/cloud location to host a quorum/witness at.  I can't imagine it's this "simple", but maybe it is.  If this is possible, and there's not something I'm missing, this essentially
    makes the quorum file share witness site agnostic, meaning it could live or be moved anywhere that replication is allowed.
    Ideas, thoughts?  Am I missing something?
    Thanks!
    Chris Miller

    Most likely it would be better to put this question to the High Availability forum -
    https://social.technet.microsoft.com/Forums/en-US/home?forum=winserverClustering
    But, might need a more complete definition of your environment.  Are you saying that you have multiple 2-node clusters, each with one node in the primary and the second node in the DR site?  And you have a single file share server located in primary that
    is used to host the file share witnesses for all these clusters?  You want to use VMware to replicate the file share server to the DR site so that it can be made available should the primary site fail?
    It should work, but it will not be automatic.  After all, the replicated VM will need to be brought online at the DR site so the SQL cluster will recognize it.  That is not an automatic process.  So the cluster will be down until
    you bring the file share server online so it can be recognized.  Not a whole lot different that simply forcing the DR SQL host to run without quorum.
    . : | : . : | : . tim

  • URGENT: REGARDING BOM EXPLORE REPORT

    HI,
    I making dis report and i want to display the BOM Explosion in which i have to display the output whihc conatins the details of it. I am sending my code in whihc it displays correct for 1 BOM but when comes to miultiple BOM it has following problem:-
    1.) The materaial no does not change on the top of report .
    2.) The DIVSION No. of the some of the materails are displayed and some of dem are not displaying.
    plzz help me out with dis problem as help will be definately rewarded.
    REPORT ZTET1.
    TABLES: MBEW,           "Material Valuation
            MSLB,           "Special stocks with vendor
            MARA,           "Material Master
            MAKT,           "Material Descriptions
            MARD,           "Material Master: Storage Location/Batch Segment
            MAST,           "BOM Header
            STKO,           "BOM Detail
            STPO,           "Bom Components
            STAS.           "BOM Alternative
    Text Elements
    Plant
    SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT 'CA',
    Material
                    S_MATNR FOR MAST-MATNR,
    Material Type
                    S_MTART FOR MARA-MTART.
    Base Quantity
    PARAMETERS: S_BASE TYPE I DEFAULT '1'.
    Display up to Level
    PARAMETERS: S_LVL  TYPE I DEFAULT '99'.
    PARAMETERS: stlal  type mast-stlal default '01'.
    SELECTION-SCREEN SKIP.
    Include Vendor Stock
    PARAMETERS: X_MSLB  AS CHECKBOX.
    DATA: W_MATNR LIKE MAPL-MATNR.
    DATA: PARENT_MATNR LIKE MAST-MATNR,
          CHILD_MATNR LIKE STPO-IDNRK,
          CHILD_WERKS LIKE MAST-WERKS,
          CHILD_STLAL LIKE MAST-STLAL,
          W_MAKTX LIKE MAKT-MAKTX,
          W_STD TYPE P DECIMALS 5,
          W_MAV TYPE P DECIMALS 5,
          W_MENGE TYPE P DECIMALS 3,
          W_LEVEL TYPE I,
          W_DOT(1),
          W_LVL(12),
          W_LVL1(12),
          W_LVL2(2),
          W_COL TYPE I,
          W_LFLAG,
          W_TTL LIKE MARD-LABST.
      DATA: SPART LIKE MARA-SPART.
    DATA: BEGIN OF INT1 OCCURS 50,
            LGORT(6),
            LABST LIKE MARD-LABST,
          END OF INT1.
    IF S_BASE EQ 0.
      S_BASE = 1.
    ENDIF.
    append multi level routing
    SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
         MATNR IN S_MATNR and stlal = stlal.
      SELECT SINGLE SPART FROM MARA INTO SPART WHERE MATNR = MAST-MATNR.
        write: 'aaaaa', sy-dbcnt.
    SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
          MTART IN S_MTART.
      IF SY-SUBRC NE 0.
        CONTINUE.
      ENDIF.
      IF MARA-LVORM <> 'X'.
        PARENT_MATNR = MAST-MATNR.
        CHILD_MATNR  = MAST-MATNR.
        CHILD_WERKS  = MAST-WERKS.
        CHILD_STLAL  = MAST-STLAL.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND
             SPRAS = 'E'.
        W_MAKTX = MAKT-MAKTX.
       REFRESH INT1.
       SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND
            WERKS = MAST-WERKS AND
            LABST NE 0.
         MOVE MARD-LGORT TO INT1-LGORT.
         MOVE MARD-LABST TO INT1-LABST.
         APPEND INT1.
       ENDSELECT.
       IF X_MSLB EQ 'X'.
         SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND
              WERKS EQ MAST-WERKS AND
              LBLAB NE 0.
           MOVE MSLB-LIFNR TO INT1-LGORT.
           MOVE MSLB-LBLAB TO INT1-LABST.
           APPEND INT1.
         ENDSELECT.
       ENDIF.
        W_LEVEL = 1.
       NEW-PAGE.
        PERFORM GETCHILD.
      ENDIF.
    ENDSELECT.
    get child parts
    FORM GETCHILD.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
              AND STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = MAST-STLAL.
        IF SY-SUBRC EQ 0.
          CLEAR: W_DOT, W_LVL, W_LVL1.
          PERFORM WRT_DTL.
          CHILD_MATNR = STPO-IDNRK.
          W_LEVEL = W_LEVEL + 1.
          IF W_LEVEL <= S_LVL.
            PERFORM SUBCHILD.
          ENDIF.
          W_LEVEL = W_LEVEL - 1.
        ENDIF.
      ENDSELECT.
    ENDFORM.
    get grand children parts
    FORM SUBCHILD.
      SELECT SINGLE * FROM MAST WHERE MATNR = CHILD_MATNR
         AND WERKS = CHILD_WERKS.
      IF SY-SUBRC NE 0.
        EXIT.
      ENDIF.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
          STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
            STLKN = STPO-STLKN AND
            STLAL = STKO-STLAL.
          IF SY-SUBRC EQ 0.
            W_DOT = '.'.
            PERFORM WRT_DTL.
            CHILD_MATNR = STPO-IDNRK.
            W_LEVEL = W_LEVEL + 1.
            IF W_LEVEL <= S_LVL.
              PERFORM SUBCHILD.
            ENDIF.
            W_LEVEL = W_LEVEL - 1.
            SHIFT W_LVL.
          ENDIF.
        ENDSELECT.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           85 'ABC PTE LTD',
          182 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             75 'BOM STRUCTURE  (WITH LOCATION BALANCES)',
             182 SY-UNAME.
    SKIP.
    CLEAR W_LFLAG.
    WRITE:/ 'Material No.:', PARENT_MATNR,
            60 'Plant    :', MAST-WERKS.
    W_COL = 90.
    CLEAR W_TTL.
    **LOOP AT INT1.
    IF W_COL > 195.
       IF W_LFLAG IS INITIAL.
         WRITE:/ 'Description :', W_MAKTX,
              60 'Base Qty :', S_BASE LEFT-JUSTIFIED.
         W_LFLAG = 'X'.
         W_COL = 90.
       ELSE.
         W_COL = 90.
         SKIP.
       ENDIF.
    ENDIF.
    WRITE AT W_COL 'Loc :'.
    W_COL = W_COL + 6.
    WRITE AT W_COL INT1-LGORT.
    W_COL = W_COL + 7.
    WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.
    W_COL = W_COL + 16.
    W_TTL = W_TTL + INT1-LABST.
    **ENDLOOP.
    **IF W_LFLAG IS INITIAL.
    WRITE:/ 'Description :', W_MAKTX,
          60 'Base Qty :', S_BASE LEFT-JUSTIFIED,
          90 'Total :', W_TTL LEFT-JUSTIFIED.
    **ELSE.
    WRITE AT W_COL 'Total :'.
    W_COL = W_COL + 8.
    WRITE AT W_COL W_TTL LEFT-JUSTIFIED.
    **ENDIF.
    SKIP.
    ULINE.
    WRITE: /001 'Level',
            011 'Item',
            017 'Component',
            037 'Description',
            079 '    Per',
            089 'UOM',
            094 ' Std Price',
            106 'Moving Avg',
            119 'Location',
            128 ' Balance',
            139 'Location',
            148 ' Balance',
            159 'Location',
            168 ' Balance',
            179 'Total Quantity'.
    ULINE.
    FORM WRT_DTL.
      CLEAR: MAKT-MAKTX, W_MAV, W_STD.
      SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND
           SPRAS = 'E'.
    SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND
          BWKEY = MAST-WERKS.
    IF SY-SUBRC = 0.
       W_MAV = MBEW-VERPR / MBEW-PEINH.
       W_STD = MBEW-STPRS / MBEW-PEINH.
    ENDIF.
    W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.
    W_LVL2 = W_LEVEL.
      CONCATENATE W_DOT W_LVL INTO W_LVL.
      CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
    SELECT SINGLE SPART FROM MARA INTO SPART WHERE MATNR = MAST-MATNR.
    SELECT SINGLE SPART FROM MARA INTO SPART WHERE MATNR = STPO-IDNRK.
      WRITE: /001 ' ',
              011 STPO-POSNR,
              017 STPO-IDNRK,
              037 MAKT-MAKTX,
              079 SPART.
             079(8) W_MENGE,
             089 STPO-MEINS,
             094(10) W_STD,
             106(10) W_MAV.
    W_COL = 119.
    CLEAR W_TTL.
    SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND
          WERKS = MAST-WERKS AND
          LABST NE 0.
       IF W_COL > 166.
         W_COL = 119.
         WRITE AT /W_COL ' '.
       ENDIF.
       WRITE AT W_COL MARD-LGORT.
       W_COL = W_COL + 5.
       WRITE AT W_COL(13) MARD-LABST.
       W_COL = W_COL + 15.
       W_TTL = W_TTL + MARD-LABST.
    ENDSELECT.
    IF X_MSLB EQ 'X'.
       SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND
            WERKS = MAST-WERKS AND
            LBLAB NE 0.
         IF W_COL > 166.
           W_COL = 119.
           WRITE AT /W_COL ' '.
         ENDIF.
         WRITE AT W_COL(6) MSLB-LIFNR.
         W_COL = W_COL + 6.
         WRITE AT W_COL(12) MSLB-LBLAB.
         W_COL = W_COL + 14.
         W_TTL = W_TTL + MSLB-LBLAB.
       ENDSELECT.
    ENDIF.
    WRITE AT 179(15) W_TTL.
    ENDFORM.

    Hi Ric
    hope this will help you.
    pls reward if help.
    REPORT ZMULTIBOM NO STANDARD PAGE HEADING LINE-SIZE 195
                    LINE-COUNT 60(2) MESSAGE-ID Z1.
    TABLES: MBEW,           "Material Valuation
            MSLB,           "Special stocks with vendor
            MARA,           "Material Master
            MAKT,           "Material Descriptions
            MARD,           "Material Master: Storage Location/Batch Segment
            MAST,           "BOM Header
            STKO,           "BOM Detail
            STPO,           "Bom Components
            STAS.           "BOM Alternative
    Text Elements
    Plant
    SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT 'CA',
    Material
                    S_MATNR FOR MAST-MATNR,
    Material Type
                    S_MTART FOR MARA-MTART.
    Base Quantity
    PARAMETERS: S_BASE TYPE I DEFAULT '1'.
    Display up to Level
    PARAMETERS: S_LVL  TYPE I DEFAULT '99'.
    SELECTION-SCREEN SKIP.
    Include Vendor Stock
    PARAMETERS: X_MSLB  AS CHECKBOX.
    DATA: W_MATNR LIKE MAPL-MATNR.
    DATA: PARENT-MATNR LIKE MAST-MATNR,
          CHILD-MATNR LIKE STPO-IDNRK,
          CHILD-WERKS LIKE MAST-WERKS,
          CHILD-STLAL LIKE MAST-STLAL,
          W_MAKTX LIKE MAKT-MAKTX,
          W_STD TYPE P DECIMALS 5,
          W_MAV TYPE P DECIMALS 5,
          W_MENGE TYPE P DECIMALS 3,
          W_LEVEL TYPE I,
          W_DOT(1),
          W_LVL(12),
          W_LVL1(12),
          W_LVL2(2),
          W_COL TYPE I,
          W_LFLAG,
          W_TTL LIKE MARD-LABST.
    DATA: BEGIN OF INT1 OCCURS 50,
            LGORT(6),
            LABST LIKE MARD-LABST,
          END OF INT1.
    IF S_BASE EQ 0.
      S_BASE = 1.
    ENDIF.
    append multi level routing
    SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
         MATNR IN S_MATNR.
      SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
           MTART IN S_MTART.
      IF SY-SUBRC NE 0.
        CONTINUE.
      ENDIF.
      IF MARA-LVORM <> 'X'.
        PARENT-MATNR = MAST-MATNR.
        CHILD-MATNR  = MAST-MATNR.
        CHILD-WERKS  = MAST-WERKS.
        CHILD-STLAL  = MAST-STLAL.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND
             SPRAS = 'E'.
        W_MAKTX = MAKT-MAKTX.
        REFRESH INT1.
        SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND
             WERKS = MAST-WERKS AND
             LABST NE 0.
          MOVE MARD-LGORT TO INT1-LGORT.
          MOVE MARD-LABST TO INT1-LABST.
          APPEND INT1.
        ENDSELECT.
        IF X_MSLB EQ 'X'.
          SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND
               WERKS EQ MAST-WERKS AND
               LBLAB NE 0.
            MOVE MSLB-LIFNR TO INT1-LGORT.
            MOVE MSLB-LBLAB TO INT1-LABST.
            APPEND INT1.
          ENDSELECT.
        ENDIF.
        W_LEVEL = 1.
        NEW-PAGE.
        PERFORM GETCHILD.
      ENDIF.
    ENDSELECT.
    get child parts
    FORM GETCHILD.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
              AND STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = MAST-STLAL.
        IF SY-SUBRC EQ 0.
          CLEAR: W_DOT, W_LVL, W_LVL1.
          PERFORM WRT_DTL.
          CHILD-MATNR = STPO-IDNRK.
          W_LEVEL = W_LEVEL + 1.
          IF W_LEVEL <= S_LVL.
            PERFORM SUBCHILD.
          ENDIF.
          W_LEVEL = W_LEVEL - 1.
        ENDIF.
      ENDSELECT.
    ENDFORM.
    get grand children parts
    FORM SUBCHILD.
      SELECT SINGLE * FROM MAST WHERE MATNR = CHILD-MATNR
         AND WERKS = CHILD-WERKS.
      IF SY-SUBRC NE 0.
        EXIT.
      ENDIF.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
          STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
            STLKN = STPO-STLKN AND
            STLAL = STKO-STLAL.
          IF SY-SUBRC EQ 0.
            W_DOT = '.'.
            PERFORM WRT_DTL.
            CHILD-MATNR = STPO-IDNRK.
            W_LEVEL = W_LEVEL + 1.
            IF W_LEVEL <= S_LVL.
              PERFORM SUBCHILD.
            ENDIF.
            W_LEVEL = W_LEVEL - 1.
            SHIFT W_LVL.
          ENDIF.
        ENDSELECT.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           85 'ABC PTE LTD',
          182 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             75 'BOM STRUCTURE  (WITH LOCATION BALANCES)',
             182 SY-UNAME.
    SKIP.
    CLEAR W_LFLAG.
    WRITE:/ 'Material No.:', PARENT-MATNR,
            60 'Plant    :', MAST-WERKS.
    W_COL = 90.
    CLEAR W_TTL.
    LOOP AT INT1.
      IF W_COL > 195.
        IF W_LFLAG IS INITIAL.
          WRITE:/ 'Description :', W_MAKTX,
               60 'Base Qty :', S_BASE LEFT-JUSTIFIED.
          W_LFLAG = 'X'.
          W_COL = 90.
        ELSE.
          W_COL = 90.
          SKIP.
        ENDIF.
      ENDIF.
      WRITE AT W_COL 'Loc :'.
      W_COL = W_COL + 6.
      WRITE AT W_COL INT1-LGORT.
      W_COL = W_COL + 7.
      WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.
      W_COL = W_COL + 16.
      W_TTL = W_TTL + INT1-LABST.
    ENDLOOP.
    IF W_LFLAG IS INITIAL.
      WRITE:/ 'Description :', W_MAKTX,
           60 'Base Qty :', S_BASE LEFT-JUSTIFIED,
           90 'Total :', W_TTL LEFT-JUSTIFIED.
    ELSE.
      WRITE AT W_COL 'Total :'.
      W_COL = W_COL + 8.
      WRITE AT W_COL W_TTL LEFT-JUSTIFIED.
    ENDIF.
    SKIP.
    ULINE.
    WRITE: /001 'Level',
            011 'Item',
            017 'Component',
            037 'Description',
            079 '    Per',
            089 'UOM',
            094 ' Std Price',
            106 'Moving Avg',
            119 'Location',
            128 ' Balance',
            139 'Location',
            148 ' Balance',
            159 'Location',
            168 ' Balance',
            179 'Total Quantity'.
    ULINE.
    FORM WRT_DTL.
      CLEAR: MAKT-MAKTX, W_MAV, W_STD.
      SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND
           SPRAS = 'E'.
      SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND
           BWKEY = MAST-WERKS.
      IF SY-SUBRC = 0.
        W_MAV = MBEW-VERPR / MBEW-PEINH.
        W_STD = MBEW-STPRS / MBEW-PEINH.
      ENDIF.
      W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.
      W_LVL2 = W_LEVEL.
      CONCATENATE W_DOT W_LVL INTO W_LVL.
      CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
      WRITE: /001 W_LVL1,
              011 STPO-POSNR,
              017 STPO-IDNRK,
              037 MAKT-MAKTX,
              079(8) W_MENGE,
              089 STPO-MEINS,
              094(10) W_STD,
              106(10) W_MAV.
      W_COL = 119.
      CLEAR W_TTL.
      SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND
           WERKS = MAST-WERKS AND
           LABST NE 0.
        IF W_COL > 166.
          W_COL = 119.
          WRITE AT /W_COL ' '.
        ENDIF.
        WRITE AT W_COL MARD-LGORT.
        W_COL = W_COL + 5.
        WRITE AT W_COL(13) MARD-LABST.
        W_COL = W_COL + 15.
        W_TTL = W_TTL + MARD-LABST.
      ENDSELECT.
      IF X_MSLB EQ 'X'.
        SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND
             WERKS = MAST-WERKS AND
             LBLAB NE 0.
          IF W_COL > 166.
            W_COL = 119.
            WRITE AT /W_COL ' '.
          ENDIF.
          WRITE AT W_COL(6) MSLB-LIFNR.
          W_COL = W_COL + 6.
          WRITE AT W_COL(12) MSLB-LBLAB.
          W_COL = W_COL + 14.
          W_TTL = W_TTL + MSLB-LBLAB.
        ENDSELECT.
      ENDIF.
      WRITE AT 179(15) W_TTL.
    ENDFORM.

  • BOM report on Production order

    Dear All,
    I need to make BOM report as per production order.
    Very helpfull for me if any FM for that?
    I need also the table where I can get the relation of that.
    Can anybody help me?
    Thanks in advance.

    hi
    hope it will help you.
    Pls reward if help.
    REPORT ZMULTIBOM NO STANDARD PAGE HEADING LINE-SIZE 195
                    LINE-COUNT 60(2) MESSAGE-ID Z1.
    TABLES: MBEW,           "Material Valuation
            MSLB,           "Special stocks with vendor
            MARA,           "Material Master
            MAKT,           "Material Descriptions
            MARD,           "Material Master: Storage Location/Batch Segment
            MAST,           "BOM Header
            STKO,           "BOM Detail
            STPO,           "Bom Components
            STAS.           "BOM Alternative
    Text Elements
    Plant
    SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT 'CA',
    Material
                    S_MATNR FOR MAST-MATNR,
    Material Type
                    S_MTART FOR MARA-MTART.
    Base Quantity
    PARAMETERS: S_BASE TYPE I DEFAULT '1'.
    Display up to Level
    PARAMETERS: S_LVL  TYPE I DEFAULT '99'.
    SELECTION-SCREEN SKIP.
    Include Vendor Stock
    PARAMETERS: X_MSLB  AS CHECKBOX.
    DATA: W_MATNR LIKE MAPL-MATNR.
    DATA: PARENT-MATNR LIKE MAST-MATNR,
          CHILD-MATNR LIKE STPO-IDNRK,
          CHILD-WERKS LIKE MAST-WERKS,
          CHILD-STLAL LIKE MAST-STLAL,
          W_MAKTX LIKE MAKT-MAKTX,
          W_STD TYPE P DECIMALS 5,
          W_MAV TYPE P DECIMALS 5,
          W_MENGE TYPE P DECIMALS 3,
          W_LEVEL TYPE I,
          W_DOT(1),
          W_LVL(12),
          W_LVL1(12),
          W_LVL2(2),
          W_COL TYPE I,
          W_LFLAG,
          W_TTL LIKE MARD-LABST.
    DATA: BEGIN OF INT1 OCCURS 50,
            LGORT(6),
            LABST LIKE MARD-LABST,
          END OF INT1.
    IF S_BASE EQ 0.
      S_BASE = 1.
    ENDIF.
    append multi level routing
    SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
         MATNR IN S_MATNR.
      SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
           MTART IN S_MTART.
      IF SY-SUBRC NE 0.
        CONTINUE.
      ENDIF.
      IF MARA-LVORM <> 'X'.
        PARENT-MATNR = MAST-MATNR.
        CHILD-MATNR  = MAST-MATNR.
        CHILD-WERKS  = MAST-WERKS.
        CHILD-STLAL  = MAST-STLAL.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND
             SPRAS = 'E'.
        W_MAKTX = MAKT-MAKTX.
        REFRESH INT1.
        SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND
             WERKS = MAST-WERKS AND
             LABST NE 0.
          MOVE MARD-LGORT TO INT1-LGORT.
          MOVE MARD-LABST TO INT1-LABST.
          APPEND INT1.
        ENDSELECT.
        IF X_MSLB EQ 'X'.
          SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND
               WERKS EQ MAST-WERKS AND
               LBLAB NE 0.
            MOVE MSLB-LIFNR TO INT1-LGORT.
            MOVE MSLB-LBLAB TO INT1-LABST.
            APPEND INT1.
          ENDSELECT.
        ENDIF.
        W_LEVEL = 1.
        NEW-PAGE.
        PERFORM GETCHILD.
      ENDIF.
    ENDSELECT.
    get child parts
    FORM GETCHILD.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
              AND STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = MAST-STLAL.
        IF SY-SUBRC EQ 0.
          CLEAR: W_DOT, W_LVL, W_LVL1.
          PERFORM WRT_DTL.
          CHILD-MATNR = STPO-IDNRK.
          W_LEVEL = W_LEVEL + 1.
          IF W_LEVEL <= S_LVL.
            PERFORM SUBCHILD.
          ENDIF.
          W_LEVEL = W_LEVEL - 1.
        ENDIF.
      ENDSELECT.
    ENDFORM.
    get grand children parts
    FORM SUBCHILD.
      SELECT SINGLE * FROM MAST WHERE MATNR = CHILD-MATNR
         AND WERKS = CHILD-WERKS.
      IF SY-SUBRC NE 0.
        EXIT.
      ENDIF.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
          STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
            STLKN = STPO-STLKN AND
            STLAL = STKO-STLAL.
          IF SY-SUBRC EQ 0.
            W_DOT = '.'.
            PERFORM WRT_DTL.
            CHILD-MATNR = STPO-IDNRK.
            W_LEVEL = W_LEVEL + 1.
            IF W_LEVEL <= S_LVL.
              PERFORM SUBCHILD.
            ENDIF.
            W_LEVEL = W_LEVEL - 1.
            SHIFT W_LVL.
          ENDIF.
        ENDSELECT.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           85 'ABC PTE LTD',
          182 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             75 'BOM STRUCTURE  (WITH LOCATION BALANCES)',
             182 SY-UNAME.
    SKIP.
    CLEAR W_LFLAG.
    WRITE:/ 'Material No.:', PARENT-MATNR,
            60 'Plant    :', MAST-WERKS.
    W_COL = 90.
    CLEAR W_TTL.
    LOOP AT INT1.
      IF W_COL > 195.
        IF W_LFLAG IS INITIAL.
          WRITE:/ 'Description :', W_MAKTX,
               60 'Base Qty :', S_BASE LEFT-JUSTIFIED.
          W_LFLAG = 'X'.
          W_COL = 90.
        ELSE.
          W_COL = 90.
          SKIP.
        ENDIF.
      ENDIF.
      WRITE AT W_COL 'Loc :'.
      W_COL = W_COL + 6.
      WRITE AT W_COL INT1-LGORT.
      W_COL = W_COL + 7.
      WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.
      W_COL = W_COL + 16.
      W_TTL = W_TTL + INT1-LABST.
    ENDLOOP.
    IF W_LFLAG IS INITIAL.
      WRITE:/ 'Description :', W_MAKTX,
           60 'Base Qty :', S_BASE LEFT-JUSTIFIED,
           90 'Total :', W_TTL LEFT-JUSTIFIED.
    ELSE.
      WRITE AT W_COL 'Total :'.
      W_COL = W_COL + 8.
      WRITE AT W_COL W_TTL LEFT-JUSTIFIED.
    ENDIF.
    SKIP.
    ULINE.
    WRITE: /001 'Level',
            011 'Item',
            017 'Component',
            037 'Description',
            079 '    Per',
            089 'UOM',
            094 ' Std Price',
            106 'Moving Avg',
            119 'Location',
            128 ' Balance',
            139 'Location',
            148 ' Balance',
            159 'Location',
            168 ' Balance',
            179 'Total Quantity'.
    ULINE.
    FORM WRT_DTL.
      CLEAR: MAKT-MAKTX, W_MAV, W_STD.
      SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND
           SPRAS = 'E'.
      SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND
           BWKEY = MAST-WERKS.
      IF SY-SUBRC = 0.
        W_MAV = MBEW-VERPR / MBEW-PEINH.
        W_STD = MBEW-STPRS / MBEW-PEINH.
      ENDIF.
      W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.
      W_LVL2 = W_LEVEL.
      CONCATENATE W_DOT W_LVL INTO W_LVL.
      CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
      WRITE: /001 W_LVL1,
              011 STPO-POSNR,
              017 STPO-IDNRK,
              037 MAKT-MAKTX,
              079(8) W_MENGE,
              089 STPO-MEINS,
              094(10) W_STD,
              106(10) W_MAV.
      W_COL = 119.
      CLEAR W_TTL.
      SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND
           WERKS = MAST-WERKS AND
           LABST NE 0.
        IF W_COL > 166.
          W_COL = 119.
          WRITE AT /W_COL ' '.
        ENDIF.
        WRITE AT W_COL MARD-LGORT.
        W_COL = W_COL + 5.
        WRITE AT W_COL(13) MARD-LABST.
        W_COL = W_COL + 15.
        W_TTL = W_TTL + MARD-LABST.
      ENDSELECT.
      IF X_MSLB EQ 'X'.
        SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND
             WERKS = MAST-WERKS AND
             LBLAB NE 0.
          IF W_COL > 166.
            W_COL = 119.
            WRITE AT /W_COL ' '.
          ENDIF.
          WRITE AT W_COL(6) MSLB-LIFNR.
          W_COL = W_COL + 6.
          WRITE AT W_COL(12) MSLB-LBLAB.
          W_COL = W_COL + 14.
          W_TTL = W_TTL + MSLB-LBLAB.
        ENDSELECT.
      ENDIF.
      WRITE AT 179(15) W_TTL.
    ENDFORM.

  • Very urgent: BOM EXPLOSION detials

    hi,
    plzz help me out as i am working  on dis report ,i want to display the STRUCTURE FOR DIS REPORT' as when i scroll down its material number on above does not change.
    2nd thing is dat i want to display the structure of dis BOM dat when i explode the details it will show d same division number regarding dat BOM.
    plzzz help me out as help will be definately rewarded.
    dis is my report code:-
    REPORT ZTET1.
    TABLES: MBEW,           "Material Valuation
            MSLB,           "Special stocks with vendor
            MARA,           "Material Master
            MAKT,           "Material Descriptions
            MARD,           "Material Master: Storage Location/Batch Segment
            MAST,           "BOM Header
            STKO,           "BOM Detail
            STPO,           "Bom Components
            STAS.           "BOM Alternative
    Text Elements
    Plant
    SELECT-OPTIONS: S_WERKS FOR MAST-WERKS,
    DEFAULT 'CA',
    Material
                    S_MATNR FOR MAST-MATNR,
    Material Type
                    S_MTART FOR MARA-MTART.
    Base Quantity
    PARAMETERS: S_BASE TYPE I DEFAULT '1'.
    Display up to Level
    PARAMETERS: S_LVL  TYPE I DEFAULT '99'.
    PARAMETERS: stlal  type mast-stlal default '01'.
    SELECTION-SCREEN SKIP.
    Include Vendor Stock
    PARAMETERS: X_MSLB  AS CHECKBOX.
    DATA: W_MATNR LIKE MAPL-MATNR.
    DATA: PARENT_MATNR LIKE MAST-MATNR,
          CHILD_MATNR LIKE STPO-IDNRK,
          CHILD_WERKS LIKE MAST-WERKS,
          CHILD_STLAL LIKE MAST-STLAL,
          W_MAKTX LIKE MAKT-MAKTX,
          W_STD TYPE P DECIMALS 5,
          W_MAV TYPE P DECIMALS 5,
          W_MENGE TYPE P DECIMALS 3,
          W_LEVEL TYPE I,
          W_DOT(1),
          W_LVL(12),
          W_LVL1(12),
          W_LVL2(2),
          W_COL TYPE I,
          W_LFLAG,
          W_TTL LIKE MARD-LABST.
      DATA: SPART LIKE MARA-SPART.
    DATA: BEGIN OF INT1 OCCURS 50,
            LGORT(6),
            LABST LIKE MARD-LABST,
          END OF INT1.
    IF S_BASE EQ 0.
      S_BASE = 1.
    ENDIF.
    append multi level routing
    SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
         MATNR IN S_MATNR and stlal = stlal.
      SELECT SINGLE SPART FROM MARA INTO SPART WHERE MATNR = MAST-MATNR.
        write: 'aaaaa', sy-dbcnt.
    SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
          MTART IN S_MTART.
      IF SY-SUBRC NE 0.
        CONTINUE.
      ENDIF.
      IF MARA-LVORM <> 'X'.
        PARENT_MATNR = MAST-MATNR.
        CHILD_MATNR  = MAST-MATNR.
        CHILD_WERKS  = MAST-WERKS.
        CHILD_STLAL  = MAST-STLAL.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND
             SPRAS = 'E'.
        W_MAKTX = MAKT-MAKTX.
       REFRESH INT1.
       SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND
            WERKS = MAST-WERKS AND
            LABST NE 0.
         MOVE MARD-LGORT TO INT1-LGORT.
         MOVE MARD-LABST TO INT1-LABST.
         APPEND INT1.
       ENDSELECT.
       IF X_MSLB EQ 'X'.
         SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND
              WERKS EQ MAST-WERKS AND
              LBLAB NE 0.
           MOVE MSLB-LIFNR TO INT1-LGORT.
           MOVE MSLB-LBLAB TO INT1-LABST.
           APPEND INT1.
         ENDSELECT.
       ENDIF.
        W_LEVEL = 1.
       NEW-PAGE.
        PERFORM GETCHILD.
      ENDIF.
    ENDSELECT.
    get child parts
    FORM GETCHILD.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
              AND STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = MAST-STLAL.
        IF SY-SUBRC EQ 0.
          CLEAR: W_DOT, W_LVL, W_LVL1.
          PERFORM WRT_DTL.
          CHILD_MATNR = STPO-IDNRK.
          W_LEVEL = W_LEVEL + 1.
          IF W_LEVEL <= S_LVL.
            PERFORM SUBCHILD.
          ENDIF.
          W_LEVEL = W_LEVEL - 1.
        ENDIF.
      ENDSELECT.
    ENDFORM.
    get grand children parts
    FORM SUBCHILD.
      SELECT SINGLE * FROM MAST WHERE MATNR = CHILD_MATNR
         AND WERKS = CHILD_WERKS.
      IF SY-SUBRC NE 0.
        EXIT.
      ENDIF.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
          STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
            STLKN = STPO-STLKN AND
            STLAL = STKO-STLAL.
          IF SY-SUBRC EQ 0.
            W_DOT = '.'.
            PERFORM WRT_DTL.
            CHILD_MATNR = STPO-IDNRK.
            W_LEVEL = W_LEVEL + 1.
            IF W_LEVEL <= S_LVL.
              PERFORM SUBCHILD.
            ENDIF.
            W_LEVEL = W_LEVEL - 1.
            SHIFT W_LVL.
          ENDIF.
        ENDSELECT.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           85 'ABC PTE LTD',
          182 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             75 'BOM STRUCTURE  (WITH LOCATION BALANCES)',
             182 SY-UNAME.
    SKIP.
    CLEAR W_LFLAG.
    WRITE:/ 'Material No.:', PARENT_MATNR,
            'Division No.:', SPART,
            60 'Plant    :', MAST-WERKS.
    W_COL = 90.
    CLEAR W_TTL.
    **LOOP AT INT1.
    IF W_COL > 195.
       IF W_LFLAG IS INITIAL.
         WRITE:/ 'Description :', W_MAKTX,
              60 'Base Qty :', S_BASE LEFT-JUSTIFIED.
         W_LFLAG = 'X'.
         W_COL = 90.
       ELSE.
         W_COL = 90.
         SKIP.
       ENDIF.
    ENDIF.
    WRITE AT W_COL 'Loc :'.
    W_COL = W_COL + 6.
    WRITE AT W_COL INT1-LGORT.
    W_COL = W_COL + 7.
    WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.
    W_COL = W_COL + 16.
    W_TTL = W_TTL + INT1-LABST.
    **ENDLOOP.
    **IF W_LFLAG IS INITIAL.
    WRITE:/ 'Description :', W_MAKTX,
          60 'Base Qty :', S_BASE LEFT-JUSTIFIED,
          90 'Total :', W_TTL LEFT-JUSTIFIED.
    **ELSE.
    WRITE AT W_COL 'Total :'.
    W_COL = W_COL + 8.
    WRITE AT W_COL W_TTL LEFT-JUSTIFIED.
    **ENDIF.
    SKIP.
    ULINE.
    WRITE: /001 'Level',
            011 'Item',
            017 'Component',
            037 'Description',
            079 '    Per',
            089 'UOM',
            094 ' Std Price',
            106 'Moving Avg',
            119 'Location',
            128 ' Balance',
            139 'Location',
            148 ' Balance',
            159 'Location',
            168 ' Balance',
            179 'Total Quantity'.
    ULINE.
    FORM WRT_DTL.
      CLEAR: MAKT-MAKTX, W_MAV, W_STD.
      SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND
           SPRAS = 'E'.
    SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND
          BWKEY = MAST-WERKS.
    IF SY-SUBRC = 0.
       W_MAV = MBEW-VERPR / MBEW-PEINH.
       W_STD = MBEW-STPRS / MBEW-PEINH.
    ENDIF.
    W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.
    W_LVL2 = W_LEVEL.
      CONCATENATE W_DOT W_LVL INTO W_LVL.
      CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
    SELECT SINGLE SPART FROM MARA INTO SPART WHERE MATNR = MAST-MATNR.
    SELECT SINGLE SPART FROM MARA INTO SPART WHERE MATNR = STPO-IDNRK.
      WRITE: /001 ' ',
              011 STPO-POSNR,
              017 STPO-IDNRK,
              037 MAKT-MAKTX,
              079 SPART.
             079(8) W_MENGE,
             089 STPO-MEINS,
             094(10) W_STD,
             106(10) W_MAV.
    W_COL = 119.
    CLEAR W_TTL.
    SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND
          WERKS = MAST-WERKS AND
          LABST NE 0.
       IF W_COL > 166.
         W_COL = 119.
         WRITE AT /W_COL ' '.
       ENDIF.
       WRITE AT W_COL MARD-LGORT.
       W_COL = W_COL + 5.
       WRITE AT W_COL(13) MARD-LABST.
       W_COL = W_COL + 15.
       W_TTL = W_TTL + MARD-LABST.
    ENDSELECT.
    IF X_MSLB EQ 'X'.
       SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND
            WERKS = MAST-WERKS AND
            LBLAB NE 0.
         IF W_COL > 166.
           W_COL = 119.
           WRITE AT /W_COL ' '.
         ENDIF.
         WRITE AT W_COL(6) MSLB-LIFNR.
         W_COL = W_COL + 6.
         WRITE AT W_COL(12) MSLB-LBLAB.
         W_COL = W_COL + 14.
         W_TTL = W_TTL + MSLB-LBLAB.
       ENDSELECT.
    ENDIF.
    WRITE AT 179(15) W_TTL.
    ENDFORM.
    Edited by: ric .s on Jan 21, 2008 7:54 AM

    this functional module gives all the cmatnr of a parent.
      CALL FUNCTION 'CSAP_MAT_BOM_READ'
           EXPORTING
                material  = p_cmatnr
                plant     = p_werks
                bom_usage = '1'
           TABLES
                t_stpo    = it_stpo
           EXCEPTIONS
                error     = 1
                OTHERS    = 2.
    u can check whethere a material is FERT(finished goods),HALB(Raw material) type from table mara using field "mtart".
    reward if usefull.

  • Very urgent: regarding display of parent material

    hi,
    i had been working on dis report and i hae to display the parent material on top and sub material in dis BOM structure report.
    plzz help me out  as i have to submimit dis report with 1 hour as help will be definately rewarded.
    TABLES: MBEW,           "Material Valuation
            MSLB,           "Special stocks with vendor
            MARA,           "Material Master
            MAKT,           "Material Descriptions
            MARD,           "Material Master: Storage Location/Batch Segment
            MAST,           "BOM Header
            STKO,           "BOM Detail
            STPO,           "Bom Components
            STAS.           "BOM Alternative
    Text Elements
    Plant
    SELECT-OPTIONS: S_WERKS FOR MAST-WERKS,
    DEFAULT 'CA',
    Material
                    S_MATNR FOR MAST-MATNR,
    Material Type
                    S_MTART FOR MARA-MTART.
    Base Quantity
    PARAMETERS: S_BASE TYPE I DEFAULT '1'.
    Display up to Level
    PARAMETERS: S_LVL  TYPE I DEFAULT '99'.
    PARAMETERS: stlal  type mast-stlal default '01'.
    SELECTION-SCREEN SKIP.
    Include Vendor Stock
    PARAMETERS: X_MSLB  AS CHECKBOX.
    DATA: W_MATNR LIKE MAPL-MATNR.
    DATA: PARENT_MATNR LIKE MAST-MATNR,
          CHILD_MATNR LIKE STPO-IDNRK,
          CHILD_WERKS LIKE MAST-WERKS,
          CHILD_STLAL LIKE MAST-STLAL,
          W_MAKTX LIKE MAKT-MAKTX,
          W_STD TYPE P DECIMALS 5,
          W_MAV TYPE P DECIMALS 5,
          W_MENGE TYPE P DECIMALS 3,
          W_LEVEL TYPE I,
          W_DOT(1),
          W_LVL(12),
          W_LVL1(12),
          W_LVL2(2),
          W_COL TYPE I,
          W_LFLAG,
          W_TTL LIKE MARD-LABST.
    DATA: SPART LIKE MARA-SPART.
    DATA: BEGIN OF INT1 OCCURS 50,
           LGORT(6),
            LABST LIKE MARD-LABST,
          END OF INT1.
    IF S_BASE EQ 0.
      S_BASE = 1.
    ENDIF.
    append multi level routing
    SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
         MATNR IN S_MATNR and stlal = stlal.
      SELECT SINGLE SPART FROM MARA INTO SPART WHERE MATNR = MAST-MATNR AND  MTART IN S_MTART.
        write: 'aaaaa', sy-dbcnt.
    SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
          MTART IN S_MTART.
      IF SY-SUBRC NE 0.
        CONTINUE.
      ENDIF.
      IF MARA-LVORM <> 'X'.
        PARENT_MATNR = MAST-MATNR.
        CHILD_MATNR  = MAST-MATNR.
        CHILD_WERKS  = MAST-WERKS.
        CHILD_STLAL  = MAST-STLAL.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND
             SPRAS = 'E'.
        W_MAKTX = MAKT-MAKTX.
        REFRESH INT1.
        SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND
             WERKS = MAST-WERKS AND
             LABST NE 0.
          MOVE MARD-LGORT TO INT1-LGORT.
          MOVE MARD-LABST TO INT1-LABST.
          APPEND INT1.
        ENDSELECT.
        IF X_MSLB EQ 'X'.
          SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND
               WERKS EQ MAST-WERKS AND
               LBLAB NE 0.
            MOVE MSLB-LIFNR TO INT1-LGORT.
            MOVE MSLB-LBLAB TO INT1-LABST.
            APPEND INT1.
          ENDSELECT.
        ENDIF.
        W_LEVEL = 1.
       NEW-PAGE.
        PERFORM GETCHILD.
      ENDIF.
    ENDSELECT.
    get child parts
    FORM GETCHILD.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
              AND STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = MAST-STLAL.
        IF SY-SUBRC EQ 0.
          CLEAR: W_DOT, W_LVL, W_LVL1.
          PERFORM WRT_DTL.
          CHILD_MATNR = STPO-IDNRK.
          W_LEVEL = W_LEVEL + 1.
          IF W_LEVEL <= S_LVL.
            PERFORM SUBCHILD.
          ENDIF.
          W_LEVEL = W_LEVEL - 1.
        ENDIF.
      ENDSELECT.
    ENDFORM.
    get grand children parts
    FORM SUBCHILD.
      SELECT SINGLE * FROM MAST WHERE MATNR = CHILD_MATNR
         AND WERKS = CHILD_WERKS.
      IF SY-SUBRC NE 0.
        EXIT.
      ENDIF.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
          STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
            STLKN = STPO-STLKN AND
            STLAL = STKO-STLAL.
          IF SY-SUBRC EQ 0.
            W_DOT = '.'.
            PERFORM WRT_DTL.
            CHILD_MATNR = STPO-IDNRK.
            W_LEVEL = W_LEVEL + 1.
            IF W_LEVEL <= S_LVL.
              PERFORM SUBCHILD.
            ENDIF.
            W_LEVEL = W_LEVEL - 1.
            SHIFT W_LVL.
          ENDIF.
        ENDSELECT.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           85 'ABC PTE LTD',
          182 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             75 'BOM STRUCTURE  (WITH LOCATION BALANCES)',
             182 SY-UNAME.
    SKIP.
    CLEAR W_LFLAG.
    *WRITE:/ 'Material No.:', PARENT_MATNR,
           'Division No.:', SPART,
           60 'Plant    :', MAST-WERKS.
    W_COL = 90.
    CLEAR W_TTL.
    **LOOP AT INT1.
    IF W_COL > 195.
       IF W_LFLAG IS INITIAL.
         WRITE:/ 'Description :', W_MAKTX,
              60 'Base Qty :', S_BASE LEFT-JUSTIFIED.
         W_LFLAG = 'X'.
         W_COL = 90.
       ELSE.
         W_COL = 90.
         SKIP.
       ENDIF.
    ENDIF.
    WRITE AT W_COL 'Loc :'.
    W_COL = W_COL + 6.
    WRITE AT W_COL INT1-LGORT.
    W_COL = W_COL + 7.
    WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.
    W_COL = W_COL + 16.
    W_TTL = W_TTL + INT1-LABST.
    **ENDLOOP.
    **IF W_LFLAG IS INITIAL.
    WRITE:/ 'Description :', W_MAKTX,
          60 'Base Qty :', S_BASE LEFT-JUSTIFIED,
          90 'Total :', W_TTL LEFT-JUSTIFIED.
    **ELSE.
    WRITE AT W_COL 'Total :'.
    W_COL = W_COL + 8.
    WRITE AT W_COL W_TTL LEFT-JUSTIFIED.
    **ENDIF.
    **SKIP.
    **ULINE.
    'Level',
    WRITE: /001 'Material No',
            011 'Item',
            017 'Component',
            037 'Description',
            079 '    Per',
            089 'UOM',
            094 ' Std Price',
            106 'Moving Avg',
            119 'Location',
            128 ' Balance',
            139 'Location',
            148 ' Balance',
            159 'Location',
            168 ' Balance',
            179 'Total Quantity'.
    ULINE.
    FORM WRT_DTL.
      CLEAR: MAKT-MAKTX, W_MAV, W_STD.
      SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND
           SPRAS = 'E'.
    SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND
          BWKEY = MAST-WERKS.
    IF SY-SUBRC = 0.
       W_MAV = MBEW-VERPR / MBEW-PEINH.
       W_STD = MBEW-STPRS / MBEW-PEINH.
    ENDIF.
    W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.
    W_LVL2 = W_LEVEL.
      CONCATENATE W_DOT W_LVL INTO W_LVL.
      CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
    *001 PARENT_MATNR
      WRITE: /001 PARENT_MATNR,
             /011 STPO-POSNR,
              017 STPO-IDNRK,
              037 MAKT-MAKTX,
              079 SPART.
             079(8) W_MENGE,
             089 STPO-MEINS,
             094(10) W_STD,
             106(10) W_MAV.
    W_COL = 119.
    CLEAR W_TTL.
    SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND
          WERKS = MAST-WERKS AND
          LABST NE 0.
       IF W_COL > 166.
         W_COL = 119.
         WRITE AT /W_COL ' '.
       ENDIF.
       WRITE AT W_COL MARD-LGORT.
       W_COL = W_COL + 5.
       WRITE AT W_COL(13) MARD-LABST.
       W_COL = W_COL + 15.
       W_TTL = W_TTL + MARD-LABST.
    ENDSELECT.
    IF X_MSLB EQ 'X'.
       SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND
            WERKS = MAST-WERKS AND
            LBLAB NE 0.
         IF W_COL > 166.
           W_COL = 119.
           WRITE AT /W_COL ' '.
         ENDIF.
         WRITE AT W_COL(6) MSLB-LIFNR.
         W_COL = W_COL + 6.
         WRITE AT W_COL(12) MSLB-LBLAB.
         W_COL = W_COL + 14.
         W_TTL = W_TTL + MSLB-LBLAB.
       ENDSELECT.
    ENDIF.
    WRITE AT 179(15) W_TTL.
    ENDFORM.
    Edited by: ric .s on Jan 21, 2008 10:19 AM

    Hi,
    Use these two function modules to explore the BOM.
    CSAP_MAT_BOM_READ or
    CS_BOM_EXPL_MAT_V2
    The second one is more appropriate.
    You dont have to write much code in your case.
    Pass appropriate data into the FM and get the BOm exploded and you can just loop the interbal table and display it accordingly.
    Reward points if useful.
    Thanks,
    Arul.

  • Bom Comparision report

    Hi All,
    Any one Have bom comparision Report to cmpare more than two bom at time because
    in statard report(cs14)  we compare only two bom at time.
    Please send me any report if avialable
    Thanks & Regards
    Manish

    Hope it will help you.
    Reward if help.
    REPORT ZMULTIBOM NO STANDARD PAGE HEADING LINE-SIZE 195
                    LINE-COUNT 60(2) MESSAGE-ID Z1.
    TABLES: MBEW,           "Material Valuation
            MSLB,           "Special stocks with vendor
            MARA,           "Material Master
            MAKT,           "Material Descriptions
            MARD,           "Material Master: Storage Location/Batch Segment
            MAST,           "BOM Header
            STKO,           "BOM Detail
            STPO,           "Bom Components
            STAS.           "BOM Alternative
    Text Elements
    Plant
    SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT 'CA',
    Material
                    S_MATNR FOR MAST-MATNR,
    Material Type
                    S_MTART FOR MARA-MTART.
    Base Quantity
    PARAMETERS: S_BASE TYPE I DEFAULT '1'.
    Display up to Level
    PARAMETERS: S_LVL  TYPE I DEFAULT '99'.
    SELECTION-SCREEN SKIP.
    Include Vendor Stock
    PARAMETERS: X_MSLB  AS CHECKBOX.
    DATA: W_MATNR LIKE MAPL-MATNR.
    DATA: PARENT-MATNR LIKE MAST-MATNR,
          CHILD-MATNR LIKE STPO-IDNRK,
          CHILD-WERKS LIKE MAST-WERKS,
          CHILD-STLAL LIKE MAST-STLAL,
          W_MAKTX LIKE MAKT-MAKTX,
          W_STD TYPE P DECIMALS 5,
          W_MAV TYPE P DECIMALS 5,
          W_MENGE TYPE P DECIMALS 3,
          W_LEVEL TYPE I,
          W_DOT(1),
          W_LVL(12),
          W_LVL1(12),
          W_LVL2(2),
          W_COL TYPE I,
          W_LFLAG,
          W_TTL LIKE MARD-LABST.
    DATA: BEGIN OF INT1 OCCURS 50,
            LGORT(6),
            LABST LIKE MARD-LABST,
          END OF INT1.
    IF S_BASE EQ 0.
      S_BASE = 1.
    ENDIF.
    append multi level routing
    SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
         MATNR IN S_MATNR.
      SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
           MTART IN S_MTART.
      IF SY-SUBRC NE 0.
        CONTINUE.
      ENDIF.
      IF MARA-LVORM <> 'X'.
        PARENT-MATNR = MAST-MATNR.
        CHILD-MATNR  = MAST-MATNR.
        CHILD-WERKS  = MAST-WERKS.
        CHILD-STLAL  = MAST-STLAL.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND
             SPRAS = 'E'.
        W_MAKTX = MAKT-MAKTX.
        REFRESH INT1.
        SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND
             WERKS = MAST-WERKS AND
             LABST NE 0.
          MOVE MARD-LGORT TO INT1-LGORT.
          MOVE MARD-LABST TO INT1-LABST.
          APPEND INT1.
        ENDSELECT.
        IF X_MSLB EQ 'X'.
          SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND
               WERKS EQ MAST-WERKS AND
               LBLAB NE 0.
            MOVE MSLB-LIFNR TO INT1-LGORT.
            MOVE MSLB-LBLAB TO INT1-LABST.
            APPEND INT1.
          ENDSELECT.
        ENDIF.
        W_LEVEL = 1.
        NEW-PAGE.
        PERFORM GETCHILD.
      ENDIF.
    ENDSELECT.
    get child parts
    FORM GETCHILD.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
              AND STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = MAST-STLAL.
        IF SY-SUBRC EQ 0.
          CLEAR: W_DOT, W_LVL, W_LVL1.
          PERFORM WRT_DTL.
          CHILD-MATNR = STPO-IDNRK.
          W_LEVEL = W_LEVEL + 1.
          IF W_LEVEL <= S_LVL.
            PERFORM SUBCHILD.
          ENDIF.
          W_LEVEL = W_LEVEL - 1.
        ENDIF.
      ENDSELECT.
    ENDFORM.
    get grand children parts
    FORM SUBCHILD.
      SELECT SINGLE * FROM MAST WHERE MATNR = CHILD-MATNR
         AND WERKS = CHILD-WERKS.
      IF SY-SUBRC NE 0.
        EXIT.
      ENDIF.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
          STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
            STLKN = STPO-STLKN AND
            STLAL = STKO-STLAL.
          IF SY-SUBRC EQ 0.
            W_DOT = '.'.
            PERFORM WRT_DTL.
            CHILD-MATNR = STPO-IDNRK.
            W_LEVEL = W_LEVEL + 1.
            IF W_LEVEL <= S_LVL.
              PERFORM SUBCHILD.
            ENDIF.
            W_LEVEL = W_LEVEL - 1.
            SHIFT W_LVL.
          ENDIF.
        ENDSELECT.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           85 'ABC PTE LTD',
          182 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             75 'BOM STRUCTURE  (WITH LOCATION BALANCES)',
             182 SY-UNAME.
    SKIP.
    CLEAR W_LFLAG.
    WRITE:/ 'Material No.:', PARENT-MATNR,
            60 'Plant    :', MAST-WERKS.
    W_COL = 90.
    CLEAR W_TTL.
    LOOP AT INT1.
      IF W_COL > 195.
        IF W_LFLAG IS INITIAL.
          WRITE:/ 'Description :', W_MAKTX,
               60 'Base Qty :', S_BASE LEFT-JUSTIFIED.
          W_LFLAG = 'X'.
          W_COL = 90.
        ELSE.
          W_COL = 90.
          SKIP.
        ENDIF.
      ENDIF.
      WRITE AT W_COL 'Loc :'.
      W_COL = W_COL + 6.
      WRITE AT W_COL INT1-LGORT.
      W_COL = W_COL + 7.
      WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.
      W_COL = W_COL + 16.
      W_TTL = W_TTL + INT1-LABST.
    ENDLOOP.
    IF W_LFLAG IS INITIAL.
      WRITE:/ 'Description :', W_MAKTX,
           60 'Base Qty :', S_BASE LEFT-JUSTIFIED,
           90 'Total :', W_TTL LEFT-JUSTIFIED.
    ELSE.
      WRITE AT W_COL 'Total :'.
      W_COL = W_COL + 8.
      WRITE AT W_COL W_TTL LEFT-JUSTIFIED.
    ENDIF.
    SKIP.
    ULINE.
    WRITE: /001 'Level',
            011 'Item',
            017 'Component',
            037 'Description',
            079 '    Per',
            089 'UOM',
            094 ' Std Price',
            106 'Moving Avg',
            119 'Location',
            128 ' Balance',
            139 'Location',
            148 ' Balance',
            159 'Location',
            168 ' Balance',
            179 'Total Quantity'.
    ULINE.
    FORM WRT_DTL.
      CLEAR: MAKT-MAKTX, W_MAV, W_STD.
      SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND
           SPRAS = 'E'.
      SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND
           BWKEY = MAST-WERKS.
      IF SY-SUBRC = 0.
        W_MAV = MBEW-VERPR / MBEW-PEINH.
        W_STD = MBEW-STPRS / MBEW-PEINH.
      ENDIF.
      W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.
      W_LVL2 = W_LEVEL.
      CONCATENATE W_DOT W_LVL INTO W_LVL.
      CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
      WRITE: /001 W_LVL1,
              011 STPO-POSNR,
              017 STPO-IDNRK,
              037 MAKT-MAKTX,
              079(8) W_MENGE,
              089 STPO-MEINS,
              094(10) W_STD,
              106(10) W_MAV.
      W_COL = 119.
      CLEAR W_TTL.
      SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND
           WERKS = MAST-WERKS AND
           LABST NE 0.
        IF W_COL > 166.
          W_COL = 119.
          WRITE AT /W_COL ' '.
        ENDIF.
        WRITE AT W_COL MARD-LGORT.
        W_COL = W_COL + 5.
        WRITE AT W_COL(13) MARD-LABST.
        W_COL = W_COL + 15.
        W_TTL = W_TTL + MARD-LABST.
      ENDSELECT.
      IF X_MSLB EQ 'X'.
        SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND
             WERKS = MAST-WERKS AND
             LBLAB NE 0.
          IF W_COL > 166.
            W_COL = 119.
            WRITE AT /W_COL ' '.
          ENDIF.
          WRITE AT W_COL(6) MSLB-LIFNR.
          W_COL = W_COL + 6.
          WRITE AT W_COL(12) MSLB-LBLAB.
          W_COL = W_COL + 14.
          W_TTL = W_TTL + MSLB-LBLAB.
        ENDSELECT.
      ENDIF.
      WRITE AT 179(15) W_TTL.
    ENDFORM.

  • Inverse BOM !!!

    Do any body have a code for inverse BOM..
    Exporing a child to different parents ( summarized )

    Hai.
    check the links.
    http://www.sap-basis-abap.com/abap009.htm
    http://www.ct-software.com/abap-pool/yprod001.htm
    Logic for Inverse BOM
    http://sap.ittoolbox.com/groups/technical-functional/sap-abap/bom-explosion-for-a-component-1944897
    check  the example code.
    REPORT ZMULTIBOM NO STANDARD PAGE HEADING LINE-SIZE 195
                    LINE-COUNT 60(2) MESSAGE-ID Z1.
    TABLES: MBEW,           "Material Valuation
            MSLB,           "Special stocks with vendor
            MARA,           "Material Master
            MAKT,           "Material Descriptions
            MARD,           "Material Master: Storage Location/Batch Segment
            MAST,           "BOM Header
            STKO,           "BOM Detail
            STPO,           "Bom Components
            STAS.           "BOM Alternative
    Text Elements
    Plant
    SELECT-OPTIONS: S_WERKS FOR MAST-WERKS DEFAULT 'CA',
    Material
                    S_MATNR FOR MAST-MATNR,
    Material Type
                    S_MTART FOR MARA-MTART.
    Base Quantity
    PARAMETERS: S_BASE TYPE I DEFAULT '1'.
    Display up to Level
    PARAMETERS: S_LVL  TYPE I DEFAULT '99'.
    SELECTION-SCREEN SKIP.
    Include Vendor Stock
    PARAMETERS: X_MSLB  AS CHECKBOX.
    DATA: W_MATNR LIKE MAPL-MATNR.
    DATA: PARENT-MATNR LIKE MAST-MATNR,
          CHILD-MATNR LIKE STPO-IDNRK,
          CHILD-WERKS LIKE MAST-WERKS,
          CHILD-STLAL LIKE MAST-STLAL,
          W_MAKTX LIKE MAKT-MAKTX,
          W_STD TYPE P DECIMALS 5,
          W_MAV TYPE P DECIMALS 5,
          W_MENGE TYPE P DECIMALS 3,
          W_LEVEL TYPE I,
          W_DOT(1),
          W_LVL(12),
          W_LVL1(12),
          W_LVL2(2),
          W_COL TYPE I,
          W_LFLAG,
          W_TTL LIKE MARD-LABST.
    DATA: BEGIN OF INT1 OCCURS 50,
            LGORT(6),
            LABST LIKE MARD-LABST,
          END OF INT1.
    IF S_BASE EQ 0.
      S_BASE = 1.
    ENDIF.
    append multi level routing
    SELECT * FROM MAST WHERE WERKS IN S_WERKS AND
         MATNR IN S_MATNR.
      SELECT SINGLE * FROM MARA WHERE MATNR = MAST-MATNR AND
           MTART IN S_MTART.
      IF SY-SUBRC NE 0.
        CONTINUE.
      ENDIF.
      IF MARA-LVORM <> 'X'.
        PARENT-MATNR = MAST-MATNR.
        CHILD-MATNR  = MAST-MATNR.
        CHILD-WERKS  = MAST-WERKS.
        CHILD-STLAL  = MAST-STLAL.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MAST-MATNR AND
             SPRAS = 'E'.
        W_MAKTX = MAKT-MAKTX.
        REFRESH INT1.
        SELECT * FROM MARD WHERE MATNR = MAST-MATNR AND
             WERKS = MAST-WERKS AND
             LABST NE 0.
          MOVE MARD-LGORT TO INT1-LGORT.
          MOVE MARD-LABST TO INT1-LABST.
          APPEND INT1.
        ENDSELECT.
        IF X_MSLB EQ 'X'.
          SELECT * FROM MSLB WHERE MATNR EQ MAST-MATNR AND
               WERKS EQ MAST-WERKS AND
               LBLAB NE 0.
            MOVE MSLB-LIFNR TO INT1-LGORT.
            MOVE MSLB-LBLAB TO INT1-LABST.
            APPEND INT1.
          ENDSELECT.
        ENDIF.
        W_LEVEL = 1.
        NEW-PAGE.
        PERFORM GETCHILD.
      ENDIF.
    ENDSELECT.
    get child parts
    FORM GETCHILD.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR
              AND STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
              STLKN = STPO-STLKN AND
              STLAL = MAST-STLAL.
        IF SY-SUBRC EQ 0.
          CLEAR: W_DOT, W_LVL, W_LVL1.
          PERFORM WRT_DTL.
          CHILD-MATNR = STPO-IDNRK.
          W_LEVEL = W_LEVEL + 1.
          IF W_LEVEL <= S_LVL.
            PERFORM SUBCHILD.
          ENDIF.
          W_LEVEL = W_LEVEL - 1.
        ENDIF.
      ENDSELECT.
    ENDFORM.
    get grand children parts
    FORM SUBCHILD.
      SELECT SINGLE * FROM MAST WHERE MATNR = CHILD-MATNR
         AND WERKS = CHILD-WERKS.
      IF SY-SUBRC NE 0.
        EXIT.
      ENDIF.
      SELECT * FROM STPO WHERE STLNR = MAST-STLNR
            ORDER BY POSNR.
        SELECT SINGLE * FROM STKO WHERE STLNR = STPO-STLNR AND
          STLAL = MAST-STLAL.
        SELECT SINGLE * FROM STAS WHERE STLNR = STPO-STLNR AND
            STLKN = STPO-STLKN AND
            STLAL = STKO-STLAL.
          IF SY-SUBRC EQ 0.
            W_DOT = '.'.
            PERFORM WRT_DTL.
            CHILD-MATNR = STPO-IDNRK.
            W_LEVEL = W_LEVEL + 1.
            IF W_LEVEL <= S_LVL.
              PERFORM SUBCHILD.
            ENDIF.
            W_LEVEL = W_LEVEL - 1.
            SHIFT W_LVL.
          ENDIF.
        ENDSELECT.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           85 'ABC PTE LTD',
          182 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             75 'BOM STRUCTURE  (WITH LOCATION BALANCES)',
             182 SY-UNAME.
    SKIP.
    CLEAR W_LFLAG.
    WRITE:/ 'Material No.:', PARENT-MATNR,
            60 'Plant    :', MAST-WERKS.
    W_COL = 90.
    CLEAR W_TTL.
    LOOP AT INT1.
      IF W_COL > 195.
        IF W_LFLAG IS INITIAL.
          WRITE:/ 'Description :', W_MAKTX,
               60 'Base Qty :', S_BASE LEFT-JUSTIFIED.
          W_LFLAG = 'X'.
          W_COL = 90.
        ELSE.
          W_COL = 90.
          SKIP.
        ENDIF.
      ENDIF.
      WRITE AT W_COL 'Loc :'.
      W_COL = W_COL + 6.
      WRITE AT W_COL INT1-LGORT.
      W_COL = W_COL + 7.
      WRITE AT W_COL(12) INT1-LABST LEFT-JUSTIFIED.
      W_COL = W_COL + 16.
      W_TTL = W_TTL + INT1-LABST.
    ENDLOOP.
    IF W_LFLAG IS INITIAL.
      WRITE:/ 'Description :', W_MAKTX,
           60 'Base Qty :', S_BASE LEFT-JUSTIFIED,
           90 'Total :', W_TTL LEFT-JUSTIFIED.
    ELSE.
      WRITE AT W_COL 'Total :'.
      W_COL = W_COL + 8.
      WRITE AT W_COL W_TTL LEFT-JUSTIFIED.
    ENDIF.
    SKIP.
    ULINE.
    WRITE: /001 'Level',
            011 'Item',
            017 'Component',
            037 'Description',
            079 '    Per',
            089 'UOM',
            094 ' Std Price',
            106 'Moving Avg',
            119 'Location',
            128 ' Balance',
            139 'Location',
            148 ' Balance',
            159 'Location',
            168 ' Balance',
            179 'Total Quantity'.
    ULINE.
    FORM WRT_DTL.
      CLEAR: MAKT-MAKTX, W_MAV, W_STD.
      SELECT SINGLE * FROM MAKT WHERE MATNR = STPO-IDNRK AND
           SPRAS = 'E'.
      SELECT SINGLE * FROM MBEW WHERE MATNR = STPO-IDNRK AND
           BWKEY = MAST-WERKS.
      IF SY-SUBRC = 0.
        W_MAV = MBEW-VERPR / MBEW-PEINH.
        W_STD = MBEW-STPRS / MBEW-PEINH.
      ENDIF.
      W_MENGE = ( STPO-MENGE / STKO-BMENG ) * S_BASE.
      W_LVL2 = W_LEVEL.
      CONCATENATE W_DOT W_LVL INTO W_LVL.
      CONCATENATE W_LVL W_LVL2 INTO W_LVL1.
      WRITE: /001 W_LVL1,
              011 STPO-POSNR,
              017 STPO-IDNRK,
              037 MAKT-MAKTX,
              079(8) W_MENGE,
              089 STPO-MEINS,
              094(10) W_STD,
              106(10) W_MAV.
      W_COL = 119.
      CLEAR W_TTL.
      SELECT * FROM MARD WHERE MATNR = STPO-IDNRK AND
           WERKS = MAST-WERKS AND
           LABST NE 0.
        IF W_COL > 166.
          W_COL = 119.
          WRITE AT /W_COL ' '.
        ENDIF.
        WRITE AT W_COL MARD-LGORT.
        W_COL = W_COL + 5.
        WRITE AT W_COL(13) MARD-LABST.
        W_COL = W_COL + 15.
        W_TTL = W_TTL + MARD-LABST.
      ENDSELECT.
      IF X_MSLB EQ 'X'.
        SELECT * FROM MSLB WHERE MATNR = STPO-IDNRK AND
             WERKS = MAST-WERKS AND
             LBLAB NE 0.
          IF W_COL > 166.
            W_COL = 119.
            WRITE AT /W_COL ' '.
          ENDIF.
          WRITE AT W_COL(6) MSLB-LIFNR.
          W_COL = W_COL + 6.
          WRITE AT W_COL(12) MSLB-LBLAB.
          W_COL = W_COL + 14.
          W_TTL = W_TTL + MSLB-LBLAB.
        ENDSELECT.
      ENDIF.
      WRITE AT 179(15) W_TTL.
    ENDFORM.
    Regards.
    sowjanya.b

  • I can no longer access websites through the location bar (address bar).

    A few days ago, my location bar (address bar) suddenly stopped working. When I typed in an address and clicked on Enter, nothing happened - and I mean nothing. The cursor at the end of what I had just typed into the location bar just sat there, blinking at me. Clicking on the arrow at the right end of the location bar didn’t work either. On the other hand, if I clicked on a link in a website or e-mail, I would be taken right to the website at the other end of the link. And when I clicked on a bookmark, I was taken to the bookmarked site. It is only when I type or paste something into the location bar that I am unable to reach the sought after website. Exiting and then re-entering Firefox did not help, nor did rebooting my computer. I was using version 6.0.2 at the time. I upgraded to version 7.0.1; that didn’t help either. Help!!!

    That is a signature symptom of the "AVG Safe" extension in the Link Scanner component of AVG Free, but you don't have that extension on the computer you posted from, see http://kb.mozillazine.org/Problematic_extensions
    There is also these which you don't have either
    Top of Firefox window non-responsive, toolbars non responsive -- also see [http://kb.mozillazine.org/Problematic_extensions Problematic extensions]
    *caused by Yahoo Toolbar -- https://support.mozilla.com/questions/890908
    *caused by Babylon Toolbar -- https://support.mozilla.com/questions/890670
    Try disabling the Foxit PDF creator as it has an ask.com authorship signature.
    If that doesn't work see if Firefox works in Safe Mode. If it does it is probably an extension problem.
    # Restart in (Firefox) Safe Mode with Help ("Alt+H") > "Restart with Add-ons disabled" to restart immediately (one-time) in safe mode. Do not check-mark any of the items (they are certainly not safe as they make those changes permanent).

  • Why does avg search come up when I enter anything on my firefox home page it's driving me nuts

    I removed avg free from my computer because avg was "taking over" my searches - but it is still doing it. I can't seem to get rid of it even though I have tried to follow all the suggestions on mozilla support pages - I don't want to change search engines, as I really like Firefox. Please tell me how to get rid of avg in a SIMPLE to understand way. Many thanks.

    '''''AVG's toolbar is still an opt-out feature. It also will commandeer your default search engine for Yahoo, so if you don't want it to do that, you'll want to uncheck the box that changes your search engine, too.''''' Source: CNet Editor's review
    If the search when using the Location/URL bar has been taken over by Yahoo (AVG's default search -- see above), you may need to reset a preference:
    #Enter '''about:config''' in the address/URL bar and press the Enter key
    #f you see a warning, accept it (Promise that you will be careful)
    #Filter = keyword.url
    #Below the Filter, right-click on keyword.URL and choose "Reset"
    #Restart Firefox (File > Restart Firefox)
    #See:
    #*http://kb.mozillazine.org/Keyword.url
    #*http://www.techrena.net/computers/address-bar-search-provider-firefox/
    '''If this reply solves your problem, please click "Solved It" next to this reply when <u>signed-in</u> to the forum.'''

  • Since upgrading to Firefox 10.0.2 my AVG extension has had to be disabled, as after typing in any web address in the address bar, the enter key had no effect and I could not go to the site without pressing the Reload arrow on right.

    I have recently upgraded Firefox to the latest version 10.0.2. After that I could not enter any website address and press the enter key and get to the website, nor could I select a website from the dropdown list of previously visited websites. The only way I could get there was by pressing the arrow on the right side of the address box (Reload current page). Once I disabled the AVG extension, everything worked normally. As soon as I enabled the AVG extension, it stopped working again.

    Follow these steps for the controls to work:
    # Start > Programs > Mozilla Firefox > Mozilla Firefox
    # Find the “Tools” menu at the top of the browser window and select “Add-ons”.
    # Click on the “Extensions” icon to make sure you’re in the correct option menu.
    # Locate “AVG Safe Search” and click on the containing line to highlight and select the add-on.
    # Click the “Disable” button and close the Add-ons window.
    # Close down any Firefox windows you may have open.
    # That’s It – You’re Done!

  • A window asked me to close firefox.exe so it could do something (AVG I think). Now, I can't open Firefox at all even after uninstalling and reinstalling.

    When I took my laptop, which is running in XP, to get rid of a
    number of trojans, etc, the computer tech put AVG on it. Since
    then, I have been getting random notices from AVG. I got a
    notice and clicked it before thoroughly reading it, assuming it
    was another one of these. It said something about closing
    Firefox, and I thought it needed to close Firefox so it could
    scan something. Ever since, I click on the shortcut or the file
    itself to no avail. Nothing happens. I've even tried
    uninstalling and reinstalling. Have I unknowingly changed my
    administrative settings?

    Annette,
    #In the menu bar, at the top of the Firefox window, Go to Tools -> Add-ons -> Extensions.
    # Locate ''each ''of the following extensions by name and click the disable button
    #Restart Firefox as prompted and see if the undesired toolbar has been removed.
    #The extensions to disable are: '''Crawler Toolbar''', '''MP3 Rocket Toolbar''', '''MSN Toolbar''', '''Search Helper Extension'''
    If you don't need some / all of those toolbars, consider leaving them disabled.
    You can probably remove these toolbars permanently from Start -> Control Panel -> Add/Remove Programs.

  • I lost my menu bar and AVG Security Toolbar and immediately switched back to the previous version of Firefox.

    After installing Firefox 4 beta and restarting I no longer had my menu bar (File Edit...) nor my AVG Safe Search Security Toolbars. As a result, I immediately reinstalled the previous version of Firefox which I had installed just a few minutes previously. In the future, I will make sure I have the install/exe for this version so that I can be insured of having a version that functions properly. Until then, and in the future, I WILL NOT be beta testing any versions of Firefox/Thunderbird. I just don't feel comfortable risking it as I am computer illiterate, it's not worth the danger...

    In addition I lost my "Home" button, including with the version I now run (3.6?) and had to create a folder for the location on the menu toolbar.

  • "Object Picker cannot open because no locations from which to choose objects can be found"

    Hi,
    When I try in AD management console in the domain controller to add a new group for a user I get the following error:
    "Object Picker cannot open because no locations from which to choose objects can be found" error message when you try to select objects from an Active Directory domain in Windows 2000
    Our domain controller is a W2000 cluster (two W2000 advanced server machines) and this happens in one of the nodes of the controller while in the other node it Works well (the difference between them is where it fails, has the resources: print,
    file sharing and quorum services). Both nodes of the controller have the remote registry service disabled and in the node where it fails when you start this service it works well but I don`t think this is the reason because in the other node with remote registry
    service disabled it works. Solutions from the following support articles don`t work:
    kb 263231
    kb 284914
    I have checked that the situation is independent of the domain administrator who tries to add the group to the user.
    Can anybody help me? Which is the reason of this different behaviour from one cluster node to another ?
    Thanks.

    Hi Milos,
    Thanks for your answer but I think this is not the case because the problem is not with NTFS and we don' have these problems:
    Users or groups that have Full Control access cannot delegate permissions.
    Users who have Full Control access cannot make permission changes on a DFS share.
    If you give the non-privileged user the right to log on locally and you log on locally to the file server where the error message occurs, you can successfully edit the ACL.
    It only happens with the AD management console. Now, for us it is not posible to upgrade the system.

  • When I type an address in the location bar and hit Enter nothing happens. I must click the arrow button at the end of the location bar. How do I fix it so that the Enter key works?

    When I type a web address in the location bar and hit enter nothing happens. In order to go to the website I've typed in, I must click the arrow button at the end of the location bar. How do I make it so that hitting the enter key takes me to the web page.
    == This happened ==
    Every time Firefox opened
    == Since Firefox 4 Beta installed an update

    The AVG addon seems to have caused the problem for me. I had it disabled and everything worked. Then I updated to AVG 2011 and the problem occurred. It seems to have reenabled itself after the update.
    Just disabling it solved the problem.

Maybe you are looking for

  • 550 5.7.1 NDR's as mail volume from IIS Virtual SMTP server to Exchange 2010 increases

    We have a virtual win 2008 server that has a Virtual SMTP server running via IIS. A separate application on this server drops emails in the pickup directory to forward to our Exchange 2010 environment and this works fine. The odd issue is that as the

  • Few Issues as a beginer on 'Variables' and  'Web Interface'

    Very very new to BPS.. Dear Friends, I have the following 2 issues ( Actually many.. but this post has restricted to only 2..   ) 1) I have created a Characteristic 'Variable' with User Exit and filled by using FM ZXXXX to with some value on Planning

  • Firewire to Time Capsule

    I have just purchased a 1TB time capsule and would like to piggy back my Lacie Firewire drive to it. Can anyone let me know if there is a way to do this. Thank you.

  • Acrobat 9.2.0 (mac) update issues

    Trying to update from Acrobat 9.1.0 Pro to 9.2.0 on Mac OS 10.9.  Upon launching the updater, it asks which Acrobat application I want to update.  When I browse to the Acrobat Pro folder under "Applications", the Acrobat Pro app itself is grayed out

  • ACE and MS-SQL Probe

    Need some help on why my SQL Probe is not working. Thx probe tcp MS-SQL description TO-RBSQL1 ip address 10.15.160.3 port 1433 interval 2 faildetect 2 passdetect interval 2 passdetect count 2 rserver host RBWEB1 ip address 10.15.177.11 rserver host R