Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2016, 20:36   #11
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

параметр запроса :id (код товара) получает значения из датасета, а эти значения надо перебирать в while цикле.
например:
выписал накладной, в котором 3 записей. В DBGrid-е кроме полей бд у каждой записи хочу увыдеть вычисляемое поле ндс, который вычисляю в CalcFields процедуре.
Потом в Label нужно получать sum(ндс*количество).
В Datasete встаю на первую запись, который имеет свой ID товара и в while цикле перебираю записи:
while not dataset1.eof do begin
dataset1.close;
dataset1.sql.clear;
dataset1.sql.add('select * from Goods where id=:id');
dataset1.paramsbyname('id').asinteg er:=dataset1Id.asinteger;
dataset1.open;
end;
если товар не облагается ндс-ом тогда ндс:=0
else ндс:=цена*18/118.
но кроме этого надо проверять конкретно этот поставщик платит или нет ндс. А как это проверить на сервере,пока поставщика не выбрал на клиенте?
Изображения
Тип файла: jpg Screenshot_2.jpg (83.2 Кб, 122 просмотров)

Последний раз редактировалось delphi159; 13.10.2016 в 20:42.
delphi159 вне форума Ответить с цитированием
Старый 13.10.2016, 20:40   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно в запросе с помощью left join прицепить Goods к основной таблице и там то же самое делать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.10.2016, 02:42   #13
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Можно в запросе с помощью left join прицепить Goods к основной таблице и там то же самое делать
И что это изменит? Мне нужен узнать как обойти перебор записей в цикле и как суммировать вычисляемие значения vat(ндс) в агрегатное поле!
delphi159 вне форума Ответить с цитированием
Старый 15.10.2016, 08:28   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Этим избавимся от вычисляемого поля на клиенте. И коль IB поддерживает агрегатные поля, то должно нормально просуммировать без твоего цикла. А если агрегатные поля в нем мираж, то вторым запросом суммируй и на клиенте просто бери из него данные
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.10.2016, 14:00   #15
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Этим избавимся от вычисляемого поля на клиенте. И коль IB поддерживает агрегатные поля, то должно нормально просуммировать без твоего цикла. А если агрегатные поля в нем мираж, то вторым запросом суммируй и на клиенте просто бери из него данные
Аватар, вы имели ввиду так?
Код:
select Goods_Id, income_id, Qty, Price, vatpayer, Nakl.nakl_id, Price*Qty as summa,
CASE when vatpayable=1 then         --если моя фирма платит ндс
  CASE when Vatpayer=1 then          --если поставщик платит ндс 
  case 
    when taxable=0 then 0                    --если товар не платит ндс 
    when taxable=1 then Price*18/118         --если товар платит ндс
  end  
Else 0
  end
else 0
END AS Vat
 
from Income, partn, nakl
where Income.part_id=partn.part_id and nakl. nakl_id=:nakl_id
group by Goods_id, Income_id, Qty, Price, vatpayer, nakl_id, summa, vat
В Firebird 2.5 работает, хотя выбирает все записи с одинаковими Goods_id(см. рисунок), а в Interbase 2009- никак: Expression evalution not supported!
Изображения
Тип файла: jpg Screenshot_5.jpg (35.8 Кб, 46 просмотров)

Последний раз редактировалось delphi159; 15.10.2016 в 19:15.
delphi159 вне форума Ответить с цитированием
Старый 15.10.2016, 14:23   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А просто так без не нужных вложений
Код:
CASE when vatpayable=1 AND Vatpayer=1 AND taxable=1 then Price*18/118 Else  0 end
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.10.2016, 14:34   #17
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А просто так без не нужных вложений
Код:
CASE when vatpayable=1 AND Vatpayer=1 AND taxable=1 then Price*18/118 Else  0 end
Аватар вложение стало гораздо проще и работает. Спасибо вам большое!
А на счёт агрегата, наверно, не получится без Clientdataset-а.
Interbase 2009 наверно не может группировать по выражению. Как, по вашему мнению, можно обойти эту проблему в IB?
delphi159 вне форума Ответить с цитированием
Старый 15.10.2016, 14:49   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Понятия не имею, ни когда не использовал IB. И агрегаты к СУБД не имеют отношения, этим занимается сам датасет. А чтобы сгруппировать по выражению запрос с ним нужно сделать вложенным в FROM и группировать во внешнем запросе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.10.2016 в 14:53.
Аватар вне форума Ответить с цитированием
Старый 15.10.2016, 17:20   #19
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
агрегаты к СУБД не имеют отношения, этим занимается сам датасет.
Да, это знаю, но у меня датасет IBDataset и поэтому проблемы. Как узнал должен быть clientdaset или датасети Firebird-а.
delphi159 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как суммировать 7 книг в 8 ? Xp_Dron Microsoft Office Excel 5 24.12.2013 18:24
как суммировать в db grid deadneoo Компоненты Delphi 0 01.05.2010 15:41
Си. Как суммировать элементы массива? dma Помощь студентам 2 06.12.2008 17:11
как суммировать только определенный месяц? Алька Microsoft Office Excel 2 08.05.2007 08:50