*&---------------------------------------------------------------------*
*& Report ZN_MANAGER_SAP_1103_BILL
*&
*&---------------------------------------------------------------------*
*& Управленческие остатки по Векселям
*& NORSBILL
*&---------------------------------------------------------------------*
*"----------------------------------------------------------------------
report zn_manager_sap_1103_rst_reload.
*"----------------------------------------------------------------------
*" Таблица. Нужна для объявления типов полей
tables /bic/anoekran00.
*-----------------------------------------------------------------------
*" Переменные и все-все-все...
data:
l_sys type /bic/oincsrcsys,
l_message(120) type c,
l_screen type n length 4 value 1100.
*"----------------------------------------------------------------------
selection-screen begin of screen 1100 as subscreen.
select-options:
lt_sys for l_sys no intervals.
selection-screen end of screen 1100.
start-of-selection.
call screen 1000.
*"----------------------------------------------------------------------
module status_1000 output.
set pf-status 'ZNMENU'.
* SET TITLEBAR 'xxx'.
endmodule. " STATUS_1000 OUTPUT
*"----------------------------------------------------------------------
module user_command_1000 input.
data:
l_get_flag type /bic/oiekrstate value 0,
l_logid type rspc_logid,
l_msg_txt type string,
l_datefrom type d,
l_dateto type d,
s_valfilt like /bic/pnclpar,
l_fltr_nm type c length 60,
l_res type i,
l_txt type c length 60,
b1000_01, " Векселя
b1000_02, " Ценные бумаги
b1000_03, " Неснижаемые остатки
l_ekran type i,
l_chain type rspc_chain.
*-----------------------------------------------------------------------
*" Выбираем загрузку
if b1000_01 eq 'X'. "<-- Radio
l_ekran = '11031001'.
l_chain = 'NPC_MAIN_MS_1103_BILL'. " Векселя
elseif b1000_02 eq 'X'. "<-- Radio
l_ekran = '11031002'.
l_chain = 'NPC_MAIN_MS_1103_BIRG'. " Ценные бумаги
else.
l_ekran = '11031003'. "<-- Radio
l_chain = 'NPC_MAIN_MS_1103_LOWER'. " Неснижаемые остатки
endif.
*-----------------------------------------------------------------------
case sy-ucomm.
*" Обработка команды запуска
when 'RUN'.
*" Проверка условий ввода
select single /bic/ekrstate
into l_get_flag
from /bic/pncflstate
where /bic/ncnumekr = l_ekran " Флаг загрузки завязан на этот экран
and objvers = 'A'.
if l_get_flag = 1.
message 'Цепочка уже запущена. Пожалуйста, попробуйте позже.'
type 'I'.
exit.
endif.
l_datefrom = /bic/anoekran00-datefrom.
l_dateto = /bic/anoekran00-dateto.
if l_datefrom is initial.
message 'Не указана "Дата С"' type 'I'.
exit.
endif.
if l_dateto is initial.
message 'Не указана "Дата По"' type 'I'.
exit.
endif.
if l_dateto < l_datefrom.
message '"Дата По" меньше "Дата С"' type 'I'.
exit.
endif.
if lt_sys is initial.
message 'Не указана Исходная система' type 'I'.
exit.
endif.
*" Не допускаем ввод "не равно" на селекционном экране
delete lt_sys[] where not ( sign = 'I' and option = 'EQ' ).
*-----------------------------------------------------------------------
delete from /bic/pnefilter where /bic/ncnumekr = l_ekran.
*" Сохраняемся
l_fltr_nm = 0. " Дата С
condense l_fltr_nm no-gaps.
move l_datefrom to l_txt.
call function 'ZNF_SET_EKRAN_PARAM'
exporting
ekran = l_ekran " Флаг загрузки завязан на этот экран
num_filt = l_fltr_nm
valpar = l_txt
txt = 'Дата С'
importing
res = l_res.
if l_res <> 0.
message 'Ошибка при сохранении "Дата С"' type 'I'.
exit.
endif.
l_fltr_nm = 1. " Дата По
condense l_fltr_nm no-gaps.
move l_dateto to l_txt.
call function 'ZNF_SET_EKRAN_PARAM'
exporting
ekran = l_ekran " Флаг загрузки завязан на этот экран
num_filt = l_fltr_nm
valpar = l_txt
txt = 'Дата По'
importing
res = l_res.
if l_res <> 0.
message 'Ошибка при сохранении "Дата По"' type 'I'.
exit.
endif.
loop at lt_sys.
l_fltr_nm = 14. " Исходная система
condense l_fltr_nm no-gaps.
move lt_sys-low to l_txt.
call function 'ZNF_SET_EKRAN_PARAM'
exporting
ekran = l_ekran " Флаг загрузки завязан на этот экран
num_filt = l_fltr_nm
valpar = l_txt
txt = 'Исходная система'
importing
res = l_res.
if l_res <> 0.
message 'Ошибка при сохранении "Исходная система"' type 'I'.
exit.
endif.
endloop.
**-----------------------------------------------------------------------
*" Просто запускаем цепочку...
concatenate 'Запускается цепочка ' l_chain into l_msg_txt separated by space.
message l_msg_txt type 'I'.
call function 'RSPC_CHAIN_START'
exporting
i_chain = l_chain
i_synchronous = ''
importing
e_logid = l_logid.
concatenate 'Параметры сохранены. Запущена цепочка ' l_chain
into l_msg_txt separated by space.
message l_msg_txt type 'I'.
*-----------------------------------------------------------------------
when 'CHAIN_BILL'.
*" На всякий случай.
l_ekran = '11031001'.
l_chain = 'NPC_MAIN_MS_1103_BILL'.
call function 'RSPC_CHAIN_MAINTAIN'
exporting
i_chain = l_chain
i_logid = l_logid
i_mode = 'LOG'.
if sy-subrc <> 0.
message 'Ошибка при просмотре цепочки' type 'I'.
exit.
endif.
when 'CHAIN_BIRG'.
*" На всякий случай.
l_ekran = '11031002'.
l_chain = 'NPC_MAIN_MS_1103_BIRG'.
call function 'RSPC_CHAIN_MAINTAIN'
exporting
i_chain = l_chain
i_logid = l_logid
i_mode = 'LOG'.
if sy-subrc <> 0.
message 'Ошибка при просмотре цепочки' type 'I'.
exit.
endif.
when 'CHAIN_LOWER'.
*" На всякий случай.
l_ekran = '11031003'.
l_chain = 'NPC_MAIN_MS_1103_LOWER'.
call function 'RSPC_CHAIN_MAINTAIN'
exporting
i_chain = l_chain
i_logid = l_logid
i_mode = 'LOG'.
if sy-subrc <> 0.
message 'Ошибка при просмотре цепочки' type 'I'.
exit.
endif.
*-----------------------------------------------------------------------
when 'EXIT' or 'BACK' or 'CANCEL'.
leave program.
endcase.
endmodule. " USER_COMMAND_1000 INPUT
*"----------------------------------------------------------------------
___________________
Экран:
process before output.
module status_1000.
call subscreen sub including sy-repid l_screen.
process after input.
module user_command_1000.
call subscreen sub.
____________
ФМ ZNF_SET_EKRAN_PARAM:
function znf_set_ekran_param.
*"----------------------------------------------------------------------*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(EKRAN) TYPE I
*" REFERENCE(NUM_FILT) TYPE C
*" REFERENCE(VALPAR) TYPE C
*" REFERENCE(TXT) TYPE STRING OPTIONAL
*" EXPORTING
*" REFERENCE(RES) TYPE I
*"----------------------------------------------------------------------
data:
type_filtr type /bic/oincfilt,
all_filt like /bic/pnefilter,
id_rec type /bic/oinefilter.
*-----------------------------------------------------------------------
select single /bic/ncfilt
into type_filtr
from /bic/pncfilt
where txtlg = num_filt.
*" Определяем ID записи в таблице
select max( /bic/nefilter )
into id_rec
from /bic/pnefilter
where objvers = 'A'.
id_rec = id_rec + 1.
clear all_filt.
*" Запихиваем значения
all_filt-/bic/nefilter = id_rec.
all_filt-/bic/ncnumekr = ekran.
all_filt-/bic/ncfilt = type_filtr.
all_filt-/bic/ncvalpar = valpar.
all_filt-objvers = 'A'.
all_filt-txtlg = txt.
insert into /bic/pnefilter values all_filt.
*" Проверка записи в таблицу
select count( * )
into res
from /bic/pnefilter
where objvers = 'A'
and /bic/nefilter = id_rec.
if res > 0.
res = 0.
else.
res = 1.
endif.
*"----------------------------------------------------------------------
endfunction.
__________________
Справочник для хранения флагов:
Ну и ABAP для работы с флагами:
*&---------------------------------------------------------------------*
*& Report ZN_EKRAN_FLAG
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*"----------------------------------------------------------------------
report zn_ekran_flag.
parameters:
num_ekr type i default 0,
set_flag type i default 0.
*-----------------------------------------------------------------------
if set_flag <> 0.
set_flag = 1.
endif.
update /bic/pncflstate
set /bic/ekrstate = set_flag
/bic/ncdt = sy-datum
/bic/nctime = sy-uzeit
where /bic/ncnumekr = num_ekr
and objvers = 'A'.
*"----------------------------------------------------------------------
Комментариев нет:
Отправить комментарий