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

Вниз

Интерфейс для создания документа   Найти похожие ветки 

 
Slider007 ©   (2007-05-03 14:04) [0]

Ребята, скоро я вас запарю совсем (сам уже запарился - взялся за проект, на который опыта не совсем хватает .. ну надо же когда-то его зарабатывать ..).
Вопрос наверное скорее философский, но и от реальности не оторваный, скорее наоборот:

Пишу некое подобие торговой программы, которая естественно не обойдется без документов. Документ по сути один, даже не знаю как его обозвать, наверное ближе всего он к счет-фактуре. Но это не суть важно, на форме это хозяйство должно выглядеть стандартно - шапка и таблица(сетка) с товарами (наименование, количество, цена, стоимость).

Споткнулся я на заполнении сетки:
Справочник товаров готов, из него всё замечательно выбирается - http://delphimaster.net/view/1-1176961998/ (здесь я упорно выяснял как мне это правильно сделать, за это отдельное вам спасибо).

Ближе к делу:
Непосредственно заполнение сетки.
Посмотрел как внешне это у 1с реализовано, решил сделать подобно, типа выбрал товар из модальной формы, в сетке выставил нужное количество, цену, перешел к следующей строке ...
Начал думать, какой компонент в качестве сетки использовать:
1. DBGrid(Eh). Хотел сделать "живой запрос", но с наскоку не получилось, потому что в свойстве SelectSQL запрос забит вида
select g.ID, g.ARTICUL_ID, a.NAME, g.QUANTITY, g.PRICE
from goodies g inner join articuls a on (g.articul_id = a.id)
where g.doc_id = 1
order by g.id

(goodies - таблица с содержимым документа, articuls - справочник товаров; запрос черновой, но суть отображена впринципе)
и я так понял (ошибся ?) что из запроса из нескольких таблиц нельзя сделать живой вопрос ? Или всётаки можно?
Ну если получится живой запрос, то идея в общем-то проста - в гриде добавляются/редактируются строки, потом всё это в базу заливается (у ДатаСета Cached Updates включить).

2. Взглянул на ListView. Как-то он мне не понравился (может зря ?).

3. Посмотрел что там ещё из "сеток" есть. Увидел StringGrid. С ним впринципе можно, но это ж при редактировании самого грида геморою не оберешся, а потом ещё и засунуть его содержимое в базу несколько проблематично, хотя конечно решаемо. И если при создании нового документа ещё впринципе терпимо, то при последующем редактировании там ваще голову сломать можно - какие-то строки добавились, какие-то ваще удалились .. как отследить ? Единственный вариант - из базы вообще вытереть старую версию документа и заменить её новой из СтрингГрида. Но как-то всё не красиво в общем...

Даа, много написал. Обобщу:
1. Так чем наиболее оптимально будет воспользоваться в данной ситуации (имеется ввиду 3 пункта перечисленых).
2. Если всётаки выбрать DBGrid, то возможно в ситуации с моим запросом сделать из него "живой" ?
3. Традиционный вопрос ;) - может кроме перечисленных мной решений есть ещё что-то более лучшее (простите за каламбур) ?
4. Если светлые мысли проскользуни в моем опусе, тыкните пальцем плиз где конкретно, буду развивать :).


 
Kostafey ©   (2007-05-03 15:11) [1]

> 1. DBGrid(Eh). Хотел сделать "живой запрос", но с наскоку
> не получилось, потому что в свойстве SelectSQL запрос забит
> вида

В свойстве какого компонента ?


> 1. DBGrid(Eh). Хотел сделать "живой запрос", но с наскоку не получилось,

В наборе данных вводим необходимый запрос, из него и заполняем DBGrid(Eh).
Что тут такого ?


> Ну если получится живой запрос, то идея в общем-то проста
> - в гриде добавляются/редактируются строки, потом всё это
> в базу заливается (у ДатаСета Cached Updates включить).

Можно вообще отказаться от редактирования в сетке, а редактирование делать только
в специальной форме.


> 2. Взглянул на ListView. Как-то он мне не понравился (может
> зря ?).
> 3. Посмотрел что там ещё из "сеток" есть. Увидел StringGrid.

А чем не нравятся компоненты для работы с базой данных TDBxxx ?


 
ANB ©   (2007-05-03 15:23) [2]


> 1. DBGrid(Eh). Хотел сделать "живой запрос", но с наскоку
> не получилось, потому что в свойстве SelectSQL запрос забит
> вида

"Живой" запрос далеко не всегда кушает джойны. Как правило, для полноценного редактирования в гриде приходиться оставлять в запросе одну таблицу а наименования товаров подтаскивать из справочника как локаповое поле. Получается довольно громоздко и неудобно.
Есть более простое решение :
Запрос - только на чтение. Редактировать - через отдельную форму, в базу изменения вносить тоже запросами. А для визуализации изменений - рефрешить содержимое документа. Если в документ не будут вбиваться по 100 тыщ строк - то будет довольно шустро и удобно. Кстати, запросы на изменение очень удобно заменить вызовом хранимок.
Есно, стандартные делфовые Edit; ... Post; работать не будут.


 
Desdechado ©   (2007-05-03 15:23) [3]

Зачем живой? CachedUpdates для чего придумали? А на кнопку сохранения можешь повесить код рассовывания по нужным таблицам.


 
Sergey13 ©   (2007-05-03 15:26) [4]

> [0] Slider007 ©   (03.05.07 14:04)
> 2. Если всётаки выбрать DBGrid, то возможно в ситуации с
> моим запросом сделать из него "живой" ?

Это все равно, что зеркало оживить. 8-)
Нет в гриде данных, они в датасете (кстати что за БД и какие компоненты???? ну блин постоянно!!!!), который и должен быть живым. Для его оживления в нем предусмотрены не только SelectSQL, но и нечто вроде ModifySQL и другие.

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


 
Kostafey ©   (2007-05-03 16:06) [5]

Занятно, опять звучат призывы использовать LookUp- поля.
В то же время ведь по ним нельзя проводить сортировку/фильтрацию записей.
Если эти возможности не нужны, то хорошо, а если нужны?
Остается только SQL.


 
Sergey13 ©   (2007-05-03 16:16) [6]

> [5] Kostafey ©   (03.05.07 16:06)

Во первых фильтровать по ним можно. Во вторых нафиг по ним сортировка в твоем "документе"? В третьих - это не призывы, а мое личное мнение на этот счет - не нравится не юзай.


 
ANB ©   (2007-05-03 18:39) [7]


> Sergey13 ©   (03.05.07 16:16) [6]

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


 
Kostafey ©   (2007-05-03 18:57) [8]

> Во первых фильтровать по ним можно

Замечание принято. Фильтровать можно, просто это не удобно.


> Во вторых нафиг по ним сортировка в твоем "документе"?

По-моему речь шла о сетке (DBGrid)


> В третьих - это не призывы, а мое личное мнение на этот
> счет - не нравится не юзай.

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


 
Asail   (2007-05-03 19:33) [9]

А чего ClientDataSet не использовать? Загнал в него все данные хоть из 100 таблиц и пусть себе юзверь в гриде извращается... А потом по кнопке "сохранить" раскидать по таблицам обратно (одной транзакцией ес-но). ИМХО самый удобный способ для редактируемого грида - короткие транзакции и все такое...


 
Kostafey ©   (2007-05-03 20:47) [10]

> А чего ClientDataSet не использовать?

Имеется в виду InterBase ?


 
Asail   (2007-05-04 00:50) [11]


> Имеется в виду InterBase ?

Имеется в виду TClientDataSet. Тип БД значения не имеет.


 
Slider007 ©   (2007-05-04 06:40) [12]

Ребята, извиняюсь, что не указал СУБД. Использую FireBird 1.5.3, и компоненты IBX, в частности IBDataset.


 
Slider007 ©   (2007-05-04 08:09) [13]

Остановлюсь пожалуй, на варианте с редактированием строки документа в отдельном окне. Наиболее оптимальный вариант для меня сейчас - простенько и со вкусом, и тем более документы не емкие будут совсем - максимум по 2-3 позиции. В будущих проектах (дай бог чтоб они появлялись) может быть что-нибудь другое изобретать придется, но пока некогда - сроки поджимают :(.

Спасибо всем, прям не ожидал, что столько ответов будет, все предложения взяты на заметку :).


 
Sergey13 ©   (2007-05-04 08:27) [14]

> [7] ANB ©   (03.05.07 18:39)
> Тормозят локапы. Особливо, если справочник не маленький

Это есть. Но я так предполагал, что у автора небольшая контора и справочник соответственный. 1-2 тысячи записей в справочнике тормозов вряд ли добавят.

> [8] Kostafey ©   (03.05.07 18:57)
> По-моему речь шла о сетке (DBGrid)

Это тебе лучше знать - о чем шла речь.

> [12] Slider007 ©   (04.05.07 06:40)

А ты как сюда попал? 8-)


 
Slider007 ©   (2007-05-04 08:32) [15]

Sergey13 ©   (04.05.07 8:27) [14]
А ты как сюда попал? 8-)


Не понял тебя ? Попал в эту ветку или в этот форум ?


 
Sergey13 ©   (2007-05-04 08:54) [16]

> [15] Slider007 ©   (04.05.07 08:32)

Это я с утра еще не проснулся, сори. 8-)
Читал сразу несколько веток и не въехал.



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

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

Наверх




Память: 0.5 MB
Время: 0.051 c
15-1184704011
SkYmAn
2007-07-18 00:26
2007.08.19
Установка компонентов


2-1185204280
Alexbor777
2007-07-23 19:24
2007.08.19
SQL запрос


15-1184917274
tradakad_
2007-07-20 11:41
2007.08.19
лицензия Delphi


2-1185130508
copron
2007-07-22 22:55
2007.08.19
GetNextItem


15-1184847220
de.
2007-07-19 16:13
2007.08.19
MapView своими руками...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский