SAPфорум.RU
https://sapboard.ru/forum/

Запрет редактирования ячейки по имени пользователя
https://sapboard.ru/forum/viewtopic.php?f=13&t=95613
Страница 1 из 2

Автор:  sonics [ Вт, окт 17 2017, 16:14 ]
Заголовок сообщения:  Запрет редактирования ячейки по имени пользователя

Необходима проверка, если sy-uname совпадает в ячейке whocreate, то эта строка может редактироваться этим пользователем иначе, заблокировать.
Данное правило я попробовал написать в форме:
FORM select_data_and_init_style.

Code:
*-->Заполнение таблицы стилей ячеек
  loop at gt_outtab assigning <fs_outtab>.
    clear: <fs_outtab>-celltab, lt_alv_style_list.
    loop at gt_fieldcat[] assigning <fs_fieldcat>.
      ls_alv_cell_style-fieldname = <fs_fieldcat>-fieldname.
*      if sy-datum > <fs_outtab>-datecreate. "<fs_fieldcat>-fieldname = 'WHOTECHANGE'.
       if sy-uname = <fs_outtab>-whocreate.
         ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_disabled.
*         ls_alv_cell_style-fieldname = cl_gui_alv_grid=>mc_style_enabled.
        insert ls_alv_cell_style into table lt_alv_style_list.

      else.
        ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
*        ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_disabled.
      endif.
    endloop.
    append lines of lt_alv_style_list to <fs_outtab>-celltab.
  endloop.

Но не сработало.
Подскажите в чем моя ошибка пожалуйста.

Автор:  Besa [ Вт, окт 17 2017, 21:23 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

sonics, Вам уже советовали, читайте документацию, пользуйтесь поиском, смотрите стандартные примеры, в том числе и специальные ДЕМО примеры, многие Ваши вопросы очень простые и лежат на поверхности.

Автор:  sonics [ Ср, окт 18 2017, 08:40 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Besa написал:
sonics, Вам уже советовали, читайте документацию, пользуйтесь поиском, смотрите стандартные примеры, в том числе и специальные ДЕМО примеры, многие Ваши вопросы очень простые и лежат на поверхности.

Я посмотрел и пришел с вопросом, и с готовым кодом, который, к сожалению, не работает.
Я ищу ошибку.
По сути, по логике, все должно работать.

Автор:  Кодер [ Ср, окт 18 2017, 10:34 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

sonics написал(а):
По сути, по логике, все должно работать.

Вы привели только код, в котором меняете данные таблицы. Этого недостаточно для анализа проблемы. Ну и на форуме такое отладить не получится. Необходимо смотреть в отладке: когда вы выполняете изменение стилей, что в итоге получается в таблице с данными, какие действия выполняются далее с алв в программе и т.д.
Т.е. чтобы решить эту проблему, нужно или иметь представление что и как работает в вашей программе или провести сравнительный анализ работы вашей программы с корректно работающими программами с аналогичными функциями (например, стандартные демо-примеры из пакета SLIS)

Автор:  ghost [ Ср, окт 18 2017, 11:47 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Присоединяюсь к предыдущих советам.
А по коду вижу 2 ошибки для выполнения поставленной задачи:
Code:
if sy-uname = <fs_outtab>-whocreate.

должно быть
Code:
if sy-uname ne <fs_outtab>-whocreate.


ну и
Code:
insert ls_alv_cell_style into table lt_alv_style_list.

вынести за блок IF ENDIF.

С уважением,
Руслан

Автор:  sonics [ Ср, окт 18 2017, 14:00 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

вынес за цикл.
Какой пример посмотреть следует?
я нашел только через LAYOUT-STYLEFNAME = 'CELLSTYLE'
и здесь отдельные ячейки заблокированы, а не все строка..

Автор:  Besa [ Ср, окт 18 2017, 15:03 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

sonics написал(а):
вынес за цикл.
Какой пример посмотреть следует?
я нашел только через LAYOUT-STYLEFNAME = 'CELLSTYLE'
и здесь отдельные ячейки заблокированы, а не все строка..

BCALV*EDIT*

Автор:  sonics [ Чт, окт 19 2017, 13:53 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Besa написал:
sonics написал(а):
вынес за цикл.
Какой пример посмотреть следует?
я нашел только через LAYOUT-STYLEFNAME = 'CELLSTYLE'
и здесь отдельные ячейки заблокированы, а не все строка..

BCALV*EDIT*

жаль, но не нашел в этих примерах.
или мой администратор вычистил таблицы с этими данными. :(

Автор:  Besa [ Чт, окт 19 2017, 14:44 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Не нашел что? Данные?

https://wiki.scn.sap.com/wiki/display/ABAP/Flight+Data+Application+-+Demo+Example+for+Integration+Technologies

Автор:  Bimit [ Чт, окт 19 2017, 14:46 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Вот в этой программе смотрите BCALV_TEST_GRID_EDITABLE

Автор:  sonics [ Чт, окт 19 2017, 15:21 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Bimit написал(а):
Вот в этой программе смотрите BCALV_TEST_GRID_EDITABLE

там вроде только открыть/закрыть редактирование всей таблицы происходит.
это я уже реализовал.

Автор:  Kuranov.Dmitry [ Чт, окт 19 2017, 15:25 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя  Тема решена

sonics написал(а):
Bimit написал(а):
Вот в этой программе смотрите BCALV_TEST_GRID_EDITABLE

там вроде только открыть/закрыть редактирование всей таблицы происходит.
это я уже реализовал.

там можно и для ячеек установить
посмотрите на использование поля P_CELLSF

радиабаттон "Вкл. строки можно обработать"


в частности форму d0100_set_grid_edit.

там есть кусок
Code:
when con_edit_cell.
*... Zellen-Editierbar
*    In Layout wird Feld SYTLEFNAME auf 'HANDLE_STYLE' gesetzt
      cs_layo-stylefname = 'HANDLE_STYLE'.

      loop at gt_outtab into ls_outtab.
        l_index = sy-tabix.
        l_erg   = l_index mod 2.
        if l_erg eq 0.
          loop at gs_test-edit_fields into ls_field.
            ls_edit-fieldname = ls_field.
            ls_edit-style     = cl_gui_alv_grid=>mc_style_enabled.
            ls_edit-style2    = space.
            ls_edit-style3    = space.
            ls_edit-style4    = space.
            ls_edit-maxlen    = 8.
            insert ls_edit into table lt_edit.
          endloop.

          insert lines of lt_edit into table ls_outtab-handle_style.

          modify gt_outtab index l_index from ls_outtab
                           transporting handle_style.
        endif.
      endloop.


он каждую четную открывает, сделайте по аналогии но с вашим условием

Автор:  sonics [ Чт, окт 19 2017, 16:21 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Cпасибо тебе, добрый человек, за то, что всегда помогаешь.

Автор:  sonics [ Пт, окт 20 2017, 13:33 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Code:
  loop at gt_outtab assigning <fs_outtab>.
    clear: <fs_outtab>-celltab, lt_alv_style_list.
    loop at gt_fieldcat[] assigning <fs_fieldcat>.
       ls_alv_cell_style-fieldname = <fs_fieldcat>-fieldname.
       if sy-uname = <fs_outtab>-whocreate.
         ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
      else.
        ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_disabled.
      endif.
[s]      if <fs_outtab>-fieldname = id.
        ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_disabled.
      endif.[/s]
      insert ls_alv_cell_style into table lt_alv_style_list.
    endloop.
    append lines of lt_alv_style_list to <fs_outtab>-celltab.
  endloop.


все заполняется, все работает.
только нужно исключить некоторые поля, чтобы закрыть редактирование навсегда.
Code:
if <fs_outtab>-fieldname = id.
        ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_disabled.
      endif.

здесь ругается sap
Цитата:
The data object <fs_outtab> does not have a component called "FIELDNAME

я бы тут через or перечислил все поля, но что-то не так.

пробовал через:
Code:
case ls_alv_cell_style-fieldname.
               when 'ID'.
                 ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
               when 'DATECREATE'.
                 ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
               when 'WHOCREATE'.
                 ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
               when 'DATECHANGE'.
                 ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
               when 'WHOTECHANGE'.
                 ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
               when 'PODRAZD'.
                 ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
              when 'DEPART'.
                ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_enabled.
            endcase.

но и здесь не сработало.

Автор:  Kuranov.Dmitry [ Пт, окт 20 2017, 13:44 ]
Заголовок сообщения:  Re: Запрет редактирования ячейки по имени пользователя

Code:
The data object <fs_outtab> does not have a component called "FIELDNAME


как <fs_outtab> объявлен?

судя по названию, это филд символ на таблицу данных, а не на таблицу филдкаталога

Code:
if <fs_fieldcat>-fieldname = id.
        ls_alv_cell_style-style = cl_gui_alv_grid=>mc_style_disabled.
      endif.


Может так вы имели в виду?

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/