пятница, 13 февраля 2009 г.

Полезные клавиши

Многие считают плохим интерфейс экранных форм в ОЕБС.
Имеются ввиду формы сделанные на Oracle Forms.

Заблуждение.

Интерфейс не плохой, он другой.
Им просто нужно уметь пользоваться.

Shift-F5 - Дублировать поле (конкретные клавиши на клавиатуре могут отличаться в зависимости от настроек сервера форм. Полный список: Справка->Использование клавиатуры)
Если нужно ввести несколько похожих записей, то это просто незаменимая клавиша.
Позволяет вставить в текущее поле значение из предыдущей записи.

Shift-F6 - Дублировать запись
Позволяет дублировать все поля предыдущей записи.
К сожалению, мало где работает, из-за лени/квалификации конкретных разработчиков форм. При разработке форму нужно чуть-чуть подкрутить для корректного дублирования записи.

Ctrl-E - Редактировать
Значение поля слишком большое и на экране всё не помещается?
Открываем редактор и смотрим.

Чисто ОЕБС-овые штучки:
Ctrl-L - Список значений
В Навигаторе не помните в каком меню/подменю запрятана нужная форма?
Открываем Список значений и смотрим на все доступные формы этих полномочий.

Досье или Папки
Суперфункциональность.
Позволяет настроить внешний вид данных (количество, порядок, размеры и заголовки столбцов), а также сортировку и фильтр данных.
Надоело при вводе счетов фактур пролистывать колонки до "Метода платежа"?
Можно создать несколько досье в этой форме для более удобной работы, например:
- Предоплаты.
Выводятся только предоплаты и колонки нужные для заполнения. Остальные колонки скрываем
- Стандартные счета-фактуры
И т.д.

Интерфейс не плохой, он другой.
Им просто нужно уметь пользоваться.

четверг, 12 февраля 2009 г.

FND: Override Directory

Интересный профиль для разработчиков.

Если нужно поэкспериментировать с формой, так чтобы это не было заметно остальным, то можно выставить на уровне пользователя профиль "FND: Override Directory" (он же "БОП: переопределение каталога"), указав в нем каталог на сервере приложений с модифицированной формой.

среда, 11 февраля 2009 г.

Файл -> Экспорт. Продолжение

Проблема экспорта данных из однострочных блоков уже затрагивалась.

Есть еще одна тема, связанная с реализацией экспорта, вызывающая недоумение.
А именно.
Если данные в блоке расположены на нескольких закладках, то экспортируются только те колонки, которые расположены на экране (на активной закладке).

Совершенно непонятно зачем так делать.
Кажется очевидным, что лучше выгрузить всё что есть, а пользователь затем сам в Excel оставит нужное.

Так вот оказалось, что не всё так плохо.
Просто "не повезло" в том, что пришлось иметь дело с 11i.ATG_PF.H Rollup 3.
А именно в нем используется такой алгоритм экспорта.

В более свежих версиях, вообще сделано красиво.
При помощи небольшой персонализации можно устанавливать псевдо-свойство блока EXPORT_HIDDEN_CANVASES, которым можно задавать всё ли столбцы блока будут экспортироваться или только видимые.

Ну а счастливые обладатели 12 версии могут еще играться профилем "FND Export All Block Data"

Подробности здесь: 391414.1 Export Behavior in Oracle Applications Forms

Профили на полномочия

Еще одна обертка для fnd_profile.save
На этот раз для того, чтобы было удобно готовить скрипты по массовой устаноке значений профилей на уровне полномочий.


DECLARE
PROCEDURE set_profile_at_resp_level (
p_resp_name fnd_responsibility_vl.responsibility_name%TYPE
,p_user_profile_option_name fnd_profile_options_vl.user_profile_option_name%TYPE
,p_profile_option_value fnd_profile_option_values.profile_option_value%TYPE
) IS
l_responsibility_id fnd_responsibility_vl.responsibility_id%TYPE;
l_application_id fnd_responsibility_vl.application_id%TYPE;

l_profile_option_name fnd_profile_options_vl.profile_option_name%TYPE;
BEGIN
SELECT fr.responsibility_id
,fr.application_id
INTO l_responsibility_id
,l_application_id
FROM fnd_responsibility_vl fr
WHERE fr.responsibility_name = p_resp_name;

SELECT fpo.profile_option_name
INTO l_profile_option_name
FROM fnd_profile_options_vl fpo
WHERE fpo.user_profile_option_name = p_user_profile_option_name;

IF Fnd_Profile.save (
x_name => l_profile_option_name
,x_value => p_profile_option_value
,x_level_name => 'RESP'
,x_level_value => l_responsibility_id
,x_level_value_app_id => l_application_id
)
THEN
NULL;
END IF;
END set_profile_at_resp_level;
BEGIN
set_profile_at_resp_level ('Системный администратор', 'Служебные программы: диагностика', 'Y');
-- set_profile_at_resp_level ('...', 'НО: операционная единица', '...');
COMMIT;
END;