Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DATA: "lin TYPE i,
- lv_bbelnr TYPE bkpf-belnr,
- lv_wrbtr TYPE wrbtr,
- BEGIN OF lt_t001u OCCURS 0,
- abukr TYPE t001u-abukr,
- END OF lt_t001u.
- DATA: lv_is_gas TYPE abap_bool,
- ls_bkpf TYPE bkpf.
- MOVE space TO gv_payment.
- CLEAR gt_hbseg. REFRESH gt_hbseg.
- CLEAR gv_pay_wzach. CLEAR gv_pay_dzach.
- CLEAR gv_buv_wzach. CLEAR gv_buv_dzach.
- SELECT * FROM *bseg INTO TABLE gt_hbseg
- WHERE bukrs EQ iv_bukrs
- AND gjahr EQ iv_gjahr
- AND belnr EQ iv_belnr.
- LOOP AT gt_hbseg WHERE koart EQ 'S'.
- CLEAR skb1.
- SELECT SINGLE * FROM skb1 WHERE bukrs EQ gt_hbseg-bukrs
- AND saknr EQ gt_hbseg-hkont.
- IF gt_hbseg-shkzg = 'H'.
- gt_hbseg-wrbtr = ( -1 ) * gt_hbseg-wrbtr.
- gt_hbseg-dmbtr = ( -1 ) * gt_hbseg-dmbtr.
- ENDIF.
- CLEAR ls_bkpf.
- SELECT SINGLE * FROM bkpf INTO ls_bkpf
- WHERE bukrs = gt_hbseg-bukrs
- AND belnr = gt_hbseg-belnr
- AND gjahr = gt_hbseg-gjahr.
- IF skb1-xgkon NE space.
- gv_pay_wzach = gv_pay_wzach + gt_hbseg-wrbtr.
- gv_pay_dzach = gv_pay_dzach + gt_hbseg-dmbtr.
- gv_shkz = gt_hbseg-shkzg.
- MOVE 'X' TO gv_payment.
- ELSEIF gt_hbseg-ktosl EQ 'BUV'.
- gv_buv_wzach = gv_buv_wzach + gt_hbseg-wrbtr.
- gv_buv_dzach = gv_buv_dzach + gt_hbseg-dmbtr.
- gv_shkz = gt_hbseg-shkzg.
- CLEAR lt_t001u[].
- SELECT abukr FROM t001u INTO TABLE lt_t001u
- WHERE vbukr EQ iv_bukrs.
- DELETE ADJACENT DUPLICATES FROM lt_t001u.
- LOOP AT lt_t001u.
- SELECT SINGLE belnr FROM bvor INTO lv_bbelnr
- WHERE bvorg = iv_bvorg
- AND bukrs = lt_t001u-abukr
- AND gjahr = iv_gjahr.
- IF sy-subrc = 0.
- SELECT SINGLE * FROM bkpf
- WHERE bukrs EQ lt_t001u-abukr
- AND belnr = lv_bbelnr
- AND gjahr EQ iv_gjahr.
- IF sy-subrc = 0.
- SELECT * FROM bseg
- WHERE bukrs EQ bkpf-bukrs
- AND belnr EQ bkpf-belnr
- AND gjahr EQ bkpf-gjahr
- AND koart EQ 'S'.
- IF bseg-shkzg = 'H'.
- bseg-wrbtr = ( -1 ) * bseg-wrbtr.
- bseg-dmbtr = ( -1 ) * bseg-dmbtr.
- ENDIF.
- CLEAR skb1.
- SELECT SINGLE * FROM skb1 WHERE bukrs EQ bseg-bukrs
- AND saknr EQ bseg-hkont.
- IF skb1-xgkon NE space.
- gv_pay_wzach = gv_pay_wzach + bseg-wrbtr.
- gv_pay_dzach = gv_pay_dzach + bseg-dmbtr.
- gv_shkz = gt_hbseg-shkzg.
- gv_buv_wzach = gv_buv_wzach - bseg-wrbtr.
- gv_buv_dzach = gv_buv_dzach - bseg-dmbtr.
- MOVE 'X' TO gv_payment.
- ENDIF.
- ENDSELECT.
- ENDIF.
- ENDIF.
- ENDLOOP.
- ENDIF.
- ENDLOOP.
- **************
- * Упростить
- IF gv_payment EQ 'X'.
- IF iv_koart = gc_koart_d.
- LOOP AT gt_hbseg WHERE ( koart EQ 'D'
- AND kunnr NE gt_bsid-kunnr
- OR koart EQ 'K' )
- AND buzei NE gt_bsid-buzei
- AND shkzg NE gt_bsid-shkzg.
- EXIT.
- ENDLOOP.
- ENDIF.
- IF iv_koart = gc_koart_k.
- LOOP AT gt_hbseg WHERE ( koart EQ 'K'
- AND lifnr NE gt_bsid-lifnr
- OR koart EQ 'D' )
- AND buzei NE gt_bsid-buzei
- AND shkzg NE gt_bsid-shkzg.
- EXIT.
- ENDLOOP.
- ENDIF.
- IF sy-subrc EQ 0 OR gv_buv_wzach NE 0 OR gv_buv_dzach NE 0.
- * and payment (and/or clearing) and reckoning in one document
- CLEAR gv_payment.
- EXIT.
- ENDIF.
- * clear: pay_wzach, pay_dzach.
- IF gt_bsid-shkzg EQ 'H'.
- gt_bsid-dmbtr = gt_bsid-dmbtr * ( -1 ).
- gt_bsid-wrbtr = gt_bsid-wrbtr * ( -1 ).
- ENDIF.
- ENDIF.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement