2006 Mar 27 10:36 AM
Hello experts,
I am currently having a hard time modifying the code below. My problem is that the first record does not appear when I preview my sapscript form. I have made a code via a flag that whenever ls_lines changes, it would be on another page. Also, ls_lines is not part of an itab so I cannot use At New or ON Change. I have posted below my code. Help would be greatly appreciated. Thanks a lot guys!
LOOP AT traptab.
PERFORM get_address.
PERFORM wa03_ausgabe.
endloop
FORM get_address.
*AVH - start of insertion - 03/21/06
SELECT SINGLE vbeln vbelv posnv FROM vbfa
INTO (v_vbeln, v_vbelv, v_posnv)
WHERE vbeln = mseg-mblnr
AND posnn = mseg-zeile "v_posnn
AND vbtyp_n = 'R'
AND vbtyp_v IN ('C', 'I').
CONCATENATE v_vbelv v_posnv
INTO ls_thead-tdname.
*function to read text related to item
REFRESH: lt_lines.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = '0002'
language = 'E'
name = ls_thead-tdname
object = 'VBBP'
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4.
IF sy-subrc = 0.
CLEAR ls_lines.
READ TABLE lt_lines INTO ls_lines INDEX 2. -->here is where it gets new ls_lines
CLEAR ls_lines2.
READ TABLE lt_lines INTO ls_lines2 INDEX 3.
CLEAR v_lines_new.
v_lines_new = ls_lines.
IF v_lines_new NE v_lines_old.
PERFORM print_footer.
CLEAR v_flag.
v_flag = 1.
ENDIF.
v_lines_old = v_lines_new.
CLEAR ls_lines3.
READ TABLE lt_lines INTO ls_lines3 INDEX 4.
ENDIF.
SELECT SINGLE kunnr INTO vbpa-kunnr
FROM vbpa
WHERE vbeln = v_vbelv
AND parvw = 'WE'.
IF sy-subrc = 0.
SELECT SINGLE name1 telf1 stras
INTO (kna1-name1, kna1-telf1, kna1-stras)
FROM kna1
WHERE kunnr = vbpa-kunnr.
ENDIF.
counter = counter + 1.
*AVH - end of insertion
ENDFORM.
*----
Drucken WA-Ueberschrift----
*
FORM wa03_ausgabe.
*----ASA--
10/14/99----
-
DATA: l_lines TYPE i.
*----
-
ON CHANGE OF mkpf-mblnr OR mseg-ebeln OR mseg-bwart OR mseg-werks.
CLEAR xkopfdr.
v_flag = 2.
ENDON.
*AVH - start of insertion - 03/27/06
IF v_flag = 1.
CLEAR v_flag.
CLEAR xkopfdr.
ENDIF.
*AVH - end of insertion
IF xkopfdr IS INITIAL.
xkopfdr = x.
IF new_page = x.
CALL FUNCTION 'CONTROL_FORM'
EXPORTING
command = 'NEW-PAGE'.
ENDIF.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'KOPF'
window = 'KOPF'.
new_page = x.
endif.
*----
Drucken WA-Positionen----
*
CLEAR: am07m-kontierung.
am07m-rstyp = xskkz.
CASE xskkz. "Kontierungsarten ?
WHEN xfert. "Fertigungsauftrag
am07m-kontierung = mseg-aufnr.
WHEN xanlage. "auf Anlage kontiert?
MOVE space TO anlage.
anlage-anln1 = mseg-anln1.
anlage-anln2 = mseg-anln2.
MOVE space TO am07m-kontierung.
CONDENSE anlage NO-GAPS.
am07m-kontierung = anlage. "Anlagennummer
WHEN xvbelg. "Kundenauftrag ?
MOVE space TO kunde.
kunde-kdauf = mseg-kdauf.
kunde-kdpos = mseg-kdpos.
kunde-kdein = mseg-kdein.
MOVE space TO am07m-kontierung.
CONDENSE kunde NO-GAPS.
am07m-kontierung = kunde. "Kundennummer
WHEN xkostl. "auf Kostenstelle kontiert?
am07m-kontierung = mseg-kostl. "Anlagennummer
WHEN xprojn OR xnplan. "auf Projekt/Netzplan?
IF mseg-nplnr IS INITIAL.
PERFORM psp_convert USING mseg-ps_psp_pnr.
ELSE.
am07m-kontierung = mseg-nplnr.
PERFORM nw_vorgang_lesen USING mseg-aufpl mseg-aplzl.
IF NOT n_vornr IS INITIAL.
MOVE '/' TO am07m-kontierung+12.
MOVE n_vornr TO am07m-kontierung+13.
ENDIF.
ENDIF.
WHEN xumlag. "Umlagerung
IF mseg-matnr NE mseg-ummat.
MOVE mseg-ummat TO am07m-kontierung.
ELSE.
MOVE mseg-umwrk TO am07m-kontierung.
MOVE '/' TO am07m-kontierung+4.
MOVE mseg-umlgo TO am07m-kontierung+5.
ENDIF.
WHEN OTHERS. "keine Kontierung ?
IF NOT mseg-ummat IS INITIAL.
IF mseg-matnr NE mseg-ummat.
MOVE mseg-ummat TO am07m-kontierung.
ELSEIF mseg-werks NE mseg-umwrk.
MOVE mseg-umwrk TO am07m-kontierung.
MOVE '/' TO am07m-kontierung+4.
MOVE mseg-umlgo TO am07m-kontierung+5.
ELSEIF mseg-lgort NE mseg-umlgo.
MOVE mseg-umwrk TO am07m-kontierung.
MOVE '/' TO am07m-kontierung+4.
MOVE mseg-umlgo TO am07m-kontierung+5.
ENDIF.
ENDIF.
ENDCASE.
user-exit über erweiterung mbcf0005
CALL CUSTOMER-FUNCTION '001'
EXPORTING
i_mkpf = mkpf
i_mseg = mseg
i_nast = nast
i_tnapr = tnapr
CHANGING
c_am07m = am07m
EXCEPTIONS
OTHERS = 0.
*---ASA--
12/10/99----
-
ADD 1 TO v_zeile.
*----
-
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'POS_ZEILE'
window = 'MAIN'.
*---ASA--
7/22/99----
-
v_first_num = 'Y'.
v_finish = 'N'.
DESCRIBE TABLE serial_tab LINES l_lines.
LOOP AT serial_tab.
IF sy-tabix EQ l_lines.
v_finish = 'Y'.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'SERNUM'
window = 'MAIN'.
v_first_num = 'N'.
ENDLOOP.
ENDFORM.
Hello experts,
I am currently having a hard time modifying the code below. My problem is that the first record does not appear when I preview my sapscript form. I have made a code via a flag that whenever ls_lines changes, it would be on another page. Also, ls_lines is not part of an itab so I cannot use At New or ON Change. I have posted below my code. Help would be greatly appreciated. Thanks a lot guys!
LOOP AT traptab.
PERFORM get_address.
PERFORM wa03_ausgabe.
endloop
FORM get_address.
*AVH - start of insertion - 03/21/06
SELECT SINGLE vbeln vbelv posnv FROM vbfa
INTO (v_vbeln, v_vbelv, v_posnv)
WHERE vbeln = mseg-mblnr
AND posnn = mseg-zeile "v_posnn
AND vbtyp_n = 'R'
AND vbtyp_v IN ('C', 'I').
CONCATENATE v_vbelv v_posnv
INTO ls_thead-tdname.
*function to read text related to item
REFRESH: lt_lines.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = '0002'
language = 'E'
name = ls_thead-tdname
object = 'VBBP'
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4.
IF sy-subrc = 0.
CLEAR ls_lines.
READ TABLE lt_lines INTO ls_lines INDEX 2. -->here is where it gets new ls_lines
CLEAR ls_lines2.
READ TABLE lt_lines INTO ls_lines2 INDEX 3.
CLEAR v_lines_new.
v_lines_new = ls_lines.
IF v_lines_new NE v_lines_old.
PERFORM print_footer.
CLEAR v_flag.
v_flag = 1.
ENDIF.
v_lines_old = v_lines_new.
CLEAR ls_lines3.
READ TABLE lt_lines INTO ls_lines3 INDEX 4.
ENDIF.
SELECT SINGLE kunnr INTO vbpa-kunnr
FROM vbpa
WHERE vbeln = v_vbelv
AND parvw = 'WE'.
IF sy-subrc = 0.
SELECT SINGLE name1 telf1 stras
INTO (kna1-name1, kna1-telf1, kna1-stras)
FROM kna1
WHERE kunnr = vbpa-kunnr.
ENDIF.
counter = counter + 1.
*AVH - end of insertion
ENDFORM.
*----
Drucken WA-Ueberschrift----
*
FORM wa03_ausgabe.
*----ASA--
10/14/99----
-
DATA: l_lines TYPE i.
*----
-
ON CHANGE OF mkpf-mblnr OR mseg-ebeln OR mseg-bwart OR mseg-werks.
CLEAR xkopfdr.
v_flag = 2.
ENDON.
*AVH - start of insertion - 03/27/06
IF v_flag = 1.
CLEAR v_flag.
CLEAR xkopfdr.
ENDIF.
*AVH - end of insertion
IF xkopfdr IS INITIAL.
xkopfdr = x.
IF new_page = x.
CALL FUNCTION 'CONTROL_FORM'
EXPORTING
command = 'NEW-PAGE'.
ENDIF.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'KOPF'
window = 'KOPF'.
new_page = x.
endif.
*----
Drucken WA-Positionen----
*
CLEAR: am07m-kontierung.
am07m-rstyp = xskkz.
CASE xskkz. "Kontierungsarten ?
WHEN xfert. "Fertigungsauftrag
am07m-kontierung = mseg-aufnr.
WHEN xanlage. "auf Anlage kontiert?
MOVE space TO anlage.
anlage-anln1 = mseg-anln1.
anlage-anln2 = mseg-anln2.
MOVE space TO am07m-kontierung.
CONDENSE anlage NO-GAPS.
am07m-kontierung = anlage. "Anlagennummer
WHEN xvbelg. "Kundenauftrag ?
MOVE space TO kunde.
kunde-kdauf = mseg-kdauf.
kunde-kdpos = mseg-kdpos.
kunde-kdein = mseg-kdein.
MOVE space TO am07m-kontierung.
CONDENSE kunde NO-GAPS.
am07m-kontierung = kunde. "Kundennummer
WHEN xkostl. "auf Kostenstelle kontiert?
am07m-kontierung = mseg-kostl. "Anlagennummer
WHEN xprojn OR xnplan. "auf Projekt/Netzplan?
IF mseg-nplnr IS INITIAL.
PERFORM psp_convert USING mseg-ps_psp_pnr.
ELSE.
am07m-kontierung = mseg-nplnr.
PERFORM nw_vorgang_lesen USING mseg-aufpl mseg-aplzl.
IF NOT n_vornr IS INITIAL.
MOVE '/' TO am07m-kontierung+12.
MOVE n_vornr TO am07m-kontierung+13.
ENDIF.
ENDIF.
WHEN xumlag. "Umlagerung
IF mseg-matnr NE mseg-ummat.
MOVE mseg-ummat TO am07m-kontierung.
ELSE.
MOVE mseg-umwrk TO am07m-kontierung.
MOVE '/' TO am07m-kontierung+4.
MOVE mseg-umlgo TO am07m-kontierung+5.
ENDIF.
WHEN OTHERS. "keine Kontierung ?
IF NOT mseg-ummat IS INITIAL.
IF mseg-matnr NE mseg-ummat.
MOVE mseg-ummat TO am07m-kontierung.
ELSEIF mseg-werks NE mseg-umwrk.
MOVE mseg-umwrk TO am07m-kontierung.
MOVE '/' TO am07m-kontierung+4.
MOVE mseg-umlgo TO am07m-kontierung+5.
ELSEIF mseg-lgort NE mseg-umlgo.
MOVE mseg-umwrk TO am07m-kontierung.
MOVE '/' TO am07m-kontierung+4.
MOVE mseg-umlgo TO am07m-kontierung+5.
ENDIF.
ENDIF.
ENDCASE.
user-exit über erweiterung mbcf0005
CALL CUSTOMER-FUNCTION '001'
EXPORTING
i_mkpf = mkpf
i_mseg = mseg
i_nast = nast
i_tnapr = tnapr
CHANGING
c_am07m = am07m
EXCEPTIONS
OTHERS = 0.
*---ASA--
12/10/99----
-
ADD 1 TO v_zeile.
*----
-
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'POS_ZEILE'
window = 'MAIN'.
*---ASA--
7/22/99----
-
v_first_num = 'Y'.
v_finish = 'N'.
DESCRIBE TABLE serial_tab LINES l_lines.
LOOP AT serial_tab.
IF sy-tabix EQ l_lines.
v_finish = 'Y'.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'SERNUM'
window = 'MAIN'.
v_first_num = 'N'.
ENDLOOP.
ENDFORM.
2006 Mar 27 10:45 AM
HI Viray,
this one is reading the second record directly into ls_lines..
READ TABLE lt_lines INTO ls_lines <b>INDEX 2.</b>instead use..
READ TABLE lt_lines INTO ls_lines INDEX sy-tabix.regards
satesh
2006 Mar 27 10:48 AM
WHERE IS INDEX 1 .....
WHEN U USED READ TEXT FIRST IT READ FROM HEADER AFTER READ FROM INDEX 2...
USED...
READ TABLE lt_lines INTO ls_lines INDEX sy-tabix.
Message was edited by: kishan negi
2006 Mar 27 10:51 AM
Hi Satesh,
I'm using index 2 because the contents of lt_lines is like:
0001
first page
123456
So in my sapscript form, everytime ls_lines changes a new page must be created as you can see from the code. The problem the supposed to be first record does not show up.
2006 Mar 27 11:01 AM
HI Viray,
for the first record the value of v_lines_old is initial.. so
<b> IF v_lines_old is initial or v_lines_new NE v_lines_old.</b>*
PERFORM print_footer.
CLEAR v_flag.
v_flag = 1.
ENDIF.
v_lines_old = v_lines_new.
hope v_lines_new and v_lines_old has the same structure as that of s_lines..
regards
satesh
2006 Mar 27 11:04 AM
Hi Satesh,
Yes, v_lines_new and v_lines_old has the same structure as that of ls_lines. I just want a code that when the first record is looped it will be displayed. I don't why it isn't appearing.
2006 Mar 27 11:20 AM
Hi viray,
did you see the code previously given,
you can also add
if <b>v_lines_old is initial</b> or v_lines_new NE v_lines_old.
it will check if it is the first record..
because the only after that v_lines_old is eqauted to ls_lines..
when the first time it comes..for the first record
v_lines_old is initial..
regards
satesh
2006 Mar 27 11:26 AM
Hello Viraylab,
the only reason for not executing the first time is if
v_lines_new NE v_lines_old becomes false. set a break point and find out what is the value of both the fields when the first time loop is executed.
This may give u some clue.