Lunx, у меня такая формочка получилась в свое время.
Таблички видно по коду
Code:
*---------------------------------------------------------------------*
* FORM collect_vendors_docs_curr *
*---------------------------------------------------------------------*
FORM collect_vendors_docs_curr.
*********************************************************
* Get all doc. numbers and amounts for customer & CC pair
* (delivery)
SELECT belnr AS doc_num gjahr SUM( wrbtr ) AS del_pos
waers xblnr bschl
INTO CORRESPONDING FIELDS OF TABLE gt_open_d FROM bsak
WHERE lifnr EQ <g_init>-client AND
bukrs EQ <g_init>-bukrs AND
budat LE rbudat AND
augdt GT rbudat AND
bschl IN r_bschl_d AND
bstat NE c_noted
GROUP by belnr gjahr waers xblnr bschl.
LOOP AT gt_open_d INTO g_poz.
CLEAR: g_sum, g_plus_sum, g_minus_sum.
cnt = sy-tabix.
SELECT SUM( t2~wrbtr ) INTO g_plus_sum FROM bsak AS t1
JOIN bsak AS t2
ON t1~bukrs EQ t2~bukrs AND
t1~lifnr EQ t2~lifnr AND
t1~augdt EQ t2~augdt AND
t1~augbl EQ t2~augbl
WHERE t1~belnr EQ g_poz-doc_num AND
t1~gjahr EQ g_poz-gjahr AND
t2~budat LE rbudat AND
t2~belnr NE g_poz-doc_num AND
t2~gjahr NE g_poz-gjahr AND
t2~bstat NE c_noted AND
t2~shkzg EQ 'S'.
SELECT SUM( t2~wrbtr ) INTO g_minus_sum FROM bsak AS t1
JOIN bsak AS t2
ON t1~bukrs EQ t2~bukrs AND
t1~lifnr EQ t2~lifnr AND
t1~augdt EQ t2~augdt AND
t1~augbl EQ t2~augbl
WHERE t1~belnr EQ g_poz-doc_num AND
t1~gjahr EQ g_poz-gjahr AND
t2~budat LE rbudat AND
t2~belnr NE g_poz-doc_num AND
t2~gjahr NE g_poz-gjahr AND
t2~bstat NE c_noted AND
t2~shkzg EQ 'H'.
g_sum = g_plus_sum - g_minus_sum.
g_poz-del_pos = g_poz-del_pos + g_sum.
MODIFY gt_open_d FROM g_poz INDEX cnt.
ENDLOOP.
SELECT belnr AS doc_num gjahr SUM( wrbtr ) AS del_pos
waers xblnr bschl
APPENDING CORRESPONDING FIELDS OF TABLE gt_open_d FROM bsik
WHERE lifnr EQ <g_init>-client AND
bukrs EQ <g_init>-bukrs AND
budat LE rbudat AND
bschl IN r_bschl_d AND
bstat NE c_noted
GROUP by belnr gjahr waers xblnr bschl.
* Get partly cleared doc. numbers and amounts for customer & CC pair
* (delivery)
SELECT bd1~belnr AS doc_num bd1~gjahr
SUM( ba~wrbtr ) AS pay_pos
INTO CORRESPONDING FIELDS OF TABLE gt_open_d_ext
FROM bsik AS bd1
JOIN bsik AS bd2 ON bd1~bukrs = bd2~bukrs AND
bd1~lifnr = bd2~lifnr AND
bd1~belnr = bd2~rebzg AND
bd1~buzei = bd2~rebzz AND
bd1~gjahr = bd2~rebzj
JOIN bsak AS ba ON ba~bukrs = bd2~bukrs AND
ba~lifnr = bd2~lifnr AND
ba~augbl = bd2~belnr AND
ba~augdt = bd2~budat
WHERE bd1~lifnr EQ <g_init>-client AND
bd1~bukrs EQ <g_init>-bukrs AND
bd1~budat LE rbudat AND
bd1~bschl IN r_bschl_d AND
bd1~bstat NE c_noted AND
bd2~budat LE rbudat AND
bd2~bstat NE c_noted AND
ba~bschl IN r_bschl_p AND
ba~budat LE rbudat AND
ba~bstat NE c_noted
GROUP by bd1~belnr bd1~gjahr
ORDER BY bd1~belnr bd1~gjahr.
*********************************************************
* Get all doc. numbers and amounts for customer & CC pair
* (payment)
SELECT belnr AS doc_num gjahr SUM( wrbtr ) AS pay_pos waers bschl
INTO CORRESPONDING FIELDS OF TABLE gt_open_p FROM bsak
WHERE lifnr EQ <g_init>-client AND
bukrs EQ <g_init>-bukrs AND
budat LE rbudat AND
augdt GT rbudat AND
bschl IN r_bschl_p AND
bstat NE c_noted
GROUP by belnr gjahr waers bschl.
LOOP AT gt_open_p INTO g_poz.
CLEAR: g_sum, g_plus_sum, g_minus_sum.
cnt = sy-tabix.
SELECT SUM( t2~wrbtr ) INTO g_plus_sum FROM bsak AS t1
JOIN bsak AS t2
ON t1~bukrs EQ t2~bukrs AND
t1~lifnr EQ t2~lifnr AND
t1~augdt EQ t2~augdt AND
t1~augbl EQ t2~augbl
WHERE t1~belnr EQ g_poz-doc_num AND
t1~gjahr EQ g_poz-gjahr AND
t2~budat LE rbudat AND
t2~belnr NE g_poz-doc_num AND
t2~gjahr NE g_poz-gjahr AND
t2~bstat NE c_noted AND
t2~shkzg EQ 'S'.
SELECT SUM( t2~wrbtr ) INTO g_minus_sum FROM bsak AS t1
JOIN bsak AS t2
ON t1~bukrs EQ t2~bukrs AND
t1~lifnr EQ t2~lifnr AND
t1~augdt EQ t2~augdt AND
t1~augbl EQ t2~augbl
WHERE t1~belnr EQ g_poz-doc_num AND
t1~gjahr EQ g_poz-gjahr AND
t2~budat LE rbudat AND
t2~belnr NE g_poz-doc_num AND
t2~gjahr NE g_poz-gjahr AND
t2~bstat NE c_noted AND
t2~shkzg EQ 'H'.
g_sum = g_minus_sum - g_plus_sum.
g_poz-pay_pos = g_poz-pay_pos + g_sum.
MODIFY gt_open_p FROM g_poz INDEX cnt.
ENDLOOP.
SELECT belnr AS doc_num gjahr SUM( wrbtr ) AS pay_pos waers bschl
APPENDING CORRESPONDING FIELDS OF TABLE gt_open_p FROM bsik
WHERE lifnr EQ <g_init>-client AND
bukrs EQ <g_init>-bukrs AND
budat LE rbudat AND
bschl IN r_bschl_p AND
bstat NE c_noted
GROUP by belnr gjahr waers bschl.
* Get partly cleared doc. numbers and amounts for customer & CC pair
* (payment)
SELECT bd1~belnr AS doc_num bd1~gjahr
SUM( ba~wrbtr ) AS del_pos
INTO CORRESPONDING FIELDS OF TABLE gt_open_p_ext
FROM bsik AS bd1
JOIN bsik AS bd2 ON bd1~bukrs = bd2~bukrs AND
bd1~lifnr = bd2~lifnr AND
bd1~belnr = bd2~rebzg AND
bd1~buzei = bd2~rebzz AND
bd1~gjahr = bd2~rebzj
JOIN bsak AS ba ON ba~bukrs = bd2~bukrs AND
ba~lifnr = bd2~lifnr AND
ba~augbl = bd2~belnr AND
ba~augdt = bd2~budat
WHERE bd1~lifnr EQ <g_init>-client AND
bd1~bukrs EQ <g_init>-bukrs AND
bd1~budat LE rbudat AND
bd1~bschl IN r_bschl_p AND
bd1~bstat NE c_noted AND
bd2~budat LE rbudat AND
bd2~bstat NE c_noted AND
ba~bschl EQ r_bschl_d AND
ba~budat LE rbudat AND
ba~bstat NE c_noted
GROUP by bd1~belnr bd1~gjahr
ORDER BY bd1~belnr bd1~gjahr.
ENDFORM.