Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15

Программа для продажи товара (Delphi 7)

13.07.2017, 19:45. Показов 5819. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем! Хочу создать программу через которую можно будет продавать товары. Уже создал базу данных в Access подключил ее в DBGrid через ADO теперь могу создавать, редактировать товар и сохранять в эту базу. Сейчас встал вопрос реализации самого момента продажи этого товара, не могу сообразить как это сделать. Вопрос такой, мне надо создать в этой БД еще одну таблицу (промежуточную), чтобы при выборе товара он заносился туда и когда чек будет закрыт все эти товары (точнее их количество) списывалось из первой таблицы? Верно я мыслю? Подскажите пожалуйста я новичок в программировании. Заранее благодарен!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.07.2017, 19:45
Ответы с готовыми решениями:

условие для продажи товара
имеется код, при рассчете суммы, должно выходить сообщение, если количество товара выбрано больше, чем есть в наличии... но у меня все...

Программа продажи товара в магазине по дням
Программа продажи товара в магазине по дням CLS INPUT “ Кол. рабочих дней: “, n INPUT “ Начальное кол. товара: “, R REM “...

Формула для вычисления поступления и продажи товара
У меня одна БД. В которой размещены товары. Они периодически поступают и периодически продаются. Продажа/поступление идет в разных...

39
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 3
15.07.2017, 00:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Вообще, по-хорошему, ещё должно быть поле "партия товара".
очень смешно, еще автору предложи ФИФО реализовать

Цитата Сообщение от Пытливый Посмотреть сообщение
овременные мощности вполне позволяют обойтись без нее.
смотря как реализовано

Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Ещё, возможно, таблица остатков.
она, конечно, ускоряет расчеты, но при этом добавляет свои минусы

Цитата Сообщение от СтранныйЯщер Посмотреть сообщение
Так не сможет работать?
остаток из 1 таблицы убери - остатки ВСЕ расчетные
приходы шлепай как хочешь, но перед расходом проверь есть ли товар на остатке, что бы в минус не уйти

то есть у тебя будет несколько таблиц справочников - товары\поставщики и тд
и таблица движения - пришло\ушло
0
Айлурофил
 Аватар для Massaraksh7
516 / 449 / 112
Регистрация: 27.05.2017
Сообщений: 2,716
Записей в блоге: 5
15.07.2017, 08:58
Например, так:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
CREATE TABLE goods
(
Id INTEGER NOT NULL PRIMARY KEY,
Name CHAR,
BarCode CHAR,
LocalCode CHAR,
Description BLOB,
...
Photo BLOB
);
 
CREATE TABLE Suppliers
(
Id INTEGER NOT NULL PRIMARY KEY,
Name CHAR,
....
);
 
 
CREATE TABLE OpList
(
Id INTEGER NOT NULL PRIMARY KEY,
Code INTEGER NOT NULL,
Name CHAR,
...
);
 
INSERT INTO OpList (Name,Code,...) VALUES ("Поставка","1",...);
INSERT INTO OpList (Name,Code...) VALUES ("Реализация","-1",...);
 
 
CREATE TABLE Operations
(
Id INTEGER NOT NULL PRIMARY KEY,
DateAndTime CHAR,   /* yyyy.mm.dd hh:mm:ss */
DocNumber CHAR,
GoodId INTEGER NOT NULL, /* goods.id */
SuppId INTEGER NOT NULL, /* suppliers.id */
OpCode INTEGER NOT NULL, /* suppliers.id */
Quan DOUBLE,
....
);
 
/* Наличие на заданную дату по всем товарам */
SELECT SUM(P.Code*O.Quan),G.Name, FROM Operations AS O, Googs AS G, Oplist AS P
WHERE O.GoodId=G.Id AND O.Date<="2017.07.15 08:55:00" AND P.Id=O.OpCode
GROUP BY G.Name
ORDER BY G.Name;
 
/* Наличие на заданную дату по одному товару Id=7*/
SELECT SUM(P.Code*O.Quan) FROM Operations AS O, Oplist AS P
WHERE O.GoodId=7 AND O.Date<="2017.07.15 08:55:00" AND P.Id=O.OpCode;
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
15.07.2017, 13:00
практика - мерило истины
как только попытаешься работать - сразу понимаешь, как было лучше сделать )))

для того, чтобы точно знать, как писать, нужно точно знать, что за товар, какой требуется учет
например, у многих особенно продовольственных товаров, есть срок годности, но зато колбаса докторская вся по одной цене
у электроприборов обычно важно знать, из какой они партии, и знать СЕРИЙНИК для каждого изделия
для телефонных зарядок серийник один НА ВСЮ ПАРТИЮ
для лекарств ЦЕНА ПРОДАЖИ отличается у каждой партии товара

в любом случае не бывает просто продаж
товар должен появляться в БД, т.е. всяко есть операция приемки товара
есть работа с ценами поставки/отпуска
есть варианты когда цена продажи разная для каждого отдельного клиента...
акции и скидки
до черта всего.
Продажа по выписке и продажа по кассе с предъявлением конкретного товара это вообще разные бизнес-процессы...
Обязательно важно учитывать, что с базой обычно работает более чем один клиент. Это тоже накладывает обязательства по контролю целостности.

Поэтому "НЕТ ТЗ - РЕЗУЛЬТАТ - ХЗ!"
0
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
15.07.2017, 23:30  [ТС]
Вот есть код:

Delphi
1
2
3
4
5
6
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.
0
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 3
16.07.2017, 00:12
Цитата Сообщение от СтранныйЯщер Посмотреть сообщение
Вопрос как сделать так чтобы этот код вычитал из нескольких записей одновременно
1. CalcFields
2. обходить все в цикле
3. SQL

но судя по вопросу ты взялся за БД не прочитав методичку. прочти хотя бы ее, я не говорю про учебник "БД в Delphi"
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.07.2017, 00:17
Либо перебором записей в цикле, либо запросом на обновление. Запросом проще, правильнее и быстрее будет.
Delphi
1
2
3
AdoQuery1.SQL.Text := 'update Table1 set Кол=Кол - :Кол2';
AdoQuery1.Parameters.ParamValues['Кол2'] := AdoTable2['Кол2'];
AdoQuery1.ExecSql;
Но этот запрос обновит все записи в Table1 т.к. никакого ограничения не задано.
0
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 00:58  [ТС]
А что в SQL писать в AdoQuery1?
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.07.2017, 10:18
Непосредственно в компоненте не надо писать такой запрос. Он у вас исполняемый, поэтому его в дизайне не выполнить.
Просто положите на форму AdoQuery1, настройте его на AdoConnection1, если он у вас есть, а в событии нажатия кнопки добавьте код что я дал выше. Код выполнится при условии, что конекшин активен и вы правильно указали имя таблицы в запросе.
0
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 11:09  [ТС]
Спасибо. Но код обновляет все записи как вы и говорили(

Попытаюсь обрисовать ситуацию чтобы было понятнее, может сразу поймете чего хочу добиться. Есть БД 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

Код кнопки:

Delphi
1
2
3
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

Надеюсь все понятно объяснил) Помогите пожалуйста. Заранее очень благодарен!
0
Айлурофил
 Аватар для Massaraksh7
516 / 449 / 112
Регистрация: 27.05.2017
Сообщений: 2,716
Записей в блоге: 5
16.07.2017, 11:58
Цитата Сообщение от СтранныйЯщер Посмотреть сообщение
Надеюсь все понятно объяснил)
Объяснил понятно. Но это не имеет никакого отношения к:
Цитата Сообщение от СтранныйЯщер
Хочу создать программу через которую можно будет продавать товары.
Твоя концепция организации БД в корне не верна.
Цитата Сообщение от СтранныйЯщер
Верно я мыслю? Подскажите пожалуйста я новичок в программировании.
Не верно. Постарайся слушать не только себя. Прочитай внимательно ещё раз, что тебе написали.
0
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 18:25  [ТС]
Я прочитал все что писали и понял что моя концепция не верна. Программа создается не для кого то. Мне просто нужен код чтобы выполнялось то действие что я описал выше. Помогите с этим кодом пожалуйста.

Добавлено через 6 часов 5 минут
Никто не знает?
0
Айлурофил
 Аватар для Massaraksh7
516 / 449 / 112
Регистрация: 27.05.2017
Сообщений: 2,716
Записей в блоге: 5
16.07.2017, 18:37
Цитата Сообщение от СтранныйЯщер Посмотреть сообщение
Никто не знает?
Тебе выше уже написали. Сообщение №25.
0
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 19:32  [ТС]
Я пробовал через Eof но получилось тоже самое что и через Query абсолютно из всех записей вычитает а не из тех какие я выбрал(( Вот и прошу помощи так как сам не могу сообразить(( Помогите пожалуйста. Уже всю голову сломал.
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.07.2017, 20:18
Все что вам надо, это в запрос который я дал чуть ранее, добавить правильное ограничение:
SQL
1
UPDATE Таблица1 INNER JOIN Таблица2 ON Таблица1.Код = Таблица2.Код1 SET Таблица1.Кол1 = [Таблица1].[Кол1]+[Таблица2].[Кол2];
Добавлено через 2 минуты
Вообще работая с БД обладать минимальными знаниями SQL абсолютно необходимо. Литературы и примеров написано море.
1
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 21:52  [ТС]
Спасибо!

Вот так должно выглядеть?

Delphi
1
2
3
4
5
6
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'UPDATE Товар INNER JOIN Товар2 ON Товар.Код = Товар2.Код2 SET Товар.Кол = [Товар].[Кол]-[Товар2].[Кол2]';
ADOQuery1.ExecSQL;
end;
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.07.2017, 21:56
Проверьте. Вроде правильно. Вы даже минус вместо плюса поставили верно - молодцом

Добавлено через 1 минуту
Вам надо бы еще проверку сделать на заказ больше чем количество на складе. А то в минус уйдете.
1
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 21:58  [ТС]
пишет ошибку(
Миниатюры
Программа для продажи товара (Delphi 7)  
0
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 22:02  [ТС]
С проверкой позже буду разбираться, сейчас бы с этим разобраться, я вчера даже почти не спал прокручивал в голове как сделать но чет не как не выходит(
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.07.2017, 22:13
Лучший ответ Сообщение было отмечено СтранныйЯщер как решение

Решение

Возможно, что значение Кол или Кол2 не числовое. Возможно еще, что Код и Код2 не одного типа.

Добавлено через 1 минуту
кстати
Delphi
1
ADOQuery1.SQL.Clear;
это лишнее. На результат это не влияет, но просто режет глаз

Добавлено через 1 минуту
ПС: И что-то странное на форуме с оповещением стало творится. Не приходят мне уведомления, о подписанных темах.
1
0 / 0 / 0
Регистрация: 13.07.2017
Сообщений: 15
16.07.2017, 22:55  [ТС]
Пытливый, Спасибо тебе огромное добрый человек! Действительно проблема была что значения разные, поменял и код заработал как надо. Спасибо тебе еще раз огромное что помог мне, я очень тебе признателен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2017, 22:55
Помогаю со студенческими работами здесь

Доход от продажи 30шт. товара составляет 300 руб (M1) а от продажи 500шт. -1380 руб (M2) Определить доход
Доход от продажи 30шт. товара составляет 300 руб (M1) а от продажи 500шт. -1380 руб (M2) Определить доход от продажи 1000 шт товара при...

Вероятность продажи товара
Здравствуйте! Постановка задачи - есть дрель, стоимостью Cдрели. Даем в аренду это оборудование за Cуслуги. Мы не знаем, сколько клиентов...

Программа для продажи билетов в кинозал
Встала такая задача. Появилось несколько вопросов. Сам еще по универу изучал С++ builder. Так что немного в теме разбираюсь. ...

Организация продажи одного товара
Добрый день, уважаемые! Прошу поделится Вашим мнением по поводу настройки сервиса на WordPress по следующему сценарию. Необходимо...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru