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

my first record does not appear.

aris_hidalgo
Contributor
0 Likes
1,011

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.

7 REPLIES 7
Read only

Former Member
0 Likes
972

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

Read only

0 Likes
972

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

Read only

0 Likes
972

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.

Read only

Former Member
0 Likes
972

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

Read only

0 Likes
972

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.

Read only

0 Likes
972

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

Read only

Former Member
0 Likes
972

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.