Технически что это? Итоги периодов где хранятся? В другой таблице? В нескольких? И что там хранится (штуки, деньги, по складам, по клиентам и т.д.)?
Update close - выполнить операцию
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 4960
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Update close - выполнить операцию
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4566
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 34 раза
Update close - выполнить операцию
Технически это несколько отдельных таблиц. Документ с несколькими табличными разделами, если так понятнее. А что там хранится, это долго рассказывать. И это дорого стоит.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4566
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 34 раза
Update close - выполнить операцию
Если в двух словах, остатки в нужных разрезах и измерениях, а также сводные обороты в некоторых критичных разрезах.
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 1702
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Update close - выполнить операцию
вы для начала выясните в чем у вас базы хранятся , в tps и sql?
В sql анализ, аналитику и выборки на стороне клиента проще сделать, чем тоже самое под tps, имхо
В sql анализ, аналитику и выборки на стороне клиента проще сделать, чем тоже самое под tps, имхо
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 4960
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Update close - выполнить операцию
Ну вот! И я про это. Вы проделали колоссальную работу. И, скорее всего, есть ещё куда оптимизировать. Но по факту есть куча ограничений. Никуда не деться. Все так работают в файл-серверных БД. И я так работал с tps. И 1C. Не пойму только - что тут скрывать? Да, потенциальному клиенту и заказчику особо не надо распространяться, но здесь-то...
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4566
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 34 раза
Update close - выполнить операцию
Я вроде никогда ничего не скрывал, снова про меня додумываете... Стандартно программа работает с tps, и я свою нелюбовь к sql не раз озвучивал. Вы считаете, что sql дает какие-то преимущества, я придерживаюсь другой точки зрения. Я не работаю в файл-серверных базах данных. Разницу между файл-сервером и файловой базой мы понимаем? SQL сервер тоже хранит данные файлах и отличается только программной надстройкой. Про какие ограничения идет речь? Я вроде уже писал, что программа может работать с битривом из коробки, даже пересобирать проект не надо...
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4566
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 34 раза
Update close - выполнить операцию
Дело привычки и опыта. И зависит от того, что и как считать. Вообще, мы снова скатываемся к обсуждению, что лучше, клиент-серверная обработка данных или серверная. Мне, честно говоря, это не очень интересно, все для себя уже давно все решили и никто никого переубедить не сможет...gopstop2007 писал(а): ↑08 Август 2018, 10:50вы для начала выясните в чем у вас базы хранятся , в tps и sql?
В sql анализ, аналитику и выборки на стороне клиента проще сделать, чем тоже самое под tps, имхо
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 1702
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Update close - выполнить операцию
как говорится время деньги, простые результаты по запросу SQL (Mysql), например:finsoftrz писал(а): ↑08 Август 2018, 11:53 Дело привычки и опыта. И зависит от того, что и как считать. Вообще, мы снова скатываемся к обсуждению, что лучше, клиент-серверная обработка данных или серверная. Мне, честно говоря, это не очень интересно, все для себя уже давно все решили и никто никого переубедить не сможет...
Простой рейтинг продаж по товарам за месяц - 5 лучших
Код: Выделить всё
SELECT 'лучший за месяц', t3.prod_name, SUM(t1.count), SUM(t1.sum)
FROM invdetail t1 JOIN invoice t2 ON t1.inv_id=t2.inv_id LEFT JOIN product t3 ON t1.prod_id=t3.prod_id
WHERE SkladContr AND t2.oper_id=313 AND year(t2.inv_date) = year(now()) and month(t2.inv_date) = month(CURDATE()) AND t2.fdelete<>1 AND t2.status_out=1
GROUP BY t1.prod_id ORDER BY SUM(t1.sum) DESC LIMIT 5;
Не говорю уже об движение денежных средств за выбранный период, с начальным остатком, взаиморасчеты за указанный период с начальным остатком и многое другое.
Тут не столько экономится время заказчика, но также и разработчика. Теперь попробуйте это реализовать на tps, временные затраты будут на порядок выше. имхо
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 1702
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Update close - выполнить операцию
Проверил, на форме работает так, по крайне мере у меня
Кнопка - Ok (Save)
- отрабатывает только Kill
Кнопка - Cancel
- отрабатывает SetResponce и потом отрабатывает только Kill, при этом окно закрывается после Kill (визуально)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4566
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 34 раза
Update close - выполнить операцию
А теперь тоже самое, но по доходности. Не храня эту доходность заранее посчитанной в базе данных. Я только хочу сказать, что при наличии наработок уже код пишется на гораздо более высоком уровне. Мне, чтобы получить рейтинг по доходности, достаточно несколько простых строк кода - вызов нужной функции из бизнес-логики. Чем сложнее бизнес-логика, тем проще код писать на традиционном языке типа клариона.gopstop2007 писал(а): ↑08 Август 2018, 12:49как говорится время деньги, простые результаты по запросу SQL (Mysql), например:finsoftrz писал(а): ↑08 Август 2018, 11:53 Дело привычки и опыта. И зависит от того, что и как считать. Вообще, мы снова скатываемся к обсуждению, что лучше, клиент-серверная обработка данных или серверная. Мне, честно говоря, это не очень интересно, все для себя уже давно все решили и никто никого переубедить не сможет...
Простой рейтинг продаж по товарам за месяц - 5 лучшихдобавив эту же строку в конец указанной с измененными периодом получим сравнение продаж например за прошедший период используя всего пару строк, одним запросом.Код: Выделить всё
SELECT 'лучший за месяц', t3.prod_name, SUM(t1.count), SUM(t1.sum) FROM invdetail t1 JOIN invoice t2 ON t1.inv_id=t2.inv_id LEFT JOIN product t3 ON t1.prod_id=t3.prod_id WHERE SkladContr AND t2.oper_id=313 AND year(t2.inv_date) = year(now()) and month(t2.inv_date) = month(CURDATE()) AND t2.fdelete<>1 AND t2.status_out=1 GROUP BY t1.prod_id ORDER BY SUM(t1.sum) DESC LIMIT 5;
Не говорю уже об движение денежных средств за выбранный период, с начальным остатком, взаиморасчеты за указанный период с начальным остатком и многое другое.
Тут не столько экономится время заказчика, но также и разработчика. Теперь попробуйте это реализовать на tps, временные затраты будут на порядок выше. имхо
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4960
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Update close - выполнить операцию
Да, логика там сложнее, чем я думал. Ну оставьте как есть. Меня смущает, что метод Kill вызывается уже после цикла Accept. Либо взять метод TakecloseEvent:gopstop2007 писал(а): ↑08 Август 2018, 13:15Проверил, на форме работает так, по крайне мере у меня
Кнопка - Ok (Save)
- отрабатывает только Kill
Кнопка - Cancel
- отрабатывает SetResponce и потом отрабатывает только Kill, при этом окно закрывается после Kill (визуально)
Код: Выделить всё
ThisWindow.TakeCloseEvent PROCEDURE
ReturnValue BYTE,AUTO
! Start of "WindowManager Method Data Section"
! [Priority 5000]
! End of "WindowManager Method Data Section"
CODE
! Start of "WindowManager Method Executable Code Section"
! [Priority 2500]
! Parent Call
ReturnValue = PARENT.TakeCloseEvent()
! [Priority 5001]
if ReturnValue=Level:Benign
stop('TakeCloseEvent')
end
! End of "WindowManager Method Executable Code Section"
RETURN ReturnValue
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 4960
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Update close - выполнить операцию
Клиника какая-то же, Вячеслав! Ну очень категорично! Как так-то?
С другой стороны, можно за Вас порадоваться, есть клиенты, соглашающиеся с Вашей концепцией. И отлично, если их немало. А вот у нас заказчики выдвигают определённые требования к ПО. На что-то могут закрыть глаза, но только не на клиент-сервер. Если его нет, то сразу до свидания.
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4566
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 34 раза
Update close - выполнить операцию
Ммм... А в чем моя категоричность выражается? Я что, не могу иметь другую точку зрения? Я думаю, что Вы просто не представляете, какое количество людей и организаций обходятся без sql серверов. И живут вполне себе достойно и не парятся выдуманными проблемами.
C6/C11, ШВС, tps/btrieve.
Update close - выполнить операцию
Код: Выделить всё
ThisWindow.TakeCloseEvent PROCEDURE
ReturnValue BYTE,AUTO
! Start of "WindowManager Method Data Section"
! [Priority 5000]
! End of "WindowManager Method Data Section"
CODE
! Start of "WindowManager Method Executable Code Section"
! [Priority 2500]
! Parent Call
ReturnValue = PARENT.TakeCloseEvent()
! [Priority 5001]
if ReturnValue=Level:Benign
stop('TakeCloseEvent')
end
! End of "WindowManager Method Executable Code Section"
RETURN ReturnValue
[/quote]
Всё-таки завёртывать форму в Source-процедуру как-то надёжнее... Я просто на автомате писал что-то вида
Код: Выделить всё
! Сохранить текущее состояние документа
Do SaveStatus
! Сохранить GlobalRequest
! Вызвать форму
Form_Update()
! Если GlobalResponse = RequestCompleted
Пересчитать то, что надо пересчитать,
учитывая сохранённый GlobalRequest
Do UpdateDocumet
! В противном случае
Пересчитать,
откатить,
удалить неправильно введённое ( в зависимости от алгоритма )
Do ResetDocumen
Суть в том, что форма ввода не должна заботиться о пересчётах и откатах, не её это дело...
-
- ✯ Ветеран ✯
- Сообщения: 4960
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Update close - выполнить операцию
То, что Вы предлагаете, можно написать и в методе Run. Но ТС'у нужно, чтобы форма была открыта (работают блондины, специфический вид ). Ну не вызывать же её снова?
И вообще разные случаи бывают. У меня есть несколько очень сложных форм (много закладок, дополнительных броузов внутри ...). Приходится пользоваться локальными переменными, локальными очередями... Я посчитал, что обработку ввода удобнее производить в методе Kill формы. Иначе после закрытия формы нужно заново много чего вытаскивать из БД.
We are hard at work… for you.