Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2011, 07:04   #1
Lexovt
Пользователь
 
Регистрация: 25.12.2010
Сообщений: 20
Печаль Вычитание товара из склада

Краткое описание задачи проги:

Содержание технологических карт приготовления блюд, учёт продуктов имеющихся (непосредственно склад), учёт людей питающихся, калькуляция порций соответственно продуктов затраченных на это количество порций, и вычитание продуктов использованых из таблицы склад... Как то так... Delphi 7, Paradox 7...


проблема вот в чём, Есть таблица "Технологическая карта" к ней привязано ещё куча таблиц и справочников, на её основе ведутся все расчёты.. Далее... Примерно всё выглядит так... Человек выбирает блюдо DbLookupCombobox, далле методом фильтрации в дб гриде остаются только те продкты которые исопльзуются в выбранном блюде.. соответственно отображается технология приготовления фото и тд... далее указывается кол во человек на основе этого числа умнажается масса продуктов в дбгриде в отдельное поле калькулэйт созданное мной в Query .... И вот что получается ... Есть отдельная таблица склад... На другой форме (не там где тех карта) дб грид показывает эту таблицу..


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


Пожалуйста подкиньте идей как это прописать на 1 кнопке... плииз
Lexovt вне форума Ответить с цитированием
Старый 08.01.2011, 10:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Пожалуйста подкиньте идей как это прописать на 1 кнопке...
очень просто.
если Ваша СУБД поддерживает транзакции, то начать транзакцию.
дальше в цикле по всем продуктам, выбранным для данного блюда
проверить наличие на складе - если достаточно - с помощью операции
Код:
update Склад set Product = Product - ВесВБлюде 
where idProduct = IDПродуктаИзКарты
уменьшаете количество на складе.
ИНАЧЕ (Если же товара недостаочно) - прерывание цикла и ОТКАТ транзакции
если цикл завершился без прерываний - подтверждение транзакции.

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

p.s. как видите, с помощью транзакций всё решается намного проще.

p.p.s. если СУБД допускает - я бы вынес операцию на сторону сервера (в хранимые процедуры)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.01.2011, 14:51   #3
Lexovt
Пользователь
 
Регистрация: 25.12.2010
Сообщений: 20
По умолчанию

Всё немного проще... по идеи должно быть... прога расчитана на использование 1 человеком... Я извеняюсь конешно я не гений в этом...

Вот так вот я немного придумал
Код:
IF (Datamodule2.Table15.FieldByName('Kod_Produkta').AsFloat = Datamodule2.Query7.FieldByName('Kod_Produkta').AsFloat)  and 
(Datamodule2.Table15.FieldByName('Kol_vo').AsFloat > Datamodule2.Query7.FieldByName('MasSum').AsFloat)  then
begin

DataModule2.Table15.Edit;
Datamodule2.Table15.FieldByName('Kol_vo').Asfloat:=Datamodule2.Table15.FieldByName('Kol_vo').AsFloat-Datamodule2.Query7.FieldByName('MasSum').AsFloat;
DataModule2.Table15.Post;
Вот только сравнивается и вычисляется первая строчка((.. А нужно что б все... При етом .. в таблице склад строк может быть больше чем после фильтрации в техкарте

Последний раз редактировалось Lexovt; 08.01.2011 в 14:53.
Lexovt вне форума Ответить с цитированием
Старый 08.01.2011, 15:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну так добавьте цикл по всем товарам, имеющимся в техкарте...

только Вам всё равно понадобится два цикла - в первом проверите, что весь необходимый товар в нужном количестве имеется на складе.
во втором проходе цикла - отминусуете нужное количество по каждому товару.

p.s. без структур таблиц, примера СУБД и кода проекта, конкретные советы не дашь...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.01.2011, 16:14   #5
Lexovt
Пользователь
 
Регистрация: 25.12.2010
Сообщений: 20
По умолчанию

Вот как то так вот


Безымянный.jpg
Lexovt вне форума Ответить с цитированием
Старый 09.01.2011, 08:38   #6
Lexovt
Пользователь
 
Регистрация: 25.12.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну так добавьте цикл по всем товарам, имеющимся в техкарте...
А можно пример кода цикла (так на вскидку примерно)...
Пожалуйста
Lexovt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разработать базу данных для автоматизации учетной информации склада Student_17 Фриланс 6 27.11.2010 14:10
Проектирование БД для склада Ivan_32 SQL, базы данных 3 27.09.2010 14:08
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Пример базы данных магазина,склада и тп gred Microsoft Office Access 1 19.06.2009 10:58
Посчитать разницу прихода и ухода со склада bikeeva julia Microsoft Office Excel 3 01.05.2009 11:50