Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 сен 2024, 02:26

Как выбрать Запросом самое частое значение?

Автор Frost, 29 сен 2011, 00:53

0 Пользователей и 1 гость просматривают эту тему.

Frost

Прошу прощения за ламерский вопрос, но я только учусь...
При заполнении таблицы необходимо в колонку Количество подставлять количество, которое обычно заказывает клиент.
Пример: если в 10 предыдущих заказах товар 8 раз куплен в количестве 10 шт., один раз в кол-ве 2 шт., и один раз в кол-ве 6 шт., то в количество должно подставится 10 шт.
Т.е. нужно брать то количество, которое встречается чаще других. Если все количества встречаются одинаково часто, то необходимо брать максимальное количество.

Подскажите пожалуйста, как можно это сделать?

ivanov660

К примеру, в итогах используй функцию Максимум

has

Самому интересно стало. Вобщем решение нашел такое, есть таблица вида

По нажатию кнопки выполнить, код

Процедура КнопкаВыполнитьНажатие(Кнопка)

ТабНоменклатуры = Новый ТаблицаЗначений;
ТабНоменклатуры.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТабНоменклатуры.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));

ТабНоменклатуры = Товары.Выгрузить();

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Т.Номенклатура,
| Т.Количество
|ПОМЕСТИТЬ ВТНомен
|ИЗ
| &ТабНоменклатуры КАК Т
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНомен.Количество КАК Количество
|ПОМЕСТИТЬ ВТРазличноеКоличество
|ИЗ
| ВТНомен КАК ВТНомен
|
|СГРУППИРОВАТЬ ПО
| ВТНомен.Количество
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТРазличноеКоличество.Количество КАК КоличествоНоменклатуры,
| КОЛИЧЕСТВО(ВТНомен.Количество) КАК КоличествоПовторений
|ИЗ
| ВТРазличноеКоличество КАК ВТРазличноеКоличество
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНомен КАК ВТНомен
| ПО ВТРазличноеКоличество.Количество = ВТНомен.Количество
|
|СГРУППИРОВАТЬ ПО
| ВТРазличноеКоличество.Количество";

Запрос.УстановитьПараметр("ТабНоменклатуры", ТабНоменклатуры);
Запрос.Выполнить().Выгрузить().ВыбратьСтроку();

КонецПроцедуры

В итоге получаем результат

Дальше сам обработаешь думаю. Т.к. товар тут всегда один, то в конечном запросе я его выводить не стал.

AntonB

   "ВЫБРАТЬ
   |   РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
   |   ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслугТовары.Номенклатура),
   |   РеализацияТоваровУслугТовары.Количество КАК Количество,
   |   1 КАК Раз
   |ИЗ
   |   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
   |ИТОГИ
   |   СУММА(Раз)
   |ПО
   |   Номенклатура,
   |   Количество";

А вот так, вроде, покрасивше и по-понятней...?
Только с единицами измерения, конечно, поаккуратнее бы надо в обоих вариантах...
Предлагаю полный ИТ сервис небольшой организации в Москве (приходящий сисадмин+1С7.7,1С8.x)

Frost

В общем все равно не очень въезжаю.....
Запрос = Новый Запрос("ВЫБРАТЬ
                               |   Товары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                               |   Товары.Номенклатура КАК Номенклатура,
                               |   Товары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                               |   МАКСИМУМ(Товары.Ссылка.Ссылка) КАК Ссылка,
                               |   КОЛИЧЕСТВО(*) КАК КоличествоРаз,
                               |   МАКСИМУМ(Товары.Ссылка.Дата) КАК ДатаПоследнейПродажи,
                               |Товары.Количество КАК Количество
                               |ИЗ
                               |   Документ.ЗаказПокупателя.Товары КАК Товары
                               |ГДЕ
                               |   Товары.Ссылка.Проведен = ИСТИНА
                               |   И Товары.Ссылка.Контрагент = &Контрагент
                               |
                               |СГРУППИРОВАТЬ ПО
                               |   Товары.ЕдиницаИзмерения,
                               |   Товары.Номенклатура,
                               |   Товары.ХарактеристикаНоменклатуры,
                               | Товары.Количество
                               |УПОРЯДОЧИТЬ ПО
                               |   КоличествоРаз УБЫВ");
                     
   Запрос.УстановитьПараметр("Контрагент", Контрагент);

Если делать с временными таблицами получается, что он ищет повторение значений по всей колонке Количество, а мне нужно чтобы для каждой номенклатуры.

has

Ну также тогда, просто добавить номенклатуру в выборку и в группировки.

ivanov660

ппц... я бы сделал так
...
количество(различных таб.количество) как КоличествоРазличных,
максимум(таб.количество) как число_из_таб,
...
зачем изобретать велосипед, когда есть готовые функции, а если использовать СКД,
то вычисления всех этих значений можно сделать средствами компановки..

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск