it's very urgent pls
hi every one ,
see here i got a problem in retreiving data into an finance invoice layout which i designed according specs given to me.
see actually when fetching for multiple invoice for a particular doc no am
getting my last invoice no record twice. ie it is getting duplicated.
am sending my logic here. kindly suggest where am going wrong.
REPORT ZFR003_IMCL_RECVOUT .
TABLES : BSEG , KNA1 , ADRC , BKPF.
DATA : ITNET_DMBTR LIKE BSEG-DMBTR .
DATA : V_ZUONR LIKE BSEG-ZUONR.
DATA : BEGIN OF W_WORDS.
INCLUDE STRUCTURE SPELL.
DATA : END OF W_WORDS.
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONS : SO_BUKRS FOR BSEG-BUKRS,
SO_BELNR FOR BSEG-BELNR ,
SO_GJAHR FOR BSEG-GJAHR.
SELECTION-SCREEN : END OF BLOCK B1.
DATA : BEGIN OF ITAB OCCURS 0,
USTXT(40) TYPE C,
BUKRS LIKE BSEG-BUKRS,
V_NEWBELNR LIKE BSEG-BELNR,
GJAHR LIKE BSEG-GJAHR ,
KUNNR LIKE BSEG-KUNNR ,
BELNR LIKE BSEG-BELNR ,
ZUONR LIKE BSEG-ZUONR ,
AUGDT LIKE BSEG-AUGDT ,
ADRNR LIKE KNA1-ADRNR ,
BKTXT LIKE BKPF-BKTXT ,
USNAM LIKE BKPF-USNAM ,
BUDAT LIKE BKPF-BUDAT ,
ADDRNUMBER LIKE ADRC-ADDRNUMBER,
NAME1 LIKE ADRC-NAME1,
AUGBL LIKE BSEG-AUGBL ,
BSCHL LIKE BSEG-BSCHL,
DMBTR LIKE BSEG-DMBTR,
END OF ITAB.
AT SELECTION-SCREEN ON SO_BUKRS.
IF SO_BUKRS IS INITIAL.
MESSAGE E000(0) WITH ' PLEASE ENTER SOME VALUE FOR THE COMPANY CODE'.
ENDIF.
AT SELECTION-SCREEN ON SO_BELNR.
IF SO_BELNR IS INITIAL.
MESSAGE E000(1) WITH ' PLEASE ENTER SOME VALUE FOR THE DOCUMENT'.
ENDIF.
AT SELECTION-SCREEN ON SO_GJAHR.
IF SO_GJAHR IS INITIAL.
MESSAGE E000(2) WITH ' PLEASE ENTER SOME VALUE FOR THE FISCAL YEAR'.
ENDIF.
START-OF-SELECTION.
SELECT * FROM BSEG INTO CORRESPONDING FIELDS OF ITAB
WHERE BELNR IN SO_BELNR
AND BUKRS IN SO_BUKRS
AND GJAHR IN SO_GJAHR.
SELECT * FROM BSEG WHERE AUGBL IN SO_BELNR.
IF BSEG-BELNR <> BSEG-AUGBL.
ITAB-V_NEWBELNR = BSEG-BELNR.
ENDIF.
SELECT * FROM BKPF INTO CORRESPONDING FIELDS OF ITAB
WHERE
BELNR = ITAB-BELNR
AND BUKRS = ITAB-BUKRS
AND GJAHR = ITAB-GJAHR.
IF ITAB-KUNNR IS NOT INITIAL.
SELECT * FROM KNA1 INTO CORRESPONDING FIELDS OF ITAB
WHERE KUNNR = ITAB-KUNNR.
SELECT * FROM ADRC INTO CORRESPONDING FIELDS OF ITAB
WHERE ADDRNUMBER = ITAB-ADRNR.
IF ITAB-BSCHL = '09'.
ITAB-NAME1 = 'TDS'.
endif.
CONCATENATE ITAB-BKTXT ITAB-USNAM INTO ITAB-USTXT.
ENDSELECT.
ENDSELECT.
ENDIF.
IF ITAB-KUNNR IS INITIAL.
ITAB-NAME1 = 'NET'.
ITNET_DMBTR = ITAB-DMBTR.
ENDIF.
IF ITAB-BSCHL = '09'.
ITAB-V_NEWBELNR = SPACE.
ENDIF.
IF ITAB-BSCHL = '40'.
ITAB-V_NEWBELNR = SPACE.
ENDIF.
APPEND ITAB.
ENDSELECT.
ENDSELECT.
ENDSELECT.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
* APPLICATION = 'TX'
* ARCHIVE_INDEX =
* ARCHIVE_PARAMS =
DEVICE = 'PRINTER'
* DIALOG = 'X'
FORM = 'ZFL004_IMC_REC'
LANGUAGE = SY-LANGU
* OPTIONS =
* MAIL_SENDER =
* MAIL_RECIPIENT =
* MAIL_APPL_OBJECT =
* RAW_DATA_INTERFACE = '*'
* IMPORTING
* LANGUAGE =
* NEW_ARCHIVE_PARAMS =
* RESULT =
* EXCEPTIONS
* CANCELED = 1
* DEVICE = 2
* FORM = 3
* OPTIONS = 4
* UNCLOSED = 5
* MAIL_OPTIONS = 6
* ARCHIVE_ERROR = 7
* INVALID_FAX_NUMBER = 8
* MORE_PARAMS_NEEDED_IN_BATCH = 9
* SPOOL_ERROR = 10
* CODEPAGE = 11
* OTHERS = 12
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'MA_ELE'
FUNCTION = 'SET'
TYPE = 'BODY'
WINDOW = 'MAIN'
* IMPORTING
* PENDING_LINES =
* EXCEPTIONS
* ELEMENT = 1
* FUNCTION = 2
* TYPE = 3
* UNOPENED = 4
* UNSTARTED = 5
* WINDOW = 6
* BAD_PAGEFORMAT_FOR_PRINT = 7
* SPOOL_ERROR = 8
* CODEPAGE = 9
* OTHERS = 10
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SORT ITAB BY NAME1 DESCENDING.
LOOP AT ITAB.
IF ITAB-ZUONR IS NOT INITIAL.
V_ZUONR = ITAB-ZUONR.
ENDIF.
ITAB-ZUONR = V_ZUONR.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'HE_ELE'
FUNCTION = 'SET'
TYPE = 'BODY'
WINDOW = 'ADDRESS'
* IMPORTING
* PENDING_LINES =
* EXCEPTIONS
* ELEMENT = 1
* FUNCTION = 2
* TYPE = 3
* UNOPENED = 4
* UNSTARTED = 5
* WINDOW = 6
* BAD_PAGEFORMAT_FOR_PRINT = 7
* SPOOL_ERROR = 8
* CODEPAGE = 9
* OTHERS = 10
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* IF ITAB-BSCHL = '15'.
* ITAB-BELNR = V_NEWBELNR.
* ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = '600'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'MAIN'
* IMPORTING
* PENDING_LINES =
* EXCEPTIONS
* ELEMENT = 1
* FUNCTION = 2
* TYPE = 3
* UNOPENED = 4
* UNSTARTED = 5
* WINDOW = 6
* BAD_PAGEFORMAT_FOR_PRINT = 7
* SPOOL_ERROR = 8
* CODEPAGE = 9
* OTHERS = 10
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'WIN_INFO'
FUNCTION = 'SET'
TYPE = 'BODY'
WINDOW = 'INFO'
* IMPORTING
* PENDING_LINES =
* EXCEPTIONS
* ELEMENT = 1
* FUNCTION = 2
* TYPE = 3
* UNOPENED = 4
* UNSTARTED = 5
* WINDOW = 6
* BAD_PAGEFORMAT_FOR_PRINT = 7
* SPOOL_ERROR = 8
* CODEPAGE = 9
* OTHERS = 10
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'FOO'
FUNCTION = 'SET'
TYPE = 'BODY'
WINDOW = 'FOOTER'
* IMPORTING
* PENDING_LINES =
* EXCEPTIONS
* ELEMENT = 1
* FUNCTION = 2
* TYPE = 3
* UNOPENED = 4
* UNSTARTED = 5
* WINDOW = 6
* BAD_PAGEFORMAT_FOR_PRINT = 7
* SPOOL_ERROR = 8
* CODEPAGE = 9
* OTHERS = 10
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDLOOP.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
AMOUNT = ITNET_DMBTR
* CURRENCY = 'INR'
FILLER = ' '
* LANGUAGE = SY-LANGU
IMPORTING
IN_WORDS = W_WORDS
* EXCEPTIONS
* NOT_FOUND = 1
* TOO_LARGE = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'CLOSE_FORM'
* IMPORTING
* RESULT =
* RDI_RESULT =
* TABLES
* OTFDATA =
* EXCEPTIONS
* UNOPENED = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
* SEND_ERROR = 3
* SPOOL_ERROR = 4
* CODEPAGE = 5
* OTHERS = 6
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
PLS ITS URGENT.
KINDLY RESPOND AND THANKS IN ADVANCE,
REGARDS,
KRISHNA.
- [img][/img]
1°a) Please, Avoid imbricated ... select/endselect ... !
1°b) Please, Avoid select * and try select f1...fn from ...
2°) Be careful : BSEG and BKPF are big table ...
3°) Use a view (join) between BKPF and BSEG.
select k~vbeln p~posnr p~matnr p~matkl
p~netwr p~kzwi2 p~kzwi6 m~ekgrp
from vbak as k inner join vbap as p
on k~vbeln = p~vbeln
inner join marc as m
on p~matnr = m~matnr
appending corresponding fields of table t_vbap
where k~vbtyp eq p_vbtyp and "Type C
k~auart eq p_auart and "type ZHOU
k~erdat in s_erdat and "Date Cmde
p~pstyv in r_pstyv and "Types de poste
p~matkl in s_matkl and "Gpe Marchandises
m~werks = p_werks and "Division
m~ekgrp in s_ekgrp. "Gpe Acheteur
sort t_vbap by vbeln ekgrp matkl matnr.
3°) then loop at itab and for each row, select KNA1 ...
Y'd rather see SE30 and then Utilities --> Tips & Tricks ( )
JLuc
Another rate :
--> Use "select ... UP TO 1 ROWS from TABLE / endselect" to check the first entrie. ... when more than 1 occurence exist !
--> debug your program ...
--> Use SE16 to check your Where conditions ...
JL
Nowhere in your nested loops was there logic to check for a good return code and nowhere did you clear either the table structures nor your itab to assure only valid data gets populated instead of a "no-hit" resulting in your table being populated with data from the previous record. The query does not appear to be structured with efficiency in mind and as mentioned already you are going to only ever populate your table with the last record extracted in each select/endselect since everything else will be overwritten by any subsequent records selected.
Nowhere in your nested loops was there logic to check for a good return code and nowhere did you clear either the table structures nor your itab to assure only valid data gets populated instead of a "no-hit" resulting in your table being populated with data from the previous record. The query does not appear to be structured with efficiency in mind and as mentioned already you are going to only ever populate your table with the last record extracted in each select/endselect since everything else will be overwritten by any subsequent records selected.
Nowhere in your nested loops was there logic to check for a good return code and nowhere did you clear either the table structures nor your itab to assure only valid data gets populated instead of a "no-hit" resulting in your table being populated with data from the previous record. The query does not appear to be structured with efficiency in mind and as mentioned already you are going to only ever populate your table with the last record extracted in each select/endselect since everything else will be overwritten by any subsequent records selected.