on 07-30-2014 11:58 AM
Hi Frds,
In the print program,
i got the material totals variable is gv_bdmng.
each line time material is gv_bdmng1.
Based on above i did a subtotal and need to display through these variable gv_bdmng2
Script Subtotal calculation not working
DATA:lv_qn TYPE p DECIMALS 3 VALUE 0.
LOOP AT gt_resb INTO gw_resb WHERE matnr = resbd-matnr AND werks = resbd-werks.
ON CHANGE OF index_tab-matnr.
lv_qn = ( gv_bdmng1 / gv_bdmng ) * 100.
ENDON.
ENDLOOP.
gv_bdmng2 = lv_qn.
CLEAR : lv_qn.
Pls help me out
Hi Kabil,
Do the following change in the program.
"Sort the internal table based on material number and werks
sort gt_resby by matnr werks.
"Replace gw_resb instead of index_tab-matnr.
DATA:lv_qn TYPE p DECIMALS 3 VALUE 0.
LOOP AT gt_resb INTO gw_resb WHERE matnr = resbd-matnr AND werks = resbd-werks.
"Remove On change of condition, because we are fetching the record based on condition inside the loop
lv_qn = ( gv_bdmng1 / gv_bdmng ) * 100.
ENDLOOP.
gv_bdmng2 = lv_qn.
CLEAR : lv_qn.
Regards
Rajkumar Narasimman
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Still I m facing the same problem..................
Please find my piece of code and help me..............
DATA: read_stpu VALUE ' '. "Standard: no read of subitems
DATA: gv_index(2) TYPE n.
*DATA: GV_INDEX1 TYPE i VALUE 1.
DATA: gv_index1 TYPE i.
DATA: gv_aennr TYPE aenr-aennr.
DATA: gv_verid TYPE mkal-verid,
gv_batch TYPE mcha-charg,
gv_bdmng TYPE resb-bdmng,
gv_bdmng1(5) TYPE p DECIMALS 3,
gv_charg TYPE mch1-charg,
gv_vdate TYPE mch1-vfdat,
*added by kabil
gv_untto1 TYPE string,
* gv_untto TYPE t405-untto,
gv_untto TYPE p DECIMALS 3,
gv_bdmng2 TYPE p DECIMALS 3,
*ended by kabil
gv_lolim(16) TYPE p DECIMALS 3,
gv_uebto1(9) TYPE c,
gv_uebto TYPE t405-uebto,
gv_hilim(16) TYPE p DECIMALS 3.
TYPES: BEGIN OF gty_resb,
rsnum TYPE resb-rsnum,
matnr TYPE resb-matnr,
werks TYPE resb-werks,
bdmng TYPE resb-bdmng,
nlfzt TYPE resb-nlfzt,
END OF gty_resb,
gty_t_resb TYPE TABLE OF gty_resb.
DATA: gt_resb TYPE gty_t_resb,
gw_resb TYPE gty_resb.
*&**********************************************************************
* Standard Includes *
*&**********************************************************************
INCLUDE ppcoincl.
INCLUDE codrgt10.
SELECT * FROM resb INTO CORRESPONDING FIELDS OF TABLE gt_resb.
PERFORM print_sub.
*&**********************************************************************
* Form Routines *
*&**********************************************************************
*---------------------------------------------------------------------*
* FORM PRINT_SUB *
*---------------------------------------------------------------------*
FORM print_sub.
* Document-tables
INCLUDE lcodrinc.
* print-type
CASE prlst_tmp-drart.
WHEN reprint.
MOVE text-dup TO prlst_tmp-drtxt.
WHEN OTHERS.
CLEAR prlst_tmp-drtxt.
ENDCASE.
* loop at itab_tdr where object = obj-mat
* and aufnr = prlst_tmp-aufnr. "New 3.0
* exit.
* endloop.
READ TABLE itab_tdr
WITH KEY object = obj-mat
aufnr = prlst_tmp-aufnr. "New 3.0
CHECK sy-subrc IS INITIAL.
* first check wether something is to be printed
PERFORM check_print.
* if Sy-subrc=12: components given to print
CHECK sy-subrc = 12.
* check if SAPscript form was maintained
IF print_co-forml = space.
IF sy-batch = space AND sy-binpt = space.
MESSAGE e298(c2) WITH print_co-lstid
print_co-auart
print_co-repid
print_co-drvar.
ELSE.
MESSAGE i298(c2) WITH print_co-lstid
print_co-auart
print_co-repid
print_co-drvar.
ENDIF.
ENDIF.
* fill order-header DDIC-structure
LOOP AT itab_tdr WHERE object = obj-alt
AND aufnr = prlst_tmp-aufnr. "New 3.0
* save index-structure for header
itab_ord = itab_tdr.
LOOP AT caufvd_tab WHERE aufnr = itab_ord-aufnr.
* fill DDIC-structure
caufvd_tmp = caufvd_tab.
* read material
PERFORM read_mat USING caufvd_tmp-werks caufvd_tmp-matnr msfcv.
* store material-short-text
MOVE msfcv-maktx TO prlst_tmp-ktext.
* control-structure
print_co = prlst_tmp.
caufvd = caufvd_tmp.
* Charge von Kopfmaterial
LOOP AT afpod_tab WHERE aufnr EQ caufvd-aufnr
AND posnr EQ '0001'.
afpod = afpod_tab.
EXIT.
ENDLOOP.
* PRINT-Options
CALL FUNCTION 'CO_DR_PR_OPT_FILL'
EXPORTING
prt_co = prlst_tmp
IMPORTING
pr_opt = pr_options.
PERFORM get_header.
DO prlst_tmp-copys TIMES.
IF sy-index GT 1.
MOVE text-dup TO prlst_tmp-drtxt.
ENDIF.
* OPEN_FORM to open form
PERFORM open_and_start_form.
* header-informations
PERFORM mbr_header.
* list of components
PERFORM mbr_list.
* CLOSE_FORM to close form
PERFORM close_and_end_form.
ENDDO.
ENDLOOP.
ENDLOOP.
ENDFORM. "PRINT_SUB
*---------------------------------------------------------------------*
* FORM MBR_HEADER *
*---------------------------------------------------------------------*
FORM mbr_header.
SELECT SINGLE erdat FROM aufk
INTO aufk-erdat
WHERE aufnr = afpod-aufnr.
IF sy-subrc = 0.
CONCATENATE aufk-erdat+2(4)
afpod-charg+5(5)
INTO gv_batch.
ENDIF.
* read material of order from internal table
IF NOT caufvd-matnr IS INITIAL.
PERFORM read_mat USING caufvd-werks caufvd-matnr msfcv.
ENDIF.
IF caufvd-prodnet NE space. "New 3.0
PERFORM prodnet_info.
ENDIF.
* is there an order-text ?
IF NOT caufvd-ltext IS INITIAL.
* Textkey
CALL FUNCTION 'CO_ZK_TEXTKEY_CAUFV'
EXPORTING
aufnr = caufvd-aufnr
IMPORTING
ltsch = stxh-tdname.
* if given print the text
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'ORD_TEXT'
window = 'MAIN'.
ELSE.
* if not given print only short text (if given)
** if not caufvd-ktext is initial.
** call function 'WRITE_FORM'
** exporting
** element = 'ORD_KTEXT'
** window = 'MAIN'.
** endif.
ENDIF.
ENDFORM. "MBR_HEADER
*---------------------------------------------------------------------*
* FORM MBR_LIST *
*---------------------------------------------------------------------*
FORM mbr_list.
DATA: flg_head,
flg_opr_info,
gv_flag_pack,
pvznr LIKE afvgd-pvznr,
aplzl_sav LIKE afvgd-aplzl,
lv_matnr TYPE mara-matnr,
lv_matnr1 TYPE mara-matnr,
lv_index TYPE i VALUE 1,
lv_index1 TYPE i,
lv_tabix TYPE sy-tabix,
lv_desc TYPE i,
lv_ekwsl TYPE mara-ekwsl,
lv_lolim(5) TYPE p DECIMALS 2,
lv_hilim(5) TYPE p DECIMALS 2.
DATA: BEGIN OF index_tab OCCURS 0,
index_cmp LIKE sy-tabix,
index_seq LIKE sy-tabix,
index_opr LIKE sy-tabix,
plnfl LIKE resbd-plnfl,
vornr LIKE resbd-vornr,
lgort LIKE resbd-lgort,
aplzl LIKE resbd-aplzl,
aufst LIKE resbd-aufst,
aufwg LIKE resbd-aufwg,
baust LIKE resbd-baust,
posnr LIKE resbd-posnr,
matnr LIKE resbd-matnr,
rspos LIKE resbd-rspos,
bdmng LIKE resbd-bdmng,
nlfzt LIKE resbd-nlfzt,
END OF index_tab.
* build short table for sort of components
LOOP AT itab_tdr WHERE object = obj-mat
AND aufnr EQ itab_ord-aufnr.
* Fill DDIC-Strutcure of component
READ TABLE resbd_tab INDEX itab_tdr-index_plmz.
*---------------------------------begin Fetch Version Number
resbd = resbd_tab.
* IF RESBD-AENNR IS NOT INITIAL. "fetch Change Number
* gv_aennr = RESBD-AENNR.
* ENDIF.
IF resbd-dumps IS NOT INITIAL.
SELECT SINGLE verid FROM mkal
INTO gv_verid
WHERE matnr = resbd-matnr
AND werks = resbd-werks
AND mksp EQ ''.
IF sy-subrc EQ 0.
CLEAR: resbd-matnr,
resbd-werks.
ENDIF.
ENDIF.
CLEAR: resbd.
*---------------------------------end Fetch Version Number
CHECK sy-subrc IS INITIAL
AND ( resbd_tab-bdmng > 0 OR resbd_tab-erfmg > 0 )
* not printed will be: Nebenprodukt
AND resbd_tab-shkzg NE 'S'
* not printed will be: Dummy's
AND resbd_tab-dumps IS INITIAL
* not printed will be: Kuppelprodukt
AND resbd_tab-kzkup IS INITIAL.
index_tab-index_cmp = itab_tdr-index_plmz.
index_tab-index_seq = itab_tdr-index_plfl.
index_tab-index_opr = itab_tdr-index_plpo.
MOVE-CORRESPONDING resbd_tab TO index_tab.
APPEND index_tab.
ENDLOOP.
DESCRIBE TABLE index_tab LINES sy-dbcnt.
CHECK sy-dbcnt GT 0.
*.. Hinweis 22807 gilt auch für PPPIMBRL
* SORT INDEX_TAB BY PLNFL VORNR LGORT
* AUFST AUFWG BAUST
* POSNR MATNR RSPOS.
SORT index_tab BY plnfl vornr posnr
aufst aufwg baust
lgort matnr rspos.
DESCRIBE TABLE index_tab LINES lv_desc.
* Print all materials for the current order (now in sorted order)
LOOP AT index_tab.
CLEAR : gv_flag_pack.
lv_tabix = sy-tabix.
IF lv_tabix EQ lv_desc.
gv_flag_pack = 'X'.
ENDIF.
*---> Print same serial number for more than one line-item with same mat.no but splitted due to batch
ON CHANGE OF index_tab-matnr.
gv_index1 = gv_index1 + 1.
ENDON.
gv_index = gv_index1.
** Diese Funktion entweder im Programm oder in Sapscript
* CALL FUNCTION 'CONTROL_FORM'
* EXPORTING
* COMMAND = 'PROTECT'.
* Fill DDIC-Strutcure of component
READ TABLE resbd_tab INDEX index_tab-index_cmp.
resbd = resbd_tab.
gv_bdmng1 = resbd-bdmng.
gv_bdmng = gv_bdmng + gv_bdmng1.
I M facing these condition errorr...............................
DATA:lv_qn TYPE p DECIMALS 3 VALUE 0.
* SORT index_tab BY matnr .
LOOP AT gt_resb INTO gw_resb WHERE matnr = resbd-matnr AND werks = resbd-werks AND rsnum = resbd-rsnum .
* ON CHANGE OF resbd-matnr.
lv_qn = ( resbd-bdmng / gv_bdmng ) * 100.
* ENDON.
EXIT.
ENDLOOP.
gv_bdmng2 = lv_qn.
CLEAR : lv_qn.
I M facing these between condition errorr...............................
* * Lower & Upper limit
gv_untto = ( gv_bdmng1 * resbd-nlfzt ) / 100.
gv_lolim = resbd-bdmng - gv_untto.
gv_hilim = resbd-bdmng + gv_untto.
* * Lower & Upper limit
CLEAR : lv_ekwsl,
gv_untto,
gv_uebto.
SELECT SINGLE ekwsl FROM mara
INTO lv_ekwsl
WHERE matnr = resbd-matnr.
WRITE sy-datum TO gv_vdate DD/MM/YYYY.
SELECT SINGLE charg vfdat FROM mch1 INTO (gv_charg,gv_vdate)
WHERE matnr = resbd-matnr.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = gv_vdate
IMPORTING
date_external = gv_vdate
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF sy-subrc = 0.
CONDENSE gv_charg.
* CONDENSE lv_vdate.
SHIFT gv_charg LEFT DELETING LEADING '0'.
CONCATENATE gv_charg gv_vdate INTO gv_untto1 SEPARATED BY '/'.
* gv_untto1 = gv_charg .
* gv_v = mch1-vfdat.
ENDIF.
* SELECT SINGLE untto
* uebto FROM t405
* INTO (gv_untto, gv_uebto)
* WHERE ekwsl = lv_ekwsl.
* IF sy-subrc = 0.
* gv_untto1 = gv_untto.
* gv_uebto1 = gv_uebto.
* CONDENSE gv_untto1.
* CONDENSE gv_uebto1.
* CONCATENATE '+/-'
* gv_untto1
* INTO gv_untto1.
* CONCATENATE '+/-'
* gv_uebto1
* INTO gv_uebto1.
* lv_lolim = ( gv_untto / 100 ) * gv_bdmng1.
* lv_hilim = ( gv_uebto / 100 ) * gv_bdmng1.
* gv_lolim = gv_bdmng1 - lv_lolim.
* gv_hilim = gv_bdmng1 + lv_hilim.
* ENDIF.
* ENDIF.
* comment ended by kabil
* Get sequence
IF resbd-plnfl NE affld-plnfl OR resbd-aufnr NE caufvd-aufnr.
READ TABLE affld_tab INDEX index_tab-index_seq.
affld = affld_tab.
* Read ATAB-Tables for sequence
PERFORM pppr_get_tables USING drpart-seq.
ENDIF.
* If opertion changes write information to which operation components
* are fixed (print these info with last written operation)
* Next component to other operation ? If so write line
IF resbd-aplzl NE aplzl_sav AND ( NOT aplzl_sav IS INITIAL ).
* remember head line written
MOVE 'X' TO flg_opr_info.
ENDIF.
* Get operation
IF resbd-aplzl NE afvgd-aplzl OR resbd-aufnr NE afvgd-aufnrd.
READ TABLE afvgd_tab INDEX index_tab-index_opr.
afvgd = afvgd_tab.
IF afvgd-phflg IS INITIAL. "Tan 19.09.97 HW 83814
CLEAR afvgd-pvznr.
ELSE.
* Überordneter Vorgang für Phase ermitteln.
IF NOT afvgd-pvzkn IS INITIAL.
READ TABLE afvgd_tab WITH KEY aplzl = afvgd-pvzkn
TRANSPORTING vornr.
afvgd-pvznr = afvgd_tab-vornr.
ENDIF.
ENDIF.
* Read ATAB-Tables for sequence
PERFORM pppr_get_tables USING drpart-opr.
* set flag 'write info of operation'
CLEAR flg_opr_info.
aplzl_sav = afvgd-aplzl.
ENDIF.
* Get ATAB-tables of component
PERFORM pppr_get_tables USING drpart-cmp.
CLEAR msfcv.
* Get MSFCV for component
IF NOT resbd-matnr IS INITIAL.
PERFORM read_mat USING resbd-werks resbd-matnr msfcv.
ENDIF.
* Die Erfassungsmenge <> Null bedeutet, daß es Abweichung zwischen
* Basismengeneinheit und Materialmengeneinheit gibt. In diesem
* Fall sind die Erfassungsmenge und Erfassungsmengeneinheit die
* richtige Bedarfe. Release 4.0A Hinweis 79749 22.07.1997
IF NOT resbd-erfmg IS INITIAL.
resbd-bdmng = resbd-erfmg.
resbd-meins = resbd-erfme.
ENDIF.
ON CHANGE OF resbd_tab-vornr.
**--->Start-Commented to bring continuous s.no for all process
* GV_INDEX1 = 1.
* GV_INDEX = GV_INDEX1.
**--->End-Commented to bring continuous s.no for all process
* Überschrift von Materialliste
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAT_OPERATION'
window = 'MAIN'.
ENDON.
IF gv_flag_pack NE 'X'.
IF NOT resbd-ltxsp IS INITIAL.
* buelt textkey
CALL FUNCTION 'CO_ZK_TEXTKEY_RESB'
EXPORTING
rsnum = resbd-rsnum
rspos = resbd-rspos
rsart = resbd-rsart
IMPORTING
ltsch = stxh-tdname.
* print component text
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAT_TEXT'
window = 'MAIN'.
ENDIF.
* print data of components
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAT_INFO'
window = 'MAIN'.
ELSE.
* print data of components
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAT_INFO'
window = 'MAIN'.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAT_BDMNG_TOT'
window = 'MAIN'.
IF NOT resbd-ltxsp IS INITIAL.
* buelt textkey
CALL FUNCTION 'CO_ZK_TEXTKEY_RESB'
EXPORTING
rsnum = resbd-rsnum
rspos = resbd-rspos
rsart = resbd-rsart
IMPORTING
ltsch = stxh-tdname.
* print component text
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAT_TEXT_PACK'
window = 'MAIN'.
ENDIF.
ENDIF.
ENDLOOP.
CALL FUNCTION 'CONTROL_FORM'
EXPORTING
command = 'PROTECT'.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'MAT_COMP_PER'
window = 'MAIN'.
** Diese Funktion entweder im Programm oder in Sapscript
CALL FUNCTION 'CONTROL_FORM'
EXPORTING
command = 'ENDPROTECT'.
* CALL FUNCTION 'CONTROL_FORM'
* EXPORTING
* COMMAND = 'NEW-PAGE'.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'QUAL_PRC1'
window = 'MAIN'.
* Get subpositions if forced.
CHECK read_stpu EQ 'X'
AND NOT resbd-stlnr IS INITIAL
AND NOT resbd-stlkn IS INITIAL
AND NOT resbd-stlty IS INITIAL.
CLEAR: stpub.
stpub-stlty = resbd-stlty.
stpub-stlnr = resbd-stlnr.
stpub-stlkn = resbd-stlkn.
stpub-stpoz = resbd-stpoz.
PERFORM stpu_lesen.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'TEST_ONE'
window = 'TEST'.
ENDFORM. "MBR_LIST
*---------------------------------------------------------------------*
* FORM READ_MAT *
*---------------------------------------------------------------------*
FORM read_mat USING plant LIKE resbd-werks
material LIKE resbd-matnr
matview STRUCTURE msfcv.
CLEAR matview.
* Aus Tabelle der Materialstämme den betreffenden Eintrag auslesen
* Bei Nichtlager oder Textposition natürlich kein Materialstamm
CHECK NOT plant IS INITIAL AND NOT material IS INITIAL.
LOOP AT mv_tab WHERE werks EQ plant AND matnr EQ material.
MOVE-CORRESPONDING mv_tab TO matview.
MOVE-CORRESPONDING mv_tab TO mc29s.
EXIT.
ENDLOOP.
ENDFORM. "READ_MAT
*---------------------------------------------------------------------*
* FORM OPEN_AND_START_FORM *
*---------------------------------------------------------------------*
FORM open_and_start_form.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
device = 'PRINTER'
dialog = space
form = print_co-forml
language = print_co-spras
OPTIONS = pr_options
EXCEPTIONS
canceled = 01
device = 02
form = 03
OPTIONS = 04
unclosed = 05.
CALL FUNCTION 'START_FORM'.
ENDFORM. "OPEN_AND_START_FORM
*---------------------------------------------------------------------*
* FORM CLOSE_AND_END_FORM_FORM *
*---------------------------------------------------------------------*
FORM close_and_end_form.
CALL FUNCTION 'END_FORM'.
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT = pr_result
EXCEPTIONS
OTHERS = 01.
ENDFORM. "CLOSE_AND_END_FORM
*---------------------------------------------------------------------*
* FORM CHECK_PRINT *
*---------------------------------------------------------------------*
FORM check_print.
DATA: flg_print.
LOOP AT itab_tdr WHERE object = obj-mat
AND aufnr = prlst_tmp-aufnr. "New 3.0
READ TABLE resbd_tab INDEX itab_tdr-index_plmz.
CHECK sy-subrc IS INITIAL
AND resbd_tab-kzkup IS INITIAL "New 3.0
AND resbd_tab-dumps IS INITIAL
AND ( resbd_tab-bdmng > 0 OR resbd_tab-erfmg > 0 ).
flg_print = const-flg_yes.
EXIT.
ENDLOOP.
IF flg_print EQ const-flg_yes.
sy-subrc = 12.
ENDIF.
ENDFORM. "CHECK_PRINT
*---------------------------------------------------------------------*
* STPU_LESEN *
*---------------------------------------------------------------------*
FORM stpu_lesen.
CALL FUNCTION 'GET_STPU'
EXPORTING
set = 'X'
all = 'X'
TABLES
wa = stpub
EXCEPTIONS
no_record_found = 4
key_incomplete = 16
call_invalid = 24.
ENDFORM. "STPU_LESEN
*---------------------------------------------------------------------*
* FORM PRODNET_INFO *
*---------------------------------------------------------------------*
FORM prodnet_info.
* Print info of collective order
* leading order ?
IF caufvd-maufnr EQ space.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'COL_ORDMAIN'
window = 'MAIN'.
ELSE.
* fill DDIC-structure PPPRCOLORD of upper operation
LOOP AT colord_tab WHERE aufnr = caufvd-aufnr.
ppprcolord = colord_tab.
EXIT.
ENDLOOP.
* print out the date
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'COL_ORDLOW'
window = 'MAIN'.
ENDIF.
ENDFORM. "PRODNET_INFO
* Include
INCLUDE codrgett.
INCLUDE codrgeth.
* Ende ---------------------------------------------
*----------------------------------------------------------------------*
* FORM mat_desc *
*----------------------------------------------------------------------*
* Material Description concatenation and split *
*----------------------------------------------------------------------*
FORM mat_desc TABLES in_par STRUCTURE itcsy
out_par STRUCTURE itcsy.
DATA len TYPE i.
READ TABLE in_par INDEX 1.
len = STRLEN( in_par-value ).
IF len > 22.
out_par-value = in_par-value+0(22).
out_par-name = 'TEXT'.
MODIFY out_par INDEX 1.
out_par-value = in_par-value+22(len).
out_par-name = 'TEXT1'.
MODIFY out_par INDEX 2.
ELSE.
out_par-value = in_par-value.
* condense out_par-value NO-GAPS.
out_par-name = 'TEXT'.
MODIFY out_par INDEX 1.
ENDIF.
ENDFORM. "mat_desc
User | Count |
---|---|
86 | |
10 | |
10 | |
9 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.