Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
73 lines
2.2 KiB
ABAP
73 lines
2.2 KiB
ABAP
REPORT {{p}}news_dist_old.
|
|
|
|
* Legacy distribution report of the newspaper publisher.
|
|
* Shows the delivered copies and the returns of each newsagent.
|
|
|
|
TYPES ty_rate TYPE p LENGTH 8 DECIMALS 2.
|
|
|
|
TYPES: BEGIN OF ty_out,
|
|
agent TYPE {{p}}agent-agent_id,
|
|
name TYPE {{p}}agent-agent_name,
|
|
district TYPE {{p}}agent-district,
|
|
copies TYPE i,
|
|
returned TYPE i,
|
|
rate TYPE ty_rate,
|
|
END OF ty_out.
|
|
|
|
DATA: gt_agent TYPE STANDARD TABLE OF {{p}}agent,
|
|
gs_agent TYPE {{p}}agent,
|
|
gt_deliv TYPE STANDARD TABLE OF {{p}}deliv,
|
|
gs_deliv TYPE {{p}}deliv,
|
|
gs_out TYPE ty_out,
|
|
gt_out TYPE STANDARD TABLE OF ty_out,
|
|
gt_list TYPE STANDARD TABLE OF ty_out,
|
|
gv_date TYPE d,
|
|
gv_dist TYPE c LENGTH 4,
|
|
go_alv TYPE REF TO cl_salv_table.
|
|
|
|
SELECT-OPTIONS s_date FOR gv_date.
|
|
SELECT-OPTIONS s_dist FOR gv_dist.
|
|
|
|
START-OF-SELECTION.
|
|
SELECT * FROM {{p}}agent INTO TABLE gt_agent.
|
|
LOOP AT gt_agent INTO gs_agent.
|
|
SELECT * FROM {{p}}deliv INTO TABLE gt_deliv
|
|
WHERE agent_id = gs_agent-agent_id
|
|
AND del_date IN s_date.
|
|
IF gt_deliv IS NOT INITIAL.
|
|
CLEAR gs_out.
|
|
gs_out-agent = gs_agent-agent_id.
|
|
gs_out-name = gs_agent-agent_name.
|
|
gs_out-district = gs_agent-district.
|
|
LOOP AT gt_deliv INTO gs_deliv.
|
|
gs_out-copies = gs_out-copies + gs_deliv-del_copies.
|
|
gs_out-returned = gs_out-returned + gs_deliv-ret_copies.
|
|
ENDLOOP.
|
|
PERFORM calc_rate USING gs_out-returned gs_out-copies
|
|
CHANGING gs_out-rate.
|
|
APPEND gs_out TO gt_out.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
LOOP AT gt_out INTO gs_out WHERE district IN s_dist.
|
|
APPEND gs_out TO gt_list.
|
|
ENDLOOP.
|
|
SORT gt_list BY rate DESCENDING agent ASCENDING.
|
|
TRY.
|
|
cl_salv_table=>factory( IMPORTING r_salv_table = go_alv
|
|
CHANGING t_table = gt_list ).
|
|
go_alv->display( ).
|
|
CATCH cx_salv_msg.
|
|
ENDTRY.
|
|
|
|
FORM calc_rate USING iv_returned TYPE i
|
|
iv_copies TYPE i
|
|
CHANGING cv_rate TYPE ty_rate.
|
|
DATA lv_copies TYPE p LENGTH 15 DECIMALS 2.
|
|
lv_copies = iv_copies.
|
|
IF lv_copies > 0.
|
|
cv_rate = iv_returned * 100 / lv_copies.
|
|
ELSE.
|
|
CLEAR cv_rate.
|
|
ENDIF.
|
|
ENDFORM.
|