Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

Подсчет среднего значения с нулевыми числами   Найти похожие ветки 

 
kyn66 ©   (2009-10-23 12:33) [40]


> Проще и правильней поставить на форму кнопулю, включающую/отключающую
> фильтрацию НД на предмет включения/исключения из avg-расчетов
> позиций, имеющих нуль в поле, участвующем в расчете.Тогда
> и коверкать чужой компонент не придется)


Это самое лучшее было бы решение, только как эту кнопульку связать с компонентом? Это типа если бы у компонента было дополнительное свойство "Учитывать нулевые значения". А с временной доработкой компонента конечно не выход, я согласен. Мало ли придется переустанавливать с архивов и т.д.


 
Сергей М. ©   (2009-10-23 12:42) [41]


> как эту кнопульку связать с компонентом?


С каким ?


 
Юрий Зотов ©   (2009-10-23 12:42) [42]

Если я правильно понял задачу, то вот псевдокод:

Sum1 := 0;
Sum2 := 0;
N := 0;
DataSet.First;
while not DataSet.Eof do
 if DataSet.Field[2].AsInteger <> 0 then
 begin
   Inc(Sum1, DataSet.Fields[1].AsInteger);
   Inc(Sum2, DataSet.Fields[2].AsInteger);
   Inc(N)
 end;
if N <> 0 then
begin
 Average1 := Sum1 / N;
 Average2 := Sum2 / N
end
else
 begin
   Average1 := 0;
   Average2 := 0
 end;


 
Юрий Зотов ©   (2009-10-23 12:43) [43]

Или в select добавить условие: where Field2 <> 0.


 
kyn66 ©   (2009-10-23 12:44) [44]


> С каким ?


Ну мы вроде речь о DBGridEh ведем...


 
Сергей М. ©   (2009-10-23 12:45) [45]


> Юрий Зотов ©   (23.10.09 12:42) [42]

Ему надо

> задействовав стандартный механизм компонента


 
kyn66 ©   (2009-10-23 12:46) [46]


> Или в select добавить условие: where Field2 <> 0.


Я уже писал, что приприменении SQl проблем небыло бы. Здесь нужно управиться средствами самого компонента.


 
Сергей М. ©   (2009-10-23 12:48) [47]


> мы вроде речь о DBGridEh ведем


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


 
Сергей М. ©   (2009-10-23 12:51) [48]


> Здесь нужно управиться средствами самого компонента


В ТЗ прямо так и написано ?
Т.е. любое обращение к объекту Grid.DataSource.DataSet сурово карается по закону ТЗ-пИсца ?


 
kyn66 ©   (2009-10-23 12:55) [49]


> В ТЗ прямо так и написано ?


а ТЗ-пИсцу без разницы как это будет реализовано. Я больше за фейс программы отвечаю. Чтобы наглядно все видно было юзеру на экране.
http://yurec66.narod.ru/Vopros/rez2.jpg


 
sniknik ©   (2009-10-23 12:56) [50]

> Ну и соотв-но переоткрыть НД ?
а зачем? просто наложить фильтр на уже полученные данные.


 
kyn66 ©   (2009-10-23 12:57) [51]


> Берет он их из НД, который у тебя, очевидно, формируется
> в рез-те скуль-запроса.


Если я отфильтрую нулевые данные по одному столбцу, то в другом пропадут строки с ненулевыми данными. Если по товару небыло реализации, то это не значит, что по нему небыло прихода.


 
kyn66 ©   (2009-10-23 13:04) [52]

Через SQl я буду формировать окончательные групповые отчеты по всем  отделениям(на картинке инфа по одному отделению). А это рабочая информация. Строки содержат как вх. остаток, получено, реализовано и исх. остаток вот в рабочем порядке они и заполняются данными.


 
Сергей М. ©   (2009-10-23 13:06) [53]


> kyn66 ©   (23.10.09 12:57) [51]


И что ?
Напиши на форме, мол, это отчет по таким-то товарам за такой-то период, имевшим движение в течение отч.периода


 
Сергей М. ©   (2009-10-23 13:15) [54]

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

Или у тебя в заказчиках бизнес-аналитики ?)


 
Sergey13 ©   (2009-10-23 13:19) [55]

> [36] kyn66 ©   (23.10.09 12:11)
> (хотя может это и протеворечит математической логике, не
> я ставлю задачи, руководство)

Могу посоветовать сообщить руководству (лучше письменно), что противоречие отчетности математике - прямой путь на допрос в прокуратуру.
Потому, что руководство может сказать в прокуратуре, что "мы акаедмиев не кончали и у нас по цифирям главный kyn66, к нему и вопросы".


 
kyn66 ©   (2009-10-23 13:23) [56]


> Вот хоть убей - ума не приложу, кому и зачем может понадобиться
> среднее арифметическое суммы прихода и/или расхода..


МЫ сейчас начнем обсуждать другую тему... Как видно из картинки, в списке гофроящик. Они могут быть одного номинала(типоразмер) но с разной розничной ценой. Все зависит от закупки. Поэтому руководство и интересует средняя сумма на разные виды ящиков. Так понятно?


 
Сергей М. ©   (2009-10-23 13:24) [57]


> Sergey13 ©   (23.10.09 13:19) [55]


Угу. В прокуратуре тоже люди далеко не больные на голову, и под цифирью в графе "ИТОГО" подразумевают именно "ИТОГО", а не какое-то там хитромудрое среднеарифметическое)


 
kyn66 ©   (2009-10-23 13:27) [58]

В превом столбце указана розничная цена на все типоразмеры ящиков. А в течение месяца не по всем была реализация. Вот и интересует на какую среднюю сумму реализовано гофроящиков.


 
Сергей М. ©   (2009-10-23 13:31) [59]


> руководство и интересует средняя сумма на разные виды ящиков


А что, руководство разве не интересует общая сумма поставок и реализаций за период тех самых картинных гофроящиков ящиков, коль скоро тебе была дана команда на размещение в форме в графе "ИТОГО" среднеарифметического вместо суммы ?


 
Sergey13 ©   (2009-10-23 13:32) [60]

Плюсом к [55] Sergey13 ©   (23.10.09 13:19)

Если ты один раз продал вагон чего то, то по твоей отчетности выдет, что ты весь год продавал по вагону в месяц, и тем самым скрыл от государства 11/12 налогов. Статья лет на 10 наверное тянет, а то и более. 8-)


 
Сергей М. ©   (2009-10-23 13:33) [61]


> интересует на какую среднюю сумму реализовано гофроящиков


Ну и оформи этот отчет в виде отдельной формы !
Зачем пихать на одну и ту же форму отчеты в различных разрезах ?


 
kyn66 ©   (2009-10-23 13:50) [62]


> оманда на размещение в форме в графе "ИТОГО" среднеарифметического
> вместо суммы ?


Вот далось тебе это слово ИТОГО. Представь, что нет его там


 
kyn66 ©   (2009-10-23 13:53) [63]


> Зачем пихать на одну и ту же форму отчеты в различных разрезах
> ?


Пока об отчетах речь не идет. Изначально на форму был положен компонент DBgridEh для предоставления данных по определенному критерию и использована функция этого грида показывать в футоре суммы и средние значения. И все

Кстати, поля кол-во - суммируются, а лишь по суммам идуд средние значения.


 
Сергей М. ©   (2009-10-23 13:54) [64]


> Представь, что нет его там


А что там тогда вместо него будет ?)


 
Сергей М. ©   (2009-10-23 13:56) [65]


> Пока об отчетах речь не идет


То что ты продемонстрировал на картинке - это тот же самый отчет, только интерактивный.


 
kyn66 ©   (2009-10-23 14:40) [66]


> То что ты продемонстрировал на картинке - это тот же самый
> отчет, только интерактивный.


Я бы так не сказал, это просто данные в том виде, в котором юзер должен видеть на своем экране монитора, чтобы вносить дополнения в список, редактировать и т.д.


 
Сергей М. ©   (2009-10-23 14:54) [67]

По барабану где и в каком виде он должен их видеть, все равно это отчет.


> вносить дополнения в список, редактировать и т.д.


Это и есть то что подразумевается под интерактивным отчетом.


 
kyn66 ©   (2009-10-23 15:04) [68]

Связался с атором компонента. Он посоветовал вот что:

В DataSet"e можно создать калькулируемое поле в котором для нулей
устанавливать значение Null. И по нему подсчитывать.

Я так и сделал, однако появилась ошибка http://yurec66.narod.ru/Vopros/erobor.jpg .Полю OborotTblFNotNull присвоен тип Variant


 
kyn66 ©   (2009-10-23 15:16) [69]

Вот отсюда идет ошибка
goAvg:
  begin
     if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
       Inc(Item.FNotNullRecordCount);
    Item.FSumValueAsSum := Item.FSumValueAsSum +
           FDataSet.FieldByName(Item.FieldName).AsFloat;

Т.е. получается противоречие. Спtрва проверяется что значение поля не Null. Если истинно, счетчик увеличивается. И идет далее, где это Null-поле приводится к типу Float.


 
Anatoly Podgoretsky ©   (2009-10-23 15:27) [70]

> kyn66  (23.10.2009 15:04:08)  [68]

Ты что творишь, полю типа Double пытаешься присвоить NULL


 
kyn66 ©   (2009-10-23 15:30) [71]


> Ты что творишь, полю типа Double пытаешься присвоить NULL


ДА не Double оно совсем, а Variant(+ калькулируемое). А Variant потому, что будет принимать 2 значения и Null и Double


 
Anatoly Podgoretsky ©   (2009-10-23 15:47) [72]

> kyn66  (23.10.2009 15:30:11)  [71]

Я сообщения читать умею.


 
Amoeba ©   (2009-10-23 17:36) [73]


> brother ©   (23.10.09 10:40) [14]
>
> имхо автор партизан... и шифрами говорит...)

Так это завсегда с ним было ... И чего тут нового ...


 
kyn66 ©   (2009-10-23 17:40) [74]


> Так это завсегда с ним было ... И чего тут нового ...


У кого есть желание - тот поймет!

ВЫяснилось новое обстоятельство, что скорее всего проблема в ADS, поля таблицы не хотят принимать значение Null. Может кто работает с ADS?


 
kyn66 ©   (2009-10-23 18:16) [75]

Уважаемые коллеги. В конце концов решение найдено с подсказки автора компонента. Если вдруг кто сталкнется с такой ситуацией:
1) Использование DBGridEh
2) Поиск среднего значения среди ненулевых чисел, в списке которых есть нули

Решение:
т.к. грид осекает при подсчете среднего значения поля со значением Null, то  нужно создать Calculated поле, с типом данных таким как и основное и присвоить ненулевые значения. В футоре в качестве параметра FieldName указать это созданное поле.

Проверено, все работает. Всем спасибо, вопрос закрыт.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.007 c
2-1256283325
Sergey2
2009-10-23 11:35
2009.12.13
insert ряд значений


4-1225186429
boris3b
2008-10-28 12:33
2009.12.13
Встраиваемые приложения


2-1256302450
Сергей
2009-10-23 16:54
2009.12.13
Не работает WaitForSingleObject.


15-1255694354
Zheksonz
2009-10-16 15:59
2009.12.13
Преобразования в СИ


2-1256283306
grav
2009-10-23 11:35
2009.12.13
Выгрузка сообщений об ошибках в текстовый файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский