Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / вот такой длинный вопрос... / 10 сообщений из 10, страница 1 из 1
23.08.2004, 16:25
    #32661630
JQust__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Проджект написан по следующей методике:

- есть контейнер БД, то есть не со свободными таблицами
- формы часто модальные, чтобы юзер не пооткрывал массу других, забыв закрыть
- на каждой форма приватная датасессия
- нужные таблицы открываются в датаэнвиронменте форм
- в инит-методах фон\рм написанно нечто вроде: SELECT * from MyDB!Myable… into cursor MyCur, а, затем на основе полей этого курсора формируются данные для текстбоксов форм, где и можно редактировать данные
- сохранение идет примерно таким методом:
BEGIN TRANSACTION
Insert into myTable1….
Insert into MyTable2…..
………….
UPDATE MyTable…..

END TRANSACTION

Все вроде хорошо, но при этом в принципе многопользовательская среда не реализована, то есть можно работать с нескольких машин, при условии, что БД находится на файл-сервере…НО!!!
Может кто посоветует, КАК при такой логике без малой крови реализовать корректное многопользовательское приложение.
Например в теперь, при такой логике запросто 2 продавца могут продать один и тот же товар…. То есть у меня на форме остаток 20 и у него 20.. я быстрей провел 15, а он не видит изменения остатков…
Может Уважаемые гуру поделятся идеями?
(до сих пор писал почти исключительно однопользовательские проджекты)
...
Рейтинг: 0 / 0
23.08.2004, 17:09
    #32661750
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Здесь 2 принципиальных момента:

-) Момент отображения информации у второго пользователя, что в остатке только 5
-) Момент записи в базу данных

Так вот, если речь идет о том, чтобы второй пользователь не мог продать больше чем есть в базе данных (т.е. сделать запись в базу данных), то это реализауется через триггера.

Т.е. продавцу кажется, что в остатке 20, он вводит 20, нажимет кнопочку "Записать". В этот момент срабатывает триггер и говорит: Записать 20 нельзя, осталось только 5, составьте заказ заново!

Продавец переоткрывает формочку заказа и у него отображается уже остаток 5.

Такая модификация потребует минимальных усилий по переделке. Собственно, только написание нужного триггера.
...
Рейтинг: 0 / 0
24.08.2004, 17:31
    #32663564
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Добавлю к уже сказанному - такой триггер не должен заставлять человека "составлять заказ заново"! А то, пока он думать будет, так и оставшиеся 5 единиц "уйдут"... :-) Этот триггер должен "силой" вписать в заказ реальный остаток (если он меньше, чем желаемое количество)! А там уж пусть клиент решает - берет он товара меньше, чем хотелось или нет...
...
Рейтинг: 0 / 0
24.08.2004, 18:25
    #32663645
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Много лет пользуюсь другой бизнес-логикой.

В файле остатков есть дополнительное поле - сейчас выписывается в счетах - то есть при выписке товара - уменьшать остаток и увеличивать значение поля.
Причем сразу Update, чтоб все видели актуальный остаток - никода не оставляйте это дело на потом - я то узнаете от менеджеров все, что они о Вас думают и будут правы - ибо главное - это продать

Так что не используйте в коммерции - private data session и аккуратно подходите к буферизации - здесь не тот случай...

При работе с кассой все меняется в другую стонону, но если на фирме одновременно с одного склада розница и опт - то надо все объединить в "сейчас выписывается"...

Good luck!
...
Рейтинг: 0 / 0
24.08.2004, 19:50
    #32663742
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
А я всегда показываю пользователю справочник остатков и при выборе товара в счет подставляется максимально возможное количество. Потом менеджер пишет необходимое количество и при выходе из поля идет контроль - если уже кто-то успел "перехватить" товар, то больше, чем осталось, не выпишешь - оно снова подставит в счет максимально возможное количество или оставит без изменений, если товара достаточно. Естественно, в справочнике сразу это движение фиксируется. Никакой буферизации - работа напрямую с "живой" таблицей... Время "показа" справочника менеджеру ограничено - интервал определяется администратором. Справочник - это грид с поиском по первым буквам наименования. Может не совсем "по науке", но за много лет ни разу не подвело :-)

to Sergey_Ch
Не совсем понял насчет "при работе с кассой все меняется в другую сторону"... Можно подробнее? Please!
...
Рейтинг: 0 / 0
24.08.2004, 21:22
    #32663802
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Redrik
to Sergey_Ch
Не совсем понял насчет "при работе с кассой все меняется в другую сторону"... Можно подробнее? Please!
Здесь идеология другая по причине того - что товар вот он - по факту перед вами (отсканированный сканером - штрихкода) - соответсвенно можно продавать больше, чем есть в компьютерном учете - ну уже после этого отчет менеджеру о красных остатках - и полетели головы

Хотя говорить об этом можно долго
...
Рейтинг: 0 / 0
24.08.2004, 21:41
    #32663817
JQust_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Про сооооответствующий триггер - не понял КАК его реализовать, а идейка - вставлять в заказ МАКСИМАЛЬНО возможное - ей и пользуюсь, вот стормозил и не додумался проверять это число... такой метод ИМХО проще...
То есть при нажатии на кнопку "ПРОДАТЬ" + еще проверка, не продал ли кто-то те остатки......
Да - это ИМХО самая малая кровь.. хотя триггер не уровне БД - даже лучше, но вот кроме дефолта для определеных полей ничего не писал, сказывается "тяжелое" наследие 2,6-го фокса...
Может дадите примерный код (я не очень нагл надеюсь?)
...
Рейтинг: 0 / 0
25.08.2004, 10:35
    #32664198
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
При "уходе" со строки с только что выписанным товаром (как в 2.6 - BROWSE VALID :F) происходит SEEK этого товара в справочнике остатков и в базе накладных либо остается количество, выписанное менеджером, либо ставим всё, имеющееся в наличии... Сразу же имеем реальный остаток в справочнике. Кроме этого здесь (в базе накладных) и сразу я еще ставлю признак (автоматом) "товар продан". В результате никакой кнопки "Продать" просто не существует. Для того, чтобы убрать (изменить) товар из накладной, служит комбинация клавиш, которая обнуляет количество товара в накладной и возвращает это количество в справочник. Комбинация клавиш, а не кнопка - для ускорения работы менеджеров, принимающих заказы по междугородке!
Код примерно такой... Это без триггеров - это методы в гриде...
При выписке:
Код: plaintext
1.
2.
3.
4.
IF SEEK(&CurrentTovar,"SprTvr") AND Tovar.FixTovar=.F.
   REPLACE Tovar.KolVo    WITH IIF(Tovar.KolVo<=SprTvr.KolVo,Tovar.KolVo,SprTvr.KolVo)
   REPLACE SprTvr.KolVo   WITH SprTvr.KolVo-Tovar.KolVo
   REPLACE Tovar.FixTovar WITH .T.
ENDIF
При снятии с продажи:
Код: plaintext
1.
2.
3.
4.
IF SEEK(&CurrentTovar,"SprTvr") AND Tovar.FixTovar=.T.
   REPLACE SprTvr.KolVo   WITH SprTvr.KolVo+Tovar.KolVo
   REPLACE Tovar.KolVo    WITH  0 
   REPLACE Tovar.FixTovar WITH .F.
ENDIF
...
Рейтинг: 0 / 0
25.08.2004, 11:00
    #32664260
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Я бы добавил к предыдущему примеру блокировки и обработку в случае занятости записи другим пользователем - так, на всякий случай, чтоб быть уверенным в процессе и не отдавать на откуп автоматитке в FoxPro... Хотя если клиент один, то конечно не надо...

Good luck!
...
Рейтинг: 0 / 0
25.08.2004, 14:47
    #32664914
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вот такой длинный вопрос...
Sergey ChЯ бы добавил к предыдущему примеру блокировки и обработку в случае занятости записи другим пользователем... Хотя если клиент один, то конечно не надо...

Конечно, это обязательно нужно сделать и это делается! Клиент, конечно, не один... :-)))

Good luck!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / вот такой длинный вопрос... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]