Автор | Сообщение |
|
| постоянный участник
|
Пост N: 157
Зарегистрирован: 27.07.08
|
|
Отправлено: 19.08.11 19:24. Заголовок: Элемент управления "Электронная таблица"
Вот такая проблема: нужно к каждой строке добавить произвольное MEMO-поле, которое показывает алгоритм расчёта цены. Её рассчитывают по-разному, поэтому классическая таблица с фиксированной структурой здесь не рулит. Далее, и это самое интересное: эта таблица должна уметь считать, как настоящая электронная таблица Excel, или Lotus wks, wk1 и т.д. Если использовать OleExcel, то во-первых, для многотысячной таблицы цен на каждую строку выводить по таблице калькуляции - это чересчур. Во-вторых, шеф не хочет Excel, а хочет Openoffice. В третьих, элемент управления должен выводиться, как обычное MEMO, в окне с прочими BROWSE и MEMO. По крайней мере в Qt есть такой себе QTableWidget, где есть именно то, что мне нужно. QTableWidget
|
|
|
Ответов - 6
[только новые]
|
|
|
| постоянный участник
|
Пост N: 159
Зарегистрирован: 27.07.08
|
|
Отправлено: 29.08.11 17:14. Заголовок: Так, ничего не нашёл..
Так, ничего не нашёл. Пока что тупо поставил MEMO-поле, которое ничего не считает.
|
|
|
|
| Администратор
|
Пост 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. |
| Я на прошлой неделе делал нечто подобное. Конечно, задача не точно такая же, но похожая. Имеем множество колонок (полей), для которых можно установить формулы. Сделал таблицу формул: код и сама формула. В формулах вместо имен полей завел их алиасы, и при написании формулы - выбор из алиасов колонок. Для каждого поля из множества добавил дополнительное поле - код формулы для этой ячейки. Сделал пометку множества строк для задания формулы для помеченной области. Отображение формулы - в статус строке, клик на статус строку - задание формулы. После редакции какой-либо ячейки - вызов расчета для всех заданных формул этой строки обычной макроподстановкой с заменой алиасов на имена полей. Все это без всяких экселей и прочих офисов, в обычном бровсе/гриде.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 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
|
|
|
|
| постоянный участник
|
Пост N: 160
Зарегистрирован: 27.07.08
|
|
Отправлено: 29.08.11 19:18. Заголовок: Всё не так просто
Там куда более сложная и разнообразная структура и в функцию EVAL её не загонишь, тем паче что в этом же поле должны быть и тексты пояснения. Тут именно что электронная таблица нужна. Ведь цена в разных случаях рассчитывается по-разному. И число исходных данных и формула - одна непохожа на другую. Так что остаётся только ждать, пока Qt нормально прикрутят к Харбору.
|
|
|
|
| Администратор
|
Пост N: 2049
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.08.11 19:59. Заголовок: Dr. Oldwarez пишет: ..
Dr. Oldwarez пишет: цитата: | Там куда более сложная и разнообразная структура и в функцию EVAL её не загонишь, тем паче что в этом же поле должны быть и тексты пояснения. Тут именно что электронная таблица нужна. Ведь цена в разных случаях рассчитывается по-разному. И число исходных данных и формула - одна непохожа на другую. Так что остаётся только ждать, пока Qt нормально прикрутят к Харбору. |
| Ждать - это не наш метод. Тем, кто ложится спать, спокойного сна. Ну а те, кому нечего ждать, отправляются в путь. Их не догнать, уже не догнать (ц) Если алгоритм выходит за рамки обычного макровыражения, можно использовать hrb-модули. Вместо строки-формулы добавить в таблицу формул 2 мемо поля: одно из них с функцией расчета, второе - с откомпилированным вариантом этой функции. После ввода функции копировать ее во временный файл, компилировать вызовом harbour с параметром -gh, и сохранять в мемо-поле. Имя функции должно быть уникальным. Эти функции загружать обычными средствами hrb, и выполнять ими же. Правда, написание таких функций выходит за рамки возможностей обычного юзера. Но и написание vba-скриптов тоже выходит за эти рамки, так шта...
|
|
|
|
| постоянный участник
|
Пост N: 1868
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.08.11 20:24. Заголовок: Pasha пишет: Ждать..
Pasha пишет: цитата: | Ждать - это не наш метод. |
| 5 балов !
|
|
|
|