Текущий архив: 2002.11.21;
Скачать: CL | DM;
ВнизНеудобоваримый 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;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.007 c