Форум: "Базы";
Текущий архив: 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.046 c