On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 157
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 19.08.11 19:24. Заголовок: Элемент управления "Электронная таблица"


Вот такая проблема: нужно к каждой строке добавить произвольное MEMO-поле, которое показывает алгоритм расчёта цены. Её рассчитывают по-разному, поэтому классическая таблица с фиксированной структурой здесь не рулит. Далее, и это самое интересное: эта таблица должна уметь считать, как настоящая электронная таблица Excel, или Lotus wks, wk1 и т.д. Если использовать OleExcel, то во-первых, для многотысячной таблицы цен на каждую строку выводить по таблице калькуляции - это чересчур. Во-вторых, шеф не хочет Excel, а хочет Openoffice. В третьих, элемент управления должен выводиться, как обычное MEMO, в окне с прочими BROWSE и MEMO.

По крайней мере в Qt есть такой себе QTableWidget, где есть именно то, что мне нужно.
QTableWidget

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]


постоянный участник




Пост N: 159
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 29.08.11 17:14. Заголовок: Так, ничего не нашёл..


Так, ничего не нашёл. Пока что тупо поставил MEMO-поле, которое ничего не считает.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2048
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.08.11 18:18. Заголовок: Dr. Oldwarez пишет: ..


Dr. Oldwarez пишет:

 цитата:
Вот такая проблема: нужно к каждой строке добавить произвольное MEMO-поле, которое показывает алгоритм расчёта цены. Её рассчитывают по-разному, поэтому классическая таблица с фиксированной структурой здесь не рулит. Далее, и это самое интересное: эта таблица должна уметь считать, как настоящая электронная таблица Excel, или Lotus wks, wk1 и т.д. Если использовать OleExcel, то во-первых, для многотысячной таблицы цен на каждую строку выводить по таблице калькуляции - это чересчур. Во-вторых, шеф не хочет Excel, а хочет Openoffice. В третьих, элемент управления должен выводиться, как обычное MEMO, в окне с прочими BROWSE и MEMO.



Я на прошлой неделе делал нечто подобное. Конечно, задача не точно такая же, но похожая.
Имеем множество колонок (полей), для которых можно установить формулы.
Сделал таблицу формул: код и сама формула. В формулах вместо имен полей завел их алиасы, и при написании формулы - выбор из алиасов колонок.
Для каждого поля из множества добавил дополнительное поле - код формулы для этой ячейки. Сделал пометку множества строк для задания формулы для помеченной области. Отображение формулы - в статус строке, клик на статус строку - задание формулы. После редакции какой-либо ячейки - вызов расчета для всех заданных формул этой строки обычной макроподстановкой с заменой алиасов на имена полей.
Все это без всяких экселей и прочих офисов, в обычном бровсе/гриде.


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 29.08.11 18:24. Заголовок: Расчет по алгоритму


Простой вариант:
a) memо поле(mem_field) является кодом Harbour , например 100*a+b , где {a,b} видимые переменные(поля)
б) расчет цены(cena_field) проводится по кнопке прикладного ПО - для всех строк или одной
Cena_field := eval( compile(mem_field))
или просто
eval( compile(mem_field)) для формулы внутри memo cena_field := 100*a+b

...
Function COMPILE(x)
Local ret
ret:= &("{||"+x+"}")
return ret


Спасибо: 0 
Цитата Ответить
постоянный участник




Пост N: 160
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 29.08.11 19:18. Заголовок: Всё не так просто


Там куда более сложная и разнообразная структура и в функцию EVAL её не загонишь, тем паче что в этом же поле должны быть и тексты пояснения. Тут именно что электронная таблица нужна. Ведь цена в разных случаях рассчитывается по-разному. И число исходных данных и формула - одна непохожа на другую. Так что остаётся только ждать, пока Qt нормально прикрутят к Харбору.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2049
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.08.11 19:59. Заголовок: Dr. Oldwarez пишет: ..


Dr. Oldwarez пишет:

 цитата:
Там куда более сложная и разнообразная структура и в функцию EVAL её не загонишь, тем паче что в этом же поле должны быть и тексты пояснения. Тут именно что электронная таблица нужна. Ведь цена в разных случаях рассчитывается по-разному. И число исходных данных и формула - одна непохожа на другую. Так что остаётся только ждать, пока Qt нормально прикрутят к Харбору.



Ждать - это не наш метод.
Тем, кто ложится спать, спокойного сна. Ну а те, кому нечего ждать, отправляются в путь. Их не догнать, уже не догнать (ц)
Если алгоритм выходит за рамки обычного макровыражения, можно использовать hrb-модули. Вместо строки-формулы добавить в таблицу формул 2 мемо поля: одно из них с функцией расчета, второе - с откомпилированным вариантом этой функции. После ввода функции копировать ее во временный файл, компилировать вызовом harbour с параметром -gh, и сохранять в мемо-поле. Имя функции должно быть уникальным. Эти функции загружать обычными средствами hrb, и выполнять ими же.
Правда, написание таких функций выходит за рамки возможностей обычного юзера. Но и написание vba-скриптов тоже выходит за эти рамки, так шта...


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1868
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.08.11 20:24. Заголовок: Pasha пишет: Ждать..


Pasha пишет:

 цитата:

Ждать - это не наш метод.



5 балов !

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет