Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Кто как суммирует / 8 сообщений из 8, страница 1 из 1
01.10.2009, 09:06
    #36226646
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
оператор заносит кол-во товара по контрагентам прямо в таблице(временной), внизу сумма стоит, по этому полю, у меня в методе AfterRowColChange, стоит суммирование по этому полю и обновление внизу текстового поля "итого", но может как-то по другому реализовано у других, ведь сумирование в таблице(SUM), довольно долгая операция...
...
Рейтинг: 0 / 0
01.10.2009, 09:26
    #36226694
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
q1w1e1оператор заносит кол-во товара по контрагентам прямо в таблице(временной), внизу сумма стоит, по этому полю, у меня в методе AfterRowColChange, стоит суммирование по этому полю и обновление внизу текстового поля "итого", но может как-то по другому реализовано у других, ведь сумирование в таблице(SUM), довольно долгая операция...
Код: plaintext
1.
2.
SELECT SUM(zzz) as sum_all FROM dogovor INTO CURSOR ttt
THISFORM.Text1.Value=ttt.sum_all
USE IN ttt
...
Рейтинг: 0 / 0
01.10.2009, 09:42
    #36226723
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
Да, но опять же после каждого перехода вниз на следующую запись, надо выполнить или Select или Sum
...
Рейтинг: 0 / 0
01.10.2009, 10:34
    #36226834
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
q1w1e1оператор заносит кол-во товара по контрагентам прямо в таблице(временной), внизу сумма стоит, по этому полю, у меня в методе AfterRowColChange, стоит суммирование по этому полю и обновление внизу текстового поля "итого", но может как-то по другому реализовано у других, ведь сумирование в таблице(SUM), довольно долгая операция...
Вообще, обычно я пересчет суммирования запускаю не при смене строки, а только при изменении контрола.
В InteractiveChange устанавливается, что пользователь вносил изменения в текстбокс. В Valid контрола запускается пересчет, если пользователь вносил изменения.
...
Рейтинг: 0 / 0
01.10.2009, 11:15
    #36226942
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
q1w1e1Да, но опять же после каждого перехода вниз на следующую запись, надо выполнить или Select или Sum

Я не понял - зачем пересчитывать сумму по всей колонке при AfterRowColChange ? Пересчет требуется, когда пользователь что-то правит в текстбоксе или удаляет запись. При простом движении по записям этого абсолютно не нужно.
Изменение значения в текстбоксе можно отслеживать по When/Valid (начальное/конечное значения), по GotFocus/LostFocus или InteractiveChange.
...
Рейтинг: 0 / 0
01.10.2009, 12:40
    #36227180
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
На больших таблицах SUM тормозить будет
обычно так делаю:
например есть поля nKol и nPrice и идет их правка в гриде
При открытии формы считаем сумму и записываем ее в текстбокс
Код: plaintext
1.
2.
sele MyTable
sum round(nKol * nPrice,  2 ) to thisform.txtSum.Value
Добавляем форме свойство nOldVal
В гриде в текстбоксе для количества запоминаем текущее значение в GotFocus()
Код: plaintext
thisform.nOldVal = this.value
в LostFocus() делаем перерасчет
Код: plaintext
ThisForm.txtSum.value = ThisForm.txtSum.value - round(thisform.nOldVal * MyTable.nPrice,  2 ) + round(this.value * MyTable.nPrice,  2 )
Аналогично с ценой

Перед сохранением еще раз SUM на всякий случай.
...
Рейтинг: 0 / 0
02.10.2009, 05:45
    #36228649
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
Спасибо
...
Рейтинг: 0 / 0
02.10.2009, 17:11
    #36230132
LUCIAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как суммирует
q1w1e1,
Для суммирования по колонке Gridа создал визуалный класс itog в котором есть свойства:
it ---для накопления итога
pol ---,имя поля которое надо сумировать
alia --- имя таблицы,курсора
Обновление итога происходит с помощью метода Refresh

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
**************************************************
*-- Class:        itog (d:\mag\sklad.vcx)
*-- ParentClass:  textbox
*-- BaseClass:    textbox
*-- Time Stamp:   07/30/03 07:54:06 AM
*
DEFINE CLASS itog AS textbox


	ControlSource = "this.it"
	Height =  23 
	InputMask = "999,999,999,999.99"
	Width =  100 
	it =  0 
	pol = .F.
	alia = .F.


	PROCEDURE When
		RETURN .F.
	ENDPROC


	PROCEDURE Refresh
		NOB=SELECT()
		AL=THIS.ALIA
		SELECT (AL)
		NZAP=IIF(EOF(),RECNO()- 1 ,RECNO())
		WYR="SUM "+THIS.POL+" TO THIS.IT"
		&WYR
		IF NZAP> 0 
			GO NZAP
		ENDIF
		SELECT (NOB)
	ENDPROC


ENDDEFINE
*
*-- EndDefine: itog
**************************************************
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Кто как суммирует / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]