Программирование на Атлантисе (VIP, FCOM, ARD), FastReport
Модераторы: m0p3e , edward_K , Модераторы
niteo
Постоянный обитатель
Сообщения: 151 Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:
Сообщение
niteo » 12 дек 2014, 17:14
Добрый день.
Необходимо сделать несколько
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
Откуда: Москва
Сообщение
m0p3e » 12 дек 2014, 17:22
browse без table - деньги на ветер
niteo
Постоянный обитатель
Сообщения: 151 Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:
Сообщение
niteo » 12 дек 2014, 17:36
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
Откуда: Москва
Сообщение
m0p3e » 12 дек 2014, 18:01
Никогда не использую именованные 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
Контактная информация:
Сообщение
niteo » 12 дек 2014, 18:12
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
Сообщение
Ольга » 12 дек 2014, 18:16
Можно.
Вот только, насколько я помню, имя view в интерфейсе игнорируется (я тоже не использую именованные view).
И потом, для работы с визуальными элементами вроде бы можно использовать только одну (первую) View, не?
В Вашем случае - сделайте одну view c синонимами для persons и catalogs, в первом BROWSE используйте table Persons, а во втором - соответственно - Table <синоним Persons> и все получится...
niteo
Постоянный обитатель
Сообщения: 151 Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:
Сообщение
niteo » 12 дек 2014, 18:27
Ольга писал(а): Можно.
Вот только, насколько я помню, имя 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
Сообщение
Ольга » 12 дек 2014, 19:08
Я имела ввиду примерно так:
Код: Выделить всё
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
Откуда: Москва
Сообщение
m0p3e » 12 дек 2014, 21:26
Либо второй вариант - использовать одну таблицу и bounds-ы, переключаемые в cmChangeTabbedSheetFormat;