Текущее время: Ср, авг 23 2017, 23:25

Часовой пояс: UTC + 4 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Ср, дек 03 2014, 16:28 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 07 2014, 21:19
Сообщения: 48
Добрый день. Подскажите пож-та, вот собственно код СЭ
Код:
*********************************************************************************Режим редактирования записи
SELECTION-SCREEN BEGIN OF BLOCK red WITH FRAME TITLE text-rez .

PARAMETERS P_IE TYPE char1 RADIOBUTTON GROUP se_v USER-COMMAND rcom DEFAULT 'X' . "добавление/изменение
PARAMETERS P_D TYPE char1 RADIOBUTTON GROUP se_v .                               "удаление

SELECTION-SCREEN END OF BLOCK red.
*********************************************************************************Режим редактирования записи

*********************************************************************************Параметры добавления/изменения
SELECTION-SCREEN BEGIN OF BLOCK par WITH FRAME TITLE text-par .

PARAMETERS S_ID TYPE int1 MODIF ID cr OBLIGATORY.
PARAMETERS S_DESCR TYPE char255 MODIF ID cr OBLIGATORY.
PARAMETERS S_NAME TYPE char255 MODIF ID cr OBLIGATORY.
PARAMETERS S_PATH TYPE char255 MODIF ID cr OBLIGATORY.

SELECTION-SCREEN END OF BLOCK par.
*********************************************************************************Параметры добавления/изменения

*********************************************************************************Параметры удаления
SELECTION-SCREEN BEGIN OF BLOCK del WITH FRAME TITLE text-del .

PARAMETERS S_ID_DEL TYPE int1 MODIF ID del OBLIGATORY.

SELECTION-SCREEN END OF BLOCK del.
*********************************************************************************Параметры удаления

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN .
    CASE 'X'.
      WHEN P_IE.
        IF screen-GROUP1 = 'CR'.
          screen-active = 1.
          MODIFY SCREEN.
        Elseif screen-GROUP1 = 'DEL'.
          screen-active = 0.
          MODIFY SCREEN.
        ENDIF.
      WHEN P_D.
        IF screen-GROUP1 = 'CR'.
          screen-active = 0.
          MODIFY SCREEN.
        Elseif screen-GROUP1 = 'DEL'.
          screen-active = 1.
          MODIFY SCREEN.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.
  ENDLOOP.


То есть есть один блок с радиокнопками и 2 других, выходят в зависимости от RADIOBUTTON, во всех блоках обяз поля для заполнения но они не нужны если скрываем этот блок, так как сделать чтоб выбирая радиокнопку скрыть блок не присваивая его полям значение? спасибо


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Ср, дек 03 2014, 16:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 16:38
Сообщения: 1062
Делаете эти поля, которые у вас сейчас obligatory, recomended (если не получится явно - делаете в at selection-screen output). А вот проверку на их заполненность придется уже делать самому в at selection-screen в зависимости от нужных вам сочетаний выбора радиобатонов.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Чт, дек 04 2014, 05:45 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 135
Кодер писал(а):
Делаете эти поля, которые у вас сейчас obligatory, recomended (если не получится явно - делаете в at selection-screen output).

А можно как-то явно указать на СЭ, чтобы поле было recommended без использования PBO? Т.е. без такой строчки?
Код:
screen-required = '2'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Чт, дек 04 2014, 09:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 16:38
Сообщения: 1062
UKY писал(а):
А можно как-то явно указать на СЭ, чтобы поле было recommended без использования PBO? Т.е. без такой строчки?


Т.к. писал без заглядывания в хелп, а точно такой возможности не помню, то и написал что "если получится". Сверился с хелпом, выходит что для СЭ - только at selection-screen output+loop at screen - только хардкор.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Пт, дек 12 2014, 16:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 18:37
Сообщения: 1757
Откуда: Москва
Пол: Мужской
Можно попробовать заменить радио-кнопки на системные кнопки GUI-статуса, и в PBO изменять Screen-required скрываемых полей.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Пт, дек 12 2014, 17:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 18:37
Сообщения: 1757
Откуда: Москва
Пол: Мужской
Parazit писал(а):
Можно попробовать заменить радио-кнопки на системные кнопки GUI-статуса, и в PBO изменять Screen-required скрываемых полей.

Я сейчас проверил - работает, даже required не надо менять, достаточно через Active скрывать/показывать.
Кнопки в статусе создаем с типом E (Exit), а обрабатываем:
Код:
At selection-screen on exit-command.
  Case sy-ucomm.
    when 'BUTTON1'.
      flg = 'X'.
      Leave screen.
    when 'BUTTON2'.
      flg = ''.
      Leave screen.
  EndCase.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Пн, дек 15 2014, 06:12 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 135
Parazit писал(а):
Parazit писал(а):
Можно попробовать заменить радио-кнопки на системные кнопки GUI-статуса, и в PBO изменять Screen-required скрываемых полей.

Я сейчас проверил - работает, даже required не надо менять, достаточно через Active скрывать/показывать.
Кнопки в статусе создаем с типом E (Exit), а обрабатываем:
Код:
At selection-screen on exit-command.
  Case sy-ucomm.
    when 'BUTTON1'.
      flg = 'X'.
      Leave screen.
    when 'BUTTON2'.
      flg = ''.
      Leave screen.
  EndCase.

Это просто гениально! Я всегда мечтал о таком элегантном решении! Спасибо, что поделились!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Обойти проверку обязательного заполнения поля на стандартном СЭ
СообщениеДобавлено: Чт, дек 29 2016, 10:58 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 135
Нашёл ещё один способ как можно "красиво" реализовать отображение определённых полей на селекционном экране в зависимости от выбранной радиоточки:
Код:
SELECTION-SCREEN BEGIN OF BLOCK sb_mode.
  PARAMETERS p_auto   RADIOBUTTON GROUP rb1
                      USER-COMMAND rb1.
  PARAMETERS p_manual RADIOBUTTON GROUP rb1.
  PARAMETERS p_loaded RADIOBUTTON GROUP rb1.
SELECTION-SCREEN END OF BLOCK sb_mode.

SELECTION-SCREEN BEGIN OF BLOCK sb_auto.
  PARAMETERS p_file TYPE string
                    OBLIGATORY MODIF ID aut.
SELECTION-SCREEN END OF BLOCK sb_auto.

SELECTION-SCREEN BEGIN OF BLOCK sb_manual.
  PARAMETERS p_werks TYPE lips-werks
                    OBLIGATORY MODIF ID man.
SELECTION-SCREEN END OF BLOCK sb_manual.

SELECTION-SCREEN BEGIN OF BLOCK sb_loaded.
  SELECT-OPTIONS s_wadat FOR likp-wadat
                    OBLIGATORY NO-EXTENSION MODIF ID loa.
SELECTION-SCREEN END OF BLOCK sb_loaded.

AT SELECTION-SCREEN OUTPUT.
      LOOP AT screen.
        " Скрываем ненужные поля
        DO 1 TIMES.
          CHECK NOT screen-group1 IS INITIAL.

          CASE 'X'.
            WHEN p_manual.
              CHECK screen-group1 <> 'MAN'.
            WHEN p_loaded.
              CHECK screen-group1 <> 'LOA'.
            WHEN OTHERS.  " Начальный запуск программы
           "WHEN p_auto.
              CHECK screen-group1 <> 'AUT'.
          ENDCASE.

          screen-active = '0'.
        ENDDO.

        " Помечаем обязательные поля галочкой, но без проверки обязательности
        IF screen-required = '1'.
          screen-required = '2'.
        ENDIF.

        MODIFY screen.
      ENDLOOP.

AT SELECTION-SCREEN.
  INCLUDE rsdbcom2.
  DATA lt_sscr                TYPE STANDARD TABLE OF rsscr.

  CHECK sy-ucomm <> 'RB1'.

  " Получаем все поля а экране
  PERFORM load_sscr IN PROGRAM saplsldb
    TABLES   lt_sscr[]
    USING    'Z_MY_PROGRAM'
    CHANGING sy-subrc.

  LOOP AT lt_sscr INTO DATA(ls_sscr).
    GET BIT bit_sscr_f1_obli OF ls_sscr-flag1 INTO DATA(lv_obligatory).
    CHECK lv_obligatory > 0. " Проверка на то, что поле обязательное

    DATA(lv_name) = CONV string( ls_sscr-name ).
    IF ls_sscr-kind = 'S'.
      lv_name = lv_name && `[]`.
    ENDIF.

    ASSIGN (lv_name) TO FIELD-SYMBOL(<lv_val>).
    CHECK sy-subrc = 0.

    CHECK <lv_val> IS INITIAL. " Если значение не заполнено

    " Проверяем, что оно относится к нашей группе
    CASE 'X'.
      WHEN p_auto.
        CHECK ls_sscr-group1 = 'AUT'.
      WHEN p_manual.
        CHECK ls_sscr-group1 = 'MAN'.
      WHEN p_loaded.
        CHECK ls_sscr-group1 = 'LOA'.
    ENDCASE.

    MESSAGE e055(00). " Заполните все обязательные поля
  ENDLOOP.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB