Quantcast
Channel: SCN : Document List - ABAP Development
Viewing all 935 articles
Browse latest View live

How to Easy... Insert Standard Change Log

$
0
0

Sometimes we need to insert a change log when updating standard tables.

Here I'll show how to easy insert this change log.

 

In this example, we will insert a log for VBKD table, from VAXX transactions.

In sales order, VERKBELEG object is the one used.

 

  " Local Vars

  DATA: lc_objectid TYPE cdhdr-objectid, " Change Log Object

        ls_vbkd_old TYPE vbkd,           " Workarea before update

        ls_vbkd_new TYPE vbkd.           " Workarea after update

 

  " Load current values

  SELECT *

    FROM vbkd

    INTO ls_vbkd_old

    UP TO 1 ROWS.


  ls_vbkd_new = ls_vbkd_old.

 

  " Change ls_vbkd_new fields here

 

  " Set object id to update VERKBELEG object

  lc_objectid = ls_vbkd_old-vbeln.

 

  " Call update functions

  CALL FUNCTION 'CHANGEDOCUMENT_OPEN'

    EXPORTING

      objectclass      = 'VERKBELEG'

      objectid         = lc_objectid

    EXCEPTIONS

      sequence_invalid = 1

      OTHERS           = 2.

 

 

  CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'

    EXPORTING

      tablename              = 'VBKD'      " Table to update, could be anyone in VERKBELEG object

      workarea_new           = ls_vbkd_new " New values

      workarea_old           = ls_vbkd_old " Old values

    EXCEPTIONS

      nametab_error          = 1

      open_missing           = 2

      position_insert_failed = 3

      OTHERS                 = 4.

 

 

  CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'

    EXPORTING

      date_of_change         = sy-datum

      objectclass            = 'VERKBELEG'

      objectid               = lc_objectid

      tcode                  = 'ZTRANSACTION'  " Set your own transaction

      time_of_change         = sy-uzeit

      username               = sy-uname

    EXCEPTIONS

      header_insert_failed   = 1

      no_position_inserted   = 2

      object_invalid         = 3

      open_missing           = 4

      position_insert_failed = 5

      OTHERS                 = 6.

 

 

It's Done.


Production Variance

$
0
0

*&---------------------------------------------------------------------*

*& Report  Z_COPA_PROD_VARIANCE

*&

*&---------------------------------------------------------------------*

*& Description : Product variance report

*& Date : 29.01.2013

*& Developer : Fariha kazi

*&---------------------------------------------------------------------*

 

 

REPORT  z_copa_prod_variance.

 

 

TABLES: cobk,coep,aufk.

 

 

TYPE-POOLS : slis.

 

 

TYPES: BEGIN OF ty_mara,

  matnr TYPE matnr_d,

  matkl TYPE mara-matkl,

  wrkst TYPE mara-wrkst,

  END OF ty_mara.

DATA: gt_mara TYPE TABLE OF ty_mara,

      gs_mara TYPE ty_mara.

 

 

TYPES: BEGIN OF ty_marc,

  matnr TYPE matnr_d,

  werks TYPE marc-werks,

  prctr TYPE marc-prctr,

 

 

  END OF ty_marc.

DATA: gt_marc TYPE TABLE OF ty_marc,

      gs_marc TYPE ty_marc.

 

 

TYPES : BEGIN OF ty_afpo,

    aufnr TYPE afpo-aufnr,

    matnr TYPE afpo-matnr,

    pwerk TYPE afpo-pwerk,

    lgort TYPE afpo-lgort,

    dauat TYPE afpo-dauat,

END OF ty_afpo.

DATA: gt_afpo TYPE TABLE OF ty_afpo,

      gs_afpo TYPE ty_afpo.

TYPES : BEGIN OF ty_keko,

        matnr TYPE keko-matnr,

            werks TYPE keko-werks,

            kalnr TYPE keko-kalnr,

            losgr TYPE keko-losgr,

END OF ty_keko.

DATA : gt_keko TYPE TABLE OF ty_keko,

      gs_keko TYPE ty_keko.

 

 

TYPES : BEGIN OF ty_ckis,

  kalnr TYPE ckis-kalnr,

  werks TYPE ckis-werks,

  matnr TYPE ckis-matnr,

  menge TYPE ckis-menge,

  opreis TYPE ckis-opreis,

  END OF ty_ckis.

DATA: gt_ckis TYPE TABLE OF ty_ckis,

      gt_ckis_temp TYPE TABLE OF ty_ckis,

      gs_ckis TYPE ty_ckis.

DATA: gt_fcat     TYPE slis_t_fieldcat_alv,

      gv_gjahr    TYPE gjahr,

*added by Dipesh

      gv_gjahr_prv TYPE gjahr.

 

 

TYPES : BEGIN OF ty_coep,

 

 

 

 

      objnr     LIKE coep-objnr,

      werks     LIKE aufk-werks,"*plant

      matnr     TYPE matnr,"*Co-product

      budat     LIKE cobk-budat,"*posting Date

 

 

      megbtr    LIKE coep-mbgbtr,"Co-product quantity

      wogbtr    LIKE coep-wogbtr,"Co-product Value in Object Currency

      belnr     LIKE cobk-belnr,

      buzei     LIKE coep-buzei,

      gjahr     LIKE cobk-gjahr,

 

 

      objnr1     LIKE coep-objnr,

      kstar     LIKE coep-kstar,

      kokrs     LIKE cobk-kokrs,

      perio     TYPE monat,

      aufnr TYPE aufnr,

 

 

 

 

      END OF ty_coep.

TYPES: BEGIN OF ty_cobk,

        kokrs TYPE coep-kokrs,

        belnr TYPE coep-belnr,

        budat TYPE cobk-budat,

*          gjahr type coep-gjahr,

  END OF ty_cobk.

 

 

TYPES : BEGIN OF ty_final,

        werks     LIKE aufk-werks,"*plant

        aufnr     LIKE aufk-aufnr,"*Process Order

        budat     LIKE cobk-budat,"*posting Date

 

 

        dauat     LIKE afpo-dauat,

        kstar     LIKE coep-kstar,

        prctr     LIKE marc-prctr,

        wrkst     LIKE mara-wrkst,

        matkl     LIKE mara-matkl,

*        posnr     LIKE afpo-posnr,

        matnr     LIKE afpo-matnr,"*Co-product

        objnr     LIKE coep-objnr,"*Objnr

        megbtr    LIKE coep-mbgbtr,"o/p qty

        wogbtr    LIKE coep-wogbtr,"o/p val

        totqty     LIKE coep-mbgbtr,"tot qty

        totval LIKE coep-wogbtr,"totval

        objnr1    LIKE coep-objnr,"*Component Objnr

        matnr2    LIKE afpo-matnr,"*Component

        tarqty      LIKE coep-megbtr, "Total Target Qty

        tarval      LIKE coep-wogbtr, "Total Target Value in Object Currency

        compqty   LIKE coep-mbgbtr,"totComponent quantity

        compval   LIKE coep-wogbtr,"totComponent Value in Object Currency

        perunit    LIKE coep-wogbtr, "per unit value

        varqty      LIKE coep-megbtr, "Variance Qty

        varval      LIKE coep-wogbtr, "Variance Value in Object Currency

 

 

        lgort(6),"Storage Location

*        charg(10),"Batch Number

        belnr     LIKE cobk-belnr,

        buzei     LIKE coep-buzei,

*        gjahr     LIKE cobk-gjahr,

        kalnr TYPE keko-kalnr,

        losgr     LIKE keko-losgr, "Lot Size for Product Costing

        type      TYPE char30,

 

 

       END OF ty_final.

 

 

DATA : itab1      TYPE TABLE OF ty_final WITH HEADER LINE.

DATA : gt_coep_temp    TYPE STANDARD TABLE OF ty_coep,

       gs_itab    LIKE LINE OF gt_coep_temp,

 

 

       gt_total_comp   TYPE STANDARD TABLE OF ty_coep,

       wa_total_comp TYPE ty_coep,

       gt_total_comp_temp TYPE STANDARD TABLE OF ty_coep.

DATA : gt_cobk    TYPE TABLE OF ty_cobk,

       gs_cobk    LIKE LINE OF gt_cobk,

       gt_coep    TYPE TABLE OF ty_coep,

 

 

       gs_coep    LIKE LINE OF gt_coep,

       bukrs      LIKE t001-bukrs VALUE '1001',

       gv_perio   LIKE bapi0002_4-fiscal_period,

       gv_day     TYPE char10.

 

 

DATA : gv_matnr   TYPE coep-matnr,

        lv_objnr  TYPE coep-objnr.

 

 

RANGES : matnr1 FOR coep-matnr.

RANGES : matnr2 FOR coep-matnr.

 

 

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.

PARAMETERS : kokrs LIKE cobk-kokrs OBLIGATORY DEFAULT '1001'.

 

 

 

 

SELECT-OPTIONS : budat FOR cobk-budat ," OBLIGATORY,

                 matnr FOR coep-matnr,

                 werks FOR coep-werks NO INTERVALS.

"objnr FOR coep-objnr."Remove after Testing

SELECT-OPTIONS ip_auart FOR aufk-auart NO INTERVALS.

SELECTION-SCREEN END OF BLOCK a1.

 

 

 

 

REFRESH : matnr1[],matnr2[].

CLEAR : matnr,matnr1,matnr2.

LOOP AT matnr.

  gv_matnr = matnr-low.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

    EXPORTING

      input  = gv_matnr

    IMPORTING

      output = gv_matnr.

  matnr1 = matnr.

  matnr1-low = gv_matnr.

  matnr2 = matnr.

  SHIFT gv_matnr LEFT DELETING LEADING space.

  matnr2-low = gv_matnr.

  APPEND matnr1.

  APPEND matnr2.

  CLEAR : matnr,matnr1,matnr2.

ENDLOOP.

REFRESH matnr.

APPEND LINES OF matnr2 TO matnr.

APPEND LINES OF matnr1 TO matnr.

 

 

TYPES:BEGIN OF ty_total_qty,

  kokrs TYPE kokrs,

  belnr TYPE coep-belnr,

  buzei TYPE coep-buzei,

  objnr TYPE objnr,

  werks TYPE werks_d,

  matnr TYPE matnr,

  wogbtr TYPE coep-wogbtr,

  megbtr TYPE coep-megbtr,

  gjahr TYPE gjahr,

  perio TYPE monat,

  aufnr TYPE afpo-aufnr,

  END OF ty_total_qty.

DATA: gt_total_matnr TYPE TABLE OF ty_total_qty.

DATA: gt_total_matnr_temp TYPE TABLE OF ty_total_qty,

      wa_total_matnr TYPE ty_total_qty.

 

 

START-OF-SELECTION.

 

 

 

 

 

 

  CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'

    EXPORTING

      companycodeid = bukrs

      posting_date  = budat-low

    IMPORTING

      fiscal_period = gv_perio

      fiscal_year   = gv_gjahr.

 

 

  gv_gjahr_prv = gv_gjahr - 1.

 

 

*  Get orders for confirmation with this period

*  Out of the above orders consider those within COBK

*  Get total qty confirmed previously if any for these orders

*  Get materials used.

 

 

 

 

* Get all orders confirmed in this period range.

  SELECT  belnr

          gjahr

          kokrs

          buzei

          wogbtr

          megbtr

          matnr

          objnr

          werks

          kstar

          perio

    INTO CORRESPONDING FIELDS OF TABLE gt_coep

    FROM coep

    WHERE

    kokrs = kokrs

      AND gjahr = gv_gjahr

      AND perio = gv_perio

      AND werks IN werks

      AND matnr IN matnr

      AND beknz = 'L'

      AND megbtr < 0

      AND vrgng = 'COIN'

      AND wrttp = '04'.

 

 

  IF sy-subrc EQ 0.

    SORT gt_coep ASCENDING.

 

 

 

 

    SELECT kokrs belnr budat FROM cobk

      INTO TABLE gt_cobk

      FOR ALL ENTRIES IN gt_coep

     WHERE kokrs = gt_coep-kokrs

      AND belnr = gt_coep-belnr

      AND gjahr = gv_gjahr

      AND vrgng = 'COIN'.

    "AND budat in budat.

 

 

 

 

    gt_coep_temp[] =  gt_coep[].

 

 

*         Get dates & other data.

    LOOP AT gt_coep_temp INTO gs_coep.

 

 

      gs_coep-objnr1 = gs_coep-objnr.

      IF gs_coep-objnr1+0(2) <> 'OR'.

 

 

        REPLACE FIRST OCCURRENCE OF 'OP' IN gs_coep-objnr1 WITH 'OR'.

      ENDIF.

      lv_objnr = gs_coep-objnr.

      REPLACE FIRST OCCURRENCE OF 'OR' IN lv_objnr WITH space .

      CONDENSE   lv_objnr.

      gs_coep-aufnr = lv_objnr.

      READ TABLE gt_cobk INTO gs_cobk WITH KEY kokrs = gs_coep-kokrs belnr = gs_coep-belnr.

 

 

 

 

      gs_coep-budat = gs_cobk-budat.

      MODIFY gt_coep_temp FROM gs_coep.

 

 

    ENDLOOP.

    SORT gt_coep_temp  BY budat.

    DELETE gt_coep_temp WHERE budat NOT IN budat.

    DELETE ADJACENT DUPLICATES FROM gt_coep_temp COMPARING objnr werks matnr.

 

 

    IF gt_coep_temp[] IS NOT INITIAL.

*          Get total qty confirmed for above orders  for  every material with their confirmation period & year

*           This will also get

      SELECT kokrs

             belnr

             buzei

             objnr

             werks

             matnr

             wogbtr

             megbtr

            gjahr

            perio

        FROM coep

        INTO TABLE gt_total_matnr

        FOR ALL ENTRIES IN gt_coep_temp

        WHERE

 

 

        kokrs = gt_coep_temp-kokrs

        AND

        objnr =   gt_coep_temp-objnr

        AND

        werks = gt_coep_temp-werks

        AND gjahr IN (gv_gjahr,gv_gjahr_prv)

        AND   matnr = gt_coep_temp-matnr

        AND vrgng = 'COIN'

        AND wrttp = '04'.

 

 

      .

 

 

*           Sum total costs/qty for material irrespective of perio & year also get first order confirmation period for cost estimate

      SORT gt_total_matnr BY objnr gjahr perio werks matnr.

      gt_total_matnr_temp[] = gt_total_matnr[].

      REFRESH: gt_total_matnr[].

      LOOP AT gt_total_matnr_temp INTO wa_total_matnr.

 

 

        CLEAR:wa_total_matnr-gjahr,wa_total_matnr-perio,wa_total_matnr-belnr,wa_total_matnr-buzei.

        lv_objnr = wa_total_matnr-objnr.

        REPLACE FIRST OCCURRENCE OF 'OP' IN lv_objnr WITH space .

        REPLACE FIRST OCCURRENCE OF 'OR' IN lv_objnr WITH space .

        CONDENSE   lv_objnr.

        wa_total_matnr-aufnr = lv_objnr.

 

 

*                MULTIPLY WA_TOTAL_MATNR-MEGBTR BY -1.

*                MULTIPLY  WA_TOTAL_MATNR-WOGBTR BY -1.

        COLLECT wa_total_matnr INTO gt_total_matnr.

        CLEAR: wa_total_matnr.

      ENDLOOP.

 

 

 

 

 

 

      CLEAR : gs_coep.

 

 

 

 

 

 

 

 

*           Get Components/Materials used for producing materials above from COEP

      SELECT belnr

              gjahr

              kokrs

              buzei

              wogbtr

              megbtr

              matnr

              objnr

              werks

              kstar

              perio

        FROM coep

        INTO CORRESPONDING FIELDS OF TABLE gt_total_comp

        "APPENDING CORRESPONDING FIELDS OF TABLE gt_ckis

        FOR ALL ENTRIES IN gt_coep_temp

        WHERE kokrs  =  gt_coep_temp-kokrs

        AND   objnr  =  gt_coep_temp-objnr1

        AND   vrgng =  'COIN'

        AND gjahr IN (gv_gjahr,gv_gjahr_prv)

       "AND matnr  <> space " performance delete later

         AND megbtr GT 0.

 

 

      DELETE gt_total_comp WHERE matnr IS INITIAL.

 

 

 

 

 

 

*           Total Actual cost/qty for components irrespective of perio & year i.e for previous confirmations also

      SORT gt_coep_temp ASCENDING BY objnr matnr.

      SORT gt_total_comp ASCENDING BY objnr matnr.

 

 

      SORT gt_total_comp.

      gt_total_comp_temp[] = gt_total_comp[].

      REFRESH: gt_total_comp[].

 

 

      LOOP AT gt_total_comp_temp INTO wa_total_comp.

        CLEAR:wa_total_comp-gjahr ,wa_total_comp-perio,wa_total_comp-belnr,wa_total_comp-buzei.

 

 

 

 

 

 

        COLLECT wa_total_comp INTO gt_total_comp.

        CLEAR: wa_total_comp.

      ENDLOOP.

 

 

 

 

 

 

*           material type

      SELECT  matnr

              matkl

              wrkst

        FROM mara

        INTO TABLE gt_mara

        FOR ALL ENTRIES IN gt_total_matnr

        WHERE matnr = gt_total_matnr-matnr.

 

 

 

 

 

 

*           profit centre

 

 

      SELECT matnr

             werks

             prctr

        FROM marc

        INTO  TABLE gt_marc

        FOR ALL ENTRIES IN gt_total_matnr

        WHERE matnr = gt_total_matnr-matnr

        AND werks = gt_total_matnr-werks.

 

 

 

 

 

 

*          Order details like order type storage location

      SELECT  aufnr

              matnr

              pwerk

              lgort

              dauat

            FROM afpo

            INTO TABLE gt_afpo

            FOR ALL ENTRIES IN gt_total_matnr

            WHERE aufnr = gt_total_matnr-aufnr

            AND matnr = gt_total_matnr-matnr.

      DELETE ADJACENT DUPLICATES FROM gt_afpo COMPARING aufnr matnr pwerk.

 

 

*          Cost estimate for components

*current period only

      CONCATENATE budat-low+0(4) budat-low+4(2) '01' INTO gv_day.

      SELECT  matnr

              werks

              kalnr

              losgr

         INTO TABLE gt_keko

        FROM keko

        FOR ALL ENTRIES IN gt_coep_temp

        WHERE matnr = gt_coep_temp-matnr

        AND werks = gt_coep_temp-werks

        AND kadky = gv_day.

 

 

      DELETE ADJACENT DUPLICATES FROM gt_keko  COMPARING matnr werks.

 

 

      SELECT  kalnr

              werks

              matnr

              menge

              opreis

        FROM ckis

        INTO TABLE gt_ckis

        FOR ALL ENTRIES IN gt_keko

        WHERE kalnr = gt_keko-kalnr

        AND typps = 'M'

        AND kadky = gv_day

        AND bwvar = 'KF1'.                              "#EC CI_NOFIRST

 

 

*****************************************************************

      RANGES: r_matnr FOR mara-matnr.

      r_matnr-sign = 'I'.

      r_matnr-option = 'EQ'.

 

 

 

 

*           Calculate Target Costs for Material & components from cost estimate

      LOOP AT gt_total_matnr INTO wa_total_matnr.

 

 

        CLEAR : itab1 ,gs_itab,gs_afpo,gs_mara,gs_marc,gs_keko.

 

 

        READ TABLE gt_mara INTO gs_mara WITH KEY matnr = wa_total_matnr-matnr.

        itab1-matkl = gs_mara-matkl.

        itab1-wrkst = gs_mara-wrkst.

 

 

 

 

        READ TABLE gt_marc INTO gs_marc WITH KEY matnr = wa_total_matnr-matnr

                                           werks = wa_total_matnr-werks.

        itab1-prctr = gs_marc-prctr.

 

 

        READ TABLE gt_coep_temp INTO gs_itab WITH KEY objnr = wa_total_matnr-objnr werks = wa_total_matnr-werks matnr = wa_total_matnr-matnr.

 

 

 

 

 

 

        READ TABLE gt_afpo INTO gs_afpo WITH KEY aufnr = wa_total_matnr-aufnr  matnr = wa_total_matnr-matnr.

 

 

        itab1-matnr  = gs_itab-matnr.

        itab1-werks  = gs_afpo-pwerk.

        itab1-lgort  = gs_afpo-lgort.

        itab1-aufnr  = gs_afpo-aufnr.

        itab1-dauat  = gs_afpo-dauat.

        itab1-budat  = gs_itab-budat.

        itab1-objnr  = gs_itab-objnr.

 

 

        itab1-kstar  = gs_itab-kstar.

        "Total Qty for material

        itab1-totqty = wa_total_matnr-megbtr .

        itab1-totval = wa_total_matnr-wogbtr .

        itab1-megbtr = itab1-totqty * -1.

        itab1-wogbtr = wa_total_matnr-wogbtr * -1 .

 

 

 

 

 

 

        READ TABLE gt_keko INTO gs_keko WITH KEY  matnr = itab1-matnr

                                                      werks = itab1-werks.

 

 

        itab1-losgr = gs_keko-losgr.

 

 

* From Cost estimate calculate components Target Qty & Value with Variance.

* it can be that there may be some components whose estimate is present but entry is not there in COEP i.e. not used whose total used qty will be zero then

 

 

        LOOP AT gt_ckis INTO gs_ckis WHERE kalnr  = gs_keko-kalnr ."use this for adding components even if they were not issued

 

 

 

 

          CLEAR : wa_total_comp.

 

 

          READ TABLE gt_total_comp INTO wa_total_comp WITH KEY objnr =  wa_total_matnr-objnr  werks = gs_keko-werks matnr = gs_ckis-matnr.

 

 

          r_matnr-low = wa_total_comp-matnr.

          APPEND r_matnr.

 

 

          IF  wa_total_matnr-matnr  <> wa_total_comp-matnr. " remove same component & matnr

 

 

 

 

            IF itab1-losgr NE 0.

              itab1-tarqty = ( gs_ckis-menge  * itab1-megbtr ) / itab1-losgr.

              itab1-tarval = ( gs_ckis-opreis * itab1-tarqty ).

            ENDIF.

            itab1-compqty  = wa_total_comp-megbtr.

            itab1-compval  = wa_total_comp-wogbtr.

 

 

            itab1-varqty     =  itab1-compqty - itab1-tarqty .

            itab1-varval     = itab1-compval - itab1-tarval  .

 

 

            itab1-matnr2   =  gs_ckis-matnr.

 

 

 

 

            itab1-perunit   = wa_total_comp-wogbtr / wa_total_comp-megbtr.

            APPEND itab1.

 

 

          ENDIF.

 

 

 

 

        ENDLOOP.

 

 

        gt_total_comp_temp[] = gt_total_comp[].

        DELETE gt_total_comp_temp WHERE objnr NE wa_total_matnr-objnr.

        DELETE gt_total_comp_temp WHERE matnr IN r_matnr.

        LOOP AT gt_total_comp_temp INTO wa_total_comp.

          IF  wa_total_matnr-matnr  <> wa_total_comp-matnr. " remove same component & matnr

 

 

            IF itab1-losgr NE 0.

              itab1-tarqty = 0.

              itab1-tarval = 0.

            ENDIF.

            itab1-compqty  = wa_total_comp-megbtr.

            itab1-compval  = wa_total_comp-wogbtr.

 

 

            itab1-varqty     =  itab1-compqty - itab1-tarqty .

            itab1-varval     = itab1-compval - itab1-tarval  .

 

 

            itab1-matnr2   = wa_total_comp-matnr.

 

 

 

 

            itab1-perunit   = wa_total_comp-wogbtr / wa_total_comp-megbtr.

            APPEND itab1.

 

 

          ENDIF.

        ENDLOOP.

        CLEAR wa_total_comp.

 

 

*

      ENDLOOP.

 

 

 

 

      SORT itab1 ASCENDING BY objnr.

 

 

      PERFORM fieldcat USING gt_fcat.

      PERFORM write_output.

    ELSE.

      MESSAGE 'No data in selected date range.' TYPE 'S'.

    ENDIF.

 

 

 

 

  ELSE.

    MESSAGE 'No data exists.' TYPE 'S'.

  ENDIF.

*&---------------------------------------------------------------------*

*&      Form  fieldcat

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->LT_FCAT    text

*----------------------------------------------------------------------*

FORM fieldcat USING lt_fcat TYPE slis_t_fieldcat_alv.

 

 

  DATA: ls_fcat   TYPE slis_fieldcat_alv,

        lv_count  TYPE i.

 

 

  REFRESH lt_fcat.

  CLEAR ls_fcat.

 

 

 

 

  ls_fcat-fieldname = 'WERKS'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Plant'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'AUFNR'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Production Order'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'BUDAT'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Posting Date'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'DAUAT'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Order Type'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

 

 

  ls_fcat-fieldname = 'PRCTR'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Profit Center'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

 

 

  ls_fcat-fieldname = 'MATKL'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Material Group'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

 

 

  ls_fcat-fieldname = 'MATNR'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Produced Material'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'MEGBTR'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Output Quantity'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'WOGBTR'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Output Value'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'TOTQTY'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Total Quantity'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'TOTVAL'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Total Value'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

 

 

 

 

  ls_fcat-fieldname = 'MATNR2'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Component'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'TARQTY'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Target Qty'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'TARVAL'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Target Value'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'COMPQTY'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Component Quantity'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'COMPVAL'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Component Value'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'PERUNIT'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Per Unit Value'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

 

 

  ls_fcat-fieldname = 'VARQTY'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Variance Qty'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

  ls_fcat-fieldname = 'VARVAL'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Variance Value'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

 

 

  ls_fcat-fieldname = 'LGORT'.

  ls_fcat-tabname   = 'ITAB1'.

  ls_fcat-seltext_m = 'Storge Location'.

  ls_fcat-col_pos      = lv_count.

  APPEND ls_fcat TO lt_fcat.

  lv_count = lv_count + 1.

  CLEAR ls_fcat.

 

 

 

 

 

 

 

 

 

 

ENDFORM.                    "FIELDCAT

 

 

*&---------------------------------------------------------------------*

*&      Form  WRITE_OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM write_output.

 

 

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

      it_fieldcat = gt_fcat[]

    TABLES

      t_outtab    = itab1.

 

 

ENDFORM.                    "WRITE_OUTPUT

Royalty Calculation

$
0
0

*&---------------------------------------------------------------------*

*& Report  Z_COPA_ROYALTY

*& Description : Royalty development

 

*&---------------------------------------------------------------------*

*&* Program Basis for royalty calculation

*&* Royalty  =  Loading group % in ztable for material * (Revenue from revenue gl account - Raw material cost from raw materials gl account- Imported material cost froom imp materials gl acct as in ztables) / 100

*&

*&---------------------------------------------------------------------*

 

 

REPORT  z_copa_royalty.

 

 

TABLES: bsis,ckis.

 

 

*Data declarations

 

 

TYPES: BEGIN OF ty_final,

        bukrs TYPE bukrs,          "Company code

        gjahr TYPE gjahr,          "Fiscal year

        monat TYPE monat,          "Fiscal period

        werks TYPE werks_d,        "Plant

        vbeln TYPE vbeln,          "Billing doc

        fkdat TYPE vbrk-fkdat,     "billing date

        matnr TYPE matnr,          "Material no

        maktx TYPE maktx,

        mtart TYPE mtart,          "Material type

        hkont TYPE hkont,          "GL account

        revenue TYPE wrbtr,         "cost of fin good

        "wrbtr TYPE wrbtr,          "Amount

        menge TYPE menge_d,        "Quantity of fin good

        comp_qty TYPE menge_d,     "Computed quantity

 

 

 

 

        imported TYPE wrbtr,        "Imported cost

        rm TYPE wrbtr, "raw material cost

        shkzg TYPE shkzg,          "Debit/Credit indicator

 

 

        kunnr TYPE kunnr,          "Customer number

        belnr TYPE belnr_d,        "Accounting doc no

        fkart TYPE fkart,          "Billing type

 

 

        gross TYPE wrbtr, " gross =  revenue - imported - gross

        field1 TYPE zladgr,        "Loading group

        field2 TYPE zabprc,        "Loading Percentage

        royalty TYPE wrbtr,  "royalty = load % * grosss /100

       END OF ty_final.

 

 

 

 

TYPES : BEGIN OF ty_imp,

              rbukrs TYPE faglflext-rbukrs,

              ryear TYPE faglflext-ryear,

              monat TYPE monat,

              cost_elem  TYPE faglflext-cost_elem,

              cost  TYPE wrbtr,

       END OF ty_imp.

       DATA: gt_imp_cost TYPE TABLE OF ty_imp,

             gs_imp_cost TYPE ty_imp.

TYPES: BEGIN OF ty_bsis,

       bukrs TYPE bukrs,  "Company code

       belnr TYPE belnr_d,"Accounting doc no

       gjahr TYPE gjahr,  "Fiscal year

       buzei TYPE buzei,  "Line item

       monat TYPE monat,  "Fiscal period

       hkont TYPE hkont,  "GL account

       END OF ty_bsis.

 

 

TYPES: BEGIN OF ty_revenue,

       belnr TYPE belnr_d,  "Accounting doc no

       buzei TYPE buzei,    "Line item

       bukrs TYPE bukrs,    "Company code

       gjahr TYPE gjahr,    "Fiscal year

       wrbtr TYPE wrbtr,    "Amount

       shkzg TYPE shkzg,    "Debit/Credit indicator

       matnr TYPE matnr,    "Material no

       werks TYPE werks_d,  "Plant

       menge TYPE menge_d,  "Quantity

       kunnr TYPE kunnr,    "Customer number

       mtart TYPE mtart,    "Material type

       fktyp TYPE fktyp,    "Billing category

       awkey TYPE awkey,    "Reference key

       koart TYPE koart,

       END OF ty_revenue.

 

 

TYPES: BEGIN OF ty_vbrk,

       fkart TYPE fkart,  "Billing Type

       fktyp TYPE fktyp,  "Billing category

       END OF ty_vbrk.

 

 

TYPES: BEGIN OF ty_tab2,

       matnr TYPE matnr,              "Material no

       werks TYPE werks_d,            "Plant

       kalnr TYPE ck_kalnr1,          "Cost Estimate no

       saknr TYPE zsaknr,             "GL account

       losgr TYPE ck_losgr,           "Costing lot size

       menge LIKE ckis-menge,         "Quantity

       wrtfw_kpf LIKE ckis-wrtfw_kpf, "Value in Object Currency

       END OF ty_tab2.

 

 

TYPES: BEGIN OF ty_marc,

       matnr TYPE matnr,   "Material no

       werks TYPE werks_d, "Plant

       losgr TYPE ck_losgr,"Costing lot size

       END OF ty_marc.

 

 

TYPES: BEGIN OF ty_comp,

       matnr TYPE matnr,              "Material no

       werks TYPE werks_d,            "Plant

       kalnr TYPE ck_kalnr1,          "Cost Estimate no

       menge LIKE ckis-menge,         "Qty

       wrtfw_kpf LIKE ckis-wrtfw_kpf, "Value in object

       END OF ty_comp.

 

 

TYPES: BEGIN OF ty_ledg,

       drcrk TYPE shkzg,      "Debit/Credit indicator

       cost_elem TYPE kstar,  "Cost element

       rbukrs TYPE bukrs,     "Company code

       ryear TYPE gjahr,      "Fiscal year

       hsl01 TYPE hslxx12,    "Total of transactions of the period

       hsl02 TYPE hslxx12,    "Total of transactions of the period

       hsl03 TYPE hslxx12,    "Total of transactions of the period

       hsl04 TYPE hslxx12,    "Total of transactions of the period

       hsl05 TYPE hslxx12,    "Total of transactions of the period

       hsl06 TYPE hslxx12,    "Total of transactions of the period

       hsl07 TYPE hslxx12,    "Total of transactions of the period

       hsl08 TYPE hslxx12,    "Total of transactions of the period

       hsl09 TYPE hslxx12,    "Total of transactions of the period

       hsl10 TYPE hslxx12,    "Total of transactions of the period

       hsl11 TYPE hslxx12,    "Total of transactions of the period

       hsl12 TYPE hslxx12,    "Total of transactions of the period

       hsl13 TYPE hslxx12,    "Total of transactions of the period

       hsl14 TYPE hslxx12,    "Total of transactions of the period

       hsl15 TYPE hslxx12,    "Total of transactions of the period

       hsl16 TYPE hslxx12,    "Total of transactions of the period

       END OF ty_ledg.

 

 

TYPES: BEGIN OF ty_ledg1,

       drcrk TYPE shkzg,        "Debit/Credit indicator

       cost_elem TYPE kstar,    "Cost element

       rbukrs TYPE bukrs,       "Company code

       ryear TYPE gjahr,        "Fiscal year

       tot_imp_cst TYPE hslxx12,"Total imported cost

       END OF ty_ledg1.

TYPES:BEGIN OF ty_LDGRP,

  MATNR TYPE ZFI002-MATNR,

  MAKTX TYPE ZFI002-MAKTX,

  LADGR TYPE ZFI001-LADGR,

  ABPRC TYPE ZFI001-ABPRC,

  END OF ty_LDGRP.

  DATA: IT_LDGRP TYPE TABLE OF ty_ldgrp,

        wa_ldgrp LIKE LINE OF it_ldgrp.

TYPES: BEGIN OF TY_MTART,

        MATNR TYPE MARA-MATNR,

        MTART TYPE MTART,

  END OF ty_mtart.

 

 

  TYPES: BEGIN OF ty_mva_price,

  MATNR  TYPE MARA-MATNR,

        BWKEY TYPE MBEWH-BWKEY,

        LFGJA TYPE MBEWH-LFGJA,

 

 

        LFMON TYPE MBEWH-LFMON,

        VERPR TYPE MBEWH-VERPR,

  END OF ty_mva_price.

  DATA: IT_RM_PRICE TYPE TABLE OF ty_mva_price,

        WA_RM_PRICE TYPE ty_mva_price.

  DATA lv_rm_cost TYPE BSEG-WRBTR.

  DATA: IT_MTART TYPE TABLE OF TY_MTART,

         WA_MTART TYPE TY_MTART.

DATA: gt_ledg TYPE STANDARD TABLE OF ty_ledg,

        gs_ledg LIKE LINE OF gt_ledg,

        gt_ledg1 TYPE STANDARD TABLE OF ty_ledg,

        gs_ledg1 LIKE LINE OF gt_ledg1,

        lv_field TYPE char200,

        gt_ledg2 TYPE STANDARD TABLE OF ty_ledg,

        gs_ledg2 LIKE LINE OF gt_ledg2,

        gt_ledg3 TYPE STANDARD TABLE OF ty_ledg1,

        gs_ledg3 LIKE LINE OF gt_ledg3,

        gt_tab TYPE STANDARD TABLE OF ty_ledg,

        gs_tab LIKE LINE OF gt_tab,

 

 

        lv_tot_qty TYPE menge_d,

        lv_tot_imp TYPE hslxx12.

*DATA: IT_FINAL TYPE STANDARD TABLE OF ty_final,

*      wa_final LIKE LINE OF IT_FINAL,

DATA: IT_FINAL TYPE STANDARD TABLE OF ZFI005,

      wa_final LIKE LINE OF IT_FINAL,

      lv_mtart TYPE mtart.

 

 

DATA: gt_bsis TYPE STANDARD TABLE OF ty_bsis,

      gs_bsis LIKE LINE OF gt_bsis,

      gt_bsas TYPE STANDARD TABLE OF ty_bsis,

      gs_bsas LIKE LINE OF gt_bsas,

      IT_REVENUE TYPE STANDARD TABLE OF ty_revenue,

      IT_KUNNR TYPE TABLE OF ty_revenue,

      wa_revenue LIKE LINE OF IT_REVENUE,

      gt_vbrk TYPE STANDARD TABLE OF ty_vbrk,

      gs_vbrk LIKE LINE OF gt_vbrk.

 

 

DATA: gt_tab3 TYPE STANDARD TABLE OF zfi003,

      gs_tab3 LIKE LINE OF gt_tab3,

      gt_fieldcat TYPE slis_t_fieldcat_alv,

      gs_fieldcat LIKE LINE OF gt_fieldcat,

      gt_layout TYPE slis_layout_alv,

      lv_typ TYPE VBTYP.

 

 

  DATA: gt_saknr TYPE RANGE OF zfi003-saknr,

        gs_saknr LIKE LINE OF gt_saknr,

        gt_matnr TYPE RANGE OF zfi004-matnr,

        gs_matnr LIKE LINE OF gt_matnr,

        gt_comp TYPE STANDARD TABLE OF stpox,

        gs_comp LIKE LINE OF gt_comp.

 

 

 

 

  DATA: lv_date TYPE dats,

        lv_menge LIKE ckis-menge,

        lv_val LIKE ckis-wrtfw_kpf,

        gt_tab2 TYPE STANDARD TABLE OF ty_tab2,

        gs_tab2 LIKE LINE OF gt_tab2,

        gt_tab4 TYPE STANDARD TABLE OF zfi004,

        gs_tab4 LIKE LINE OF gt_tab4,

        it_marc TYPE STANDARD TABLE OF ty_marc,

        wa_marc LIKE LINE OF it_marc,

        lt_comp1 TYPE STANDARD TABLE OF stpox,

        ls_comp1 LIKE LINE OF gt_comp,

        lt_comp2 TYPE STANDARD TABLE OF stpox,

        ls_comp2 LIKE LINE OF gt_comp.

DATA P_period type monat .

 

 

*Selection screen to enter company code, fiscal year, period.

 

 

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

 

 

PARAMETERS: bukrs TYPE bukrs OBLIGATORY MATCHCODE OBJECT zbukrs,

            gjahr LIKE bsis-gjahr OBLIGATORY.

PARAMETERS : monat TYPE bsis-monat.

*SELECT-OPTIONS: monat FOR bsis-monat.

 

 

SELECTION-SCREEN END OF BLOCK b1.

 

 

 

 

 

 

START-OF-SELECTION.

 

 

*Part I

* Computation for Revenue

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gt_tab3

    FROM zfi003

    WHERE fldgp = 'R'.

 

 

*Get Materials from fidoc/ qty billing doc as per above GL accounts

  SELECT  bukrs

          belnr

          gjahr

          buzei

          monat

          hkont

    FROM bsis

    INTO TABLE gt_bsis

    FOR ALL ENTRIES IN gt_tab3

    WHERE hkont = gt_tab3-saknr

      AND bukrs = bukrs

      AND gjahr = gjahr

      AND monat = monat.

 

 

  SELECT  bukrs

          belnr

          gjahr

          buzei

          monat

          hkont

    FROM bsas

    APPENDING TABLE gt_bsis

    FOR ALL ENTRIES IN gt_tab3

    WHERE hkont = gt_tab3-saknr

      AND bukrs = bukrs

      AND gjahr = gjahr

      AND monat = monat.

 

 

* get revenue cost and other data

  SELECT  belnr

          buzei

          bukrs

          gjahr

*          wrbtr

          shkzg

          matnr

          werks

 

 

    INTO CORRESPONDING FIELDS OF TABLE IT_REVENUE

    FROM bseg

    FOR ALL ENTRIES IN gt_bsis

    WHERE belnr = gt_bsis-belnr

      AND bukrs = gt_bsis-bukrs

      AND gjahr = gt_bsis-gjahr

      AND buzei = gt_bsis-buzei

    .

 

 

  DELETE ADJACENT DUPLICATES FROM gt_bsis COMPARING ALL FIELDS.

  SORT IT_REVENUE ASCENDING.

 

 

  SELECT  MATNR

        MTART

  FROM MARA

  INTO TABLE IT_MTART

  FOR ALL ENTRIES IN IT_REVENUE

  WHERE MATNR = IT_REVENUE-matnr.

 

 

** Get lot size for revenue materials

*  SELECT matnr werks losgr

*    FROM marc

*    INTO TABLE it_marc

*    FOR ALL ENTRIES IN IT_revenue

*    WHERE matnr = IT_revenue-matnr

*      AND werks = IT_revenue-werks.

 

 

  LOOP AT gt_bsis INTO gs_bsis.

 

 

    READ TABLE IT_REVENUE INTO wa_revenue WITH KEY belnr = gs_bsis-belnr

                                              gjahr = gs_bsis-gjahr

                                              buzei = gs_bsis-buzei

                                              bukrs = gs_bsis-bukrs.

* Get material type

    READ TABLE IT_MTART INTO WA_MTART  WITH KEY matnr = wa_revenue-matnr.

  wa_final-mtart = WA_MTART-mtart.

    SELECT SINGLE kunnr INTO wa_final-kunnr FROM bseg WHERE belnr =  gs_bsis-belnr

      AND bukrs = gs_bsis-bukrs

      AND gjahr = gs_bsis-gjahr

 

 

      AND Koart = 'D'.

 

 

*    READ TABLE IT_MARC INTO WA_MARC WITH KEY MATNR = wa_revenue-matnr

*                                                    werks = wa_revenue-werks .

*    WA_FINAL-LOSGR = WA_MARC-LOSGR.

*    Get billing doc

    SELECT SINGLE awkey FROM bkpf INTO wa_revenue-awkey WHERE belnr = wa_revenue-belnr

                                                 AND gjahr = wa_revenue-gjahr

                                                 AND bukrs = wa_revenue-bukrs.

    SELECT SINGLE fkimg FROM vbrp INTO wa_final-menge WHERE vbeln = wa_revenue-awkey+0(10).

 

 

*   Get  blling type

    SELECT SINGLE netwr fkart fkdat FROM vbrk INTO (wa_final-revenue,gs_vbrk-fkart,wa_final-fkdat) WHERE vbeln = wa_revenue-awkey+0(10)."billing type

    SELECT SINGLE vbtyp FROM tvfk INTO lv_typ WHERE fkart = gs_vbrk-fkart. " if invoice

 

 

    IF lv_typ <> 'M' .

            wa_final-comp_qty = 0.

     ELSE.

        wa_final-comp_qty = wa_final-menge.

    ENDIF.

    IF wa_final-mtart <> 'FERT'.

        wa_final-comp_qty = 0.

      ELSE.

      wa_final-comp_qty = wa_final-menge.

    ENDIF.

 

 

 

 

 

 

    wa_final-bukrs = gs_bsis-bukrs.

    wa_final-belnr = gs_bsis-belnr.

    wa_final-gjahr = gs_bsis-gjahr.

*    wa_final-buzei = gs_bsis-buzei.

    wa_final-monat = gs_bsis-monat.

    wa_final-hkont = gs_bsis-hkont.

 

 

 

 

 

 

 

 

    wa_final-shkzg = wa_revenue-shkzg.

    wa_final-matnr = wa_revenue-matnr.

    wa_final-werks = wa_revenue-werks.

    wa_final-vbeln = wa_revenue-awkey+0(10).

 

 

**    IF wa_revenue-shkzg = 'H'.

*      wa_final-revenue = wa_final-revenue * -1.

**

**    ENDIF.

 

 

 

 

    wa_final-fkart = gs_vbrk-fkart.

    lv_tot_qty = lv_tot_qty + wa_final-comp_qty.

    APPEND wa_final TO IT_FINAL.

 

 

    CLEAR: wa_final,wa_revenue.

  ENDLOOP.

 

 

* End of Part I

 

 

 

 

 

 

*Part II - Computation of zinc and Aluminium cost

 

 

  SELECT *

      INTO CORRESPONDING FIELDS OF TABLE gt_tab3

      FROM zfi003

      WHERE fldgp = 'M'.

 

 

  LOOP AT gt_tab3 INTO gs_tab3.

    gs_saknr-sign = 'I'.

    gs_saknr-option = 'EQ'.

    gs_saknr-low = gs_tab3-saknr.

    APPEND gs_saknr TO gt_saknr.

  ENDLOOP.

 

 

  SELECT *

    FROM zfi004

    INTO TABLE gt_tab4.

 

 

  LOOP AT gt_tab4 INTO gs_tab4.

    gs_matnr-sign = 'I'.

    gs_matnr-option = 'EQ'.

    gs_matnr-low = gs_tab4-matnr.

    APPEND gs_matnr TO gt_matnr.

  ENDLOOP.

 

 

 

 

* Calculate raw material cost for each finished material as per period

 

 

*  Get components for all materials

LOOP AT IT_FINAL INTO wa_final.

  REFRESH : GT_COMP[] , IT_RM_PRICE.

    CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'

     EXPORTING

       CAPID                       = 'PP01'

       DATUV                       = sy-datum

       EMENG                       = wa_final-comp_qty

       MKTLS                       = 'X'

       MTNRV                       = wa_final-matnr

       STPST                       = 0

       SVWVO                       = 'X'

       WERKS                       = wa_final-werks

       VRSVO                       = 'X'

       MEHRS                       = 'X'

      TABLES

        stb                         = gt_comp

     EXCEPTIONS

      ALT_NOT_FOUND               = 1

      CALL_INVALID                = 2

      MATERIAL_NOT_FOUND          = 3

      MISSING_AUTHORIZATION       = 4

      NO_BOM_FOUND                = 5

      NO_PLANT_DATA               = 6

      NO_SUITABLE_BOM_FOUND       = 7

      CONVERSION_ERROR            = 8

      OTHERS                      = 9

             .

   IF sy-subrc EQ 0.

* Calculate total of qty & value of components

*     APPEND LINES OF lt_comp1 to gt_comp.

 

 

DELETE gt_comp WHERE idnrk not in gt_matnr.

if gt_comp is NOT INITIAL.

*    select moving average price for fetched components

   SELECT  MATNR

           BWKEY

           LFGJA

           LFMON

           VERPR

     FROM MBEWH

     INTO TABLE IT_RM_PRICE

     FOR ALL ENTRIES IN GT_COMP

     WHERE MATNR = gt_comp-idnrk

     AND   BWKEY = gt_comp-werks

     AND   LFGJA  = gjahr

     AND   LFMON = monat .

     SORT IT_RM_PRICE BY MATNR BWKEY LFGJA LFMON.

 

 

 

 

* Raw Material Cost

  LOOP AT gt_comp INTO gs_comp .

 

 

    READ TABLE IT_RM_PRICE INTO WA_RM_PRICE WITH KEY MATNR = gs_comp-idnrk

                                                     BWKEY = gs_comp-werks

                                                     LFGJA = wa_final-gjahr

                                                     LFMON = wa_final-monat BINARY SEARCH.

    lv_rm_cost = lv_rm_cost + ( ( gs_comp-mnglg * WA_RM_PRICE-VERPR ) )."/ wa_final-losgr ).

 

 

  wa_final-maktx = gs_comp-OJTXB.

 

 

  ENDLOOP.

 

 

  wa_final-rm = lv_rm_cost.

 

 

 

 

  MODIFY IT_FINAL FROM WA_FINAL.

  clear : lv_rm_cost, wa_final.

    endif.

   ENDIF.

 

 

ENDLOOP.

 

 

 

 

 

 

 

 

 

 

*rev -->   Fin Mat qty from billing doc & Value

* RM cost --> comp cost * Fin Mat qty --> Component qty* mbewh price = comp cost

* im cost ->

 

 

*  End of part II

 

 

 

 

 

 

 

 

 

 

 

 

* Computation of imported material cost

 

 

  SELECT *

    FROM zfi003

    INTO TABLE gt_tab3

    WHERE fldgp = 'IM'.

 

 

 

 

  SELECT  COST_ELEM

          RBUKRS

          RYEAR

          DRCRK

          HSL01

          HSL02

          HSL03

          HSL04

          HSL05

          HSL06

          HSL07

          HSL08

          HSL09

          HSL10

          HSL11

          HSL12

          HSL13

          HSL14

          HSL15

          HSL16

    FROM faglflext

    INTO CORRESPONDING FIELDS OF TABLE gt_ledg

    FOR ALL ENTRIES IN gt_tab3

    WHERE cost_elem = gt_tab3-saknr

      AND rbukrs = bukrs

      AND ryear = gjahr.

 

 

 

 

 

 

P_period = monat.

 

 

*WHILE p_period IN monat .

 

 

 

 

    LOOP AT gt_ledg INTO gs_ledg .

 

 

*      if gs_ledg-drcrk = 'H'.

*        gs_ledg-hsl01 = gs_ledg-hsl01 * -1.

*        gs_ledg-hsl02 = gs_ledg-hsl02 * -1.

*        gs_ledg-hsl03 = gs_ledg-hsl03 * -1.

*        gs_ledg-hsl04 = gs_ledg-hsl04 * -1.

*        gs_ledg-hsl05 = gs_ledg-hsl05 * -1.

*        gs_ledg-hsl06 = gs_ledg-hsl06 * -1.

*        gs_ledg-hsl07 = gs_ledg-hsl07 * -1.

*        gs_ledg-hsl08 = gs_ledg-hsl08 * -1.

*        gs_ledg-hsl09 = gs_ledg-hsl09 * -1.

*        gs_ledg-hsl10 = gs_ledg-hsl10 * -1.

*        gs_ledg-hsl11 = gs_ledg-hsl11 * -1.

*        gs_ledg-hsl12 = gs_ledg-hsl12 * -1.

*        gs_ledg-hsl13 = gs_ledg-hsl13 * -1.

*        gs_ledg-hsl14 = gs_ledg-hsl14 * -1.

*        gs_ledg-hsl15 = gs_ledg-hsl15 * -1.

*        gs_ledg-hsl16 = gs_ledg-hsl16 * -1.

*

*        endif.

        gs_imp_cost-ryear = gs_ledg-ryear.

        gs_imp_cost-rbukrs = gs_ledg-rbukrs.

*        gs_imp_cost-cost_elem = gs_ledg-cost_elem.

        gs_imp_cost-monat = p_period.

        CASE p_period.

 

 

          WHEN '01'.

 

 

            gs_imp_cost-cost = gs_ledg-hsl01 .

 

 

          WHEN '02'.

            gs_imp_cost-cost = gs_ledg-hsl02 .

 

 

          WHEN '03'.

            gs_imp_cost-cost =  gs_ledg-hsl03 .

 

 

          WHEN '04'.

           gs_imp_cost-cost = gs_ledg-hsl04 .

 

 

          WHEN '05'.

            gs_imp_cost-cost = gs_ledg-hsl05 .

 

 

          WHEN '06'.

            gs_imp_cost-cost = gs_ledg-hsl06 .

 

 

          WHEN '07'.

            gs_imp_cost-cost = gs_ledg-hsl07 .

 

 

          WHEN '08'.

            gs_imp_cost-cost = gs_ledg-hsl08.

 

 

          WHEN '09'.

            gs_imp_cost-cost = gs_ledg-hsl09.

 

 

          WHEN '10'.

            gs_imp_cost-cost = gs_ledg-hsl10 .

 

 

          WHEN '11'.

            gs_imp_cost-cost = gs_ledg-hsl11 .

 

 

          WHEN '12'.

            gs_imp_cost-cost = gs_ledg-hsl12 + gs_ledg-hsl13 + gs_ledg-hsl14 + gs_ledg-hsl15 + gs_ledg-hsl16 .

 

 

 

 

      ENDCASE.

 

 

      COLLECT gs_imp_cost INTO gt_imp_cost.

      CLEAR gs_imp_cost.

    ENDLOOP.

 

 

*    ADD 1 to p_period.

*ENDWHILE.

 

 

 

 

 

 

SELECT

  ZFI002~MATNR

  ZFI002~MAKTX

  ZFI001~LADGR

  ZFI001~ABPRC

 

 

  INTO TABLE IT_LDGRP

  FROM ZFI001

  INNER JOIN ZFI002 on zfi001~LADGR = zfi002~ladgr

  FOR ALL ENTRIES IN IT_FINAL

  WHERE zfi002~matnr = it_final-matnr.

 

 

  LOOP AT IT_FINAL INTO wa_final.

 

 

    READ TABLE GT_IMP_COST INTO GS_IMP_COST WITH KEY RBUKRs = WA_FINAL-BUKRS

        RYEAR = WA_FINAL-GJAHR

        monat = WA_FINAL-monat.

if lv_tot_qty NE 0.

    wa_final-imported = ( GS_IMP_COST-COST * wa_final-comp_qty ) / lv_tot_qty.

    endif.

    wa_final-gross = wa_final-revenue - wa_final-rm - wa_final-imported.

 

 

    READ TABLE IT_LDGRP INTO WA_LDGRP WITH KEY MATNR = WA_FINAL-MATNR.

*    wa_final-maktx = WA_LDGRP-MAKTX.

    wa_final-royalty = wa_final-gross * WA_LDGRP-abprc / 100.

    wa_final-field1 = WA_LDGRP-abprc.

    wa_final-field2 = WA_LDGRP-ladgr.

    MODIFY IT_FINAL FROM wa_final.

    CLEAR: WA_LDGRP ,GS_IMP_COST.

 

 

  ENDLOOP.

 

 

 

 

IF IT_FINAL IS NOT INITIAL.

  MODIFY ZFI005 FROM TABLE IT_FINAL.

  endif.

 

 

 

 

 

 

 

 

 

 

 

 

  PERFORM field_cat.

 

 

  PERFORM field_layout.

 

 

  PERFORM build_alv.

*&---------------------------------------------------------------------*

*&      Form  FIELD_CAT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM field_cat .

 

 

  gs_fieldcat-fieldname = 'BUKRS'.

  gs_fieldcat-seltext_m = 'Company Code'.

  gs_fieldcat-col_pos = 1.

*  gs_fieldcat-outputlen = 12.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'GJAHR'.

  gs_fieldcat-seltext_m = 'Fiscal year'.

  gs_fieldcat-col_pos = 2.

*  gs_fieldcat-outputlen = 6.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

 

 

  gs_fieldcat-fieldname = 'MONAT'.

  gs_fieldcat-seltext_m = 'Period'.

  gs_fieldcat-col_pos = 3.

*  gs_fieldcat-outputlen = 6.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'VBELN'.

  gs_fieldcat-seltext_m = 'Billing Doc No'.

  gs_fieldcat-col_pos = 4.

*  gs_fieldcat-outputlen = 18.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'FKDAT'.

  gs_fieldcat-seltext_m = 'Billing Date'.

  gs_fieldcat-col_pos = 5.

*  gs_fieldcat-outputlen = 18.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

 

 

*  gs_fieldcat-fieldname = 'WRBTR'.

*  gs_fieldcat-seltext_m = 'Value'.

*  gs_fieldcat-col_pos = 6.

*  gs_fieldcat-outputlen = 17.

*  APPEND gs_fieldcat TO gt_fieldcat.

*  CLEAR gs_fieldcat.

 

 

 

 

  gs_fieldcat-fieldname = 'MATNR'.

  gs_fieldcat-seltext_m = 'Material no'.

  gs_fieldcat-col_pos = 7.

*  gs_fieldcat-outputlen = 18.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

  gs_fieldcat-fieldname = 'MAKTX'.

  gs_fieldcat-seltext_m = 'Material'.

  gs_fieldcat-col_pos = 8.

*  gs_fieldcat-outputlen = 18.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

  gs_fieldcat-fieldname = 'WERKS'.

  gs_fieldcat-seltext_m = 'Plant'.

  gs_fieldcat-col_pos = 9.

*  gs_fieldcat-outputlen = 5.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'MENGE'.

  gs_fieldcat-seltext_m = 'Qty'.

  gs_fieldcat-col_pos = 10.

*  gs_fieldcat-outputlen = 5.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'KUNNR'.

  gs_fieldcat-seltext_m = 'Customer'.

  gs_fieldcat-col_pos = 11.

*  gs_fieldcat-outputlen = 10.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'MTART'.

  gs_fieldcat-seltext_m = 'Mat type'.

  gs_fieldcat-col_pos = 12.

*  gs_fieldcat-outputlen = 10.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'FKART'.

  gs_fieldcat-seltext_m = 'Bill typ'.

  gs_fieldcat-col_pos = 13.

*  gs_fieldcat-outputlen = 8.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'COMP_QTY'.

  gs_fieldcat-seltext_m = 'Computed quantity '.

  gs_fieldcat-col_pos = 14.

*  gs_fieldcat-outputlen = 5.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'REVENUE'.

  gs_fieldcat-seltext_m = 'REVENUE'.

  gs_fieldcat-col_pos = 15.

*  gs_fieldcat-outputlen = 17.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'IMPORTED'.

  gs_fieldcat-seltext_m = 'Import cost'.

  gs_fieldcat-col_pos = 16.

*  gs_fieldcat-outputlen = 17.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'RM'.

  gs_fieldcat-seltext_m = 'Raw Material Cost'.

  gs_fieldcat-col_pos = 17.

*  gs_fieldcat-outputlen = 17.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

 

 

  gs_fieldcat-fieldname = 'FIELD1'.

  gs_fieldcat-seltext_m = 'Load%'.

  gs_fieldcat-col_pos = 18.

*  gs_fieldcat-outputlen = 5.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'FIELD2'.

  gs_fieldcat-seltext_m = 'Load grp'.

  gs_fieldcat-col_pos = 19.

*  gs_fieldcat-outputlen = 8.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

 

 

  gs_fieldcat-fieldname = 'GROSS'.

  gs_fieldcat-seltext_m = 'GROSS'.

  gs_fieldcat-col_pos = 20.

*  gs_fieldcat-outputlen = 17.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

 

 

  gs_fieldcat-fieldname = 'ROYALTY'.

  gs_fieldcat-seltext_m = 'ROYALTY'.

  gs_fieldcat-col_pos = 21.

*  gs_fieldcat-outputlen = 17.

  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.

ENDFORM.                    " FIELD_CAT

*&---------------------------------------------------------------------*

*&      Form  FIELD_LAYOUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM field_layout .

 

 

  gt_layout-no_input          = 'X'.

  gt_layout-colwidth_optimize = 'X'.

 

 

ENDFORM.                    " FIELD_LAYOUT

*&---------------------------------------------------------------------*

*&      Form  BUILD_ALV

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM build_alv .

 

 

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

   EXPORTING

     i_callback_program                = sy-repid

     is_layout                         = gt_layout

     it_fieldcat                       = gt_fieldcat

    TABLES

      t_outtab                          = IT_FINAL

* EXCEPTIONS

*   PROGRAM_ERROR                     = 1

*   OTHERS                            = 2

            .

  IF sy-subrc <> 0.

* Implement suitable error handling here

  ENDIF.

 

 

 

 

ENDFORM.                    " BUILD_ALV

How to Easy... Load an HTML Page into Internal Table

$
0
0

here is a simple code to load an HTML page into a internal table:

 

" Local Vars

DATA: lo_client  TYPE REF TO if_http_client,

       lc_url     TYPE string,

       lc_content TYPE string,

       lt_html    TYPE TABLE OF string.

 

" Set html page to load

lc_url = 'http://www.sap.com'.

 

" Create the HTTP client

CALL METHOD cl_http_client=>create_by_url

   EXPORTING

     url    = lc_url

   IMPORTING

     client = lo_client

   EXCEPTIONS

     OTHERS = 1.

IF sy-subrc IS NOT INITIAL.

   " Error

   EXIT.

ENDIF.

 

" Set the Request type to GET

lo_client->request->set_header_field( name  = '~request_method'

                                       value = 'GET' ).

" Make the call

lo_client->send( ).

 

" Receive the Response Object

CALL METHOD lo_client->receive

   EXCEPTIONS

     http_communication_failure = 1

     http_invalid_state         = 2

     http_processing_failed     = 3

     OTHERS                     = 4.

IF sy-subrc IS NOT INITIAL.

   " Error

   EXIT.

ENDIF.

 

" Get the response content in Character format

lc_content = lo_client->response->get_cdata( ).

 

" Split content by lines in an internal table

SPLIT lc_content AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_html.

 

" From here you can parse you html code from table lt_html

 

It´s done.

Adding Z fields to Asset Master screen (AIST0002) . T-codes (AS01/AS02/AS03)

$
0
0

Hi,

 

This document will brief about the enhancement of t-code AS01/AS02/AS03. the screen enhancement for these t-code is different as here we will enhance t-code using the customizing request and not by using screen exits.

 

Exit used is AIST0002

 

step 1 goto CMOD for implementing the exit we need to have an activated project using this exit.

 

 

 

 

 

The table include should be created as the new required fields will be referring to this in execution time.

The table has to be enhanced to have the new required fields.

 

 

This structure created should have the enhancement category as shown below.

 

Now activate the project the screen should look like as below.

 

Screen Creation

 

Go to SE80 t-code and choose Function Group XAIS

 

 

 

Create new Screen and mark this screen as Subscreen. in my example I have created screen with number 9001.

 

 

 

The coding part is done now. We need to call this enhancement using the customized settings the steps are shown below.

 

GO to T-code AOLK and AOLA for this

 

Here i have considered enhancing General Tab of class 1000  in asset management. Select this 1000 class and click on GENERAL ASSIGNMENT OF LAYOUT.

 

 

 

Select SAP (STANDARD TAB LAYOUT)and click on the copy icon above and make a copy as name ZSAP.

 

Now use T-code AOLA

 

Choose ZSAP and click on tab page titles

 

 

 

Since here we have to add the additional fields in GENERAL tab we select this and click on the POSITION OF GROUPS ON THE TAB PAGES

 

Click on new entries and for column Group box we will use the search help provided. The screen no with "U" Appended will appear in the search help select that. In this case it is U9001.

 

 

 

This was all now we can test the code and screen.

 

 

Test this using t-code AS01

 

 

 

Thanks and Regards,

Shitanshu Sahai

Displaying Inventory Details - with Material Type, Days as a Selection Screen , With Reference To MB5B T-Code

$
0
0


*Purpose: Created Customized Report with Reference to MB5B T-code with Material Type and days as a Selection                 Criteria- for Displaying Slow Moving and  NoN Moving Stock  in ALV GRID .

*Logic:   Keeping Opening and Closing Stock not Equal to Zero, issue and Receipts Equal To Zero.

REPORT  z_inventory_Details  NOSTANDARDPAGE HEADING.

TABLES: mara,
mbew,
mard,
mkpf,
makt,
bapifvdexp_vzzbepp.

TYPE-POOLS:slis.

TYPES: BEGINOF ty_mara,
matnr
TYPE mara-matnr,
mtart
TYPE mara-mtart,
ersda
TYPE mara-ersda,
lbkum
TYPE mbew-lbkum,
salk3
TYPE mbew-salk3,
ENDOF ty_mara.

TYPES: BEGINOF ty_mbew,
matnr
TYPE mbew-matnr,
bwkey
TYPE mbew-bwkey,
lvorm
TYPE mbew-lvorm,
lbkum
TYPE mbew-lbkum,
salk3
TYPE mbew-salk3,
ENDOF ty_mbew.

TYPES: BEGINOF ty_bsim,
matnr
TYPE bsim-matnr,
bwkey
TYPE bsim-bwkey,
dmbtr
TYPE bsim-dmbtr,
menge
TYPE bsim-menge,
meins
TYPE bsim-meins,
blart
TYPE bsim-blart,
belnr
TYPE bsim-belnr,
gjahr
TYPE bsim-gjahr,
shkzg
TYPE bsim-shkzg,
ENDOF ty_bsim.

TYPES: BEGINOF ty_mseg,
matnr
TYPE mara-matnr,
mtart
TYPE mara-mtart,
mblnr
TYPE mseg-mblnr,
mjahr
TYPE mseg-mjahr,
bwart
TYPE mseg-bwart,
werks
TYPE mseg-werks,
lgort
TYPE mseg-lgort,
dmbtr
TYPE mseg-dmbtr,
menge
TYPE mseg-menge,
meins
TYPE mseg-meins,
budat
TYPE mkpf-budat,
ebeln
TYPE mseg-ebeln,
aufnr
TYPE mseg-aufnr,
ENDOF ty_mseg.

TYPES: BEGINOF ty_bkpf,
bukrs
TYPE bkpf-bukrs,
belnr
TYPE bkpf-belnr,
gjahr
TYPE bkpf-gjahr,
blart
TYPE bkpf-blart,
bldat
TYPE bkpf-bldat,
awkey
TYPE bkpf-awkey,
ENDOF ty_bkpf.

TYPES: BEGINOF ty_temp,
matnr
TYPE bsim-matnr,
bwkey
TYPE bsim-bwkey,
budat
TYPE bsim-budat,
ENDOF ty_temp.


TYPES: BEGINOF ty_tab,
matnr
TYPE mara-matnr,
mtart
TYPE mara-mtart,
ersda
TYPE mara-ersda,
mblnr
TYPE mseg-mblnr,
mjahr
TYPE mseg-mjahr,
bwart
TYPE mseg-bwart,
werks
TYPE mseg-werks,
lgort
TYPE mseg-lgort,
dmbtr
TYPE mseg-dmbtr,
menge
TYPE mseg-menge,
meins
TYPE mseg-meins,
budat
TYPE mkpf-budat,
lbkum
TYPE mbew-lbkum,
salk3
TYPE mbew-salk3,
ebeln
TYPE mseg-ebeln,
aufnr
TYPE mseg-aufnr,
maktx 
TYPE makt-maktx,
lv_date
TYPE d,
ENDOF ty_tab.

DATA: it_fcat   TYPE slis_t_fieldcat_alv,
wa_fcat  
TYPE slis_fieldcat_alv,
it_layout
TYPE slis_layout_alv.

DATA: variant TYPE disvariant,
lv_lines
TYPEi,
lv_per
TYPE f,
lv_remaining
TYPEi,
p
VALUE'1',
lv_date
TYPE dats,
lv_text
TYPEc LENGTH 80.


DATA: it_mseg TYPETABLEOF ty_mseg,
wa_mseg
TYPE ty_mseg,
it_bsim
TYPETABLEOF ty_bsim,
wa_bsim
TYPE ty_bsim,
it_mbew
TYPETABLEOF ty_mbew,
wa_mbew
TYPE ty_mbew,
it_bkpf
TYPETABLEOF ty_bkpf,
wa_bkpf
TYPE ty_bkpf,
it_mara
TYPESTANDARDTABLEOF ty_mara, 
wa_mara
TYPE ty_mara,                 
it_temp
TYPETABLEOF ty_temp,
wa_temp
TYPE ty_temp,
it_tab
TYPETABLEOF ty_tab,
wa_tab
TYPE ty_tab.


SELECTION-
SCREENBEGINOF TABBED BLOCK tabb1 FOR5LINES.
SELECTION-
SCREEN TAB (20) t1 USER-COMMAND ucomm1
DEFAULTSCREEN101.
SELECTION-
SCREEN TAB (20) t2 USER-COMMAND ucomm2
DEFAULTSCREEN102.
SELECTION-
SCREENENDOFBLOCK tabb1.


SELECTION-
SCREENBEGINOFSCREEN101AS SUBSCREEN.

SELECT-OPTIONS: s_matnr FOR mara-matnr,
s_mtart
FOR mara-mtart,
s_days
FOR bapifvdexp_vzzbepp-num4 NO-EXTENSION  NO INTERVALS
DEFAULT180.
SELECTION-
SCREENENDOFSCREEN101.


SELECTION-
SCREENBEGINOFSCREEN102AS SUBSCREEN.

SELECT-OPTIONS:
s_date 
FOR mkpf-budat.
SELECTION-
SCREENENDOFSCREEN102.

INITIALIZATION.

t1 =
'Selection-Screen'.
t2 =
'Sub-Screen'.

START-
OF-SELECTION.
PERFORMclear.
PERFORMdata-fetch.
PERFORM fcat.
PERFORM layout.
PERFORM display.

*&---------------------------------------------------------------------*
*&      Form  clear
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORMclear.

CLEAR: it_mara,  it_bsim, it_mseg, lv_date.
REFRESH: it_mara, it_bsim, it_mseg.

IF s_days IS NOT INITIAL AND s_date IS INITIAL.
lv_date = sy-datum - s_days-low.

MOVE lv_date TO  s_date-low.

ENDIF.

IF s_date ISNOTINITIAL.
CLEAR: s_days,lv_date.
ENDIF.

ENDFORM.                    "clear


*&---------------------------------------------------------------------*
*&      Form  DATA-FETCH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORMdata-fetch.


SELECT  mara~matnr
mara~mtart
mara~ersda
mbew~lbkum
mbew~salk3
INTOTABLE  it_mara
FROM  mara AS mara
JOIN mbew AS mbew
ON mara~matnr = mbew~matnr
WHERE mara~matnr IN s_matnr
AND mara~mtart IN s_mtart
AND mbew~bwkey = 'PALM'.


SORT it_mara BY lbkum ASCENDING.
DELETE  it_mara WHERE lbkum = ' '.

SORT it_mara BY matnr mtart   ASCENDING.
DELETEADJACENTDUPLICATESFROM it_mara COMPARINGALLFIELDS.



DESCRIBETABLE it_mara LINES lv_lines.

IF lv_lines < p.
MESSAGE'No data Found'TYPE'I'.
LEAVE LIST-PROCESSING.
EXIT.
ENDIF.


LOOPAT it_mara INTO wa_mara.


lv_per = sy-tabix / lv_lines *
100.
lv_remaining = lv_lines - sy-tabix.

WRITE lv_remaining TO lv_text LEFT-JUSTIFIED.
CONCATENATE'Processing remaining'(005) lv_text 'items'(007)
INTO lv_text SEPARATEDBY space.

CALLFUNCTION'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_per
text       = lv_text.


wa_tab-lbkum = wa_mara-lbkum.
wa_tab-salk3 = wa_mara-salk3.

CLEAR:it_bsim. REFRESH  it_bsim.

SELECT  matnr
bwkey
dmbtr
menge
meins
blart
belnr
gjahr
shkzg
FROM bsim
INTOTABLE it_bsim
WHERE matnr = wa_mara-matnr
AND bwkey = 'PALM'
AND budat >= s_date-low
%_HINTS ORACLE
'INDEX("BSIM" "BSIM~ZBS")'.

if sy-subrc = 0.
CLEAR: wa_mara.
ENDIF.

IF wa_mara ISNOTINITIAL.

SELECT  mara~matnr
mara~mtart
mseg~mblnr
mseg~mjahr
mseg~bwart
mseg~werks
mseg~lgort
mseg~dmbtr
mseg~menge
mseg~meins
mkpf~budat
mseg~ebeln
mseg~aufnr
INTOTABLE it_mseg
FROM  mara AS mara JOIN mseg AS mseg
ON  mara~matnr = mseg~matnr
JOIN  mkpf AS mkpf
ON  mseg~mandt = mkpf~mandt
AND  mseg~mblnr = mkpf~mblnr
AND mseg~mjahr = mkpf~mjahr
WHERE mara~matnr = wa_mara-matnr
AND mara~mtart = wa_mara-mtart
AND mseg~werks = 'PALM'
AND mkpf~budat GE s_date-low.

IF sy-subrc = 0.

LOOPAT it_mseg INTO wa_mseg.

IF ( wa_mseg-bwart = '101') OR  ( wa_mseg-bwart = '561'OR ( wa_mseg-bwart = '701') OR ( wa_mseg-bwart = '261')
OR ( wa_mseg-bwart = '201'OR ( wa_mseg-bwart = '702').
CLEAR wa_mseg.
ENDIF.

CHECK wa_mseg IS  NOT INITIAL.

wa_tab-matnr = wa_mseg-matnr.  

wa_tab-lv_date  = s_date-low.
wa_tab-lgort = wa_mseg-lgort.
wa_tab-mtart = wa_mseg-mtart.
wa_tab-ebeln = wa_mseg-ebeln.
wa_tab-aufnr = wa_mseg-aufnr.
APPEND wa_tab TO it_tab.
CLEAR wa_tab.
ENDLOOP.
ENDIF.

wa_tab-matnr = wa_mara-matnr.
wa_tab-mtart = wa_mara-mtart.
wa_tab-ersda = wa_mara-ersda.

CLEAR: makt.
SELECTSINGLE  maktx  FROM  makt INTO (wa_tab-maktx)
WHERE matnr = wa_mara-matnr.

IF  wa_tab-lgort IS INITIAL.

CLEAR: mard.
SELECTSINGLE LGORT FROM MARD INTO WA_TAB-LGORT
WHERE matnr = wa_tab-matnr
AND labst = wa_tab-lbkum
AND werks = 'PALM'
%_HINTS ORACLE
'INDEX("MARD" "MARD~ZMD")'.
endif.

wa_tab-lv_date  = s_date-low.

APPEND wa_tab TO it_tab.
CLEAR wa_tab.
ENDIF.

CLEAR: wa_mara.
ENDLOOP.

ENDFORM.                    "DATA-FETCH


*&---------------------------------------------------------------------*
*&      Form  fcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*



FORM fcat.



wa_fcat-fieldname =
'LV_DATE'.
wa_fcat-seltext_m =
'Start.Date'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.


wa_fcat-fieldname =
'LGORT'.
wa_fcat-seltext_m =
'Storage Location'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-fieldname =
'MATNR'.
wa_fcat-seltext_m =
'Material No'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-fieldname =
'MAKTX'.
wa_fcat-seltext_m =
'Material Descrip'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-fieldname =
'ERSDA'.
wa_fcat-seltext_m =
'Mat.created.Date'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-fieldname =
'MTART'.
wa_fcat-seltext_m =
'Material Type'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-fieldname =
'LBKUM'.
wa_fcat-seltext_m =
' Tot.Qty'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.


wa_fcat-fieldname =
'SALK3'.
wa_fcat-seltext_m =
'Inventory Value '.
wa_fcat-do_sum    =
'X'.

APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-fieldname =
'AUFNR'.
wa_fcat-seltext_m =
'Productionorder .No'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

wa_fcat-fieldname =
'EBELN'.
wa_fcat-seltext_m =
'Purchase order .No'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.

ENDFORM.                    "fcat
*&---------------------------------------------------------------------*
*&      Form  LAYOUT
*&---------------------------------------------------------------------*
FORM layout.

it_layout-zebra =
'X'.
it_layout-colwidth_optimize =
'X'.


ENDFORM.                    "LAYOUT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*

FORM display.


CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program                = sy-repid
is_layout                         = it_layout
it_fieldcat                       = it_fcat
i_save                            =
'A'
is_variant                        = variant
*     IT_EVENTS                         =
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
TABLES
t_outtab                          = it_tab
EXCEPTIONS
program_error                     =
1
OTHERS                            = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM.                    "display


How to Easy... Save Smartform in PDF File

$
0
0

This is a simple routine to save your smartform into a PDF file:

 

" Local Vars

DATA: lc_fm_name      TYPE rs38l_fnam,

      ls_control_par  TYPE ssfctrlop,

      ls_job_output   TYPE ssfcrescl,

      lc_file         TYPE string,

      lt_lines        TYPE TABLE OF tline,

      li_pdf_fsize    TYPE i,

      ls_pdf_string_x TYPE xstring,

      ls_pdf          TYPE char80,

      lt_pdf          TYPE TABLE OF char80.

 

" Get smartform function module name

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

  EXPORTING

    formname           = 'ZFORMNAME'  " <- Set your smartform name

  IMPORTING

    fm_name            = lc_fm_name

  EXCEPTIONS

    no_form            = 1

    no_function_module = 2

    OTHERS             = 3.

 

ls_control_par-no_dialog = 'X'.  " No dialog window

ls_control_par-getotf    = 'X'.  " Get otf data

ls_control_par-langu     = sy-langu.

 

" Call smartform FM

" NOTE: You have to add your custom SF parameters in this call

CALL FUNCTION lc_fm_name

  EXPORTING

    control_parameters = ls_control_par

  IMPORTING

    job_output_info    = ls_job_output

  EXCEPTIONS

    formatting_error   = 1

    internal_error     = 2

    send_error         = 3

    user_canceled      = 4

    OTHERS             = 5.

 

" Convert smartform OTF to PDF

CALL FUNCTION 'CONVERT_OTF'

  EXPORTING

    format                = 'PDF'

  IMPORTING

    bin_filesize          = li_pdf_fsize

    bin_file              = ls_pdf_string_x

  TABLES

    otf                   = ls_job_output-otfdata

    lines                 = lt_lines

  EXCEPTIONS

    err_max_linewidth     = 1

    err_format            = 2

    err_conv_not_possible = 3

    err_bad_otf           = 4

    OTHERS                = 5.

 

" Convert xstring to binary

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'

  EXPORTING

    buffer     = ls_pdf_string_x

  TABLES

    binary_tab = lt_pdf.

 

lc_file = 'dir/sfname.pdf'.

 

" Save file using dataset, can be done with gui_services too

OPEN DATASET lc_file FOR OUTPUT IN BINARY MODE.

IF sy-subrc IS INITIAL.

 

  LOOP AT lt_pdf INTO ls_pdf.

    TRANSFER ls_pdf TO lc_file

      NO END OF LINE.

  ENDLOOP.

 

  CLOSE DATASET lc_file.

ENDIF.

 

You can use this to insert a button to save as pdf directly in your report.

How to Easy... Maintain Sales Order / Quotation BOM

$
0
0

Here is a code snippet to update a BOM related to Sales Order or Quotation (transaction CS62).

You can load current BOM an change any field you need, or insert new itens to this BOM.

 

 

" Local Vars

DATA: lt_stb     TYPE TABLE OF stpox,

      ls_stb     TYPE stpox,

      lt_matcat  TYPE TABLE OF cscmat,

      ls_vbap    TYPE vbap,

      ls_stko    TYPE stko_api01,

      ls_stpo    TYPE stpo_api03,

      lt_stpo    TYPE TABLE OF stpo_api03,

      ln_item_no TYPE stpo_api03-item_no.

 

 

ls_vbap-vbeln = '0020000001'.  " Sales Order/Quotation

ls_vbap-posnr = '000010'.      " Item

 

 

" Fetch Salesorder data

SELECT SINGLE *

  FROM vbap

  INTO ls_vbap

  WHERE vbeln = ls_vbap-vbeln AND

        posnr = ls_vbap-posnr.

 

 

" Load BOM

CALL FUNCTION 'CS_BOM_EXPL_KND_V1'

  EXPORTING

    capid                 = 'PP01'

    cuobj                 = ls_vbap-cuobj

    datuv                 = sy-datum

    ehndl                 = '1'

    mktls                 = ' '

    mehrs                 = 'X'

    mmory                 = 'X'

    mtnrv                 = ls_vbap-matnr

    stlan                 = '1'

    werks                 = ls_vbap-werks

    vbeln                 = ls_vbap-vbeln

    vbpos                 = ls_vbap-posnr

    vrsvo                 = ' '

  TABLES

    stb                   = lt_stb

    matcat                = lt_matcat

  EXCEPTIONS

    alt_not_found         = 1

    call_invalid          = 2

    material_not_found    = 3

    missing_authorization = 4

    no_bom_found          = 5

    no_plant_data         = 6

    no_suitable_bom_found = 7

    conversion_error      = 8

    OTHERS                = 9.

 

 

 

 

CLEAR ln_item_no.

" Loop through BOM Itens

LOOP AT lt_stb INTO ls_stb

  WHERE stufe = '1' AND

        bmtyp = 'K'.

  ADD 1 TO ln_item_no.

 

 

  " Fill Bom Item to update

  CLEAR ls_stpo.

  ls_stpo-item_categ      = ls_stb-postp.

  ls_stpo-item_no         = ln_item_no.

  ls_stpo-component       = ls_stb-idnrk.

  " ... Fill any fields you need

  ls_stpo-bom_no          = ls_stb-stlnr.

  ls_stpo-item_node       = ls_stb-stlkn.

  ls_stpo-item_count      = ls_stb-stpoz.

  ls_stpo-bom_alt         = ls_stb-stlal.

  APPEND ls_stpo TO lt_stpo.

ENDLOOP.

 

 

" Save Order

CALL FUNCTION 'CSAP_ORD_BOM_MAINTAIN'

  EXPORTING

    order       = ls_vbap-vbeln

    position    = ls_vbap-posnr

    material    = ls_vbap-matnr

    plant       = ls_vbap-werks

    bom_usage   = '1'

    valid_from  = '01.01.2013'   " Caution on date format

    i_stko      = ls_stko

    fl_new_item = 'X'            " Check this if you insert new itens in BOM

  TABLES

    t_stpo      = lt_stpo

  EXCEPTIONS

    error       = 1

    OTHERS      = 2.

   

   

It's Done.


Get an Employee’s Planned Work Shift START TIME and END TIME

$
0
0

PA30 is the transaction used for HR master data maintenance.

 

Below are the steps to follow at transaction level to get the Work Schedule details of an employee:

 

     1. Enter any personnel number in the Personnel no. field.

 

          PA30 1.jpg

 

    

     2.Enter the infotype ID for ‘Planned Working Time’ in the Infotype field as we are now looking for the Planned work shift timings.

 

          PA30 2.jpg

 


 

     3.With these inputs in the initial screen, select the ‘Display’ button on the top left.

 

          PA30 3.jpg

 


     4.This screen would show the Work Schedule Rule, work timing and other details.

 

          PA30 4.jpg



     5.Click the ‘Work Schedule’ button on the top left (shown in above screen) and it will display the scheduled work plan for the current month.

 

          Pa30 5.jpg

 

 

ABAP programming:


The above steps determine the process to get Planned work time from transaction PA30.

Now, let us see how this can be achieved using ABAP programming.


A standard Function module ‘CATS_GET_TARGET_HOURS’ can be used for this.

This function module would provide us with the information below:

 

  1. Date
  2. Hours
  3. Shift Start Time
  4. Shift End Time


The essential inputs to this FM are:

  1. Personnel Number
  2. Start Date
  3. End Date

 

*Call the function module to get current day’s target hours


CALL FUNCTION 'CATS_GET_TARGET_HOURS'
EXPORTING
PERNR                    = P_V_PERNR
BEGDA                    = SY-DATUM
ENDDA                    = SY-DATUM                                  
TABLES
TARGET_HOURS             = IT_HRS_PER_DAY
EXCEPTIONS
PERNR_NOT_FOUND          =
1
TOO_MANY_DAYS            =
2
ERROR_IN_SAP_ENHANCEMENT =
3
OTHERS                   = 4.
IF SY-SUBRC EQ 0.
  
READ TABLE IT_HRS_PER_DAY INTO WA_HRS_PER_DAY INDEX 1.
ENDIF.

 

 

Output :

 

     1. Date                 WA_HRS_PER_DAY-DATE

     2. Hours                    WA_HRS_PER_DAY-STDAZ

     3. Shift Start Time         WA_HRS_PER_DAY-SOBEG

     4. Shift End Time             WA_HRS_PER_DAY-SOEND

 

If the current day is a working day according to the Planned Work Schedule ( above figure in step 5), then the output from Function module would give us all the necessary information. If the current day (sy-datum) is a day OFF for the Employee, then the FM would not return us the information.


This code will retrieve the Start and End time of a shift in all cases.

 

* Get plant, Personnel subarea and End date

SELECT WERKS BTRTL ENDDA INTO TABLE IT_PA0001

FROM PA0001

WHERE PERNR = P_V_PERNR.

IF SY-SUBRC EQ 0.

 

* Get the latest work schedule

    SORT IT_PA0001 BY ENDDA DESCENDING.

    READ TABLE IT_PA0001 INTO WA_PA0001 INDEX 1.

    IF SY-SUBRC EQ 0.

 

* Get personnel subarea grouping for Work Schedules

        SELECT SINGLE MOSID INTO V_MOSID

        FROM T001P

        WHERE WERKS = WA_PA001-WERKS

        AND BTRTL   = WA_PA001-BTRTL.

        IF SY-SUBRC EQ 0.

 

* Get work schedule rule

            SELECT SINGLE SCHKZ INTO V_SCHKZ

            FROM PA0007

            WHERE PERNR = P_V_PERNR

            AND ENDDA = WA_PA001-ENDDA.

            IF SY-SUBRC EQ 0.

 

* Get the start and end time

               PERFORM GET_WORKSCHEDULE_RULE

  USING V_SCHKZ V_MOSID

   CHANGING V_START_TIME V_END_TIME.

 

            ENDIF.


         ENDIF.


       ENDIF.

ENDIF.

 

 

The logic in the highlighted subroutine PERFORM GET_WORKSCHEDULE_RULE:

 

* Get the Work Schedule Rule

SELECT * FROM T508A INTO TABLE LT_T508A
WHERE SCHKZ EQ V_SCHKZ
AND   MOSID EQ V_MOSID
ORDER BY ENDDA DESCENDING.
IF SY-SUBRC EQ 0.
  
READ TABLE LT_T508A INTO WA_T508A INDEX 1.


* Get the Daily Work Schedule Rule

      IF SY-SUBRC EQ 0.
     
SELECT SINGLE MOTPR
      ZMODN
      TPRG1
      TPRG2
      TPRG3
      TPRG4
      TPRG5
      TPRG6
      TPRG7
     
FROM T551A INTO (LV_MOTPR1, LV_ZMODN1,
      LV_TPRG1,
      LV_TPRG2, LV_TPRG3, LV_TPRG4,
      LV_TPRG5, LV_TPRG6, LV_TPRG7)
     
WHERE MOTPR EQ V_MOSID
     
AND   ZMODN EQ
WA_T508A-ZMODN.

      IF SY-SUBRC EQ 0.
 

* Check if the day is a week OFF for the given Employee

                 IF LV_TPRG1 <> 'OFF'.
           WA_TPROG = LV_TPRG1.
        
ENDIF.
        
IF LV_TPRG2 <> 'OFF'.
           WA_TPROG = LV_TPRG2.
        
ENDIF.
        
IF LV_TPRG3 <> 'OFF'.
           WA_TPROG = LV_TPRG3.
        
ENDIF.
        
IF LV_TPRG4 <> 'OFF'.
           WA_TPROG = LV_TPRG4.
        
ENDIF.
        
IF LV_TPRG5 <> 'OFF'.
           WA_TPROG = LV_TPRG5.
        ENDIF.
        
IF LV_TPRG6 <> 'OFF'.
           WA_TPROG = LV_TPRG6.
        
ENDIF.
        
IF LV_TPRG7 <> 'OFF'.
           WA_TPROG = LV_TPRG7.
        
ENDIF.

 

* Get the Planned Work Shift – Start time and End time
        
SELECT SINGLE SOBEG SOEND
        
FROM T550A INTO (LV_SOBEG, LV_SOEND)
        
WHERE MOTPR EQ  LV_MOTPR1
        
AND   TPROG EQ  WA_TPROG
        
AND   ENDDA EQ  WA_T508A-ENDDA.


        
IF SY-SUBRC EQ 0.
            P_V_START = LV_SOBEG.
            P_V_END   = LV_SOEND.
        
ELSE.
            P_V_START =
'000000'.
            P_V_END   =
'000000'.
        
ENDIF.

    
ELSE.
         P_V_START =
'000000'.
         P_V_END   =
'000000'.                                  


    ENDIF.


   ENDIF.

ENDIF.

 

Here we go! The variable P_V_START represents the Employee’s Planned Shift Start Time and P_V_END represents the Employee’s Planned Shift End Time.



How to Easy... Create a Search Help by code and fill more than one field in screen

$
0
0

Sometimes we need to create a custom search help and fill more than one field in screen with a single selection.

This can be easily achieved by using FM to create this Search Help.

Here is an example to use in a screen with two fields.

 

 

Considering our screen has two fields:

VBAP-VBELN

VBAP-POSNR

 

 

We are going to set a Search help for VBAP-POSNR, but popup will show VBELN and POSNR, and will fill this two fields in our screen.

 

 

First we need to set PROCESS ON VALUE-REQUEST for VBAP-POSNR.

In screen Flow Logic, insert this code after PAI.

 

 

PROCESS ON VALUE-REQUEST.

  FIELD vbap-posnr MODULE zm_sh_posnr.

 

Now we have to code zm_sh_posnr module.

Here it is:

 

 

MODULE zm_sh_posnr INPUT.

  " Types

  " Table type for SH popup

  TYPES: BEGIN OF ys_sh,

           vbeln TYPE vbap-vbeln,

           posnr TYPE vbap-posnr,

         END OF ys_sh.

  " Local Vars

  DATA: lt_sh  TYPE TABLE OF ys_sh,

        ls_sh  TYPE ys_sh,

        lt_map TYPE TABLE OF dselc,

        ls_map TYPE dselc.

 

 

  " Load data

  SELECT vbeln posnr

    FROM vbap

    INTO TABLE lt_sh

    UP TO 50 ROWS.

 

 

  " Set return fields

  " Order

  CLEAR ls_map.

  ls_map-fldname = 'F0001'.        " Set that field 1 of SH table fills VBAP-VBELN

  ls_map-dyfldname = 'VBAP-VBELN'.

  APPEND ls_map TO lt_map.

  " Item

  CLEAR ls_map.

  ls_map-fldname = 'F0002'.        " Set that field 2 of SH table fills VBAP-VBELN

  ls_map-dyfldname = 'VBAP-POSNR'.

  APPEND ls_map TO lt_map.

 

 

  " Call Search Help Popup Function

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

    EXPORTING

      retfield        = 'POSNR'

      dynpprog        = sy-repid

      dynpnr          = sy-dynnr

      dynprofield     = 'VBAP-POSNR'

      value_org       = 'S'

    TABLES

      value_tab       = lt_sh

      dynpfld_mapping = lt_map

    EXCEPTIONS

      parameter_error = 1

      no_values_found = 2

      OTHERS          = 3.

 

ENDMODULE.

 

 

It's Done!

How to Easy... Load an HTML Page into Internal Table

$
0
0

here is a simple code to load an HTML page into a internal table:

 

" Local Vars

DATA: lo_client  TYPE REF TO if_http_client,

       lc_url     TYPE string,

       lc_content TYPE string,

       lt_html    TYPE TABLE OF string.

 

" Set html page to load

lc_url = 'http://www.sap.com'.

 

" Create the HTTP client

CALL METHOD cl_http_client=>create_by_url

   EXPORTING

     url    = lc_url

   IMPORTING

     client = lo_client

   EXCEPTIONS

     OTHERS = 1.

IF sy-subrc IS NOT INITIAL.

   " Error

   EXIT.

ENDIF.

 

" Set the Request type to GET

lo_client->request->set_header_field( name  = '~request_method'

                                       value = 'GET' ).

" Make the call

lo_client->send( ).

 

" Receive the Response Object

CALL METHOD lo_client->receive

   EXCEPTIONS

     http_communication_failure = 1

     http_invalid_state         = 2

     http_processing_failed     = 3

     OTHERS                     = 4.

IF sy-subrc IS NOT INITIAL.

   " Error

   EXIT.

ENDIF.

 

" Get the response content in Character format

lc_content = lo_client->response->get_cdata( ).

 

" Split content by lines in an internal table

SPLIT lc_content AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_html.

 

" From here you can parse you html code from table lt_html

 

It´s done.

Simple program to download excel in MHTML format from internal table

$
0
0

Simple program to download excel in MHTML format from internal table ( ex: can be used in case of downloading icons,subtotals, coloring etc ).

This program is just a sample created for my purpose,please do further research as required. The below code can be used just in case of custom requirements if any. The method factory_result_data_table has many parameters where in we can format the data to be displayed.

 

REPORT  ymhtml_download.
*----------------------------------------------------------------------*
*       CLASS lcl_local DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_local DEFINITION INHERITING FROM cl_gui_alv_grid.  PUBLIC SECTION.    METHODS: provide_gui_type RETURNING value(lv_type) TYPE i,             constructor IMPORTING i_parent TYPE REF TO cl_gui_container.
ENDCLASS.                    "lcl_local DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_local IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_local IMPLEMENTATION.  METHOD provide_gui_type.    lv_type = get_gui_type( ).  ENDMETHOD.                    "get_gui_type  METHOD constructor.    super->constructor( i_parent = i_parent ).  ENDMETHOD.                    "constructor
ENDCLASS.                    "lcl_local IMPLEMENTATION

DATA:it_output TYPE TABLE OF ymhtml_output,
     ls_layout TYPE lvc_s_layo,     lt_fcat TYPE lvc_t_fcat,     lt_sort TYPE lvc_t_sort,     lt_filter TYPE lvc_t_filt,     lv_version TYPE string,     lv_display_mode TYPE i,     lv_gui_type TYPE i,     lv_xml TYPE xstring,     lv_value TYPE salv_gzt_admin_value,     lr_container TYPE REF TO cl_gui_container,     ls_xml_choice TYPE if_salv_bs_xml=>s_type_xml_choice,     lt_xml_choice TYPE if_salv_bs_xml=>t_type_xml_choice.

DATA:lr_result_data TYPE REF TO cl_salv_ex_result_data_table,
     lr_controller TYPE REF TO cl_salv_export_c8r,     lr_data TYPE REF TO data,     lr_obj TYPE REF TO lcl_local.

FIELD-SYMBOLS:<fs_wa> TYPE ymhtml_output,              <fs_fcat> TYPE lvc_s_fcat.

START-OF-SELECTION.

  SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE it_output UP TO 10 ROWS.  IF it_output[] IS INITIAL.    EXIT.  ENDIF.  LOOP AT it_output ASSIGNING <fs_wa>.    <fs_wa>-icon1 = '@01@'.    <fs_wa>-icon2 = '@06@'.    <fs_wa>-value = sy-tabix + 1.  ENDLOOP.  GET REFERENCE OF it_output[] INTO lr_data.  ls_layout-cwidth_opt = abap_true.  ls_layout-zebra = 'X'.  CREATE OBJECT lr_obj    EXPORTING      i_parent = lr_container.  lv_version = cl_salv_bs_a_xml_base=>get_version( ).  IF lv_version IS INITIAL.    lv_version = if_salv_bs_xml=>version.  ENDIF.  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'    EXPORTING      i_structure_name   = 'YMHTML_OUTPUT'      i_bypassing_buffer = 'X'    CHANGING      ct_fieldcat        = lt_fcat.  IF lt_fcat[] IS NOT INITIAL.    READ TABLE lt_fcat ASSIGNING <fs_fcat> WITH KEY fieldname = 'ICON1'.    IF sy-subrc = 0.      <fs_fcat>-icon = 'X'.    ENDIF.    READ TABLE lt_fcat ASSIGNING <fs_fcat> WITH KEY fieldname = 'ICON2'.    IF sy-subrc = 0.      <fs_fcat>-icon = 'X'.    ENDIF.    READ TABLE lt_fcat ASSIGNING <fs_fcat> WITH KEY fieldname = 'VALUE'.    IF sy-subrc = 0.      <fs_fcat>-do_sum = 'X'.    ENDIF.  ENDIF.

 lv_value = abap_true.
  cl_salv_gzt_admin=>set_value( EXPORTING           object = cl_salv_gzt_admin=>c_param-prevent_export_format_perso        value  = lv_value ).

 lt_xml_choice = 
          cl_salv_export_xml_dialog=>execute( gui_type = lr_obj->provide_gui_type( )                          display_mode = cl_salv_export_xml_dialog=>c_display_mode-menu_item ).

*-Set popup state to previous
  lv_value = abap_false.  cl_salv_gzt_admin=>set_value( EXPORTING                     object = cl_salv_gzt_admin=>c_param-prevent_export_format_perso                value  = lv_value ).
*-  READ TABLE lt_xml_choice INTO ls_xml_choice INDEX 1.  IF sy-subrc NE 0.    EXIT.  ENDIF.  lr_result_data = cl_salv_ex_util=>factory_result_data_table( r_data          = lr_data                                                               t_fieldcatalog  = lt_fcat                                                               s_layout        = ls_layout ).  cl_salv_bs_tt_util=>if_salv_bs_tt_util~transform( EXPORTING                                                              xml_type      = ls_xml_choice-xml_type                                                xml_version   = lv_version                                                r_result_data = lr_result_data                                                xml_flavour   = if_salv_bs_c_tt=>c_tt_xml_flavour_export                                                gui_type      = ls_xml_choice-gui_type                                                    IMPORTING                                                              xml           = lv_xml ).  cl_salv_export_xml_dialog=>download( s_xml_choice = ls_xml_choice xml = lv_xml ).

Set or Reset the status of a Project Definition/ WBS element

$
0
0

The business might have large number of projects which need their status changed. In general, the statuses are updated one by one through standard SAP transactions, which is time consuming. Therefore, there may arise a need for a custom program to update status on a range of projects or multiple projects.


1. To set/reset a status for a Project definition, 'BAPI_BUS2001_SET_STATUS' is used.

 

2. To set/reset a status for a WBS element, 'BAPI_BUS2054_SET_STATUS' is used.

 

For the above BAPI to use in order to set or reset the status for Project Definition, we need to follow the below steps:


  • (1) Call 'BAPI_PS_INITIALIZATION'
  • (2) Call 'BAPI_BUS2001_SET_STATUS'
  • (3) Call 'BAPI_PS_PRECOMMIT'
  • (4) Call 'BAPI_TRANSACTION_COMMIT’


For the above BAPI to use in order to set or reset the status for WBS element, we need to follow the below steps:


  • (1) Call 'BAPI_PS_INITIALIZATION'
  • (2) Call 'BAPI_BUS2054_SET_STATUS'
  • (3) Call 'BAPI_PS_PRECOMMIT'
  • (4) Call 'BAPI_TRANSACTION_COMMIT’

 

 

Overview of 'BAPI_PS_INITIALIZATION’:

 

This BAPI is used to initialize the current processing unit. The functionality of this is to initialize the document tables, buffer and so on in the application.

The first step in a processing unit is initialization, which is done by calling the BAPI_PS_INITIALIZATION. Afterwards, the individual BAPIs listed below can be used several times, if required.


The processing unit ends when the final pre commit (BAPI BAPI_PS_PRECOMMIT) is executed with a subsequent COMMIT WORK or "BAPI_TRANSACTION_COMMIT".

 

 

Overview of 'BAPI_ BUS2001_SET_STATUS':

 

This BAPI is used to set/reset status for Project Definition.

 

With this, one system status and one user status can be reset each time, and one system status and one user status can be set each time for a project definition.

 

This can be called any number of times before BAPI_PS_PRECOMMIT and COMMIT WORK.Only one ProjectDefinition can be processed from a project.


 

Overview of 'BAPI_ BUS2054_SET_STATUS':

 

This BAPI is used to set/reset status for a WBS element. Status of Multiple WBS elements can be either set or reset using this call.

 

A status change only affects the current project. The BAPI can be called repeatedly until the current processing unit is closed using BAPI_PS_PRECOMMIT and COMMIT WORK.

 

 

Overview of 'BAPI_ PS_PRECOMMIT':

 

This is the last action before the commit work.The final checks are carried out here for all the objects created,changed and deleted in the current processing unit.

 

 

Overview of 'BAPI_TRANSACTION_COMMIT:

 

This method executes a COMMIT WORK command.

 

 

Pseudo code :

 

 

1. Project Definition

 

CALLFUNCTION'BAPI_PS_INITIALIZATION'.

IF sy-subrc EQ 0.


*  Input - Project definition
  PROJ_DEF = WA_INPUT_DATA-PROJECT.
  SET_SYS  = WA_INPUT_DATA-STATUS.

 

*  Call'BAPI_BUS2001_SET_STATUS' to set status
 
CALL FUNCTION 'BAPI_BUS2001_SET_STATUS'
   
EXPORTING
      PROJECT_DEFINITION = PROJ_DEF
      SET_SYSTEM_STATUS  = SET_SYS
   
IMPORTING
   
RETURN               = WA_RETURN
   
TABLES
      E_RESULT           = LT_RESULT.

  IF sy-subrc EQ 0.

    CALLFUNCTION'BAPI_PS_PRECOMMIT'.  

    IF sy-subrc EQ 0.

      CALLFUNCTION'BAPI_TRANSACTION_COMMIT'.

    ENDIF.

  ELSEIF WA_RETURN-TYPE EQ 'E'.

    CALL FUNCTION 'BAPI_PS_PRECOMMIT'
     
TABLES
        ET_RETURN = LT_PC_RET.
   
IF SY-SUBRC EQ 0.
      
READ TABLE LT_PC_RET INTO WA_PC_RET WITH KEY TYPE = 'E'.
      
IF SY-SUBRC EQ 0.
        
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ENDIF.
    ENDIF.

  ENDIF.

ENDIF.

 

 

2. WBS element

 

 

CALLFUNCTION'BAPI_PS_INITIALIZATION'.

IF sy-subrc EQ 0.


*  Input - WBS element

  WA_WBS_STATUS-WBS_ELEMENT = WA_INPUT_DATA-PROJECT.
  WA_WBS_STATUS-SET_SYSTEM_STATUS = WA_INPUT_DATA-STATUS.
 
APPEND WA_WBS_STATUS TO LT_WBS_STATUS.
 
CLEAR WA_WBS_STATUS.

 

*  Call'BAPI_BUS2054_SET_STATUS' to set status

  CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
   
IMPORTING
   
RETURN                 = WA_RETURN
   
TABLES
      I_WBS_SYSTEM_STATUS = LT_WBS_STATUS
      E_RESULT            = LT_RESULT.

  IF sy-subrc EQ 0.

    CALLFUNCTION'BAPI_PS_PRECOMMIT'.  

    IF sy-subrc EQ 0.

      CALLFUNCTION'BAPI_TRANSACTION_COMMIT'.

    ENDIF.

  ELSEIF WA_RETURN-TYPE EQ 'E'.

    CALL FUNCTION 'BAPI_PS_PRECOMMIT'
     
TABLES
        ET_RETURN = LT_PC_RET.
   
IF SY-SUBRC EQ 0.
      
READ TABLE LT_PC_RET INTO WA_PC_RET WITH KEY TYPE = 'E'.
      
IF SY-SUBRC EQ 0.
        
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ENDIF.
    ENDIF.

  ENDIF.

ENDIF.

 

 

With this, we understand the procedure in a programming perspective. The same can be achieved using SAP standard transaction CJ02 or CJ20N.

 


SAPGUI versions and patches inventory.

$
0
0

       I have some questions, when begun deployment sapgui’s for clients computers our company.  How to get what version and patch on the host? As we know, SM04 get version and IP, but no Patch version. How to get it? By searching service.sap.com, found: “Note 748424 - Evaluation of SAP GUI versions and patches”. I Implement this note, but report in the note done as a “Testreport to show the interfaces” with very low functionality. I have extended this ABAP report from Note 748424 and hope, you can find it useful.

 

      1. Presentation

 

Se38->ZSAPGUI_VERSION_REPORT

 

1.1 Click Execute

Report.jpg

1.2 How much sapgui's?

level0.jpg

1.3 Double click on interesting line.

level1.jpg

You can view hosts, IP, and Gui version overview.

 

2. Here are the STEPS to implement.

 

2.1.  Implement  “SAPGUI_VERSION”  in EXIT_SAPLSUSF_001 from Note 748424.

2.2.  Implement “ZSAPGUI_VERSION_REPORT”, from attached source file.

2.3.  Activate User-Exit in the transaction CMOD:

cmod.jpg

Source ABAP program below as a attached file ZSAPGUI_VERSION_REPORT.txt

The Text_Symbols.txt file is a headers Lines at Top of Page.

Field Symbols (how to use practically??)

$
0
0

When I began learning the concept of field symbols , it looked quite scary with all the brackets and new syntax. But now after using it almost on a regular basis I actually am kind of tempted to use it maximum to where I can.

 

Field symbols are better performance wise but I am not going down that lane. I am here explaining how to be using it practically and effectively. In simple words , a field symbol refers or points (pointers known as in C language) to something. That something can be a table , a field or even nothing. When I say nothing I mean that the structure of a field symbol can be determined dynamically.

 

For our purpose let us consider MARA table as the referring table and MATNR field as the referring field.

 

Definition :

field-symbols: <fs_tab> type standard table,

                             <fs_wa> type mara.


Here we have defined a table <fs_tab> containing no structure and <fs_wa> with structure MARA.

 

Assign :

 

Note for field symbols just defining does not mean that we can start using it after definition. We have to assign a structure to that field symbol. i.e we have to tell the program that not <fs_tab>will be referring to table MARA.

 

Now we have an internal table itab_mara defined.

 

Data : itab_mara like mara occurs 0 with header line.

 

All we have to do is before using <fs_tab> we have to write

Data : itab_mara like mara occurs 0 with header line.

 

All we have to do is before using <fs_tab> we have to write

Assign : itab_mara[] to <fs_tab>.

 

You can now use <fs_tab> and whatever changes you make to <fs_tab> reflects to itab_mara.

 

Loop at <fs_tab> assigning <fs_wa>.

                <fs_wa>-matnr = ‘NEW CHANGE MATERIAL’.

Endloop.

 

Now this automatically refer to <fs_tab> which will automatically modify itab_mara[].

 

field-symbols: <fs_tab> type standard table,
               <fs_wa> type mara.

data : itab_mara like mara occurs 0 with header line.

select * from mara up to 10 rows into table itab_mara.

assign : itab_mara[] to <fs_tab>.

loop at <fs_tab> assigning <fs_wa>.
  <fs_wa>-matnr = 'NEW CHANGE MATERIAL'.
endloop.

New Scenario :

 

1.   Now in the above case you have internal table itab_mara ready.  Suppose you don’t have internal table itab_mara then what?

You will need to assign <fs_tab> and <fs_wa> dynamically and also apply a select query dynamically.

Consider the same case for table MARA and field MATNR.

Defining the field symbol is same and also the looping part is same. The only change is where and how you assign the field symbols.

 

Consider the following scenario. You have a program with parameter field TABLE NAME. as soon as the user enters a table name he will get 10 rows selected from that table and modify the a field.

 

parameters : p_tab type dd03l-tabname.



field-symbols: <fs_tab> type standard table,
               <fs_wa> type any,
               <fs_matnr> type matnr.

data: fs_data type ref to data,
      dyn_line type ref to data.
data : itab_fcat  type  lvc_t_fcat.
data : fcat like line of itab_fcat.

start-of-selection.
******* Assign

   call function 'LVC_FIELDCATALOG_MERGE'
    exporting
      i_structure_name = p_tab
    changing
      ct_fieldcat      = itab_fcat.

  loop at itab_fcat into fcat.
    clear: fcat-domname, fcat-ref_table.
    modify itab_fcat index sy-tabix from fcat.
  endloop.

  call method cl_alv_table_create=>create_dynamic_table
    exporting
      it_fieldcatalog = itab_fcat
    importing
      ep_table        = fs_data.

  assign fs_data->* to <fs_tab>.
  create data dyn_line like line of <fs_tab>.
  assign dyn_line->* to <fs_wa>.
******* Assign
  select * from (p_tab) up to 10 rows into  corresponding fields of table <fs_tab>.

  loop at <fs_tab> assigning <fs_wa>.
    assign component 'MATNR' of structure <fs_wa> to <fs_matnr>.
    <fs_matnr> = 'NEW CHANGE'.
  endloop.

Here we use assign component as we do not know which fields are there in <fs_wa> before runtime.


How to Easy... Load an HTML Page into Internal Table

$
0
0

here is a simple code to load an HTML page into a internal table:

 

" Local Vars

DATA: lo_client  TYPE REF TO if_http_client,

       lc_url     TYPE string,

       lc_content TYPE string,

       lt_html    TYPE TABLE OF string.

 

" Set html page to load

lc_url = 'http://www.sap.com'.

 

" Create the HTTP client

CALL METHOD cl_http_client=>create_by_url

   EXPORTING

     url    = lc_url

   IMPORTING

     client = lo_client

   EXCEPTIONS

     OTHERS = 1.

IF sy-subrc IS NOT INITIAL.

   " Error

   EXIT.

ENDIF.

 

" Set the Request type to GET

lo_client->request->set_header_field( name  = '~request_method'

                                       value = 'GET' ).

" Make the call

lo_client->send( ).

 

" Receive the Response Object

CALL METHOD lo_client->receive

   EXCEPTIONS

     http_communication_failure = 1

     http_invalid_state         = 2

     http_processing_failed     = 3

     OTHERS                     = 4.

IF sy-subrc IS NOT INITIAL.

   " Error

   EXIT.

ENDIF.

 

" Get the response content in Character format

lc_content = lo_client->response->get_cdata( ).

 

" Split content by lines in an internal table

SPLIT lc_content AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_html.

 

" From here you can parse you html code from table lt_html

 

It´s done.

Adding Z fields to Asset Master screen (AIST0002) . T-codes (AS01/AS02/AS03)

$
0
0

Hi,

 

This document will brief about the enhancement of t-code AS01/AS02/AS03. the screen enhancement for these t-code is different as here we will enhance t-code using the customizing request and not by using screen exits.

 

Exit used is AIST0002

 

step 1 goto CMOD for implementing the exit we need to have an activated project using this exit.

 

 

 

 

 

The table include should be created as the new required fields will be referring to this in execution time.

The table has to be enhanced to have the new required fields.

 

 

This structure created should have the enhancement category as shown below.

 

Now activate the project the screen should look like as below.

 

Screen Creation

 

Go to SE80 t-code and choose Function Group XAIS

 

 

 

Create new Screen and mark this screen as Subscreen. in my example I have created screen with number 9001.

 

 

 

The coding part is done now. We need to call this enhancement using the customized settings the steps are shown below.

 

GO to T-code AOLK and AOLA for this

 

Here i have considered enhancing General Tab of class 1000  in asset management. Select this 1000 class and click on GENERAL ASSIGNMENT OF LAYOUT.

 

 

 

Select SAP (STANDARD TAB LAYOUT)and click on the copy icon above and make a copy as name ZSAP.

 

Now use T-code AOLA

 

Choose ZSAP and click on tab page titles

 

 

 

Since here we have to add the additional fields in GENERAL tab we select this and click on the POSITION OF GROUPS ON THE TAB PAGES

 

Click on new entries and for column Group box we will use the search help provided. The screen no with "U" Appended will appear in the search help select that. In this case it is U9001.

 

 

 

This was all now we can test the code and screen.

 

 

Test this using t-code AS01

 

 

 

Thanks and Regards,

Shitanshu Sahai

Material Number Conversion problem in Standard function module /SAPHT/DRM_MAT_BOM_READ

$
0
0

Hi,

I am using the standard function module '/SAPHT/DRM_MAT_BOM_READ' for BOM explosion in my program. It will explode child parts belonging to the part number. It is not exploding for the part number which contains only number eg: '0181015'  but it is working fine for the part number like 'P3110220' .

While debugging i found some length error during material number conversion. Is there any solution to get proper output.

Printing an image on a Zebra Label

$
0
0

Zebra Printer Control Language (ZPL) has commands to build some basic shapes like Line, Box etc. They each have definite parameters like origin, thickness etc. which can be used. But in case the requirement is of any particular shape which is not covered in the ZPL, then we can use images to print them. The format of such image files should be of “.GRF”.

 

Steps to be followed to be able to use the image:

  1. 1) Create a .TIF version of the image file. The .TIF file should be without nay compression. To get a compression free image use the GIMP software. Portable GIMP can be downloaded from here http://portableapps.com/apps/graphics_pictures/gimp_portable
  2. In the GIMP window open your normal image file and Save it as .XCF file. Then open the .XCF file and Export it as a .TIF file. This gives a compression free image.
  3. Use the ZTOOLS software available on the Zebra website to create the .GRF files. Use the DOS prompt command line to use the conversion commands. For example for a file named image.tif to be converted into newimage.grf use the following

        cd c:\ztools

        zimaglit.exe c:\ztools\image.tif c:\ztools\newimage.grf

   4  Put this .GRF file in the relevant unix directory (AL11).

   5  Use the image in the program.

ZPL command to be used is ^FOypos, xpos^XGIMG.GRF, 1, 1^FS where IMG.GRF is the image to be used


SAPGUI versions and patches inventory.

$
0
0

       I have some questions, when begun deployment sapgui’s for clients computers our company.  How to get what version and patch on the host? As we know, SM04 get version and IP, but no Patch version. How to get it? By searching service.sap.com, found: “Note 748424 - Evaluation of SAP GUI versions and patches”. I Implement this note, but report in the note done as a “Testreport to show the interfaces” with very low functionality. I have extended this ABAP report from Note 748424 and hope, you can find it useful.

 

      1. Presentation

 

Se38->ZSAPGUI_VERSION_REPORT

 

1.1 Click Execute

Report.jpg

1.2 How much sapgui's?

level0.jpg

1.3 Double click on interesting line.

level1.jpg

You can view hosts, IP, and Gui version overview.

 

2. Here are the STEPS to implement.

 

2.1.  Implement  “SAPGUI_VERSION”  in EXIT_SAPLSUSF_001 from Note 748424.

2.2.  Implement “ZSAPGUI_VERSION_REPORT”, from attached source file.

2.3.  Activate User-Exit in the transaction CMOD:

cmod.jpg

Source ABAP program below as a attached file ZSAPGUI_VERSION_REPORT.txt

The Text_Symbols.txt file is a headers Lines at Top of Page.

Viewing all 935 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>