Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.19;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.032 c
15-1184958222
Tab
2007-07-20 23:03
2007.08.19
в какой кодировке сохранить тхт файл


1-1180009380
JanMihail
2007-05-24 16:23
2007.08.19
Главные окна из списка


1-1181373282
ambhtr
2007-06-09 11:14
2007.08.19
Выгрузка результатов в Word


15-1184705476
c0deRR
2007-07-18 00:51
2007.08.19
Подскажите, где можно взять базу русского спама?


5-1160287104
o_serg
2006-10-08 09:58
2007.08.19
Компонент для распаковку/упаковки *.JAR