Спасибо, Дмитрий! Подправил форматирование,
TNxNumberColumn(frmMain.tgrDetail.Columns[3]).FormatMask := '#,##0.00; ; ';
и теперь всё выглядит великолепно, как я и хотел: ненулевые значения выводятся в денежном формате, а вместо нулевых - пустышки
My Visual Database → Posts by k245
Спасибо, Дмитрий! Подправил форматирование,
TNxNumberColumn(frmMain.tgrDetail.Columns[3]).FormatMask := '#,##0.00; ; ';
и теперь всё выглядит великолепно, как я и хотел: ненулевые значения выводятся в денежном формате, а вместо нулевых - пустышки
А вообще - печалька: не получается нормально отобразить бухгалтерскую информацию. Для вычисляемых полей (выделены красным), даже если их кастовать в REAL,
(
cast(
(select sum(summ) from docDetail
where docDetail.id_doc = doc.id) AS REAL)
)
не получается отобразить денежный формат:
внизу обычные поля с типом "ДЕНЬГИ"
Видимо, это из разряда "хотелок" : "Отображать нулевые значения как пустую строку". Именно отображать, потому что, если "пустышки" будут в наборе данных, то не будет работать функция SUM().
У стандартного компонента TDBGrid есть два замечательных события,
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
обработчики на которые легко справляются с подобными задачами по изменению способа отображения ячеек таблицы. Планируется ли что-либо подобное для TTableGrid ?
P.S. Почитал про типы данных SQLite http://xbb.uz/db/Tipy-dannyh-v-SQLite-versii-3 , теперь многое становится понятным в поведении визуальных компонентов, в частности - возможность в одной колонке отображать данные различных типов.
Вместо нулей - пустышки:
Дмитрий, спасибо за вариант с CAST, сумма отображается верно!
Однако, хотелось бы иметь такой результат:
Про нулевые значения: первоначальные настройки вычисляемых полей были такими:
(
select cast( amount as REAL) from docDetail as dd
left join doc on doc.id = docDetail.id_doc
left join docType on docType.id = doc.id_docType
where docType.isIncrement and (dd.id = docDetail.id)
)
а результат очень странный:
Если первая запись содержала null, то данные начинали отображаться, как текст ( 100.45 ), а сумма не считалась.
Хотя так правильней, пришлось заменять пустые строки нулями, хотя это перегружает экран. Вопрос был в том, можно ли как-нибудь избавиться от нулей, но чтобы отображение и суммирование работало корректно?
Изначально я хотел использовать вычисляемые поля без отображения нулей
(
select amount from docDetail as dd
left join doc on doc.id = docDetail.id_doc
left join docType on docType.id = doc.id_docType
where docType.isIncrement and (dd.id = docDetail.id)
)
но тогда не работает автоматическое вычисление итогов:
а числа с плавающей запятой отображаются, как строки, если первая ячейка в колонке пустая.
Вопросы:
1. Можно ли как-то явно определить желаемый формат отображения данных в колонке?
2. Можно ли подавить отображение нулевых значений в выбранной колонке?
Меняем сортировку в детальной части и меняется формат отображения:
Обратил внимание, что формат отображения данных в таблице зависит от того, какую информацию содержит 1-я строка выборки. Пример с отображением количества
Тип данных - вещественное число
Вычисляемое поле Приход:
(ifnull((
select amount from docDetail as dd
left join doc on doc.id = docDetail.id_doc
left join docType on docType.id = doc.id_docType
where docType.isIncrement and (dd.id = docDetail.id)
),0 ))
Вычисляемое поле Расход:
(ifnull((
select amount from docDetail as dd
left join doc on doc.id = docDetail.id_doc
left join docType on docType.id = doc.id_docType
where not docType.isIncrement and (dd.id = docDetail.id)
),0))
Если первое число ноль, то вся колонка отображается, как целые числа
Метод Add() класса TList, по идее, должен возвращать индекс добавленного элемента, но сейчас он всегда возвращает ноль:
Обновил программу, однако новая функция не поддерживается:
Добрый день. Нигде не нашел описания, что именно находится в этом параметре. В обычном Delphi там передаётся объект, у которого возникло это событие; в скриптах MyVisualDatabase, видимо, тоже, но в виде строки, содержащей число.
Можно ли использовать это значение, например, для создания одного обработчика для нескольких элементов интерфейса?
Первоначальная задумка была такая: для отображения в меню форм справочников у меня используется куча однотипных процедур, которые я хотел заменить одной. По задумке я хотел сохранить в Tag ссылку на форму, что обычно легко удаётся в Delphi.
procedure MenuItemClick (Sender: string);
var
form:TForm;
begin
form := TForm( TMenuItem(sender).tag );
form.ShowModal;
end;
Но ничего не вышло, так как компилятор не захотел выполнять приведение типов:
var
miItems: TMenuItem;
begin
miItems := TMenuItem.Create (frmMain.MainMenu);
miItems.Tag := Integer(frmItem);
Остались вопросы:
1. Как правильно использовать параметр sender для получения доступа к элементам интерфейса?
2. Как запихать в Tag ссылку на объект?
(Пока вижу только одно решение: создаётся глобальный ObjectList:TList, в него добавляются объекты, а доступ к ним - по индексу, который хранится в Tag)
Отлично, всё работает, как надо! Теперь красоту в интерфейсах наводить будет проще Спасибо!
...Например вы установили ограничение UNIQUE для какого либо поля в БД...
Не нашёл такой возможности в конструкторе (v. 3.6). Как добавить уникальность к полю БД? Возможность проверки перед сохранением с помощью скриптов видел в ветке http://myvisualdatabase.com/forum/viewtopic.php?id=1062
TButton.Action [ПОИСК] . Осуществлять поиск по вхождению, либо сделать это опцией
Компонент TLabel
Убрал чекер со свойства Transparent, меняю свойство Color в редакторе свойств. Результата нет.
Color всегда равно Parent.Color ?
My Visual Database → Posts by k245
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi