Несколько browser в интерфейсе

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Несколько browser в интерфейсе

Сообщение niteo »

Добрый день.
Необходимо сделать несколько browse в интерфейсе. Делаю так:

Код: Выделить всё

interface iPers 'Работа с сотрудниками';
create view vAllPers
  var
    ips: string;
  as select persons.nrec, persons.department, catalogs.nrec
  from persons, catalogs
  where ((persons.department == catalogs.nrec ));
  
create view vRabPers
  var
    ips: string;
  as select persons.nrec, persons.department, catalogs.nrec
  from persons, catalogs
  where (( 'С' == persons.isemployee and persons.department == catalogs.nrec ));

var ind: integer;
tabbedsheet left tabbed
  browse AllBrowser 'Все сотрудники';  
    fields
      vAllPers.ips 'ИПС': protect, [20];
      vAllPers.persons.fio 'ФИО сотрудника': protect, [25];
      vAllPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;

  browse RabBrowser 'Работающие';  
    fields
      vRabPers.ips 'ИПС': protect, [20];
      vRabPers.persons.fio 'ФИО сотрудника': protect, [25];
      vRabPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;
end; //tabbedsheet
  handleEvent
    cmInit: {};
    cmChangeTabbedSheetFormat:{};
    cmDefault: ind := 0;
  end;
end.
Данные есть только на первой вкладке, на второй - пусто. Запрос рабочий. Подскажите, в чём "засада"?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Несколько browser в интерфейсе

Сообщение m0p3e »

browse без table - деньги на ветер :)
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Re: Несколько browser в интерфейсе

Сообщение niteo »

m0p3e писал(а):browse без table - деньги на ветер :)
Спасибо за отклик!!!
Хм.. добавил строчку viewTable, результат не изменился.
Сейчас так:

Код: Выделить всё

  browse AllBrowser 'Все сотрудники'; 
  viewTable;
    fields
      vAllPers.ips 'ИПС': protect, [20];
      vAllPers.persons.fio 'ФИО сотрудника': protect, [25];
      vAllPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;

  browse RabBrowser 'Работающие'; 
  viewTable;
    fields
      vRabPers.ips 'ИПС': protect, [20];
      vRabPers.persons.fio 'ФИО сотрудника': protect, [25];
      vRabPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;
Или это надо делать во временной таблице и использовать и использовать ключевое слово table ?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Несколько browser в интерфейсе

Сообщение m0p3e »

Никогда не использую именованные View, но видимо нужно так:

Код: Выделить всё

  browse AllBrowser 'Все сотрудники'; 
  Table vAllPers.Persons;
    fields
      vAllPers.ips 'ИПС': protect, [20];
      vAllPers.persons.fio 'ФИО сотрудника': protect, [25];
      vAllPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;

  browse RabBrowser 'Работающие'; 
  Table vRabPers.Persons;
    fields
      vRabPers.ips 'ИПС': protect, [20];
      vRabPers.persons.fio 'ФИО сотрудника': protect, [25];
      vRabPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Re: Несколько browser в интерфейсе

Сообщение niteo »

m0p3e писал(а):Никогда не использую именованные View, но видимо нужно так:

Код: Выделить всё

  browse AllBrowser 'Все сотрудники'; 
  Table vAllPers.Persons;
    fields
      vAllPers.ips 'ИПС': protect, [20];
      vAllPers.persons.fio 'ФИО сотрудника': protect, [25];
      vAllPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;

  browse RabBrowser 'Работающие'; 
  Table vRabPers.Persons;
    fields
      vRabPers.ips 'ИПС': protect, [20];
      vRabPers.persons.fio 'ФИО сотрудника': protect, [25];
      vRabPers.catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;
Компилятор ругается:
Ошибка: Таблица vAllPers отсутствует в главной логической таблице vAllPers (стр....)

А вообще, в принципе, можно использовать 2 browse в интерфейсе?
Ольга
Постоянный обитатель
Сообщения: 135
Зарегистрирован: 29 мар 2005, 17:49

Re: Несколько browser в интерфейсе

Сообщение Ольга »

Можно.
Вот только, насколько я помню, имя view в интерфейсе игнорируется (я тоже не использую именованные view).
И потом, для работы с визуальными элементами вроде бы можно использовать только одну (первую) View, не?

В Вашем случае - сделайте одну view c синонимами для persons и catalogs, в первом BROWSE используйте table Persons, а во втором - соответственно - Table <синоним Persons> и все получится...
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Re: Несколько browser в интерфейсе

Сообщение niteo »

Ольга писал(а):Можно.
Вот только, насколько я помню, имя view в интерфейсе игнорируется (я тоже не использую именованные view).
И потом, для работы с визуальными элементами вроде бы можно использовать только одну (первую) View, не?

В Вашем случае - сделайте одну view c синонимами для persons и catalogs, в первом BROWSE используйте table Persons, а во втором - соответственно - Table <синоним Persons> и все получится...
Вероятно вы правы. Избавился от строчки Table.vAllPers.Persons компилятор начал ругаться так:
Ошибка: Таблица vRabPers отсутствует в главной логической таблице vAllPers (стр....)

Увязал таблицы таким условием:

Код: Выделить всё

  from persons, catalogs, persons ps, catalogs dep
  where (( persons.department == catalogs.nrec and 
           persons.nrec == ps.nrec and 
           ps.department == dep.nrec));
При перемещении по 1-й таблице, автоматически перемещаюсь по другой :)
Ольга
Постоянный обитатель
Сообщения: 135
Зарегистрирован: 29 мар 2005, 17:49

Re: Несколько browser в интерфейсе

Сообщение Ольга »

Я имела ввиду примерно так:

Код: Выделить всё

create view vAllPers
  var
    ips: string;
  as select persons.nrec, persons.department, catalogs.nrec
  from persons, catalogs, Persons ps, Catalogs cs
  where ((
          persons.department == catalogs.nrec  //это из первой вью
  and   'С' == ps.isemployee and ps.department == cs.nrec   // это из второй
  ));
  
var ind: integer;
tabbedsheet left tabbed
  browse AllBrowser 'Все сотрудники';  
  Table Persons
    fields
      ips 'ИПС': protect, [20];
      persons.fio 'ФИО сотрудника': protect, [25];
      catalogs.name 'Подразделение сотрудника': protect, skip, [45];
  end;

  browse RabBrowser 'Работающие';  
  Table ps
    fields
      ips 'ИПС': protect, [20];
      ps.fio 'ФИО сотрудника': protect, [25];
      cs.name 'Подразделение сотрудника': protect, skip, [45];
  end;
end; //tabbedsheet
Переменных, если нужно, можно тоже две, ips и ips2, к примеру
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Несколько browser в интерфейсе

Сообщение m0p3e »

Либо второй вариант - использовать одну таблицу и bounds-ы, переключаемые в cmChangeTabbedSheetFormat;
Ответить