CftClub.ru
Клуб специалистов ЦФТ-Банк

Выпадающий список на форме операции.

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
Neumann
Участник
Неподтвержденный


Вступление в Клуб: 31.01.2013
СообщениеСр Апр 17, 2013 09:43   Выпадающий список на форме операции. Ответить с цитатой
Полезность: Нет оценки
Всем привет!
Подскажите - дайте вариант как посадить выпадающий список на форму операции, определить нестколько строк в качестве варианта выбора.
vtar
Эксперт
Неподтвержденный


Вступление в Клуб: 20.03.2009
СообщениеСр Апр 17, 2013 09:50    Ответить с цитатой
Полезность: 1
http://www.cftclub.ru/viewtopic.php?t=230&highlight=%E2%FB%EF%E0%E4%E0%FE%F9%E8%E9+%F1%EF%E8%F1%EE%EA
Neumann
Участник
Неподтвержденный


Вступление в Клуб: 31.01.2013
СообщениеПт Апр 19, 2013 21:37    Ответить с цитатой
Полезность: 1
На всякий случай - может кому-нибудь пригодится.
1. Создаете справочник.
2. Создаете ссылку на этот справочник.
3. В типе где будет использоваться ссылка - создаете реквизит в качестве типа указываете данную ссылку.
4. В нужной операции - кнопка "экраная форма" выделяете рамку с названием - в контекстном меню ("Редактирование-преобразовать").
5. В контекстном меню - Панель представлений. Снять галку "По умолчанию" В списке Колонка - выбираем колонку. Сохраняемся.
Всё.
Поправте если что не так.
Alexsey
Эксперт
МЕГА БАНК


Вступление в Клуб: 06.09.2007
СообщениеПн Апр 22, 2013 09:07    Ответить с цитатой
Полезность: Нет оценки
Только стоит учесть, что справочник это дополнительный локальный объект.
_________________
всегда есть как минимум 2 выхода
Random
Эксперт
Резидент CftClub


Вступление в Клуб: 27.06.2011
СообщениеЧт Апр 25, 2013 11:47    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
Только стоит учесть, что справочник это дополнительный локальный объект.


Не надо справочник. Используйте DUMMY.
Сделайте представление для просмотра, которое дёргает значения из функций, описанных в операции где-нить тут же, в DUMMY, и делает это ровно count количество раз, значение тоже прочитать из функции.

Используйте ссылку на DUMMY.

Дальше дело техники.

Решение подходит для большинства случаев, где новый справочник нужен только для "плодежа" значений в комбо-боксе.

Это тоже лок.объекты, но их существенно меньше, особенно если переиспользовать.
vtar
Эксперт
Неподтвержденный


Вступление в Клуб: 20.03.2009
СообщениеЧт Апр 25, 2013 12:44    Ответить с цитатой
Полезность: Нет оценки
Random пишет:

Не надо справочник.

А чем не подходит справочник "Универсальный справочник кодов/наименований" UD_CODE_NAME ?
И никаких локальных объектов.
Alexsey
Эксперт
МЕГА БАНК


Вступление в Клуб: 06.09.2007
СообщениеЧт Апр 25, 2013 13:09    Ответить с цитатой
Полезность: Нет оценки
В принципе в базе есть примеры, например та же операция ::[TRC].[EDIT_ABONENT]. В качестве значений можно сделать запись в справочнике "Настройки."
Ни каких локальных объектов и при этом возможность редактирования.
В общем вариантов масса, главное знать чего хочешь.
_________________
всегда есть как минимум 2 выхода
pas
Профи
ФИА-БАНК


Вступление в Клуб: 20.11.2007
СообщениеСр Май 15, 2013 13:19    Ответить с цитатой
Полезность: Нет оценки
Neumann пишет:
На всякий случай - может кому-нибудь пригодится.
1. Создаете справочник.
2. Создаете ссылку на этот справочник.
3. В типе где будет использоваться ссылка - создаете реквизит в качестве типа указываете данную ссылку.
4. В нужной операции - кнопка "экраная форма" выделяете рамку с названием - в контекстном меню ("Редактирование-преобразовать").
5. В контекстном меню - Панель представлений. Снять галку "По умолчанию" В списке Колонка - выбираем колонку. Сохраняемся.
Всё.
Поправте если что не так.


Разживал!
Peak
Участник
Неподтвержденный


Вступление в Клуб: 01.08.2013
СообщениеЧт Авг 01, 2013 12:28    Ответить с цитатой
Полезность: Нет оценки
Random пишет:
Alexsey пишет:
Только стоит учесть, что справочник это дополнительный локальный объект.


Не надо справочник. Используйте DUMMY.
Сделайте представление для просмотра, которое дёргает значения из функций, описанных в операции где-нить тут же, в DUMMY, и делает это ровно count количество раз, значение тоже прочитать из функции.

Используйте ссылку на DUMMY.

Дальше дело техники.

Решение подходит для большинства случаев, где новый справочник нужен только для "плодежа" значений в комбо-боксе.

Это тоже лок.объекты, но их существенно меньше, особенно если переиспользовать.




Добрый день!
можете провести пример как использовать DUMMY?
не понял как использовать
Random
Эксперт
Резидент CftClub


Вступление в Клуб: 27.06.2011
СообщениеПн Авг 05, 2013 06:38    Ответить с цитатой
Полезность: Нет оценки
Peak пишет:
Random пишет:
Alexsey пишет:
Только стоит учесть, что справочник это дополнительный локальный объект.


Не надо справочник. Используйте DUMMY.
Сделайте представление для просмотра, которое дёргает значения из функций, описанных в операции где-нить тут же, в DUMMY, и делает это ровно count количество раз, значение тоже прочитать из функции.

Используйте ссылку на DUMMY.

Дальше дело техники.

Решение подходит для большинства случаев, где новый справочник нужен только для "плодежа" значений в комбо-боксе.

Это тоже лок.объекты, но их существенно меньше, особенно если переиспользовать.




Добрый день!
можете провести пример как использовать DUMMY?
не понял как использовать


1. Делаем библиотеку с функциями типа:
Код:

type arr_num is table of number;
type arr_str is table of varchar2(32767);
a$s      arr_num;
a$id   arr_num;
a$text   arr_str;

function GetCount return number is
begin
   return a$id.count;
end;

function GetId(p_rownum number) return number is
begin
   if a$id.exists(p_rownum) then
      return a$id(p_rownum);
   end if;
   return null;
end;

function GetSession(p_rownum number) return number is
begin
   if a$s.exists(p_rownum) then
      return a$s(p_rownum);
   end if;
   return null;
end;

procedure Clear is
begin
   a$id.delete;
   a$text.delete;
end;

function Add(p_session number, p_text varchar2) return number is
v$id   number;
begin
   select d(d.[id])
   in (   select a(a%id+0:id)
         in ::[DUMMY]
         where   rownum <= ::[DW0].[COMBO].GetCount + 1
         minus
         select b(::[DW0].[COMBO].GetId(rownum))
         in ::[DUMMY]
         where   rownum <= ::[DW0].[COMBO].GetCount )
   where rownum < 2
   into v$id;
   a$s(a$s.count + 1) := p_session;
   a$id(a$id.count + 1) := v$id;
   a$text(a$text.count + 1) := p_text;
   return v$id;
end;


представление для просмотра типа
Код:
type main is
   select a(   ::[DUMMY].[COMBO].GetText(rownum)   :text
         ,   ::[DUMMY].[COMBO].GetSession(rownum):session
   ) in ::[DUMMY]
   where a%id in (select b(::[DUMMY].[COMBO].GetId(rownum)) in ::[DUMMY] where rownum <= ::[DUMMY].[COMBO].GetCount)
   ;


И пользуемся.
При запуске операции вызываем Clear, Add нужных данных с нужными фильтрами (сессиями). В переменных, с типом ссылка на DUMMY в фильтре вносим нужные сессии. Если переменная одна, то сессии в принципе не нужны, но кто сказал, что вы не захотите потом добавить ещё пару комбобоксов?
Размещаем переменные на форме, конвертируем в выпадающие списки, устанавливаем представление, колонку. В общем, как описано выше.
danzki
Участник - экстремал
Финансовый стандарт


Вступление в Клуб: 30.09.2010
СообщениеСр Фев 25, 2015 15:54    Ответить с цитатой
Полезность: Нет оценки
Народ!
Снова возник вопрос по комбобоксу.
На форме операции Редактировать есть комбо, который формируется НЕ из представления.
Формируется в Проверке следующим образом:
Код:

str  [STRING_REC];
begin
   if P_MESSAGE= 'DEFAULT' then
      -- Формируем комбо бокс
      V_ARR := next_value('seq_id');
      for (
          select c(c.R   : R)
                in (select a(вариант 1' : R)
                           in DUMMY
              where rownum = 1
                union all
            select a('вариант 2' : R)
              in DUMMY
        where rownum = 1
                  )
      ) loop
          str.[STRING] := c.R;   --   заполняем имя отчета для combobox
          V_ARR%insert(str);
      end loop;
   end if;


В продукте в Дополнительных свойствах сохраняется какой вариант выбран в Конструкторе.

Как затем заставить комбо отображать именно этот вариант?

В конструкторе я сохраняю 1 (если в комбо выбрали Вариант 1), 2 (если Вариант 2), в Редактировать в DEFAULT получаю это значение (1 или 2), но не могу заставить комбо при поднятии формы отображать Вариант 1 или Вариант 2.

Подскажите чего делать?
prankster
Профи
Открытие


Вступление в Клуб: 22.08.2014
СообщениеСр Фев 25, 2015 16:12    Ответить с цитатой
Полезность: Нет оценки
danzki пишет:
Народ!
Снова возник вопрос по комбобоксу.
На форме операции Редактировать есть комбо, который формируется НЕ из представления.
Формируется в Проверке следующим образом:
Код:

str  [STRING_REC];
begin
   if P_MESSAGE= 'DEFAULT' then
      -- Формируем комбо бокс
      V_ARR := next_value('seq_id');
      for (
          select c(c.R   : R)
                in (select a(вариант 1' : R)
                           in DUMMY
              where rownum = 1
                union all
            select a('вариант 2' : R)
              in DUMMY
        where rownum = 1
                  )
      ) loop
          str.[STRING] := c.R;   --   заполняем имя отчета для combobox
          V_ARR%insert(str);
      end loop;
   end if;


В продукте в Дополнительных свойствах сохраняется какой вариант выбран в Конструкторе.

Как затем заставить комбо отображать именно этот вариант?

В конструкторе я сохраняю 1 (если в комбо выбрали Вариант 1), 2 (если Вариант 2), в Редактировать в DEFAULT получаю это значение (1 или 2), но не могу заставить комбо при поднятии формы отображать Вариант 1 или Вариант 2.

Подскажите чего делать?


Как-то так должно:
Код:

str  [STRING_REC];
begin
   if P_MESSAGE= 'DEFAULT' then
      -- Формируем комбо бокс
      V_ARR := next_value('seq_id');
      for (
          select c(c.R   : R, c.c_num)
                in (select a('вариант 1' : R, 1 : c_num)
                           in DUMMY
              where rownum = 1
                union all
            select a('вариант 2' : R, 2 : c_num)
              in DUMMY
        where rownum = 1
                  )
      ) loop
            declare
               refStr   ref [STRING_REC];
            begin
                str.[STRING] := c.R;   --   заполняем имя отчета для combobox
               
              refStr :=  V_ARR%insert(str);
               
                if {СОХРАНЕННОЕ_ЗНАЧЕНИЕ} = c.c_num then
                   {ИМЯ_ПЕРЕМЕННОЙ_НА_ФОРМЕ} := refStr;
                end if;
          end;
         
      end loop;
   end if;

danzki
Участник - экстремал
Финансовый стандарт


Вступление в Клуб: 30.09.2010
СообщениеСр Фев 25, 2015 16:28    Ответить с цитатой
Полезность: Нет оценки
prankster пишет:
Как-то так должно:


Круто! Работает.
Есть клевая цитата из Lock, Stock and Two Smoking Barrels, которая подошла бы, но меня за нее забанят Very Happy
NewGirl
Участник
Неподтвержденный


Вступление в Клуб: 14.01.2016
СообщениеЧт Янв 14, 2016 11:51    Ответить с цитатой
Полезность: Нет оценки
В продолжение вопроса с выпадающим списком: имеется справочник, пользователи хотят, чтобы при загрузке формы в выпадающем списке было 4 значения из этого справочника (все указаны). Если нужного среди них нет, то провалиться по кнопке в справочник и выбрать другое значение.
Список значений для списка беру из настройки и загоняю в переменную, далее при загрузке формы считываю в фильтре значение переменной и список готов. Делаю дублирующий объект в виде кнопки (чтобы можно было провалиться в справочник), после того как выбираю новую запись значение переменной с перечнем обновляется, а вот значения в списке не обновляются (там фильтр считан при загрузке). Вопрос к знатокам: как обновить список?
NewGirl
Участник
Неподтвержденный


Вступление в Клуб: 14.01.2016
СообщениеЧт Янв 14, 2016 12:23    Ответить с цитатой
Полезность: Нет оценки
Вопрос снимается, коллеги нагуглили Combo.Refresh.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru