Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Вниз

Неудобоваримый LookUp или я родился баобабом   Найти похожие ветки 

 
MsGuns   (2002-10-29 15:48) [0]

Уважаемые мастера ! Объясните тупому как НОРМАЛЬНО работать с полями таблиц, связанными со справочниками. И, пожалуйста, на прилагаемом примере.

Пример:
Есть справочник SFIOTN (Табельные номера)
--------------------------------------------
1. TNID INTEGER (PK) Табельный номер (1-9999)
2. TNFam VARCHAR 30 Фамилия
3. TNName VARCHAR 20 Имя
4. TNName2 VARCHAR 30 Отчество
5. TNBhD DATE Дата рождения
6. TNSex CHARACTER 1 Пол
7. TNSct CHARACTER 3 Цех/Отдел
8. TNPrc DECIMAL 12,2 Оклад/Ставка
9. TNKnPr SMALLINT Категория оплаты (оклад/поврем/..)

Есть таблица начислений ZPNach
----------------------------------
1. NYear SMALLINT (PK) Год
2. NMonth SMALLINT (PK) Месяц
3. NTNID INTEGER (PK) Таб.номер
4. NTNKod SMALLINT (PK) Код начислений
5. NTNSct CHARACTER 3 Цех/Отдел
6. NTNPrc DECIMAL 12,2 Оклад/Ставка
7. NTNKnPr SMALLINT Категория оплаты (оклад/поврем/..)
8. NTNWrkD SMALLINT Отработано дней
9. NTNWrkH SMALLINT Отработано часов
10. NTNSumm DECIMAL 12,2 Сумма начислено


В таблице начислений надо выбирать таб.номера из справочника и при этом в поля 5-7 должны прописываться соотв.реквизиты чела из того же справочника. При этом в выпадающем списке значений в гриде надо, чтоб были показаны ВСЕ поля справочника с возможностью поиска по любой колонке. Ну чтоб не зная номера, юзер мог найти его по фамилии, например. А еще кучнее, чтоб можно было фильтрануть или хотя бы упорядочить например, по подразделению.

Какие поля я должен добавить в DataSet с таблицей начислений и как указать все свойства этих LookUp полей, чтобы

а) прописывался ТН в физ.поле выбранного чела, а также заполнялись поля 5-7 ?
б) в выпадающем списке я видел ВСЕ поля справочника
в) в выпадающем списке можно было искать по любой из отображаемых колонок
г) в выпадающем списке был заголовок.

Можно ли в принципе, используя только стандартные свойства TField НД (я пользуюсь TTable/TQuery), т.е. без собственных прорисовок и наворотов реализовать эти 4 фичи ?

Бьюсь с этим уже много времени, но получается все какое-то кастрированное + масса добавочных полей (lookup) и невозможность нормально отобразить список, не говоря уже о поиске


 
3JIA9I CyKA   (2002-10-29 15:55) [1]

Quantum тебе в помощь.


 
MsGuns   (2002-10-29 15:58) [2]

>3JIA9I CyKA © (29.10.02 15:55)
>Quantum тебе в помощь.

А где он растет и с чем его едять (Баобаб)



 
Johnmen   (2002-10-29 16:10) [3]

а) по OnChange поля NTNID, причем лукапное завязано на него...
б) дбгрид, отличный от стандартного
в) -"-
г) -"-



 
Desdechado   (2002-10-29 16:32) [4]

по (а) - имхо, неверное проектирование БД. Зачем и в справочнике, и в рабочей таблице дублировать данные?


 
3JIA9I CyKA   (2002-10-29 16:41) [5]

http://www.devexpress.com/index.shtm


 
MsGuns   (2002-10-29 16:44) [6]

>Desdechado © (29.10.02 16:32)

В данном случае они не дублируются: Если в 2003 г. товарищ перейдет из одного отдела в другой или у него поменяется оклад, в справочнике будут сделаны соотв.изменения. Если буху надо будет посмотреть начисления за 2002, 2001 и т.д. годы, там должно быит прописано и то и другое, что было понятно, откуда такая сумма.
А вообще это я просто привел пример для объяснения того, что мне надо. Описанных мною таблиц нет в природе. Зарплату я таким образом делать никогда не буду, по крайней мере держать в справочнике челов из подразделения и тем более оклад (хотя бы потому, что некоторые челы числятся более чем в одном подразделении и т.д.)
Прошу не критиковать топологию приведенной БД, а отвечать по существу и желательно с КОНКРЕТНЫМИ советами, а не так как
>Johnmen © (29.10.02 16:10), который объяснил только (и спасибо ему за это), что стандартными компонентами из закладок Д6 я ничего не добьюсь.


 
Johnmen   (2002-10-29 17:10) [7]

>MsGuns © (29.10.02 16:44)
>Прошу не критиковать топологию приведенной БД, а отвечать по
>существу и желательно с КОНКРЕТНЫМИ советами, а не так как
>>Johnmen © ...

М-да...С тобой тяжело...Принимаешь в штыки советы, ничем не лучшие, чем, напр.3JIA9I CyKA © (29.10.02 15:55)
Да и критики в своем посте я что-то не вижу...:)

>...стандартными компонентами из закладок Д6 я ничего не добьюсь.

Добьешься, если долго биться, что не всегда оправданно...

А впрочем, твой сарказм меня ни в коей мере не задевает.
И если тебе все-таки хоть как-то интересны мои ответы, буду отвечать, не интересны - не буду (могу копать, могу не копать :)))


 
MsGuns   (2002-10-29 17:26) [8]

>Johnmen © (29.10.02 17:10)

Где ты увидел "штыки" ? Суть моего вопроса в том, КАК мне простейшими способами реализовать сабж и могу ли я это сделать вообще простейшими способами. Ты ответил, что а) в принципе можно, а остальные - нет, не уточняя, КУДА же конкретно надо копать. Тот же нелюбимый тобою 3JIA9I CyKA хоть сказал где посмотреть.. Я вообще не делаю разницы между мастерами, а сужу лишь по КОНКРЕТНОМУ посту. Твой пост в данной ветке оказался не слишком полезным, хотя и в какой-то степени информативным.

Из-за чего сыр-бор, убей не пойму. Но если обидел, то извини.



 
Johnmen   (2002-10-29 17:39) [9]

>MsGuns © (29.10.02 17:26)

Ну хорошо...Вот только нет здесь у меня ни любимых, ни нелюбимых.
Я человек терпимый. И не склонен обижаться ни на кого.
И мой ответ, конечно, конкретикой не отдавал :), т.к. сам вопрос очень объемен (как и развернутый ответ на него)...


 
MsGuns   (2002-10-29 17:53) [10]

>Johnmen © (29.10.02 17:39)

Вопрос объемен, безусловно. Но я и хотел получить ответ если и не исчерпывающий, то хотя бы тоже подробный. Для чего, собственно, и обратился к мастерам, за которого и тебя считаю.
Если нет желания или возможности отвечать,- какие проблемы ? Буду скреститсь сам, набивая синяки - мне не впервой. Хотя сам я в таких случаях (т.е. если знаю конкретный, пусть и не короткий, ответ) стараюсь помочь.


 
Johnmen   (2002-10-29 18:20) [11]

>MsGuns ©

В первом приближении я сделал бы так :
НД Табельные номера, НД таблица начислений, в ТНач добавляем столько лукапных полей по ТНом, сколько свешивающихся списков предполагаем, связанных по NTNID-TNID и отображающих необходимое поле из ТНом (кстати NTNID - это FK). Поля 5-7 вытаскиваются из тек.записи ТНом при OnChange NTNID.

Уже пора до дому...До завтра...:)


 
Виталий Панасенко   (2002-10-29 18:29) [12]

Сделайте LookUp-поля - аналоги полей 5-7 таблицы ZPNach. Как я понял, Вы из справочника сделали выборку фамилии по TNID-NTNID. Что мешает сделать тоже и для остального и в событии BeforePost присвоить полям fkData значение полей fkLookup ?


 
MsGuns   (2002-10-29 19:46) [13]

Да ничего не мешает ! Более того, я так и делаю ! Но список-то, который вываливается, состоит из 1 (одной !) колонки.

В данный момент я, например, е...ь с аналогичной проблемой -
есть справочник контрагентов, каждый из которых имеет МФО банка, которое выбирается (lookUp) из справочника банков. Так вот в выпадающем списке я могу показать либо МФО либо Наименование , но не могу ОБА !!!


 
Victor_Cr   (2002-10-29 20:42) [14]

Понимаешь, если ты хочешь иметь возможность в одну и ту же ячейку вводить значения двух и более полей таблицы... то тебе LookUp не подходит. Есть вариант: попробу поэксперементируй с PickList-ом (есть даже на вкладке Properties)... Сначала ты вводишь в него всевозможные варианты и юзер использует этот список, а потом пробуешь их интерпретировать обратно в данные для таблиц (если надо?). Как это сделать подумай сам.
Удачи.


 
MsGuns   (2002-10-29 21:14) [15]

>Victor_Cr © (29.10.02 20:42)
Я не хочу вводить в ОДНО поле грида значения ДВУХ полей справочника. Я хочу вводить в одно, но чтоб список мне показывал к перечню возможных значений ЭТОГО поля еще и колонки с ДРУГИМИ полями справочника и хочу делать поиск по ним (другим).
Но в принципе мне ясно, что шире станд.грида не пукнешь 8)

Через PickList ? Да запросто. Дать запрос по нужным полям справочника, потом заполнить TStrings с учетом "разнокалиберности" ширины фонтов чтоб была видимость колонок, потом организовать диалог для поиска и фильтрации по любой колонке. Да каждый раз всю эту хрень рефрешить и пересоздавать (справочник то обновляется). Это все, конечно, хорошо, но причем здесь LookUp ? А сабж-то о нем, родимом.

Однако все равно спасибо, что не прошел мимо барахтающегося в г.. 8))


 
ЮЮ   (2002-10-30 08:23) [16]

не используй DBGrid для редактирования, а только для позиционирования на записи, а редактируй текущую запись посредством DB компонентов. Так DBLookupCombo позволяет выводить уже несколько полей в Lookup списке. А для возможности выбора по разным полям "справочника" ставишь несколько таких компонентов, которые отличаются первым полем в списке, оно и будет отражаться, когда список свёрнут, по нему и пудет осуществляться поиск в списке,и изменение в любом из них приведёт к изменению в других.


 
fnatali   (2002-10-30 08:43) [17]

Может, ещё такой вариант годится - в гриде в нужной колонке по кнопке вызывать отдельную форму со справочником, например, тоже в виде грида. И в этой новой форме и далать нужные фильтрации, поиски и т.п.


 
Victor_Cr   (2002-10-30 09:57) [18]

> Дать запрос по нужным полям справочника, потом заполнить TStrings с учетом "разнокалиберности" ширины фонтов чтоб была видимость колонок, потом организовать диалог для поиска и фильтрации по любой колонке.
Это все проще чем кажеться. Устанавливаешь шрифт грида Courier New. Потом

FillLine := " "{много пробелов};
<Все требуемые для отображения поля приводишь к строковым>
PickList.Clear;
while <не конец справочника> do
begin
PickList.Items[Index] := Copy(<поле1>+FillLine,1,<до скольки символов обрезать>)+
Copy(<поле2>+FillLine,1,<до скольки символов обрезать>)+
...
Copy(<полеN>+FillLine,1,<до скольки символов обрезать>);
end;


> Да каждый раз всю эту хрень рефрешить и пересоздавать (справочник то обновляется).

Много времени это у тебя не займет. Сделаешь это процедурой и вызывай ее где нужно обновить. Кстати LookUp у тебя тоже сам бы не обновлялся.

> Это все, конечно, хорошо, но причем здесь LookUp ? А сабж-то о нем, родимом.

Ну не на нем же родимом свет клином сошелся. В принципе все. Ну пробуй, вдруг получится ;-)


 
MsGuns   (2002-10-31 13:42) [19]

>ЮЮ © (30.10.02 08:23)
>не используй DBGrid для

Согласен, но не всегда так получается. Например при вложенных справочниках. Т.е. когда при выборе из одного справочника надо добавить новую строку, а некоторое поле связано с другим справочником.

>fnatali © (30.10.02 08:43)

Такой вариант мне в голову пришел давно и часто я так и делаю, но много мороки, а создать универсальную компоненту или bpl-ку тямы не хватает.

>Victor_Cr © (30.10.02 09:57)

Спасибо за пример ! Мне частенько приходилось из-за разнокалиберности шрифтов использовать вместо простого TStrings несколько угловатый TListView. Теперь левелапнулся и буду использовать Ваше средство.


 
NickBat   (2002-10-31 14:03) [20]

В похожей (но не точно такой) ситуации я делал обычный ComboBox, заганял данные из справочника в TStringList, например
StringListKod - код вида деятельности
StringListName - наименование вида деятельности
потом отражал например StringListName в ComboBox и предлагал пользователю при желании нажать, к примеру F12, для отображения в ComboBox кодов видов деятельности. Соответственно заганяя туда данные из StringListKod.
Опять же справочник видов деятельности часто не обновляется, хотя в любом случае справочники не так часто обновляются - на то они и справочники. :)))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.007 c
3-69210
vl_17
2002-11-01 15:29
2002.11.21
То ли лыжи не едут то ли я ...


14-69569
Николай Быков
2002-11-03 07:01
2002.11.21
Внимание! Внимание! Внимание!


7-69595
isc
2002-09-20 18:36
2002.11.21
Работа с LPT портом


6-69459
oleg_er
2002-09-26 07:05
2002.11.21
трудный вопрос - использование сетевой карты по выбору


1-69247
123000
2002-11-11 18:18
2002.11.21
Блокировка файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский