calm написал(а):
Получается, что я этом расширении могу только исправить уже преварительно сгенерированный по "старым" правилам график?
Т.е. должен сам своим абапом поправить и оргв и тип дня?
Туда приходит сгенерированный график, его нужно поправить полностью как нужно.
Вот код, который я как-то написал для себя. Предпологалось сделать настроечную таблицу, но так руку не дошли. Замены прописаны прямо в коде.
В ZXP01U03 вставлен вызов ФМ
Code:
*
* Использую для облегчения генерации графиков.
*
CALL FUNCTION 'Z_HR_PT_T552A_GEN_HELPER'
EXPORTING
STANDARD_WORK_SCHEDULE = STANDARD_WORK_SCHEDULE
IMPORTING
MOD_WORK_SCHEDULE = MOD_WORK_SCHEDULE.
Сам ФМ. Настройка выполняется вызовом
perform CheckDate using '' '20130108' '00000000'.
первый параметр - календарь праздников, '' - для всех
второй и третий параметры - даты, который нужно поменять местами. Если вторая дата пустая - то просто объявляет день выходным (установкой вариантом однодневного графика 'Z'). перестановка дат работает только в рамках одного месяца.
Пример уже настроен на 2013 год
Code:
data pT552a like t552a.
data pT550a like standard table of t550a WITH HEADER LINE.
FUNCTION Z_HR_PT_T552A_GEN_HELPER.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(STANDARD_WORK_SCHEDULE) LIKE T552A STRUCTURE T552A
*" EXPORTING
*" VALUE(MOD_WORK_SCHEDULE) LIKE T552A STRUCTURE T552A
*"----------------------------------------------------------------------
MOD_WORK_SCHEDULE = STANDARD_WORK_SCHEDULE.
pT552a = STANDARD_WORK_SCHEDULE.
clear pT550a[].
case pT552a-KJAHR.
when '2013'.
perform CheckDate using '' '20130108' '00000000'.
perform CheckDate using '' '20130502' '00000000'.
perform CheckDate using '' '20130503' '00000000'.
perform CheckDate using '' '20130510' '00000000'.
endcase.
MOD_WORK_SCHEDULE = pT552a.
ENDFUNCTION.
form CheckDate
using
MOFID like T552a-MOFID
pDate type begda
pSwap type begda.
DATA: s_TPR(10) type c,
s_TTP(10) type c,
s_VAR(10) type c,
s_swap_TPR(10) type c,
s_swap_TTP(10) type c,
s_swap_VAR(10) type c.
FIELD-SYMBOLS: <TPR>, <TTP>, <VAR>.
FIELD-SYMBOLS: <swap_TPR>, <swap_TTP>, <swap_VAR>.
data:
l_TPR like T552a-tpr01,
l_ttp like T552a-ttp01,
l_var like T552a-var01.
if MOFID <> ''.
check pT552a-MOFID = MOFID.
endif.
check pT552a-KJAHR = pDate(4).
check pT552a-MONAT = pDate+4(2).
UNPACK pDate+6(2) TO s_TPR+3(2).
s_TTP = s_TPR.
s_VAR = s_TPR.
s_ttp(3) = 'TTP'.
ASSIGN COMPONENT s_ttp
OF STRUCTURE pT552a
TO <TTP>.
s_tpr(3) = 'TPR'.
ASSIGN COMPONENT s_tpr OF STRUCTURE pT552a TO <TPR>.
s_var(3) = 'VAR'.
ASSIGN COMPONENT s_var OF STRUCTURE pT552a TO <VAR>.
if pSwap = '00000000'.
<TTP> = '2'.
if <TPR> <> 'OFF'.
<VAR> = 'Z'.
<TTP> = '2'.
endif.
else.
UNPACK pSwap+6(2) TO s_swap_TPR+3(2).
s_swap_TTP = s_swap_TPR.
s_swap_VAR = s_swap_TPR.
s_swap_ttp(3) = 'TTP'.
ASSIGN COMPONENT s_swap_ttp OF STRUCTURE pT552a TO <swap_TTP>.
s_swap_tpr(3) = 'TPR'.
ASSIGN COMPONENT s_swap_tpr OF STRUCTURE pT552a TO <swap_TPR>.
s_swap_var(3) = 'VAR'.
ASSIGN COMPONENT s_swap_var OF STRUCTURE pT552a TO <swap_VAR>.
* if <VAR> = 'A'.
* <VAR> = ''.
* endif.
l_TPR = <swap_TPR>.
l_ttp = <swap_TTP>.
l_var = <swap_VAR>.
<swap_TPR> = <TPR>.
<swap_ttp> = <TTP>.
<swap_var> = <VAR>.
<TPR> = l_TPR.
<ttp> = l_TTP.
<var> = l_VAR.
endif.
perform UpdateSolst.
endform.
form UpdateSolst.
data: tpr like t552a-tpr01,
var like t552a-var01.
data pDate type begda.
clear pT552a-Solst.
do 31 times varying tpr from pT552a-tpr01 next pT552a-tpr02
varying var from pT552a-var01 next pT552a-var02.
check tpr <> ''.
READ TABLE pT550a
with key MOTPR = pT552a-MOSID TPROG = tpr VARIA = var.
if sy-subrc = 4.
pDate(4) = pT552a-KJAHR.
pDate+4(2) = pT552a-monat.
pDate+6(2) = '01'.
select single * from T550a into pT550a
where MOTPR = pT552a-MOSID and TPROG = tpr and VARIA = var
and begda <= pDate and endda >= pDate.
append pT550a.
endif.
add pT550a-sollz to pT552a-Solst.
enddo.
endform.