‎2007 May 04 10:49 AM
HI All,
Please expalin the logic behind the code and how can we put it simpler this logic by reducing the number of lines of the following logic
FORM fisical_period.
data : l_start_month like v_start_month,
l_end_month like v_end_month.
data: l_current_year like t009b-bdatj,
l_variant like t009-periv.
call function 'CCODE_GET_FISCAL_YEAR_VARIANT'
EXPORTING
company_code = p_bukrs
IMPORTING
fiscal_year_variant = l_variant
EXCEPTIONS
company_code_not_found = 1
others = 2.
if sy-subrc <> 0.
message i368(00) with 'Unable to get Fiscal year'.
endif.
l_current_year = sy-datum(4).
call function 'FIRST_AND_LAST_DAY_IN_YEAR_GET'
EXPORTING
i_gjahr = l_current_year
i_periv = l_variant
IMPORTING
e_first_day = p_fiscal-low
e_last_day = p_fiscal-high
EXCEPTIONS
input_false = 1
t009_notfound = 2
t009b_notfound = 3
others = 4.
if sy-subrc <> 0.
message i368(00) with 'Unable to get the first and last day'.
endif.
if sy-datum < p_fiscal-low.
p_fiscal-low = p_fiscal-low - 365.
p_fiscal-high = p_fiscal-high - 365.
endif.
append p_fiscal.
v_start_month = p_fiscal-low+4(2).
v_end_month = p_fiscal-high+4(2).
if v_start_month >= 01 and v_start_month <= 03.
move 01 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 02 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 03 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 04 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 05 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 06 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 07 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 08 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 09 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 10 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 11 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 12 to fiscal_quarter_4-month.
append fiscal_quarter_4.
elseif v_start_month >= 04 and v_start_month <= 06.
move 04 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 05 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 06 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 07 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 08 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 09 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 10 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 11 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 12 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 01 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 02 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 03 to fiscal_quarter_4-month.
append fiscal_quarter_4.
elseif v_start_month >= 07 and v_start_month <= 09.
move 07 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 08 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 09 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 10 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 11 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 12 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 01 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 02 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 03 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 04 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 05 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 06 to fiscal_quarter_4-month.
append fiscal_quarter_4.
else.
move 10 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 11 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 12 to fiscal_quarter_1-month.
append fiscal_quarter_1.
move 01 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 02 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 03 to fiscal_quarter_2-month.
append fiscal_quarter_2.
move 04 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 05 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 06 to fiscal_quarter_3-month.
append fiscal_quarter_3.
move 07 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 08 to fiscal_quarter_4-month.
append fiscal_quarter_4.
move 09 to fiscal_quarter_4-month.
append fiscal_quarter_4.
endif.
IF NOT p_fiscal IS INITIAL.
perform get_fiscal_year.
ENDIF.
IF NOT p_fiscal IS INITIAL.
v_start_year = p_fiscal-low+2(2).
v_end_year = p_fiscal-high+2(2).
v_start_year = r_gfiscal-low+2(2).
v_end_year = r_gfiscal-high+2(2).
v_start_month = r_gfiscal-low+4(2).
v_end_month = r_gfiscal-high+4(2).
move 'Jan' to i_months-month.
append i_months.
move 'Feb' to i_months-month.
append i_months.
move 'Mar' to i_months-month.
append i_months.
move 'Apr' to i_months-month.
append i_months.
move 'May' to i_months-month.
append i_months.
move 'Jun' to i_months-month.
append i_months.
move 'Jul' to i_months-month.
append i_months.
move 'Aug' to i_months-month.
append i_months.
move 'Sep' to i_months-month.
append i_months.
move 'Oct' to i_months-month.
append i_months.
move 'Nov' to i_months-month.
append i_months.
move 'Dec' to i_months-month.
append i_months.
if v_end_month < v_start_month.
v_find_month = 13 - v_start_month.
do v_find_month times.
read table i_months index v_start_month.
move v_start_month to fiscal_months-month.
move i_months-month to fiscal_months-literal.
move v_start_year to fiscal_months-year.
append fiscal_months.
add 1 to: v_number_of_months, v_start_month.
enddo.
do v_end_month times.
read table i_months index sy-index.
move sy-index to fiscal_months-month.
move i_months-month to fiscal_months-literal.
move v_end_year to fiscal_months-year.
append fiscal_months.
add 1 to v_number_of_months.
enddo.
else.
v_find_month = v_end_month - v_start_month + 1.
do v_find_month times.
read table i_months index v_start_month.
move v_start_month to fiscal_months-month.
move i_months-month to fiscal_months-literal.
move v_start_year to fiscal_months-year.
append fiscal_months.
add 1 to: v_number_of_months, v_start_month.
enddo.
endif.
ENDIF.
ENDFORM.
form get_fiscal_year.
data : l_lst_day like sy-datum,
l_frst_day like sy-datum,
l_fisc_vnt like t009-periv, "fiscal year variant
l_fisc_prd like t009b-poper,
l_fisc_yr like t009b-bdatj,
l_lines like sy-index.
data : i_periods like table of periods with header line.
perform get_fiscal_year_variant using p_bukrs
changing l_fisc_vnt.
perform get_period_on_date using p_fiscal-low
l_fisc_vnt
changing l_fisc_prd
l_fisc_yr.
call function 'G_PERIODS_OF_YEAR_GET'
EXPORTING
variant = l_fisc_vnt
year = l_fisc_yr
IMPORTING
last_normal_period = l_fisc_prd
TABLES
i_periods = i_periods
EXCEPTIONS
variant_not_defined = 1
year_not_defined = 2
others = 3.
if sy-subrc <> 0.
message i368(00) with 'Unable to Convert Periods'.
endif.
describe table i_periods lines l_lines.
read table i_periods index 1.
move i_periods-datab to r_gfiscal-low.
read table i_periods index l_lines.
move : i_periods-datbi to r_gfiscal-high,
'I' to r_gfiscal-sign,
'BT' to r_gfiscal-option.
append r_gfiscal.
endform. " get_fiscal_year
form get_fiscal_year_variant using p_p_ccode like t001-bukrs
changing p_g_fisc_vnt like t009-periv.
call function 'CCODE_GET_FISCAL_YEAR_VARIANT'
EXPORTING
company_code = p_p_ccode
IMPORTING
fiscal_year_variant = p_g_fisc_vnt
EXCEPTIONS
company_code_not_found = 1
others = 2.
if sy-subrc <> 0.
message i368(00) with 'Unable to retrieve fiscal year variant'.
endif.
endform. " get_fiscal_year_variant
form get_period_on_date using p_p_dcfp like sy-datum
p_g_fisc_vnt like t009-periv
changing p_g_fisc_prd like t009b-poper
p_g_fisc_yr like t009b-bdatj.
call function 'DATE_TO_PERIOD_CONVERT'
exporting
i_date = p_p_dcfp
i_periv = p_g_fisc_vnt
importing
e_buper = p_g_fisc_prd
e_gjahr = p_g_fisc_yr
exceptions
input_false = 1
t009_notfound = 2
t009b_notfound = 3
others = 4
.
if sy-subrc <> 0.
message i368(00) with 'Unable to get period on date'.
endif.
endform. " get_period_on_date
Thanks
‎2007 May 04 10:56 AM
using MACRO's concept you can reduce the no. of lines in the code.
‎2007 May 04 11:05 AM
Hi,
Try to use FMs : (type quarter in fm name field and press f4.
FMs like follows will be dispalyed :
BKK_GET_QUARTER_DATE
HR99S00_TIME Generic time related functions
HR_99S_GET_DATES_QUARTER Get begin and end date of a qrtr
HR_99S_GET_QUARTER Get quarter
HRPAYBE_DMFA Function pool for DMFA
HR_BE_DAQ_CONDT_QUARTER Condition for declaring the Local Unit ID for DMFA
HR_BE_DAQ_QUARTER Get occupation line relevant data for DMFA
HRPAYBE_DMFA_WORKFLOW Workflow DMFA
HR_BE_DMFA_GET_QUARTER Retrieve quarter declared
KRGE
KR_GET_HEADQUARTER_BPLACE
SLIM_DATE_TOOLS
SLIM_GET_QUARTERLY_PERIODS
STS2 Time stream: Generate for periods
TSTR_PERIODS_QUARTERS Generate Time Stream for Quarters