Você está na página 1de 16

Exercícios -> ABAP novos comandos

Exercise 1 - String templates and formatting

Neste exercício, você deve imprimir o valor do imposto da classe formatando-o para ser exibido como
um decimal com dois dígitos.

Aqui está o código a ser usado, você só precisa adicionar o código para imprimir o valor da classe
lo_employee usando um modelo de string com formatação para uma moeda ou com decimais.

CLASS lcl_employee DEFINITION.


PUBLIC SECTION.

METHODS get_tax_amount RETURNING VALUE(rv_result) TYPE f.


ENDCLASS.

CLASS lcl_employee IMPLEMENTATION.


METHOD get_tax_amount.
rv_result = CONV f( '123512.89692' ).
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

DATA(lo_employee) = NEW lcl_employee( ).

Exercise 2 - Salary calculator instantiation

Temos uma calculadora de salários e precisamos da sua ajuda para ligar para o mecanismo da
calculadora. Complete o código com a instanciação lcl_salary_calculator, com todos os parâmetros
necessários. Por favor considerem:

 use o máximo possível dos novos comandos que você aprendeu hoje;
 você pode preencher os parâmetros com qualquer valor que desejar, basta respeitar o tipo de
cada campo;
 seu código tem que compilar, não pode gerar dumps ou exceções, e a saída deve ser diferente
de zero;
 você não pode alterar o código base;
 bônus: não usamos os parâmetros iv_begin_date e iv_end_date do construtor da calculadora de

salário no cálculo, então tente deixar em branco e vamos ver o que acontece 😉
Aqui está o código que você precisa para completar:

CLASS lcl_employee DEFINITION FINAL.


PUBLIC SECTION.
METHODS constructor
IMPORTING
iv_name TYPE string
iv_age TYPE i
iv_personal_number TYPE pernr_d
iv_contract_begin_date TYPE d.

METHODS get_name RETURNING VALUE(rv_name) TYPE


string.
METHODS get_age RETURNING VALUE(rv_age) TYPE
i.
METHODS get_personal_number RETURNING VALUE(rv_personal_number) TYPE
pernr.
METHODS get_contract_begin_date RETURNING VALUE(rv_contract_begin_date) TYPE
d.

PRIVATE SECTION.
DATA mv_name TYPE string.
DATA mv_age TYPE i.
DATA mv_personal_number TYPE pernr_d.
DATA mv_contract_begin_date TYPE d.

ENDCLASS.

CLASS lcl_employee IMPLEMENTATION.


METHOD get_name.
rv_name = mv_name.
ENDMETHOD.

METHOD get_age.
rv_age = mv_age.
ENDMETHOD.

METHOD get_personal_number.
rv_personal_number = mv_personal_number.
ENDMETHOD.

METHOD get_contract_begin_date.
rv_contract_begin_date = mv_contract_begin_date.
ENDMETHOD.

METHOD constructor.
mv_name = iv_name.
mv_age = iv_age.
mv_personal_number = iv_personal_number.
mv_contract_begin_date = iv_contract_begin_date.
ENDMETHOD.
ENDCLASS.
INTERFACE lif_salary_calculator.
TYPES BEGIN OF ty_s_quota.
TYPES tax_percentage TYPE prcal.
TYPES reduced_quota TYPE maxbt.
TYPES number_of_dependents TYPE i.
TYPES allowance TYPE maxbt.
TYPES END OF ty_s_quota.

TYPES BEGIN OF ty_s_payroll.


TYPES id TYPE char4.
TYPES amount TYPE maxbt.
TYPES number_of_days TYPE pranz.
TYPES END OF ty_s_payroll.

TYPES ty_t_payroll TYPE STANDARD TABLE OF ty_s_payroll WITH DEFAULT KEY.

TYPES BEGIN OF ty_s_py_result.


TYPES begin_date TYPE d.
TYPES end_date TYPE d.
TYPES id TYPE seqnr.
TYPES previous_results TYPE ty_t_payroll.
TYPES quotas TYPE ty_s_quota.
TYPES employee TYPE REF TO lcl_employee.
TYPES END OF ty_s_py_result.

TYPES ty_t_py_result TYPE STANDARD TABLE OF ty_s_py_result.

METHODS calculate RETURNING VALUE(rv_salary) TYPE pc207-betrg.


ENDINTERFACE.

CLASS lcl_salary_calculator DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_salary_calculator.

METHODS constructor
IMPORTING
iv_begin_date TYPE d
iv_end_date TYPE d
it_previous_payroll_results TYPE lif_salary_calculator=>ty_t_py_result.

PRIVATE SECTION.
DATA mv_begin_date TYPE d.
DATA mv_end_date TYPE d.
DATA mt_previous_payroll_results TYPE lif_salary_calculator=>ty_t_py_result.

ENDCLASS.
CLASS lcl_salary_calculator IMPLEMENTATION.
METHOD lif_salary_calculator~calculate.
DATA(ls_previous_payroll_result) = mt_previous_payroll_results[ 1 ].

LOOP AT ls_previous_payroll_result-previous_results ASSIGNING FIELD-


SYMBOL(<ls_previous_result>).
IF ls_previous_payroll_result-employee->get_age( ) > 50.
rv_salary = '2000.00'.
ELSE.
rv_salary = '1000.00'.
ENDIF.

rv_salary = rv_salary - ( rv_salary * ls_previous_payroll_result-quotas-


tax_percentage / 100 ) +
( <ls_previous_result>-amount * <ls_previous_result>-
number_of_days ) +
( ls_previous_payroll_result-quotas-allowance *
ls_previous_payroll_result-quotas-number_of_dependents )
- ls_previous_payroll_result-quotas-reduced_quota.
ENDLOOP.
ENDMETHOD.

METHOD constructor.
mv_begin_date = iv_begin_date.
mv_end_date = iv_end_date.
mt_previous_payroll_results = it_previous_payroll_results.
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
DATA(go_salary_calculator) = "your code here

WRITE: / go_salary_calculator->calculate( ).

Exercise 3 - Character conversion


Essa expressão é verdadeira ou falsa? Por quê?

IF ' ' = ` `.

ENDIF.
Exercise 4 - Validator instantiation
Temos um validador composto por uma lista de regras de validação. Precisamos da sua ajuda para
instanciar. Por favor, complete o código com a instanciação lcl_absence_validator, com todos os
parâmetros necessários. Tenha em mente:

 use o máximo possível dos novos comandos que você aprendeu hoje;
 você pode preencher os parâmetros com qualquer valor que desejar, basta respeitar o tipo de
cada campo;
 seu código tem que compilar, não pode gerar nenhum dump ou exceção;
 o resultado deve ser um 'X' (abap_true);
 você não pode alterar o código base;

Aqui está o código que você precisa alterar:

INTERFACE lif_absence_validation_rule.
TYPES BEGIN OF ty_s_absence.
TYPES id TYPE char2.
TYPES subtype TYPE char4.
TYPES begin_date TYPE d.
TYPES end_date TYPE d.
TYPES END OF ty_s_absence.

TYPES ty_t_rules TYPE STANDARD TABLE OF REF TO lif_absence_validation_rule WITH


DEFAULT KEY.

METHODS is_valid
IMPORTING
is_absence TYPE ty_s_absence
RETURNING
VALUE(rv_is_valid) TYPE abap_bool.
ENDINTERFACE.

INTERFACE lif_absence_validator.
METHODS is_valid
IMPORTING
is_absence TYPE lif_absence_validation_rule=>ty_s_absence
RETURNING
VALUE(rv_is_valid) TYPE abap_bool.

ENDINTERFACE.

CLASS lcl_absence_subtype_val_rule DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_absence_validation_rule.

ENDCLASS.
CLASS lcl_absence_subtype_val_rule IMPLEMENTATION.
METHOD lif_absence_validation_rule~is_valid.
IF is_absence-subtype IS NOT INITIAL.
rv_is_valid = abap_true.
ENDIF.
ENDMETHOD.
ENDCLASS.

CLASS lcl_absence_duration_val_rule DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_absence_validation_rule.

ENDCLASS.

CLASS lcl_absence_duration_val_rule IMPLEMENTATION.


METHOD lif_absence_validation_rule~is_valid.
IF is_absence-begin_date <= is_absence-end_date.
rv_is_valid = abap_true.
ENDIF.
ENDMETHOD.
ENDCLASS.

CLASS lcl_absence_id_val_rule DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_absence_validation_rule.

ENDCLASS.

CLASS lcl_absence_id_val_rule IMPLEMENTATION.


METHOD lif_absence_validation_rule~is_valid.
IF is_absence-id IS NOT INITIAL.
rv_is_valid = abap_true.
ENDIF.
ENDMETHOD.
ENDCLASS.

CLASS lcl_absence_validator DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_absence_validator.

METHODS constructor
IMPORTING
it_validation_rules TYPE lif_absence_validation_rule=>ty_t_rules.

PRIVATE SECTION.
DATA mt_validation_rules TYPE lif_absence_validation_rule=>ty_t_rules.

ENDCLASS.
CLASS lcl_absence_validator IMPLEMENTATION.
METHOD lif_absence_validator~is_valid.
FIELD-SYMBOLS <lo_validation_rule> TYPE REF TO lif_absence_validation_rule.

LOOP AT mt_validation_rules ASSIGNING <lo_validation_rule>.


IF <lo_validation_rule>->is_valid( is_absence ) = abap_false.
RETURN.
ENDIF.
ENDLOOP.

rv_is_valid = abap_true.
ENDMETHOD.

METHOD constructor.
mt_validation_rules = it_validation_rules.
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
DATA(lv_result) = " your code here

WRITE lv_result.

Exercise 5 - Salary calculator requirements


Temos um requisito para você codificar. Precisamos de uma calculadora de salário que calcule um
salário com base nas seguintes condições:

SE estivermos calculando o salário de um funcionário em tempo integral, devemos usar um salário base
de 2.000,00 para o cálculo. Se estivermos fazendo isso por meio período, 1.000,00 como salário base.

Também precisamos calcular um bônus, que pode ser de dois tipos: fixo e variável. Se for fixo, e o
funcionário for sênior, o bônus será de 4.000,00. Se o funcionário for júnior, temos um bônus fixo de
1.000,0. Se o bônus for variável e o funcionário for desenvolvedor, o bônus será igual a 10% do
pagamento adicional. Se o funcionário for arquiteto, esse bônus será de 15% do pagamento adicional. O
salário total será a soma do salário base, do bônus e do adicional.

Para os parâmetros a seguir, apenas essas entradas são aceitas e qualquer outra diferente deve gerar a
exceção lcx_invalid_parameter:

iv_career_level = 'sênior' ou 'júnior'

iv_role = 'dev' ou 'arquiteto'


iv_contract_type = ‘fulltime’ ou ‘parttime’

iv_bonus_type = 'fixo' ou 'variável'

Por favor, complete o código do método de cálculo da classe lcl_salary_calculator e chame-o dentro da
instrução TRY no START-OF-SELECTION. Tenha em mente:

 use o máximo possível dos novos comandos que você aprendeu hoje;
 você pode preencher os parâmetros com qualquer valor que desejar, basta respeitar o tipo de
cada campo;
 seu código tem que compilar, ele pode gerar a exceção lcx_invalid_parameter ou uma
quantidade como resultado;
 você não pode alterar o código base;

Aqui está o código que você precisa alterar:

CLASS lcx_invalid_parameter DEFINITION FINAL


INHERITING FROM cx_static_check.
ENDCLASS.

CLASS lcx_invalid_parameter IMPLEMENTATION.


ENDCLASS.

INTERFACE lif_salary_calculator.
METHODS calculate RETURNING VALUE(rv_salary) TYPE pc207-betrg RAISING
lcx_invalid_parameter.
ENDINTERFACE.

CLASS lcl_salary_calculator DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_salary_calculator.

METHODS constructor
IMPORTING
iv_career_level TYPE string
iv_role TYPE string
iv_contract_type TYPE string
iv_additional_payment TYPE maxbt
iv_bonus_type TYPE string.

PRIVATE SECTION.
DATA mv_career_level TYPE string.
DATA mv_role TYPE string.
DATA mv_contract_type TYPE string.
DATA mv_additional_payment TYPE maxbt.
DATA mv_bonus_type TYPE string.

ENDCLASS.
CLASS lcl_salary_calculator IMPLEMENTATION.
METHOD lif_salary_calculator~calculate.
" your code here
ENDMETHOD.

METHOD constructor.
mv_career_level = iv_career_level.
mv_role = iv_role.
mv_contract_type = iv_contract_type.
mv_additional_payment = iv_additional_payment.
mv_bonus_type = iv_bonus_type.
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
TRY.
DATA(gv_salary) = CAST lif_salary_calculator( NEW lcl_salary_calculator(
iv_career_level = 'senior'
iv_role = 'dev'
iv_contract_type = 'fulltime'
iv_additional_payment = '1000.0'
iv_bonus_type = 'variable' ) )->calculate( ).
CATCH lcx_invalid_parameter.
WRITE 'Oh damn'.
ENDTRY.

WRITE gv_salary.

Exercise 6 - Employee data filler without loops


Temos um preenchimento de dados de funcionários, que copia informações de uma tabela de
resultados de folha de pagamento para uma tabela de dados de funcionários. Já temos um código que
funciona, mas precisamos que você altere o código, para fazer a mesma lógica mas sem loop:

 use o máximo possível dos novos comandos que você aprendeu hoje;
 você não precisa alterar o START-OF-SELECTION desta vez;
 seu código tem que compilar, não pode gerar exceções e a saída deve ser a mesma quando
tínhamos um loop;
 você tem que mudar o código base;

Aqui está o código que você precisa alterar:


INTERFACE lif_employee_data_filler.
TYPES BEGIN OF ty_s_py_result.
TYPES id TYPE seqnr.
TYPES begin_date TYPE d.
TYPES total_salary TYPE maxbt.
TYPES END OF ty_s_py_result.

TYPES ty_t_py_result TYPE STANDARD TABLE OF ty_s_py_result.

TYPES BEGIN OF ty_s_data.


TYPES id TYPE seqnr.
TYPES salary TYPE maxbt.
TYPES contract_begin_date TYPE d.
TYPES END OF ty_s_data.

TYPES ty_t_data TYPE STANDARD TABLE OF ty_s_data WITH DEFAULT KEY.

METHODS fill RETURNING VALUE(rt_data) TYPE ty_t_data.


ENDINTERFACE.

CLASS lcl_employee_data_filler DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_employee_data_filler.

METHODS constructor
IMPORTING
it_payroll_result TYPE lif_employee_data_filler=>ty_t_py_result.

PRIVATE SECTION.
DATA mt_payroll_result TYPE lif_employee_data_filler=>ty_t_py_result.

ENDCLASS.

CLASS lcl_employee_data_filler IMPLEMENTATION.


METHOD lif_employee_data_filler~fill.
DATA ls_employee_data TYPE lif_employee_data_filler=>ty_s_data.
FIELD-SYMBOLS <ls_payroll_result> TYPE
lif_employee_data_filler=>ty_s_py_result.

LOOP AT mt_payroll_result ASSIGNING <ls_payroll_result>.


ls_employee_data-id = <ls_payroll_result>-id.
ls_employee_data-salary = <ls_payroll_result>-total_salary.
ls_employee_data-contract_begin_date = <ls_payroll_result>-begin_date.
APPEND ls_employee_data TO rt_data.
ENDLOOP.
ENDMETHOD.

METHOD constructor.
mt_payroll_result = it_payroll_result.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
FIELD-SYMBOLS <gs_employee_data> TYPE lif_employee_data_filler=>ty_s_data.

DATA(gt_data) = CAST lif_employee_data_filler( NEW lcl_employee_data_filler(


VALUE #( ( id = '001' total_salary = '2000.0' begin_date = '20200101' )
( id = '002' total_salary = '3000.0' begin_date = '20200201' )
( id = '003' total_salary = '4000.0' begin_date = '20200111' )
( id = '004' total_salary = '1500.0' begin_date = '20200112' ) ) ) )-
>fill( ).

LOOP AT gt_data ASSIGNING <gs_employee_data>.


WRITE / <gs_employee_data>-id.
WRITE / <gs_employee_data>-salary.
WRITE / <gs_employee_data>-contract_begin_date.
ENDLOOP.

Exercise 7 - Cost accumulator without loops


Temos um acumulador de custos, que soma os custos de todas as compras que uma empresa fez em um
mês. Já temos um código que funciona, mas precisamos que você altere o código, faça a mesma lógica
mas sem usar um loop.

 use o máximo possível dos novos comandos que você aprendeu hoje;
 você não precisa alterar o START-OF-SELECTION;
 seu código tem que compilar, não pode gerar exceções e a saída deve ser a mesma quando
tínhamos um loop;
 você tem que mudar o código base;

Aqui está o código que você precisa alterar:


INTERFACE lif_cost_accumulator.
TYPES BEGIN OF ty_s_purchase.
TYPES id TYPE char4.
TYPES amount TYPE maxbt.
TYPES END OF ty_s_purchase.

TYPES ty_t_purchase TYPE STANDARD TABLE OF ty_s_purchase WITH DEFAULT KEY.

METHODS accumulate RETURNING VALUE(rv_total_cost) TYPE maxbt.


ENDINTERFACE.
CLASS lcl_cost_accumulator DEFINITION FINAL.
PUBLIC SECTION.
INTERFACES lif_cost_accumulator.

METHODS constructor
IMPORTING
it_purchase TYPE lif_cost_accumulator=>ty_t_purchase.

PRIVATE SECTION.
DATA mt_purchase TYPE lif_cost_accumulator=>ty_t_purchase.

ENDCLASS.

CLASS lcl_cost_accumulator IMPLEMENTATION.


METHOD lif_cost_accumulator~accumulate.
FIELD-SYMBOLS <ls_purchase> TYPE lif_cost_accumulator=>ty_s_purchase.

LOOP AT mt_purchase ASSIGNING <ls_purchase>.


rv_total_cost = rv_total_cost + <ls_purchase>-amount.
ENDLOOP.
ENDMETHOD.

METHOD constructor.
mt_purchase = it_purchase.
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
DATA(gv_cost) = CAST lif_cost_accumulator( NEW lcl_cost_accumulator(
VALUE #( ( id = '001' amount = '2000.00' )
( id = '002' amount = '1000.00' )
( id = '003' amount = '4000.00' )
( id = '004' amount = '2000.00' ) ) ) )->accumulate( ).

WRITE gv_cost.

Exercise 8 - Absences filter


Temos uma tabela de faltas a serem pagas, que é preenchida com base em duas outras tabelas de faltas,
dentro de loops, como você pode ver no código abaixo. Precisamos de sua ajuda para substituir a lógica,
para parar de usar loops.

 use o máximo possível dos novos comandos que você aprendeu hoje;
 você não precisa alterar o START-OF-SELECTION;
 seu código tem que compilar, não pode gerar exceções e a saída deve ser a mesma quando
tínhamos um loop;

Aqui está o código que você precisa alterar:


INTERFACE lif_absences_to_be_paid.
TYPES BEGIN OF ty_s_paid_absence.
TYPES code TYPE char4.
TYPES subtype TYPE char4.
TYPES END OF ty_s_paid_absence.

TYPES ty_t_paid_absence TYPE SORTED TABLE OF ty_s_paid_absence WITH UNIQUE KEY


code subtype.

TYPES BEGIN OF ty_s_absence.


TYPES code TYPE char4.
TYPES subtype TYPE char4.
TYPES begin_date TYPE d.
TYPES end_date TYPE d.
TYPES amount TYPE maxbt.
TYPES END OF ty_s_absence.

TYPES ty_t_absence TYPE SORTED TABLE OF ty_s_absence WITH UNIQUE KEY code
subtype.

METHODS get RETURNING VALUE(rt_result) TYPE ty_t_absence.


ENDINTERFACE.

CLASS lcl_absences_to_be_paid DEFINITION FINAL.


PUBLIC SECTION.
INTERFACES lif_absences_to_be_paid.

METHODS constructor
IMPORTING
it_paid_absences TYPE lif_absences_to_be_paid=>ty_t_paid_absence
it_absences TYPE lif_absences_to_be_paid=>ty_t_absence.

PRIVATE SECTION.
DATA mt_paid_absences TYPE lif_absences_to_be_paid=>ty_t_paid_absence.
DATA mt_absences TYPE lif_absences_to_be_paid=>ty_t_absence.

ENDCLASS.

CLASS lcl_absences_to_be_paid IMPLEMENTATION.


METHOD lif_absences_to_be_paid~get.
LOOP AT mt_absences ASSIGNING FIELD-SYMBOL(<ls_absence>).
LOOP AT mt_paid_absences ASSIGNING FIELD-SYMBOL(<ls_paid_absence>) WHERE
code = <ls_absence>-code
AND
subtype = <ls_absence>-subtype.
APPEND <ls_absence> TO rt_result.

ENDLOOP.
ENDLOOP.
ENDMETHOD.

METHOD constructor.
mt_paid_absences = it_paid_absences.
mt_absences = it_absences.
ENDMETHOD.
ENDCLASS.
 você tem que mudar o código base;

START-OF-SELECTION.
DATA(gt_result) = CAST lif_absences_to_be_paid( NEW lcl_absences_to_be_paid(
it_paid_absences = VALUE #( ( code = '0001' subtype = '0001' )
( code = '0001' subtype = '0002' )
( code = '0001' subtype = '0003' )
( code = '0001' subtype = '0004' )
( code = '0002' subtype = '1000' )
( code = '0002' subtype = '2000' )
( code = '0003' subtype = '2000' )
( code = '0004' subtype = '4000' ) )
it_absences = VALUE #( ( code = '2000' subtype = '0001' begin_date =
'20200101' end_date = '20200112' amount = '1200.0' )
( code = '3000' subtype = '0001' begin_date =
'20200101' end_date = '20200112' amount = '1300.0' )
( code = '0001' subtype = '0001' begin_date =
'20200101' end_date = '20200112' amount = '1400.0' )
( code = '0002' subtype = '0001' begin_date =
'20200101' end_date = '20200112' amount = '1500.0' )
( code = '0002' subtype = '2000' begin_date =
'20200101' end_date = '20200112' amount = '1600.0' )
( code = '0003' subtype = '0001' begin_date =
'20200101' end_date = '20200112' amount = '1700.0' )
( code = '0003' subtype = '1000' begin_date =
'20200101' end_date = '20200112' amount = '1800.0' )
( code = '0004' subtype = '4000' begin_date =
'20200101' end_date = '20200112' amount = '1850.0' )
( code = '0004' subtype = '0001' begin_date =
'20200101' end_date = '20200112' amount = '1900.0' ) ) ) )->get( ).

LOOP AT gt_result ASSIGNING FIELD-SYMBOL(<gs_result>).


WRITE / <gs_result>-code.
WRITE / <gs_result>-subtype.
WRITE / <gs_result>-begin_date.
WRITE / <gs_result>-end_date.
WRITE / <gs_result>-amount.
ENDLOOP.

Exercise for Table Expressions


Neste exercício, temos uma tabela e queremos que você:

1. Leia a entrada para o funcionário John W. e imprima o campo de imposto.


2. Altere a entrada do funcionário John W. para aumentar seu campo fiscal.
3. Verifique se a funcionária Julie existe e, se existir, imprima o valor do imposto.

Aqui está o código para você começar:


TYPES: BEGIN OF ty_s_employee_data,
name TYPE char80,
tax TYPE maxbt,
END OF ty_s_employee_data.
TYPES: ty_t_employee_data TYPE STANDARD TABLE OF ty_s_employee_data WITH DEFAULT
KEY.

DATA(lt_employees) = VALUE ty_t_employee_data( ( name = 'John' tax = '300' )


( name = 'Julie' tax = '450' )
( name = 'Michael' tax = '250' )
( name = 'John W.' tax = '0' ) ).

Exercise for LOOP AT GROUP


Neste cenário, temos uma tabela de funcionários com sua Área de Funcionários. Agora precisamos
exibir quantos funcionários temos em cada área e os nomes. Você deve usar LOOP AT...GROUP
BY/LOOP AT GROUP para este exercício.

Você usa este código para iniciar:

TYPES: BEGIN OF ty_s_employee_data,


name TYPE char80,
area TYPE char30,
END OF ty_s_employee_data.
TYPES: ty_t_employee_data TYPE STANDARD TABLE OF ty_s_employee_data WITH DEFAULT
KEY.

DATA(lt_employees) = VALUE ty_t_employee_data( ( name = 'John' area = 'GS FIN'


)
( name = 'Julie' area = 'GS FIN'
)
( name = 'Michael' area = 'GS HCM'
)
( name = 'John W.' area = 'GS LOG'
)
( name = 'Katrin' area = 'GS LOG'
)
( name = 'Thomas' area = 'GS HCM'
)
( name = 'Richard' area = 'GS FIN'
) ).
Exercise for dynamic structure processing
Aqui neste exercício, você deve preencher o código do método print_tax para funcionar de forma
genérica, e imprimir o valor no campo com o tipo MAXBT.

Segue o código do exercício:

CLASS lcl_print_amount DEFINITION.

PUBLIC SECTION.
METHODS print_amount IMPORTING ir_structure TYPE REF TO data.
ENDCLASS.

CLASS lcl_print_amount IMPLEMENTATION.


METHOD print_amount.
"Implement you code here
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

DATA(lo_print) = NEW lcl_print_amount( ).

lo_print->print_amount( NEW zhrabap_adv_tax_struct_1( name = 'John' area = 'GS'


amount = '213' waers = 'BRL' ) ).

lo_print->print_amount( NEW zhrabap_adv_tax_struct_2( name = 'John' tax = '540'


waers = 'BRL' ) ).

lo_print->print_amount( NEW zhrabap_adv_tax_struct_3( name = 'John' inss = '300'


waers = 'BRL' ) ).

Você também pode gostar