четверг, 28 августа 2014 г.

Экраны. Форма запуска цепочки простая



*&---------------------------------------------------------------------*
*& 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 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 length 60,
        l_res       type i,
        l_txt       type 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 default 0,
    set_flag  type 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'.
*"----------------------------------------------------------------------




Комментариев нет:

Отправить комментарий