|  11.06.2004, 17:28 | #1 | 
| Участник | расчет ИТОГО по колонке темповой таблицы 
			
			Доброго времени суток! Существует времення таблица RMETmpSubLotLog Необходимо реализовать контроль ввода значений в поле amount. Правило проверки select sum(amount) from tmp; if (tmp.Amount >= element.getLimit()) Сумма по колонке (полю) не должна превышать определенного значения. Проблема в том, что select sum(amount) from tmp не учитывает новое введенное значение, а только лишь старые данные, введенные за одну операцию до этого. Проверка реализована в методе validate соответствующего DataSourc-a (RMETmpSubLotLog_ds.cursor()) Как решить проблему, подскажите! =) PHP код: 
			 | 
|  | 
|  11.06.2004, 17:35 | #2 | 
| Модератор | 
			
			А если присуммировать новое введенное значение? Что получиться?
		 | 
|  | 
|  11.06.2004, 17:44 | #3 | 
| Участник | 
			
			Не подходит, пробовал =) Пример: есть три строки со значениями в поле amount 10,20,30 я добавляю новую строчку со значением 15 , прибавляю ее к сумме (старых значений) получаю sum(10,20,30) + 15 =.75. Все хорошо, все бъет. Но вот если я ИЗМЕНЯЮ сужествующую строку, к примеру строку со значением 10 меняю на 5, то получаю (10,20,30) + 5 = 65 , а должно 55! | 
|  | 
|  11.06.2004, 17:53 | #4 | 
| Moderator | 
			
			Можно попробовать к сумме прибавить выражение <новое_значение_поля> - <старое_значение_поля>, где старое значение поля добывается через orig(). 
				__________________ Андрей. | 
|  | 
|  11.06.2004, 17:57 | #5 | 
| Administrator | 
			
			В принципе, все логично. SUM берет данные, которые уже есть в таблице. validate() вызывается до внесения изменений в таблицу, стало быть Вашего значения там нет еще. Отнимайте от суммы старое значение, если оно есть, и добавляйте новое.
		 
				__________________ Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me | 
|  | 
|  11.06.2004, 17:58 | #6 | 
| Участник | 
			
			Привет! Я бы попробовал перечитать курсор: PHP код: 
			
				__________________ С уважением, Андрей Беседин | 
|  | 
|  11.06.2004, 17:59 | #7 | 
| Модератор | PHP код: 
			 | 
|  | 
|  11.06.2004, 19:26 | #8 | 
| Участник | 
			
			С миру по нитке ... Получилось : PHP код: 
			т.e. было три строки 10,20,30 ... проверка на превышение 100 .... ввожу строку четвертую 2000, код правильно ругается, но сбрасывает в ноль первую строку в гриде (к примеру 10 )... Как побороть? P.S. А чем плохи временные таблицы? Я их использую для того, что бы данные попадали в базу не построчно, а пачкой =)) Хотелось отвязать базу от интерфейса... 2 George Nordic Может я делал что-то не так, но Ваш код не сработал так мне необходимо .. | 
|  | 
|  11.06.2004, 20:04 | #9 | 
| Участник | 
			
			Вот этот код работает, так как я задумывал ..... Остался последний вопрос: как отключить сортировку в гриде ? (чтобы добавлялась запись в конец и не сортировалась в зависимости от значения) PHP код: 
			Замысловато получилось ...=(( А можно ли решить такую задачу проще? Я имею в виду контроль суммы по колонке. | 
|  | 
|  11.06.2004, 20:54 | #10 | 
| Moderator | 
			
			В примере Georde Nordic надо заменить строчку на PHP код: 
			
				__________________ Андрей. | 
|  | 
|  15.06.2004, 14:16 | #11 | 
| Участник | 
			
			2 ATimTim  Привет! Временные таблицы - это очень плохо. Начать с того, что хранится это дело на диске (клиента или сервера - зависит от места первой вставки). "Индексный" поиск по временным таблицам нагружает процессор АОС или клиента. Далее, иногда очень часто лажаются селекты по временным таблицам. Еще: в 3-х уровневой среде возможны серьезные замедления, связанные с "прояжкой" таблицы между клиентом и сервером. То ли дело RecordSortedList или MAP (зависит от области применения) - милое дело! 
				__________________ С уважением, Андрей Беседин | 
|  | 
|  19.07.2005, 10:22 | #12 | 
| Участник | Лимит по колонке обычной таблицы 
			
			Здравствуйте! Мне нужно выполнить такюже задачку, только на обычной таблице Просмотрела данную тему и возникли вопросы: 1. Как решение такой задачки отличается от решения на темповой таблице? 2. Что скрывается под методом getLimit()? (Можно код?) 3. И вопрос, не относящийся к этой теме: как на int-поле установить значение по умолчанию? Буду благодарна за развернутые ответы. Заранее спасибо | 
|  | 
|  19.07.2005, 11:49 | #13 | 
| Moderator | 
			
			1. Решение особо не отличается, но, естественно, не надо заморачиваться со всякими setTmpData(). 2. Метод произвольным образом высчитывает и возвращает предел значения по колонке. Сам код его не особо важен, хоть return 100; 3. Значения по умолчанию лучше всего устанавливать в методе initValue() таблицы или DS. 
				__________________ Андрей. | 
|  | 
|  19.07.2005, 11:59 | #14 | 
| Участник | 
			
			Спасибо, Dron AKA andy. Буду пробовать...   | 
|  | 
|  19.07.2005, 15:03 | #15 | 
| Участник |   
			
			Спасибо за информацию. Мне пример ATimTim пригодился очень.   | 
|  | 
|  | 
| 
 |