|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Программа для продажи товара (Delphi 7)
Привет всем! Хочу создать программу через которую можно будет продавать товары. Уже создал базу данных в Access подключил ее в DBGrid через ADO теперь могу создавать, редактировать товар и сохранять в эту базу. Сейчас встал вопрос реализации самого момента продажи этого товара, не могу сообразить как это сделать. Вопрос такой, мне надо создать в этой БД еще одну таблицу (промежуточную), чтобы при выборе товара он заносился туда и когда чек будет закрыт все эти товары (точнее их количество) списывалось из первой таблицы? Верно я мыслю? Подскажите пожалуйста я новичок в программировании. Заранее благодарен!
|
#2
|
|||
|
|||
Нет, не верно.
Вообще, если поискать по форуму, то я уже давал расклад по архитектуре подобных систем. Повторю в кратце. Подобные системы бывают 2х типов: Первый тип - основанные на количественном учете, т.е. то, что ты пытаешься сделать. Проблемой этого типа систем является то, что все операции производятся раздельно (можно пытаться объединить в единую транзакцию, но там свои подводные камни). Т.е. у тебя фактически одно и то же число хранится в нескольких местах и требует синхронного обновления. Второй тип - системы основанные на документах. В системах такого типа данные (ну, кроме разных справочников) хранятся в виде приходных-расходных документов. В твоем случае: - У тебя уже есть таблица товаров. Это, фактически, твой справочник товаров. - Теперь тебе надо сделать таблицу документов. Там будет 2 типа документов. Приходные, например, приход товара на склад от поставщика. И расходные, например, отпуск клиенту - чек. Текущее наличие товара считается как (сумма прихода) - (сумма расхода). Кстати, там есть возможность делать быстрое резервирование - созданием документа резервирования и удаления таких документов при окончании редактирования основного расходного документа. PS. У тебя курсач или что-то серьезное? Последний раз редактировалось lmikle, 14.07.2017 в 03:56. |
#3
|
|||
|
|||
Спасибо за ответ! Нет не курсач просто увлекся программированием и стало интересно разобраться как это работает. То есть я создаю еще таблицу с такими же столбцами как в первой? и делать в эту таблицу как бы занесение товара и убирания его от туда? то есть будет работать так: когда я выбираю товар из таблицы1 (которая уже создана и там есть товар) он переносится в таблицу2 когда я товар продаю в таблицу2 заносится еще строка этого товара но с меньшим количеством и потом это передается в таблицу1? так это работает? или я все таки не чего не понял(
|
#4
|
|||
|
|||
нет, не понял.
фактически, у тебя есть таблица-справочник по товарам: - Артикул (уникальный ключ) - Наименовани - Цена для продажи - др. параметры Кол-ва нет. Кстати, тут есть нюанс, если хочется менять цену и хранить историю этого, но это отдельный вопрос. Теперь тебе нужна таблица документов. На самом деле там 2 таблицы - заголовок документа и позиции документа. Но для простоты объяснения будем считать, что по одному документу мы получаем или отпускаем только одно наименование товара. Таблица будет выглядеть примерно так: - номер документа (уникальный ключ) - дата документа - тип документа (ссылка на справочник документов, т.е. еще одна таблица, для простоты будет считать, что тут у нас хранится -1, 0 или 1) - код товара (ссылка на 1ю таблицу) - цена товара по документу (вот это будет копироваться со справочника, но можно править) - кол-во единиц товара купленных/проданных по документу Тогда текущий остаток товаров всегда можно посчитать путем сложения по всем документам с учетом типа документа. тогда резервирование товара реализуется как обычный документ. |
#5
|
|||
|
|||
Ясно, спасибо. Но это больше похоже будет на товара учетную систему, а мне по сути надо только забить товар в базу (и не важно от кого он пришел, куда ушел, какая там закупочная была цена и т.д. и т.п.), потом продать его и чтобы количество просто уменьшалось.
То есть такая концепция: 1. Создать Таблица1 в БД (Поля: код, наименование, цена, остаток), в программе сделать удобную форму (Форма1) для занесения товара в эту таблицу. 2. Создать Форма2 где можно было бы выбирать товар из Таблица1, потом указывать количество продаваемого товара и нажать кнопку [Продать], при нажатии указанное количество вычиталось бы из количества в Таблица1 и все, от программы больше нечего не требуется. Такая схема не будет работать? |
#6
|
|||
|
|||
Для обучения - будет.
Для курсача, а уж тем более для какой-то более серьезной цели - нет. |
#7
|
|||
|
|||
А можешь подсказать как должен выглядеть код при нажатии на кнопку [Продать], чтобы допустим в Форма2 из DBGrid2 выбранный товар (точнее его выбранное количество) вычиталось из остатков в DBGrid1 на Форма1 того же товара?
|
#8
|
|||
|
|||
Вот есть код:
Код:
procedure TForm2.Button1Click(Sender: TObject); begin ADOTable1.Edit; ADOTable1['кол']:=ADOTable1['кол']-ADOTable2['кол2']; ADOTable1.Post; end; При нажатии кнопки он берет запись в DBGrid2 (ADOTable2) и вычитает из записи в DBGrid1 (ADOTable1) то количество которое указано в колонке (кол2) DBGrid2 (ADOTable2). [Работает на строчку в DBGrid2 на которой стоит маркер, если щелкну на след. строчку то код будет работать на нее.] Вопрос как сделать так чтобы этот код вычитал из нескольких записей одновременно, то есть чтобы при нажатии кнопки он брал запись 2ух строчек в DBGrid2 (ADOTable2) и вычитал из записей 2ух строчек в DBGrid1 (ADOTable1) то количество которое указано в колонке (кол2) DBGrid2 (ADOTable2) каждой строчки? [Вообщем надо чтобы код захватывал все строчки в DBGrid2 сразу а не по одной как сейчас.] Эти две таблицы находятся в одной БД access подключены через ADO. |
#9
|
|||
|
|||
Подскажите на моем примере как будет код с Eof выглядеть?
|
#10
|
|||
|
|||
Обрисую ситуацию чтобы было понятнее как мне надо сделать. Есть БД access в ней есть таблица (Т1) там столбцы (код, наим1, кол1):
код | наим1 | кол1 1 | яблоко | 12 2 | груша | 27 3 | банан | 22 Так же в этой БД есть еще одна таблица (Т2) там столбцы (код, код1, наим2, кол2) она пустая. В программе создано две формы Form1 и Form2, на Form1 располагается DBGrid1 к нему подключена таблица (Т1) через ADOTable1, на Form2 располагается поле (Edit2) для выбора товара, DBGrid2 к нему подключена таблица (Т2) через ADOTable2 и кнопка Button2, когда я ввожу в поле (Edit2 на Form2) код (1, 2 или 3) то из таблицы (Т1) берется (например если я ввел код 1) яблоко и вставляется в DBGrid2 получается так: код | код1 | наим2 | кол2 1 | 1 | яблоко | В столбец (код1) и (наим2) берется значение из таблицы (Т1) потом я в столбец (кол2) ввожу число получается например так: код | код1 | наим2 | кол2 1 | 1 | яблоко | 3 И это сохраняется в таблицу (Т2). Потом при нажатии на кнопку Button2 из таблицы (Т1) вычитается то что получилось в таблице (Т2). То есть из (яблоко 12) вычитается (яблоко 3) и в итоге в таблице (Т1) получается так: код | наим1 | кол1 1 | яблоко | 9 2 | груша | 27 3 | банан | 22 Код кнопки: Код:
ADOTable1.Edit; ADOTable1['кол1']:=ADOTable1['кол1']-ADOTable2['кол2']; ADOTable1.Post; Вопрос как доработать код кнопки чтобы при выборе на Form2 несколько товаров в DBGrid2 вычиталось сразу несколько строчек из таблицы (Т1)? Например: Если выберу в DBGrid2 вот так код | код1 | наим2 | кол2 1 | 1 | яблоко | 2 2 | 3 | банан | 5 То при нажатии кнопки Button2 должно в таблице (Т1) DBGrid1 получится так: код | наим1 | кол1 1 | яблоко | 10 2 | груша | 27 3 | банан | 17 Надеюсь все понятно объяснил) Помогите пожалуйста. Заранее очень благодарен! |
#11
|
|||
|
|||
Никто не знает?
|
#12
|
|||
|
|||
Да глупо это на клиенте делать. Придется делать двойной цикл...
Делай запрос на Update, потом перечитывай таблицы... А вообще вот пример (attached), только он на FireBird написан. |
#13
|
||||
|
||||
Цитата:
|