Страница 4 из 5
Update close - выполнить операцию
Добавлено: 08 Август 2018, 9:59
kreator
finsoftrz писал(а): 08 Август 2018, 7:01
Теоретически, можете хоть каждый день закрывать, а можете совсем не закрывать периоды. Программа использует итоги периодов по мере их обнаружения. Пользователь решил, что надо убыстрить построение отчетов, закрывает период.
Технически что это? Итоги периодов где хранятся? В другой таблице? В нескольких? И что там хранится (штуки, деньги, по складам, по клиентам и т.д.)?
Update close - выполнить операцию
Добавлено: 08 Август 2018, 10:12
finsoftrz
Технически это несколько отдельных таблиц. Документ с несколькими табличными разделами, если так понятнее. А что там хранится, это долго рассказывать. И это дорого стоит.

Update close - выполнить операцию
Добавлено: 08 Август 2018, 10:14
finsoftrz
Если в двух словах, остатки в нужных разрезах и измерениях, а также сводные обороты в некоторых критичных разрезах.
Update close - выполнить операцию
Добавлено: 08 Август 2018, 10:50
gopstop2007
вы для начала выясните в чем у вас базы хранятся

, в tps и sql?
В sql анализ, аналитику и выборки на стороне клиента проще сделать, чем тоже самое под tps, имхо

Update close - выполнить операцию
Добавлено: 08 Август 2018, 11:39
kreator
finsoftrz писал(а): 08 Август 2018, 10:12
Технически это несколько отдельных таблиц. Документ с несколькими табличными разделами, если так понятнее. А что там хранится, это долго рассказывать. И это дорого стоит.
Ну вот! И я про это. Вы проделали колоссальную работу. И, скорее всего, есть ещё куда оптимизировать. Но по факту есть куча ограничений. Никуда не деться. Все так работают в файл-серверных БД. И я так работал с tps. И 1C. Не пойму только - что тут скрывать? Да, потенциальному клиенту и заказчику особо не надо распространяться, но здесь-то...
Update close - выполнить операцию
Добавлено: 08 Август 2018, 11:48
finsoftrz
Я вроде никогда ничего не скрывал, снова про меня додумываете...

Стандартно программа работает с tps, и я свою нелюбовь к sql не раз озвучивал. Вы считаете, что sql дает какие-то преимущества, я придерживаюсь другой точки зрения. Я не работаю в файл-серверных базах данных. Разницу между файл-сервером и файловой базой мы понимаем? SQL сервер тоже хранит данные файлах и отличается только программной надстройкой. Про какие ограничения идет речь? Я вроде уже писал, что программа может работать с битривом из коробки, даже пересобирать проект не надо...
Update close - выполнить операцию
Добавлено: 08 Август 2018, 11:53
finsoftrz
gopstop2007 писал(а): 08 Август 2018, 10:50вы для начала выясните в чем у вас базы хранятся

, в tps и sql?
В sql анализ, аналитику и выборки на стороне клиента проще сделать, чем тоже самое под tps, имхо

Дело привычки и опыта. И зависит от того, что и как считать. Вообще, мы снова скатываемся к обсуждению, что лучше, клиент-серверная обработка данных или серверная. Мне, честно говоря, это не очень интересно, все для себя уже давно все решили и никто никого переубедить не сможет...

Update close - выполнить операцию
Добавлено: 08 Август 2018, 12:49
gopstop2007
finsoftrz писал(а): 08 Август 2018, 11:53
Дело привычки и опыта. И зависит от того, что и как считать. Вообще, мы снова скатываемся к обсуждению, что лучше, клиент-серверная обработка данных или серверная. Мне, честно говоря, это не очень интересно, все для себя уже давно все решили и никто никого переубедить не сможет...
как говорится время деньги, простые результаты по запросу SQL (Mysql), например:
Простой рейтинг продаж по товарам за месяц - 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, временные затраты будут на порядок выше. имхо

Update close - выполнить операцию
Добавлено: 08 Август 2018, 13:15
gopstop2007
kreator писал(а): 07 Август 2018, 15:57
Правильно, что не поверил. В методе Kill нет закрытия окна. Оно было до того. Команда post на закрытие окна прописана в методе SetResponse:....
Проверил, на форме работает так, по крайне мере у меня

Кнопка - Ok (Save)
- отрабатывает только Kill
Кнопка - Cancel
- отрабатывает SetResponce и потом отрабатывает только Kill, при этом окно закрывается после Kill (визуально)
Update close - выполнить операцию
Добавлено: 08 Август 2018, 14:46
finsoftrz
gopstop2007 писал(а): 08 Август 2018, 12:49finsoftrz писал(а): 08 Август 2018, 11:53
Дело привычки и опыта. И зависит от того, что и как считать. Вообще, мы снова скатываемся к обсуждению, что лучше, клиент-серверная обработка данных или серверная. Мне, честно говоря, это не очень интересно, все для себя уже давно все решили и никто никого переубедить не сможет...
как говорится время деньги, простые результаты по запросу SQL (Mysql), например:
Простой рейтинг продаж по товарам за месяц - 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, временные затраты будут на порядок выше. имхо

А теперь тоже самое, но по доходности. Не храня эту доходность заранее посчитанной в базе данных. Я только хочу сказать, что при наличии наработок уже код пишется на гораздо более высоком уровне. Мне, чтобы получить рейтинг по доходности, достаточно несколько простых строк кода - вызов нужной функции из бизнес-логики. Чем сложнее бизнес-логика, тем проще код писать на традиционном языке типа клариона.
Update close - выполнить операцию
Добавлено: 08 Август 2018, 17:45
kreator
gopstop2007 писал(а): 08 Август 2018, 13:15
kreator писал(а): 07 Август 2018, 15:57
Правильно, что не поверил. В методе Kill нет закрытия окна. Оно было до того. Команда post на закрытие окна прописана в методе SetResponse:....
Проверил, на форме работает так, по крайне мере у меня

Кнопка - Ok (Save)
- отрабатывает только Kill
Кнопка - Cancel
- отрабатывает SetResponce и потом отрабатывает только Kill, при этом окно закрывается после Kill (визуально)
Да, логика там сложнее, чем я думал. Ну оставьте как есть. Меня смущает, что метод Kill вызывается уже после цикла Accept. Либо взять метод TakecloseEvent:
Код: Выделить всё
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
Если после Parent Call поставить свой текст (с проверкой на ReturnValue), то вроде отрабатывает как надо. Во всяком случае, я проверил многие варианты и по отмене, и по ОК, и при ошибочном вводе.
Update close - выполнить операцию
Добавлено: 09 Август 2018, 11:30
kreator
finsoftrz писал(а): 08 Август 2018, 11:48Вы считаете, что sql дает какие-то преимущества, я придерживаюсь другой точки зрения.
Клиника какая-то же, Вячеслав! Ну очень категорично! Как так-то?
С другой стороны, можно за Вас порадоваться, есть клиенты, соглашающиеся с Вашей концепцией. И отлично, если их немало. А вот у нас заказчики выдвигают определённые требования к ПО. На что-то могут закрыть глаза, но только не на клиент-сервер. Если его нет, то сразу до свидания.
Update close - выполнить операцию
Добавлено: 09 Август 2018, 12:03
finsoftrz
Ммм... А в чем моя категоричность выражается? Я что, не могу иметь другую точку зрения? Я думаю, что Вы просто не представляете, какое количество людей и организаций обходятся без sql серверов. И живут вполне себе достойно и не парятся выдуманными проблемами.
Update close - выполнить операцию
Добавлено: 09 Август 2018, 12:59
Yufil
Код: Выделить всё
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
Если после Parent Call поставить свой текст (с проверкой на ReturnValue), то вроде отрабатывает как надо. Во всяком случае, я проверил многие варианты и по отмене, и по ОК, и при ошибочном вводе.
[/quote]
Всё-таки завёртывать форму в Source-процедуру как-то надёжнее... Я просто на автомате писал что-то вида
Код: Выделить всё
! Сохранить текущее состояние документа
Do SaveStatus
! Сохранить GlobalRequest
! Вызвать форму
Form_Update()
! Если GlobalResponse = RequestCompleted
Пересчитать то, что надо пересчитать,
учитывая сохранённый GlobalRequest
Do UpdateDocumet
! В противном случае
Пересчитать,
откатить,
удалить неправильно введённое ( в зависимости от алгоритма )
Do ResetDocumen
а потом детализировал обработчики.
Суть в том, что форма ввода не должна заботиться о пересчётах и откатах, не её это дело...
Update close - выполнить операцию
Добавлено: 09 Август 2018, 14:37
kreator
Yufil писал(а): 09 Август 2018, 12:59
Суть в том, что форма ввода не должна заботиться о пересчётах и откатах, не её это дело...
То, что Вы предлагаете, можно написать и в методе Run. Но ТС'у нужно, чтобы форма была открыта (работают блондины, специфический вид

). Ну не вызывать же её снова?
И вообще разные случаи бывают. У меня есть несколько очень сложных форм (много закладок, дополнительных броузов внутри ...). Приходится пользоваться локальными переменными, локальными очередями... Я посчитал, что обработку ввода удобнее производить в методе Kill формы. Иначе после закрытия формы нужно заново много чего вытаскивать из БД.