Update close - выполнить операцию

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update close - выполнить операцию

Сообщение kreator »

finsoftrz писал(а): 08 Август 2018, 7:01 Теоретически, можете хоть каждый день закрывать, а можете совсем не закрывать периоды. Программа использует итоги периодов по мере их обнаружения. Пользователь решил, что надо убыстрить построение отчетов, закрывает период.
Технически что это? Итоги периодов где хранятся? В другой таблице? В нескольких? И что там хранится (штуки, деньги, по складам, по клиентам и т.д.)?
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Update close - выполнить операцию

Сообщение finsoftrz »

Технически это несколько отдельных таблиц. Документ с несколькими табличными разделами, если так понятнее. А что там хранится, это долго рассказывать. И это дорого стоит. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Update close - выполнить операцию

Сообщение finsoftrz »

Если в двух словах, остатки в нужных разрезах и измерениях, а также сводные обороты в некоторых критичных разрезах.
C6/C11, ШВС, tps/btrieve.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Update close - выполнить операцию

Сообщение gopstop2007 »

вы для начала выясните в чем у вас базы хранятся :), в tps и sql?
В sql анализ, аналитику и выборки на стороне клиента проще сделать, чем тоже самое под tps, имхо :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update close - выполнить операцию

Сообщение kreator »

finsoftrz писал(а): 08 Август 2018, 10:12 Технически это несколько отдельных таблиц. Документ с несколькими табличными разделами, если так понятнее. А что там хранится, это долго рассказывать. И это дорого стоит. :-)
Ну вот! И я про это. Вы проделали колоссальную работу. И, скорее всего, есть ещё куда оптимизировать. Но по факту есть куча ограничений. Никуда не деться. Все так работают в файл-серверных БД. И я так работал с tps. И 1C. Не пойму только - что тут скрывать? Да, потенциальному клиенту и заказчику особо не надо распространяться, но здесь-то...
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Update close - выполнить операцию

Сообщение finsoftrz »

Я вроде никогда ничего не скрывал, снова про меня додумываете... :-) Стандартно программа работает с tps, и я свою нелюбовь к sql не раз озвучивал. Вы считаете, что sql дает какие-то преимущества, я придерживаюсь другой точки зрения. Я не работаю в файл-серверных базах данных. Разницу между файл-сервером и файловой базой мы понимаем? SQL сервер тоже хранит данные файлах и отличается только программной надстройкой. Про какие ограничения идет речь? Я вроде уже писал, что программа может работать с битривом из коробки, даже пересобирать проект не надо...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Update close - выполнить операцию

Сообщение finsoftrz »

gopstop2007 писал(а): 08 Август 2018, 10:50вы для начала выясните в чем у вас базы хранятся :), в tps и sql?
В sql анализ, аналитику и выборки на стороне клиента проще сделать, чем тоже самое под tps, имхо :)
Дело привычки и опыта. И зависит от того, что и как считать. Вообще, мы снова скатываемся к обсуждению, что лучше, клиент-серверная обработка данных или серверная. Мне, честно говоря, это не очень интересно, все для себя уже давно все решили и никто никого переубедить не сможет... :-)
C6/C11, ШВС, tps/btrieve.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Update close - выполнить операцию

Сообщение 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, временные затраты будут на порядок выше. имхо :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Update close - выполнить операцию

Сообщение gopstop2007 »

kreator писал(а): 07 Август 2018, 15:57 Правильно, что не поверил. В методе Kill нет закрытия окна. Оно было до того. Команда post на закрытие окна прописана в методе SetResponse:....
Проверил, на форме работает так, по крайне мере у меня :)
Кнопка - Ok (Save)
- отрабатывает только Kill
Кнопка - Cancel
- отрабатывает SetResponce и потом отрабатывает только Kill, при этом окно закрывается после Kill (визуально)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Update close - выполнить операцию

Сообщение finsoftrz »

gopstop2007 писал(а): 08 Август 2018, 12:49
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, временные затраты будут на порядок выше. имхо :)
А теперь тоже самое, но по доходности. Не храня эту доходность заранее посчитанной в базе данных. Я только хочу сказать, что при наличии наработок уже код пишется на гораздо более высоком уровне. Мне, чтобы получить рейтинг по доходности, достаточно несколько простых строк кода - вызов нужной функции из бизнес-логики. Чем сложнее бизнес-логика, тем проще код писать на традиционном языке типа клариона.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update close - выполнить операцию

Сообщение 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), то вроде отрабатывает как надо. Во всяком случае, я проверил многие варианты и по отмене, и по ОК, и при ошибочном вводе.
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update close - выполнить операцию

Сообщение kreator »

finsoftrz писал(а): 08 Август 2018, 11:48Вы считаете, что sql дает какие-то преимущества, я придерживаюсь другой точки зрения.
Клиника какая-то же, Вячеслав! Ну очень категорично! Как так-то?
С другой стороны, можно за Вас порадоваться, есть клиенты, соглашающиеся с Вашей концепцией. И отлично, если их немало. А вот у нас заказчики выдвигают определённые требования к ПО. На что-то могут закрыть глаза, но только не на клиент-сервер. Если его нет, то сразу до свидания.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Update close - выполнить операцию

Сообщение finsoftrz »

Ммм... А в чем моя категоричность выражается? Я что, не могу иметь другую точку зрения? Я думаю, что Вы просто не представляете, какое количество людей и организаций обходятся без sql серверов. И живут вполне себе достойно и не парятся выдуманными проблемами.
C6/C11, ШВС, tps/btrieve.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Update close - выполнить операцию

Сообщение 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 
а потом детализировал обработчики.
Суть в том, что форма ввода не должна заботиться о пересчётах и откатах, не её это дело...
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Update close - выполнить операцию

Сообщение kreator »

Yufil писал(а): 09 Август 2018, 12:59 Суть в том, что форма ввода не должна заботиться о пересчётах и откатах, не её это дело...
То, что Вы предлагаете, можно написать и в методе Run. Но ТС'у нужно, чтобы форма была открыта (работают блондины, специфический вид :) ). Ну не вызывать же её снова?
И вообще разные случаи бывают. У меня есть несколько очень сложных форм (много закладок, дополнительных броузов внутри ...). Приходится пользоваться локальными переменными, локальными очередями... Я посчитал, что обработку ввода удобнее производить в методе Kill формы. Иначе после закрытия формы нужно заново много чего вытаскивать из БД.
We are hard at work… for you. :)
Ответить