Files
2026-10-05 22:08:59 +02:00

3.0 KiB

1. Goal

Define the interface {{P}}IF_LOG_PLAN in package $TMP. The sawmill office and the sawyer's terminal use this interface to plan the cutting of a log. The interface is the contract. It fixes the reason codes, the limits and the two method signatures.

2. Open questions

None.

3. Context

  • A sawmill cuts logs into boards. A log has a diameter in millimetres and a length in centimetres. A board has a thickness in millimetres and a width in millimetres.
  • The office checks an order before the sawyer starts. The reason codes name the first check that fails: SIZE - a value is zero or negative. THICK - the board thickness is outside the limits. WIDTH - the board is wider than the log. LEN - the log is shorter than the minimum length. OK - the order is valid.
  • If the check returns OK, the office asks for the number of boards. The number of boards is the log diameter in millimetres divided by the board thickness in millimetres, rounded down.
  • The interface is the only object of this task. No class implements it here.

4. Contract

  • Create the interface {{P}}IF_LOG_PLAN in package $TMP.
  • The interface has exactly two methods: check and board_count.
  • Do not add other methods.

5. Business rules

  1. The interface defines the type ty_reason. ty_reason is a character type of length 10.
  2. The interface defines the type ty_count. ty_count is an integer type.
  3. The interface defines the structure type ty_log. ty_log has exactly the two components dia and len. dia is an integer, the log diameter in millimetres. len is an integer, the log length in centimetres.
  4. The interface defines the structure type ty_board. ty_board has exactly the two components thick and width. thick is an integer, the board thickness in millimetres. width is an integer, the board width in millimetres.
  5. The interface defines the constant structure c_reason. c_reason has exactly the five components ok, size, thick, width and len. All five components have the type ty_reason. The values are 'OK', 'SIZE', 'THICK', 'WIDTH' and 'LEN'.
  6. The interface defines the constant c_min_thick with the value 20, the constant c_max_thick with the value 100 and the constant c_min_len with the value 100. All three constants have the type i.
  7. The interface defines the method check. check has the importing parameters is_log (TYPE ty_log) and is_board (TYPE ty_board). check has the returning parameter rv_reason (TYPE ty_reason).
  8. The interface defines the method board_count. board_count has the importing parameters is_log (TYPE ty_log) and is_board (TYPE ty_board). board_count has the returning parameter rv_count (TYPE ty_count).

6. Constraints

  • Release target: SAP_BASIS 8.16.
  • Coding standards: Clean ABAP. No comment that restates the code.
  • Out of scope: do not create a class that implements {{P}}IF_LOG_PLAN. Do not create database tables or CDS views.

7. Acceptance

  • The interface is active and has no syntax error.
  • The hidden tests pass.
  • Write your own ABAP Unit tests for the interface.