Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Отчёт из нескольких таблиц  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Здравствуйте, уважаемые форумцы!

Вопрос к вам вот какой:
Существуют таблицы - Equipment (оборудование), Stocks (склады), People (сотрудники). В каждой из них присутствуют поля по типу: ID, Name, ... .
Кроме того, есть таблица Deliveries с полями: delivID, deliv_data, equipID, stockID, giv_pe_ID, take_pe_ID. При приходе оборудования на объект в неё заполняются записи с указанием ID прихода, даты прихода, а остальные поля получают значения ID из соответствующих вышеуказанных таблиц.

Например:

delivID deliv_data equipID kolvo stockID giv_pe_ID take_pe_ID
1 12.12.2006 1 2 1 2 3
1 12.12.2006 2 2 1 2 3
1 12.12.2006 3 2 2 1 3
1 12.12.2006 4 2 2 1 3
1 12.12.2006 5 1 1 2 3

Где значение equipID берётся из таблицы Equipment и соответствует к примеру:

ID Name
1 Стойка
2 Антенна
3 Монитор
4 Свитч
5 Шкаф

То же самое с полями - stockID (обозначают наименования складов), giv_pe_ID (соответствует сотруднику, отпустившему оборудование со склада), take_pe_ID (соответствует сотруднику, получившему оборудование со склада).

Каким образом можно создать отчёт по таблице Deliveries, чтобы в нём вместо цифр указывалось соответствующее идентификатору название из разных таблиц?

То есть, получилось нечто вроде:


Номер поставки: 1
Дата поставки: 12.12.2006

Наименование Кол-во Склад Отгрузил Принял

Стойка 2 Склад №1 Петров Сидоров
Антенна 2 Склад №1 Петров Сидоров
Монитор 2 Склад №2 Иванов Сидоров
Свитч 2 Склад №2 Иванов Сидоров
Шкаф 1 Склад №1 Иванов Сидоров

Есть мысль, что это можно осуществить SQL-запросом из нескольких таблиц во временную таблицу с последующим составлением на её основе отчёта... А может будут и другие более резонные мысли. Одним словом, прошу подсказать, как это можно осуществить? Нужно ли связывать таблицы по индексам?

Ещё один вопрос, который никак не могу для себя решить - как правильно указывать в форме использование таблицы из базы данных?

1 вариант: в событии формы LOAD пишу код:
OPEN DATABASE ...
USE table1 IN 1
SELECT 1
USE table2 IN 1
SELECT 2
...

2-ой вариант:
В Data Enviroment формы добавляю все нужные таблицы.

3-ий вариант:
Объединённых два выше варианта, т.е. одновременно указываю и там, и там.

Сразу скажу, что пробовал использовать все эти варианты. Но например в третьем варианте иногда (подчеркиваю - не всегда) система выдаёт ошибку "File is in use" для какой-либо таблицы.
Как правильнее?

Заранее спасибо за подсказки и помощь!
12 дек 06, 09:04    [3521860]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Maltsev Max
Member

Откуда: Россия, Пермь
Сообщений: 352
1) Делаешь Селектом выборку по условию в ТАБЛИЦУ.
2) В Окружении отчета Relation`ом привязываешь к ней справочники.
3) стряпаешь форму отчета
4) В Программе из которой вызываешь отчет, Делаешь Селектом выборку по условию в КУРСОР с тем же именем, что и ранее созданная таблица.

Запускаешь и радуешься ... :-))

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

Плюсы: На этапе разработки отчета, можно "пощупать результаты" не надо каждый раз прогонять алгоритм запроса параметров.

Минусы: в дальнейшем, при корректировки отчета фокса требует временную ТАБЛИЦУ. Что бы этого избежать я ее обычно натравливаю на источник для временной таблицы.
12 дек 06, 09:59    [3522117]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Вопрос по пункту 2: не могу найти, как установить Relations (версия Visual FoxPro 9). В Report Data Enviroment такого вроде нет.
Справочники - это, как я понял, таблицы, из которых исходя из ID в сам отчёт берётся значение поля Name?
12 дек 06, 10:14    [3522196]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Попробовал сделать отчёт по одной таблице Orders с полями:

ordersID (номер требования)
ordersDate (дата требования)
equipID (ИД оборудования (N4) - в отчёте должно отображаться название оборудования из другой таблицы Equipments)
stockID (ИД склада (N4) - в отчёте должно отображаться название склада из другой таблицы Stocks)
give_pe_ID (ИД сотрудника (N4) - в отчёте должно отображаться ФИО из другой таблицы People)
take_pe_ID (ИД сотрудника (N4) - в отчёте должно отображаться ФИО из другой таблицы People)

Ничего не получилось... Появляются один цифры. Делал вот как:
в Data Enviroment добавил все нужные таблицы, между ними перетянул нужный ID с главной таблицы на ID таблицы-справочника. Что я сделал неправильно?
12 дек 06, 10:43    [3522379]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Создавать Relations надо только по индексам или можно просто по полям?
И ещё можно ли установить одновременное отношение нескольких полей (имена сотрудников - выдавшего оборудование и принявшего оборудование) на одну и ту же таблицу "Сотрудники".
12 дек 06, 10:52    [3522443]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Так, со всем вроде разобрался :) Отчёт получается. Не получается только одно - предыдущий топик:

Полям - give_pe_ID и take_pe_ID главной таблицы, по которой строю отчёт, должны соответствовать ФИО из таблицы справочника People (с полями peID, Name, ...).
Если задаю только одно отношение - к примеру give_pe_ID на индекс peID - ФИО отображается вместо цифр, как и должно быть. Но если добавляю второе отношение take_pe_ID к этому же индексу - облом.
Получается отношение "многое - к одному". Как разрешить эту проблему?
12 дек 06, 11:17    [3522641]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Maltsev Max
Member

Откуда: Россия, Пермь
Сообщений: 352
Ладно ... Попробую поподробней.

1) Делаешь Селектом выборку по условию в ТАБЛИЦУ.
Например:
Select * from Deliveries Where deliv_data>Ctod('01.01.2006') Into Table C:\Out_Report.dbf

2) В Окружении отчета Relation`ом привязываешь к ней справочники.
Не знаю как в Базе, но на свободных таблицах Relation (связь) цепляется только к индексу.
При чем справочник (дочерняя таблица) может цепляться только к одному полю.
Это из-за того, что при переходе по строкам в Родительской таблице Указатель записи в автоматически перемещается дочерних таблах на соответствующую строку. А если у тебя справочник прицеплен к двум полям, то на какую строку Фокса должна встать ?!?
По Этому я надо добавлять этот справочник еще раз.
3) стряпаешь форму отчета
В TextBox` ах указываешь поля из СПРАВОЧНИКОВ.
4) В Программе из которой вызываешь отчет, Делаешь Селектом выборку по условию в КУРСОР с тем же именем, что и ранее созданная таблица.
  Select * from Deliveries Where deliv_data>Ctod('01.01.2006') Into cursor Out_Report
  Select Out_Report
  report form report\My_Report preview
   
12 дек 06, 11:20    [3522671]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
ОГРОМЕННОЕ СПАСИБО!!!
Всё получилось! :)
12 дек 06, 11:25    [3522715]     Ответить | Цитировать Сообщить модератору
 Re: Отчёт из нескольких таблиц  [new]
Alexander Warlord
Member

Откуда: Абхазия, Сухум
Сообщений: 314
Эээ... чуть не забыл - мой второй вопрос из первого топика :)

Как правильно указывать в форме использование таблицы из базы данных?

1 вариант: в событии формы LOAD пишу код:
OPEN DATABASE ...
USE table1 IN 1
SELECT 1
USE table2 IN 1
SELECT 2
...

2-ой вариант:
В Data Enviroment формы добавляю все нужные таблицы.

3-ий вариант:
Объединённых два выше варианта, т.е. одновременно указываю и там, и там.

В третьем варианте иногда система выдаёт ошибку "File is in use" для какой-либо таблицы.
Как правильнее?
12 дек 06, 11:29    [3522774]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить