AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.03.2011, 18:22   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Добрый день всем!
Не подскажите как можно сгруппировать значения в таблице.
Есть таблица которая содержит примеру и такие поля:


тапочки 2шт. 100руб
туфли 5шт. 2000руб
сандали 1шт. 150руб
тапочки 6шт. 100руб
валенки 1шт. 600руб
туфли 2шт. 1800руб
туфли 7шт. 1650руб

поля не ключевые...и нужно их сгруппировать.... нужно получить все разновидности обуви. т.е.
тапочки
туфли
сандали
валенки

ну потом нужно будет также получить ко-во и сумму.
Как это в NAV-ике сожно сделать?
В Axapt-е это делается просто

while select тип,Count(кол-во),Sum(цена) from Обувь Grop by кол-во,цена

ну или просто все видов обуви
while select тип from Обувь Grop by тип
Старый 29.03.2011, 09:05   #2  
prefreitor is offline
prefreitor
Участник
 
214 / 11 (1) +
Регистрация: 03.10.2006
Используйте буферную табличку, например 307 -ю. Получится что то такое:
Код:
IF вашатаблица.FINDSET THEN
  REPEAT   
    Inventory Buffer."Item No" := вашатаблица.типобуви;
    IF Inventory Buffer.INSERT THEN;
  UNTIL вашатаблица.NEXT = 0;
Inventory Buffer соответственно объявить как как временную...
Старый 29.03.2011, 11:14   #3  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от prefreitor Посмотреть сообщение
Используйте буферную табличку, например 307 -ю. Получится что то такое:
Код:
IF вашатаблица.FINDSET THEN
  REPEAT   
    Inventory Buffer."Item No" := вашатаблица.типобуви;
    IF Inventory Buffer.INSERT THEN;
  UNTIL вашатаблица.NEXT = 0;
Inventory Buffer соответственно объявить как как временную...
Тут я моу вместо буферное таблицы использовать свою же но объявленной как временная?
Тут он записывает только не повторяющиеся значения?
Старый 29.03.2011, 11:46   #4  
prefreitor is offline
prefreitor
Участник
 
214 / 11 (1) +
Регистрация: 03.10.2006
Цитата:
Сообщение от Shaitan-Babay Посмотреть сообщение
Тут я моу вместо буферное таблицы использовать свою же но объявленной как временная?
Тут он записывает только не повторяющиеся значения?
Разницы нет, главное чтобы группируемое поле было в первичном ключе.
Да, запись неповторяющихся значений гарантируется ключем.
Старый 29.03.2011, 13:43   #5  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от prefreitor Посмотреть сообщение
Цитата:
Сообщение от Shaitan-Babay Посмотреть сообщение
Тут я моу вместо буферное таблицы использовать свою же но объявленной как временная?
Тут он записывает только не повторяющиеся значения?
Разницы нет, главное чтобы группируемое поле было в первичном ключе.
Да, запись неповторяющихся значений гарантируется ключем.
Это что получается для каждого такого запроса, по разным таблицам, нужно создавать аналогичные таблицы с нужными ключами? Это же так неудобно....да и быстро лицензию израсходую... неужто других путей нету?
Старый 29.03.2011, 14:44   #6  
prefreitor is offline
prefreitor
Участник
 
214 / 11 (1) +
Регистрация: 03.10.2006
Цитата:
Сообщение от Shaitan-Babay Посмотреть сообщение
Это же так неудобно....да и быстро лицензию израсходую... неужто других путей нету?
Другой путь есть, используйте одну буферную таблицу для разных целей)) Нам же не нужно полной идентичности таблиц а достаточно чтобы тип группируемого(группируемых) полей соответствовал...
Старый 29.03.2011, 14:48   #7  
GRIZZLY_imported is offline
GRIZZLY_imported
Участник
 
39 / 10 (1) +
Регистрация: 18.05.2007
Предложу свой вариант, который требует создания ключа по группируемым полям. Например
SETCURRENTKEY("ТипОбуви");
IF FINDFIRST THEN
REPEAT
SETRANGE("ТипОбуви", "ТипОбуви");
// Тут следует обработка, которую нужно провести для группы
FINDLAST;
SETRANGE("ТипОбуви");
UNTIL NEXT = 0;
Старый 29.03.2011, 16:39   #8  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Кстати а не будет ли хуже вариант если в качестве временной таблицы использовать массив? Я просто совершенно новичёк в Navision....вот и не уверен как правильнее поступить.
Старый 29.03.2011, 17:09   #9  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от Shaitan-Babay Посмотреть сообщение
Кстати а не будет ли хуже вариант если в качестве временной таблицы использовать массив? Я просто совершенно новичёк в Navision....вот и не уверен как правильнее поступить.
Эмм, что-то не вижу связи между временной таблицей и массивом. Хочется до конца понять условие задачи. Тип поля "Тип Обуви" - option, integer или какой-то другой? Вам группировка необходима только для получения суммы?
Если только для суммы, то предлагаю создать ключ - "Item Type" (Тип Товара или Тип Обуви) и к нему прикрутить два SumIndexField - Количество, Сумма.
Далее, как написал GRIZZLY, делаете SETCURRENTKEY, устанавливаете фильтр по типу товара.
Потом делаете CALCSUMS(<Тут через запятую указываете поля, которые будут просуммированы с учетом фильтра>).
Старый 29.03.2011, 19:07   #10  
GRIZZLY_imported is offline
GRIZZLY_imported
Участник
 
39 / 10 (1) +
Регистрация: 18.05.2007
Цитата:
Сообщение от Shaitan-Babay Посмотреть сообщение
Кстати а не будет ли хуже вариант если в качестве временной таблицы использовать массив? Я просто совершенно новичёк в Navision....вот и не уверен как правильнее поступить.
Не понятно что дальше вы будете делать с этим массивом? Ведь по нему поиск существующего значения сделать можно только перебором. Лучше уж используйте временные таблицы.
Fly все правильно написал, в моем коде нужно исправить место, отмеченное комментарием и заменить его на CALCSUMS, там уже будет установлен ранее фильтр по ТипуОбуви.
Старый 30.03.2011, 12:34   #11  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Fly Посмотреть сообщение
Если только для суммы, то предлагаю создать ключ - "Item Type" (Тип Товара или Тип Обуви) и к нему прикрутить два SumIndexField - Количество, Сумма.
Далее, как написал GRIZZLY, делаете SETCURRENTKEY, устанавливаете фильтр по типу товара.
Потом делаете CALCSUMS(<Тут через запятую указываете поля, которые будут просуммированы с учетом фильтра>).
При использовании временной таблицы суммируемые поля не обязательно должны быть определены как SumIndexField.
Т.е. после того, как заполнили временную таблицу, можно производить во временной таблице CALCSUMS по ЛЮБОМУ decimal-полю, даже если этого поля нет ни в одном ключе. Одна из приятных вещей темповых таблиц.
Старый 30.03.2011, 16:49   #12  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от AlexB Посмотреть сообщение
Цитата:
Сообщение от Fly Посмотреть сообщение
Если только для суммы, то предлагаю создать ключ - "Item Type" (Тип Товара или Тип Обуви) и к нему прикрутить два SumIndexField - Количество, Сумма.
Далее, как написал GRIZZLY, делаете SETCURRENTKEY, устанавливаете фильтр по типу товара.
Потом делаете CALCSUMS(<Тут через запятую указываете поля, которые будут просуммированы с учетом фильтра>).
При использовании временной таблицы суммируемые поля не обязательно должны быть определены как SumIndexField.
Т.е. после того, как заполнили временную таблицу, можно производить во временной таблице CALCSUMS по ЛЮБОМУ decimal-полю, даже если этого поля нет ни в одном ключе. Одна из приятных вещей темповых таблиц.
Не знал, спасибо Но топикстартер вроде и не говорил, что таблица временная. Нет?
Старый 30.03.2011, 17:11   #13  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Fly Посмотреть сообщение
Но топикстартер вроде и не говорил, что таблица временная. Нет?
Правда, но топикстартеру посоветовали использовать какую-нибудь универсальную временную таблицу для сортировки данных.
Поэтому я и вставил свои две копейки относительно суммиривания данных в оной.
Универсальная временная таблица (с очень длинным ключом) тем и хороша, что её можно заполнить для одной конкретной задачи так, а для другой сяк и как результат получаем для каждой индивидуальной задачи индивидуальную сортировку данных.
Сегодня надо по типу обуви сортировать, завтра почему-либo другому. Не делать же только для одного Report'а на каждый случай навый ключ в таблице.
Остаётся посоветовать топикстартеру присмотреться к универсальной временной таблице.
Старый 30.03.2011, 17:17   #14  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Shaitan-Babay - какую табличку (какие объемы данных) анализируете? Отделять тапочки от валенок по Value Entry без соотвествующего ключа будет достаточно накладно. По производительности наиболее отпимален вариант от Grizzly.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.