Topic: Вычислительное поле

Привет Дмитрий и все пользователи форума. Во первых хотел поблагодарить Дмитрия за отличный проект. Надеюсь она будет развиваться и будет многофункциональным. Теперь сам вопрос.
Имеется вычислительное поле. Приведу пример.
В таблице имеется два поля (А и В), в обоих хранится число. Надо в выч. поле указать их деление. Я сделал так.
А/В
Результат таков.
5/2 В гриде показывает 2. А надо чтобы показала 2,5. Как быть с этим?

Re: Вычислительное поле

Здравствуйте.


Да, у SQLite есть такая особенность, решить ее можно, умножив поле на 1.0, т.е. вместо a/b записать так

a*1.0/b  
Dmitry.

Re: Вычислительное поле

спс огромное, помогло.
в гриде имеется функция SUM и она сумирует все значения столбца. Как можно округлит значение?
Например она показывает 12,2 а надо чтобы округлила всегда в большую сторону, т.е. 13

Re: Вычислительное поле

jonibek wrote:

спс огромное, помогло.
в гриде имеется функция SUM и она сумирует все значения столбца. Как можно округлит значение?
Например она показывает 12,2 а надо чтобы округлила всегда в большую сторону, т.е. 13

Значение суммы столбца можно пересчитать скриптом, пример

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    if Frac(Form1.TableGrid1.Columns[0].Footer.FormulaValue)>0 then
        Form1.TableGrid1.Columns[0].Footer.Caption := FloatToStr(Trunc(Form1.TableGrid1.Columns[0].Footer.FormulaValue)+1);
end;
Dmitry.

Re: Вычислительное поле

спс огромное

Re: Вычислительное поле

Уважаемы Дмитрий.
Как в подвале грида сделать надпись по центру?

Re: Вычислительное поле

jonibek wrote:

Уважаемы Дмитрий.
Как в подвале грида сделать надпись по центру?

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
     Form1.TableGrid1.Columns[0].Footer.Alignment := taRightJustify; // справа
     Form1.TableGrid1.Columns[0].Footer.Alignment := taCenter; // по центру
end;
Dmitry.

8 (edited by jonibek 2017-05-10 06:40:20)

Re: Вычислительное поле

спс, работает.
Сделал аналогичное на название колонок тоже работает. Изменил в вашем скрипте Footer на Header.
Возникли следующие вопросы.
1. Название колонок стоит Multiline = true. Покажу на примере. У меня показывает так.
I  Имя  I  Фамилия  I  Название  I
                                       песен
А надо чтобы было так.
I  Имя  I  Фамилия  I  Название  I
                                           песен
2. Как в гриде сделать данные ячеек по центру ?
3. В подвале у меня показывает Average ячеек. Покажу напримере:
6,566666667
Надо чтобы было 6,56 т.е. 2 цифры после запятой.

Re: Вычислительное поле

jonibek
1. В данном примере я не вижу разницы


2.

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
     Form1.TableGrid1.Columns[0].Alignment := taRightJustify; // справа
     Form1.TableGrid1.Columns[0].Alignment := taCenter; // по центру
end;

3.

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.Columns[0].Footer.Caption := FormatFloat('0.##', Form1.TableGrid1.Columns[3].Footer.FormulaValue);
end;
Dmitry.

10 (edited by avmakarov91 2017-05-12 10:51:37)

Re: Вычислительное поле

DriveSoft wrote:

Здравствуйте.


Да, у SQLite есть такая особенность, решить ее можно, умножив поле на 1.0, т.е. вместо a/b записать так

a*1.0/b  

Добрый день!

Необходимо рассчитать НДС в вычисляемом поле, выглядит так:

ROUND((Tech.costbeznds*1.00)*(Tech.nds/100.00),2)

Но результат без десятичной части. Пример 1200 руб. НДС 18 % результат 1416, а хотелось бы 1416,00
В чем может быть проблема?  Tech.costbeznds Деньги,  а Tech.nds Вещественное число.

Спасибо!

11 (edited by jonibek 2017-05-12 12:25:38)

Re: Вычислительное поле

DriveSoft wrote:

jonibek
1. В данном примере я не вижу разницы

1. Название колонок стоит Multiline = true. Покажу на примере. У меня показывает так.
I  Имя  I  Фамилия  I  Название  I
                                 песен
А надо чтобы было так.
I  Имя  I  Фамилия  I  Название  I
                                   песен

Re: Вычислительное поле

jonibek
Из вашего примера я вижу разницу только в один пробел.

Dmitry.

13 (edited by jonibek 2017-05-15 11:34:03)

Re: Вычислительное поле

DriveSoft wrote:

jonibek
Из вашего примера я вижу разницу только в один пробел.

на этом примере это так выглядит, но посмотрите на этот пример.

I  Имя  I  Фамилия  I  Классификация  I
                                песен
А надо чтобы было так.
I  Имя  I  Фамилия  I  Классификация  I
                                       песен

Re: Вычислительное поле

jonibek
Теперь понял )


К сожалению используемый мной компонент не поддерживает подобное выравнивание.

Dmitry.

Re: Вычислительное поле

понятно, спс.

Выше вы дали пример скрипта, которое исправляет 5,666666 на 5,66 в подвале.
procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.Columns[0].Footer.Caption := FormatFloat('0.##', Form1.TableGrid1.Columns[0].Footer.FormulaValue);
end;

А как это сделать в ячейках грида?

Re: Вычислительное поле

DriveSoft wrote:

Здравствуйте.


Да, у SQLite есть такая особенность, решить ее можно, умножив поле на 1.0, т.е. вместо a/b записать так

a*1.0/b  

Добрый день!
Необходимо рассчитать НДС в вычисляемом поле, выглядит так:
ROUND((Tech.costbeznds*1.00)*(Tech.nds/100.00),2)
Но результат без десятичной части. Пример 1200 руб. НДС 18 % результат 1416, а хотелось бы 1416,00
В чем может быть проблема?  Tech.costbeznds Деньги,  а Tech.nds Вещественное число.
Спасибо!

Re: Вычислительное поле

Здравствуйте.


С помощью скрипта можете задать числовой формат для указаной колонки в гриде

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
  if Form1.TableGrid1.Columns[0] is TNxNumberColumn then TNxNumberColumn(Form1.TableGrid1.Columns[1]).FormatMask := '#,#0';
end;
Dmitry.

Re: Вычислительное поле

DriveSoft wrote:

Здравствуйте.


С помощью скрипта можете задать числовой формат для указаной колонки в гриде

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
  if Form1.TableGrid1.Columns[0] is TNxNumberColumn then TNxNumberColumn(Form1.TableGrid1.Columns[1]).FormatMask := '#,#0';
end;

Ув. Дмитрий. Ваш скрипт округляет число.
Например у меня если 14,45899878 то она округляется в 14, а если 14,5553456345 то 15. А мне надо чтобы после запятой остались 2 цифры. Например 14,45898989 то должна быть только 14,45. Спасибо заранее.

PS. А что значит это значение? - #,#0
Что если напишем #,0# или #,0000#

Re: Вычислительное поле

jonibek
Странно, приложите пожалуйста ваш проект, протестирую. Также опишите, где именно и для какого поля необходимо округление.


Более подробней прочитать о формате числа можно здесь
http://www.delphibasics.ru/FormatFloat.php

Dmitry.

Re: Вычислительное поле

DriveSoft wrote:

jonibek
Странно, приложите пожалуйста ваш проект, протестирую. Также опишите, где именно и для какого поля необходимо округление.


Более подробней прочитать о формате числа можно здесь
http://www.delphibasics.ru/FormatFloat.php

Спс за ссылку. Надо было прописать вместо #,#0  вот так 0.00. Вопрос решен.

Re: Вычислительное поле

avmakarov91 wrote:

Добрый день!
Необходимо рассчитать НДС в вычисляемом поле, выглядит так:
ROUND((Tech.costbeznds*1.00)*(Tech.nds/100.00),2)
Но результат без десятичной части. Пример 1200 руб. НДС 18 % результат 1416, а хотелось бы 1416,00
В чем может быть проблема?  Tech.costbeznds Деньги,  а Tech.nds Вещественное число.
Спасибо!

Приложите проект.