2006 Jun 27 6:55 AM
who can tell me how to get the BSEG-BELNR according to BSEG-AUGBL without BSEG-ZUONR?
Thanks!!!
2006 Jun 27 7:13 AM
Hi,
you can get different belnr's (2 or more ) to 1 bseg-augbl, because one bseg-augbl is one matching-process
e.g.: 1 payment can match 3 invoices vice versa.
you'll find the items, if you select the tables bsak for vendors / bsad for customers or bsas for G/L accounts with your bseg-augbl / zuonr - here in the 2nd index-tables this fields are key-fields (performance)!
Andreas
2006 Jun 27 7:13 AM
Hi,
you can get different belnr's (2 or more ) to 1 bseg-augbl, because one bseg-augbl is one matching-process
e.g.: 1 payment can match 3 invoices vice versa.
you'll find the items, if you select the tables bsak for vendors / bsad for customers or bsas for G/L accounts with your bseg-augbl / zuonr - here in the 2nd index-tables this fields are key-fields (performance)!
Andreas
2006 Jun 27 7:14 AM
Hi amao,
First move the BSEG Content to the itab_BSEG.
Thn fetch the BELNR based on AUGBL and ZUONR.
select BELNR from BSEG into P_BELNR where
AUGBL = itab_augbl and
ZUONR = itab_zuonr .
Rgds,
Jothi.
Mark useful answers.
2006 Jun 27 7:20 AM
Hi Amao,
I have done that and this is the code for that.
DATA: BEGIN OF i_bseg OCCURS 0,
belnr LIKE bseg-belnr,
augbl LIKE bseg-augbl,
END OF i_bseg.
PARAMETERS: p_belnr LIKE bseg-belnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_belnr.
PERFORM get_value.
&----
*& Form get_value
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_value .
SELECT belnr
augbl
FROM bseg
INTO CORRESPONDING FIELDS OF TABLE i_bseg
WHERE augbl NE space.
IF sy-subrc = 0.
SORT i_bseg BY belnr.
DELETE ADJACENT DUPLICATES FROM i_bseg COMPARING belnr.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
DDIC_STRUCTURE = ' '
retfield = 'BELNR'
PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_BELNR'
STEPL = 0
WINDOW_TITLE =
VALUE = ' '
value_org = 'S'
MULTIPLE_CHOICE = ' '
DISPLAY = ' '
CALLBACK_PROGRAM = ' '
CALLBACK_FORM = ' '
MARK_TAB =
IMPORTING
USER_RESET =
TABLES
value_tab = i_bseg
FIELD_TAB =
RETURN_TAB =
DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 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.
ENDFORM. " get_value
Hope this solves ur issue.
Reward, if found useful.
Regards,
Tushar
2006 Jun 27 8:04 AM
Andreas,you are right, i just don't know which 'BELNR' is needed.
in our system, 'ZUONR' is not fully maintained.
2006 Jun 27 8:09 AM
Hi
The AUGBL is the document number of payment, the AUGDT is date of payment, but it's the posting date of payment so if you know the AUGBL:
SELECT * FROM BKPF WHERE BUKRS = BSEG-BUKRS
AND BELNR = BSEG-AUGBL
AND BUDAT = BSEG-AUGDT.
EXIT.
ENDSELECT.
In this way you can know the payment.
If you want to know all document claered by that document you should direclty read BSAK/BSAD/BSAS table.
I suppose if you know AUGBL, you know if you're analizing vendor or customer or G/L item so:
DATA: IT_BSAD LIKE TABLE OF BSAD,
IT_BSAS LIKE TABLE OF BSAS,
IT_BSAJ LIKE TABLE OF BSAK.
CASE BSEG-KOART.
WHEN 'D'.
SELECT * FROM BSAD INTO TABLE IT_BSAD
WHERE BUKRS = BSEG-BUKRS
AND KUNNR = BSEG-KUNNR
AND AUGDT = BSEG-AUGDT
AND AUGBL = BSEG-AUGBL
AND BELNR <> BSEG-AUGBL.
WHEN 'K'.
SELECT * FROM BSAK INTO TABLE IT_BSAK
WHERE BUKRS = BSEG-BUKRS
AND LIFNR = BSEG-LIFNR
AND AUGDT = BSEG-AUGDT
AND AUGBL = BSEG-AUGBL
AND BELNR <> BSEG-AUGBL.
WHEN 'S'.
SELECT * FROM BSAS INTO TABLE IT_BSAS
WHERE BUKRS = BSEG-BUKRS
AND HKONT = BSEG-HKONT
AND AUGDT = BSEG-AUGDT
AND AUGBL = BSEG-AUGBL
AND BELNR <> BSEG-AUGBL.
ENDACASE.
Max
2006 Jun 27 8:15 AM
2006 Jun 27 8:24 AM
Hi
See me previuos answer, you should find the BELNR in the internals table: IT_BSAD, IT_BSAK, IT_BSAD
LOOP AT IT_BSAD (or IT_BSAK) (or IT_BSAD).
BELNR = IT_BSAD-BELN
.............................
IT'S VERY IMPORTANT: DON'T USE THIS SELECT
SELECT BELNR FROM BSEG INTO V_BELNR
WHERE AUGBL = BSEG-AUGBL
It's very very slow, because AUGBL isn't a key field of BSEG and doesn't belong to index.
U should use the index table for cleared item:
- BSAK for vendor,
- BSAD for customer,
- BSAS for G/L
just as I said in my previous answer.
Max
2006 Jun 27 8:31 AM
2006 Jun 27 8:34 AM
2006 Jun 27 8:42 AM
Hi
Uhm??? I don't understand you're speaking about payment or not?
Can you explain what you need to get?
Max
2006 Jun 27 9:00 AM
t-code:fbl5n
customer selections/
Customer account 2135
Company code 8510
line item selections/
status/
open items
.
.
type/
normal items
there exists partly clear items.then i want to find BELNR in BSEG according to BELNR in BSID ( BSEG-AUGBL = BSID-BELNR ), but no assignment number( BSEG-ZUONR ).
2006 Jun 27 9:05 AM
Hi,
you've to consider the correct fiscal year (gjahr)
because an augbl could match items of several years!
Andreas
2006 Jun 27 9:08 AM
Hi
I suppose the users have done Transfer posting with clearing, in this case:
SELECT * FROM BKPF WHERE BUKRS = BSEG-BUKRS
AND BELNR = BSEG-AUGBL
AND BUDAT = BSEG-AUGDT.
EXIT.
ENDSELECT.
SELECT * FROM BSEG INTO TABLE T_BSEG
WHERE BUKRS = BKPF-BUKRS
AND BELNR = BKPF-BELNR
AND GJAHR = BKPF-GJAHR
AND KOART = 'D'.
DELETE T_BSEG WHERE AUGDT <> '00000000'.
Max
2006 Jun 27 9:26 AM
SELECT BUKRS
KUNNR
SHKZG
BUDAT
ZTERM
ZUONR
AUGBL
DMBTR
UMSKZ
BELNR
XBLNR
GJAHR
ZBD1T
FBDT
BLART
INTO CORRESPONDING FIELDS OF TABLE IT_BSID
FROM BSID
WHERE BUKRS = S_BUKRS
AND KUNNR IN S_KUNNR
AND ZFBDT <= S_BUDAT.
IF IT_BSID[] IS INITIAL.
MESSAGE E002 WITH 'BSID'.
ENDIF.
IT_BSID1[] = IT_BSID[].
DELETE IT_BSID WHERE XBLNR NE SPACE.
IF NOT IT_BSID[] IS INITIAL.
SELECT BELNR
GJAHR
AUGBL
ZUONR
DMBTR
REBZG
INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
FROM BSEG
LOOP AT IT_BSEG.
READ TABLE IT_BSID WITH KEY BELNR = IT_BSEG-AUGBL
ZUONR = IT_BSEG-ZUONR.
IF SY-SUBRC EQ 0.
IT_BSEG_SELECT-BELNR = IT_BSEG-BELNR.
IT_BSEG_SELECT-GJAHR = IT_BSEG-GJAHR.
IT_BSEG_SELECT-AUGBL = IT_BSEG-AUGBL.
IT_BSEG_SELECT-ZUONR = IT_BSEG-ZUONR.
IT_BSEG_SELECT-DMBTR = IT_BSEG-DMBTR.
APPEND IT_BSEG_SELECT.
CLEAR IT_BSEG_SELECT.
ENDIF.
ENDLOOP.
IF NOT IT_BSEG_SELECT[] IS INITIAL.
SELECT BELNR
GJAHR
XBLNR
INTO CORRESPONDING FIELDS OF TABLE IT_BKPF
FROM BKPF
FOR ALL ENTRIES IN IT_BSEG_SELECT
WHERE BUKRS = S_BUKRS
AND BELNR = IT_BSEG_SELECT-BELNR
AND GJAHR = IT_BSEG_SELECT-GJAHR.
ENDIF.
ENDIF.
DELETE IT_BSID1 WHERE XBLNR = ''.
LOOP AT IT_BSID.
READ TABLE IT_BSEG_SELECT WITH KEY AUGBL = IT_BSID-BELNR
ZUONR = IT_BSID-ZUONR.
IF SY-SUBRC EQ 0.
IT_DISPLAY-BUKRS = IT_BSID-BUKRS.
IT_DISPLAY-KUNNR = IT_BSID-KUNNR.
IT_DISPLAY-BUDAT = IT_BSID-BUDAT.
IF IT_BSID-SHKZG EQ 'H'.
IT_DISPLAY-LEAVE = IT_BSID-DMBTR * ( -1 ).
ELSE.
IT_DISPLAY-LEAVE = IT_BSID-DMBTR.
ENDIF.
IT_DISPLAY-ZFBDT = IT_BSID-ZFBDT.
IT_DISPLAY-ZTERM = IT_BSID-ZTERM.
CLEAR TMP1.
CLEAR TMP2.
TMP1 = IT_BSEG_SELECT-BELNR.
TMP2 = IT_BSEG_SELECT-GJAHR.
IT_DISPLAY-DMBTR = IT_BSEG_SELECT-DMBTR.
IT_DISPLAY-DMBTR2 = IT_DISPLAY-DMBTR - IT_DISPLAY-LEAVE.
READ TABLE IT_BKPF WITH KEY BELNR = TMP1
GJAHR = TMP2.
IF SY-SUBRC EQ 0.
IT_DISPLAY-XBLNR = IT_BKPF-XBLNR.
ENDIF.
APPEND IT_DISPLAY.
CLEAR IT_DISPLAY.
ENDIF.
ENDLOOP.
LOOP AT IT_BSID1.
IT_DISPLAY-BUKRS = IT_BSID1-BUKRS.
IT_DISPLAY-KUNNR = IT_BSID1-KUNNR.
IT_DISPLAY-BUDAT = IT_BSID1-BUDAT.
IT_DISPLAY-XBLNR = IT_BSID1-XBLNR.
IT_DISPLAY-ZFBDT = IT_BSID1-ZFBDT.
IT_DISPLAY-ZTERM = IT_BSID1-ZTERM.
IT_DISPLAY-DMBTR = IT_BSID1-DMBTR.
IT_DISPLAY-DMBTR2 = 0.
IF IT_BSID1-SHKZG EQ 'H'.
IT_DISPLAY-LEAVE = IT_BSID1-DMBTR * ( -1 ).
ELSE.
IT_DISPLAY-LEAVE = IT_BSID1-DMBTR.
ENDIF.
APPEND IT_DISPLAY.
CLEAR IT_DISPLAY.
ENDLOOP.
<b>Here 'ZUONR' can not be SPACE.</b>
2006 Jun 27 9:51 AM
Hi
DON'T USE BSEG TABLE BUT BSAD:
*SELECT BELNR
*GJAHR
*AUGBL
*ZUONR
*DMBTR
*REBZG
*INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
*FROM BSEG
SELECT
AUGDT
AUGBL
ZUONR
GJAHR
BELNR
BUDAT
DMBTR
REBZG
KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
FROM BSAD WHERE BUKRS = S_BUKRS
AND KUNNR IN S_KUNNR.
Now here you have only cleared document of customer.
I think this select is useless because BSIS has the field XBLNR:
*IF NOT IT_BSEG_SELECT[] IS INITIAL.
*SELECT BELNR
*GJAHR
*XBLNR
*INTO CORRESPONDING FIELDS OF TABLE IT_BKPF
*FROM BKPF
*FOR ALL ENTRIES IN IT_BSEG_SELECT
*WHERE BUKRS = S_BUKRS
*AND BELNR = IT_BSEG_SELECT-BELNR
*AND GJAHR = IT_BSEG_SELECT-GJAHR.
*ENDIF.
*ENDIF.
So u should do all your work into this loop, because in IT_BSEG you have only cleared items and in IT_BSID the open ones.
LOOP AT IT_BSEG.
If you want to know the document it's useless to use the ZUONR, but you should use only these fields:
READ TABLE IT_BSID WITH KEY KUNNR = IT_BSEG-KUNNR
BELNR = IT_BSEG-AUGBL
BUDAT = IT_BSEG-AUGDT.
IF SY-SUBRC EQ 0.
-
> Here you have the open item
ENDIF.
ENDLOOP.
Max
2006 Jun 27 10:02 AM
2006 Jun 27 10:14 AM
Hi
Just only a little thing:
SELECT
AUGDT
AUGBL
ZUONR
GJAHR
BELNR
BUDAT
DMBTR
REBZG
KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_BSAD
FROM BSAD WHERE BUKRS = S_BUKRS
AND KUNNR IN S_KUNNR.
LOOP AT IT_BSAD.
If you want to know the document it's useless to use the ZUONR, but you should use only these fields:
READ TABLE IT_BSID WITH KEY KUNNR = IT_BSAD-KUNNR
BELNR = IT_BSAD-AUGBL
BUDAT = IT_BSAD-AUGDT.
IF SY-SUBRC EQ 0.
-
> Here you have the open item
ENDIF.
ENDLOOP.
max
2006 Jun 28 4:22 AM