Имя: Пароль:
1C
1С v8
Обучаюсь 8-ке. Подскажите с запросом.
,
0 Автосервис
 
13.08.12
09:01
Добрый день.
Обучаюсь работать с 8-ой. Подскажите пожалуйста как можно выполнить следующую задачу:
Имеется справочник1, 2 поля "КакоетоЧисло" и "КакаятоСтрока". Допустим такой вид:
1 Стул
2 Стул
4 Стол
2 Стол

Имеется набросок запроса:

ВЫБРАТЬ
Спр1.КакоетоЧисло КАК КакоетоЧисло ,
Спр1.КакаятоСтрока КАК КакаятоСтрока
ИЗ
Справочник.Справочник1 КАК Спр1

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

2 Стул
4 Стол

Т.е. оставил только те строки, у которых "КакоетоЧисло" максимальное.
Подскажите пожалуйста.
1 Rie
 
13.08.12
09:02
(0) СГРУППИРОВАТЬ ПО ... и МАКСИМУМ(...)?
2 aleks-id
 
13.08.12
09:06
+1
только для новичка лучше так:
МАКСИМУМ(Спр1.КакоетоЧисло) и СГРУППИРОВАТЬ ПО Спр1.КакаятоСтрока
3 Автосервис
 
13.08.12
09:07
Спасибо, разобрался, работает :)
4 Автосервис
 
13.08.12
18:07
В продолжение темы :)
Добавляем еще одно поле, допустим "характеристика"6
КакоетоЧисло КакаятоСтрока Характеристика
1            Стул          Деревянный
2            Стул          Оловянный
4            Стол          Стеклянный
2            Стол          Железный

Нужно получить:

2            Стул          Оловянный
4            Стол          Стеклянный

Вот набросок запроса:

ВЫБРАТЬ
МАКСИМУМ(Спр1.КакоетоЧисло) КАК МаксимальноеЧисло,
Спр1.КакаятоСтрока КАК КакаятоСтрока
ИЗ
Справочник.Справочник1 КАК Спр1
СГРУППИРОВАТЬ ПО Спр1.КакаятоСтрока

Вроде элементарно, только добавить одно поле. Но мне на ум только какие-то извращенские методы приходят :)
5 Wern
 
13.08.12
18:20
А оно только извращенными и решается, нужно соединять то что у тебя получилось после выполнения запроса с исходными данными по 2-м полям и получать соответствующие им третье.
6 tashi_ork
 
13.08.12
18:22
Сделай пакет запросов или вложенный запрос. После получения таблицы из первого поста делай соединение с первоначальной таблицей, объединяй по полям "Какое-то число" и "Какая-то строка". Кстати, это не извращенный метод, а вполне нормальный =). Привыкай.
Удачи в обучении.
7 Автосервис
 
13.08.12
18:33
А можете в пример код привести?) А то я ни разу с вложенными запросами не работал :)
8 ЧашкаЧая
 
13.08.12
18:42
// следующий запрос просто создает временную таблицу с нужными данными
ВЫБРАТЬ
   1 КАК ПолеЧисла,
   "Стул" КАК Мебель,
   "Деревянный" КАК Свойство
ПОМЕСТИТЬ ВТДанные

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   2,
   "Стул",
   "Оловянный"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   4,
   "Стол",
   "Стеклянный"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   2,
   "Стол",
   "Железный"
;

////////////////////////////////////////////////////////////////////////////////

// вот он запрос получения нужных данных
ВЫБРАТЬ
   ВложенныйЗапрос.ПолеЧисла,
   ВложенныйЗапрос.Мебель,
   ВТДанные.Свойство
ИЗ
   (ВЫБРАТЬ
       МАКСИМУМ(ВТДанные.ПолеЧисла) КАК ПолеЧисла,
       ВТДанные.Мебель КАК Мебель
   ИЗ
       ВТДанные КАК ВТДанные
   
   СГРУППИРОВАТЬ ПО
       ВТДанные.Мебель) КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ ВТДанные КАК ВТДанные
       ПО ВложенныйЗапрос.ПолеЧисла = ВТДанные.ПолеЧисла
           И ВложенныйЗапрос.Мебель = ВТДанные.Мебель
9 rphosts
 
13.08.12
18:44
Одна небольшая деталь: для характеристик в 1С есть специальный объект: План Видов Характеристик.
10 tashi_ork
 
13.08.12
18:44
Или так:
"ВЫБРАТЬ
|    МАКСИМУМ(СырыеДанные.Число) КАК Число,
|    СырыеДанные.Строка
|ПОМЕСТИТЬ ОбработаннаяТаблица
|ИЗ
|    СырыеДанные КАК СырыеДанные
|
|СГРУППИРОВАТЬ ПО
|    СырыеДанные.Строка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Максимум.Число,
|    Максимум.Строка,
|    СырыеДанные.Характеристика
|ИЗ
|    ОбработаннаяТаблица КАК Максимум
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СырыеДанные КАК СырыеДанные
|        ПО Максимум.Число = СырыеДанные.Число
|            И Максимум.Строка = СырыеДанные.Строка"
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.