Application Development 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: 

FI problems, help!!!

Former Member
0 Kudos

who can tell me how to get the BSEG-BELNR according to BSEG-AUGBL without BSEG-ZUONR?

Thanks!!!

1 ACCEPTED SOLUTION

andreas_mann3
Active Contributor
0 Kudos

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

18 REPLIES 18

andreas_mann3
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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.

Former Member
0 Kudos

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

Former Member
0 Kudos

Andreas,you are right, i just don't know which 'BELNR' is needed.

in our system, 'ZUONR' is not fully maintained.

0 Kudos

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

Former Member
0 Kudos

get BSEG-BELNR according to BSEG-AUGBL without BSEG-ZUONR

0 Kudos

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

Former Member
0 Kudos

Thank you, let me take a look.

Former Member
0 Kudos

but i want to get unclear data...

0 Kudos

Hi

Uhm??? I don't understand you're speaking about payment or not?

Can you explain what you need to get?

Max

Former Member
0 Kudos

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 ).

0 Kudos

Hi,

you've to consider the correct fiscal year (gjahr)

because an augbl could match items of several years!

Andreas

0 Kudos

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

Former Member
0 Kudos

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>

0 Kudos

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

Former Member
0 Kudos

thank you, i will check it tomorrow

0 Kudos

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

Former Member
0 Kudos

<b>THANKS FOR ALL REPLYS.</b>