Текущее время: Пн, июл 21 2025, 21:28

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Диалог ведения - доп.проверки
СообщениеДобавлено: Чт, сен 11 2008, 16:17 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Создал диалог ведения для таблички - возникла необходимость в дополнительных проверках при вводе пользователем новых строк.

Подскажите, на какое событие лучше всего поцепить эти проверки... а то на момент сохранения (AB) ошибки типа Е/А полностью бликируют дальнейшее выполнение, а при вводе новой строки срабатывают только события 05,21 - и обе меня по разным причинам не устраивают.
Или может я не заметил чего... Кто-то реализовывал сабж и если да - где именно осуществлял проверки?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 11 2008, 16:25 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Если события вас не устраивают, то можно напрямую в логику экрана, сложные проверки только так и получается реализовывать.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 15 2008, 18:18 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Однако, хоть в экране, хоть в событиях - появление сoобщения об ошибке блокирует работу диалога и пойти дальше можно только через "Отмену", что не есть кузяво. А если проверку расположить внутри chain, так вообще зацикливается - флаг, что ли, какой измыслить. Неужели никто не делал таких доп. проверок?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 15 2008, 19:38 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Если вы имеете в виду maintenance dialog (типа SM30), то по-моему так оно и работает по определению. Меня это, честно говоря, тоже бесит порядком, но такова уж селяви. :(

А на своем экране с Table Control вполне нормально работало CHAIN + MESSAGE TYPE 'E'.

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 16 2008, 09:17 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Sergeant написал(а):
Однако, хоть в экране, хоть в событиях - появление сoобщения об ошибке блокирует работу диалога и пойти дальше можно только через "Отмену", что не есть кузяво. А если проверку расположить внутри chain, так вообще зацикливается - флаг, что ли, какой измыслить. Неужели никто не делал таких доп. проверок?

да блокирует, а вы хотите, чтобы пользователь мог не смотря на ошибки вводить данные? пойти дальше можно, если ввести нужные значения.
Куда поставить проверку зависит от того что она будет проверять.
если только текущую строку то можно
Code:
      FIELD zcontr_paym_00_v-int_net .
      FIELD zcontr_paym_00_v-edit_lock .
      MODULE set_update_flag ON CHAIN-REQUEST.
      MODULE zcheck.
      MODULE complete_zcontr_paym_00_v ON CHAIN-REQUEST.
    ENDCHAIN.

Если нужно проверить только новые или измененные строки поставьте внутри проверки
Code:
  IF <status>-upd_flag = 'X'.
Если проверить только первую строку, то
Code:
IF nextline = 1

Может вам поможет переменная status-action. Если нужно анализировать все строки, то поместите сюда
Code:
      MODULE liste_update_liste.
    ENDCHAIN.
  ENDLOOP.
*расчет
  MODULE zcalc.
  MODULE z_check_delete.

  MODULE liste_after_loop.

Если сообщение внутри loop, то блокируются все записи кроме текущей, если проверка после loop то доступны все записи для правки. Все зависит от конкретной задачи. Делал очень много разных проверок. Все получится. Если вопросы останутся конкретизируйте задачу.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 16 2008, 10:12 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
XXX_:) написал:
да блокирует, а вы хотите, чтобы пользователь мог не смотря на ошибки вводить данные? пойти дальше можно, если ввести нужные значения.


Огромное спасибо - я, оказывается, не там проверку в логику экрана вписывал :) У меня блокировался весь диалог без возможности исправления неверных значений (только через "Отмену" можно было на редактирование выйти).

Один вопрос вдогонку - не реализовывали ли вы сортировку в диалоге ведения. Т.е. задача - сделать из заголовка столбца кнопку, при нажатию на которую таблица сортируется по этому столбцу. Никогда такого не делал. Если есть возможность - подскажите направление, в котором двигатся. Я так думаю, нужно будет пересортировать total и extract - не повлияет ли это на работу диалога (индекс текущей строки и т.п.)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 16 2008, 10:37 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Sergeant написал(а):
Один вопрос вдогонку - не реализовывали ли вы сортировку в диалоге ведения. Т.е. задача - сделать из заголовка столбца кнопку, при нажатию на которую таблица сортируется по этому столбцу. Никогда такого не делал. Если есть возможность - подскажите направление, в котором двигатся. Я так думаю, нужно будет пересортировать total и extract - не повлияет ли это на работу диалога (индекс текущей строки и т.п.)


Пересортировку не делал, делал колонку с автоматическим инкрементом(на основе разработок другого абапера), Насчет сделать кнопку из названия заголовка, это вам нужно на самом экране править, к тому же, если не ошибаюсь то заголовку tab control нельзя пределать функциональный код. вы сдвиньте экран немного вниз и лепите свою кнопку сверху нужного столбца.

Насчет пересортировать total и extract. Предполагаю что достаточно будет только total (с extract работать менее удобно), т.к. они переодически копируются друг в друга. относительно мест где бы можно это сделать, то попробуйте сразу после PROCESS BEFORE OUTPUT. Либо в PAI после ENDLOOP. но до MODULE liste_after_loop.либо после MODULE liste_after_loop.

Могу и ошибаться, пробуйте.

ЗЫ: чуть не забыл, после перегенерации экрана ваши модули из логики экрана пропадут, так что лучше их в отдельный инклуд, и когда будете писать документацию, сделайте скриншот, чтобы через полгода хоть что нибудь вспомнить.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 18 2008, 17:29 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Есть одна проблема - после моих изменений диалог ведения стал неправильно (имхо) работать. Вводим новую строку, у нее есть сумма. Сумма, ессно, ключом не является :) Сохраняем. Меняем сумму (ключ у строки остается тот же). Сохраняем. Пишет: "Данные уже были сохранены" и в БД новое значение суммы не появляется, т.е. диалог новое значение не сохраняет (на экране оно остается). Где-то что-то с ключами намудрил, наверное. Через отладку не смог разобраться. В чем может быть дело?

upd: мне кажется, это связано с тем, что <status>-upd_flg выставляется в space после первого сохранения строки. Но ведь в других диалогах все работает - специально посмотрел!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 19 2008, 12:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Сумму меняете програмно или руками на экране вводите?
Строки которые попадут при сохранении в БД имеют в поле action значение 'N'(новая) или 'U'(измененная)(таблица total или еще называется имя_ракурса_total, например VIEW_TOTAL). в этой таблице храняться все строки которые вы ввели за время работы. Посмотрите все возможные значения поля action. Могут пригодиться.

PS. Пересортировка удалась?

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 19 2008, 13:51 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
XXX_:) написал:
Сумму меняете програмно или руками на экране вводите?
Строки которые попадут при сохранении в БД имеют в поле action значение 'N'(новая) или 'U'(измененная)(таблица total или еще называется имя_ракурса_total, например VIEW_TOTAL). в этой таблице храняться все строки которые вы ввели за время работы. Посмотрите все возможные значения поля action. Могут пригодиться.

PS. Пересортировка удалась?


Спасибо, про поле action знал. Проблему решил - таки намудрил с ключами.

Сортировку решил по другому - подменил п/п печати (событие 26) своей, где использовал для вывода REUSE_ALV_GRID_DISPLAY вместо list'а по умолчанию. Пользователей устраивает - так они могут сделать с таблицей что угодно, и сортировку и фильтр (а это им и нужно было именно при просмотре значений, а не при вводе новых строк).

Возникла другая проблема - я так понял, что по умолчанию диалог блокирует (lock) всю таблицу целиком. Меня это не устраивает (нужно бликировать только часть), можно ли что-то сделать? Есть событие сразу после блокировки - могу ли я там разблокировать всю таблицу и заблокировать ее часть?

ЗЫ Спасибо огромное за ответы, вы мне очень помогли.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 19 2008, 14:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Вот блин :) щас все расскажу. Сам доходил до всех тонкостей месяца 2 наверное. Блокировку можно сделать по ключевым полям. Для этого в ракурсе по тем полям, по которым будете делать блокировку в поле "Признак ведения для поля ракурса" постевьте "S", а когда вызываете ФМ VIEW_MAINTENANCE_CALL(вы ведь через него ракурс вызываете?) заполните параметр dba_sellist, еще хороший параметр, можно скрыть кнопки на ракурсе excl_cua_funct .

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 19 2008, 14:18 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
XXX_:) написал:
Вот блин :) щас все расскажу. Сам доходил до всех тонкостей месяца 2 наверное. Блокировку можно сделать по ключевым полям. Для этого в ракурсе по тем полям, по которым будете делать блокировку в поле "Признак ведения для поля ракурса" постевьте "S", а когда вызываете ФМ VIEW_MAINTENANCE_CALL(вы ведь через него ракурс вызываете?) заполните параметр dba_sellist, еще хороший параметр, можно скрыть кнопки на ракурсе excl_cua_funct .


excl_cua_funct пользуюсь, dba_sellist тоже использую - но вот в чем дело - ограничиваю я, например, через dba_sellist выборку только ЕФМ = 1000, а диалог, зараза, все равно всю таблицу блокирует. Т.е. по другим ЕФМ ничего не дает вводить - проверял.
А можно подробнее, что изменится с указанием некоторых полей через 'S' - он именно по ним начнет блокировку строить? А если они не ключевые? В хелпе ничего не нашел по поводу, киньте ссылку плиз, если есть.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 19 2008, 14:27 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Блокировку сделает, т.к. перегенерите группу функций. А если не ключевые, то у меня не получилось, хотя вы попробуйте, у меня они были специфические(case_guid). А ссылок у меня нет, до всего дошел сам, ну и коллеги конечно помогли немного.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


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

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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