Имя: Пароль:
1C
1С v8
Помогите, пожалуйста с запросом
0 discant
 
16.08.12
00:59
Доброго времени суток!
Есть запрос:
"ВЫБРАТЬ
              |    ПартииТоваровНаСкладах.Номенклатура,
              |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
              |    ПартииТоваровНаСкладах.Количество,
              |    МАКСИМУМ(ПартииТоваровНаСкладах.Стоимость) КАК Стоимость
              |ИЗ
              |    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
              |ГДЕ
              |    ПартииТоваровНаСкладах.Период <= &Дата
              |
              |СГРУППИРОВАТЬ ПО
              |    ПартииТоваровНаСкладах.Номенклатура,
              |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
              |    ПартииТоваровНаСкладах.Количество";
После его выполнения в выборку попадают записи регистра с одинаковым ключем Номенклатура, но разным значением поля Стоимость.
Как можно переделать запрос, так, чтобы вместо нескольких строк с одинаковой номенклатурой выбиралась только одна с максимальной ценой для этой номенклатуры?
Заранее спасибо.
1 НикДляЗапросов
 
16.08.12
01:02
А максимум в группировку
2 Птица
 
16.08.12
01:03
убрать из группировки поля
ХарактеристикаНоменклатуры,
и Количество
и в секции Выбрать - тоже убрать эти поля

если они таки нужны, добавлять их после выборки макс записи через соединние
3 discant
 
16.08.12
01:37
Спасибо!
Получилось так:
"ВЫБРАТЬ
              |    ПартииТоваровНаСкладах.Номенклатура,
              |    МАКСИМУМ(ПартииТоваровНаСкладах.Стоимость) КАК Стоимость,
              |    ПартииТоваровНаСкладах.Период
              |ИЗ
              |    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
              |ГДЕ
              |    ПартииТоваровНаСкладах.Период <= &Дата
              |
              |СГРУППИРОВАТЬ ПО
              |    ПартииТоваровНаСкладах.Номенклатура,
              |    ПартииТоваровНаСкладах.Период";

Что теперь нужно дописать, чтобы в эту выборку попали поля Характеристика номенклатуры и количество? К сожалению, они нужны...
4 m-serg74
 
16.08.12
01:45
а на фиг ты убрал из выбрать характеристику если она используется)))
5 Птица
 
16.08.12
02:58
(3) к получившейся таблице присоединять левым соединением нужные поля из исходной. связь по номенклатуре и количеству, и, возможно, периоду
6 Web00001
 
16.08.12
03:09
(5)прикольно, подскажи как делать связь по нескольким полям? Не разу не видел такого фокуса.
7 m-serg74
 
16.08.12
05:54
(5)(6) стебаетесь? )))
8 SanGvin
 
16.08.12
06:11
щас тут насоветуют....

ВЫБРАТЬ
   ПартииТоваровНаСкладах.Номенклатура,
   МАКСИМУМ(ПартииТоваровНаСкладах.Стоимость) КАК Стоимость,
   ПартииТоваровНаСкладах.Период,
   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   МАКСИМУМ(ПартииТоваровНаСкладах.Количество) КАК Количество
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ГДЕ
   ПартииТоваровНаСкладах.Период <= &Дата

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладах.Номенклатура,
   ПартииТоваровНаСкладах.Период,
   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
9 m-serg74
 
16.08.12
06:16
ну да ты тоже не плохо посоветовал
10 SanGvin
 
16.08.12
06:17
я просто изменил творение автора в нужную сторону)
11 m-serg74
 
16.08.12
06:18
в ненужную, и (0) в чем логика замуты ибо в Париях стоимость это не Цена, а Сумма и без учета количества в ней понта никакого, вопрос почему МАКСИМУМ(Стоимость)???
12 m-serg74
 
16.08.12
06:19
Париях = Партиях
13 SanGvin
 
16.08.12
06:23
мдя, отставить хреню спорол)
14 SanGvin
 
16.08.12
06:35
хм. ну если автору надо просто самую дорогую партию, то надо выбрать 1 запись из упорядоченной по стоимости выборки, без всяких агрегатных функций.
15 m-serg74
 
16.08.12
06:41
>просто самую дорогую партию,
да Стоимость = Цена * Количество!!! И как зная только Стоимость определить дорогая она или дешевая?
а) 10р(Цена) * 100шт(Количество) = 1000р(Стоимость )
б) 5р(Цена) * 40шт(Количество) = 200р(Стоимость )
(14) вопрос какая Партия дороже?
16 discant
 
16.08.12
06:41
(11) В общем, в конечном итоге надо получить для номенклатуры, которая повторяется максимальную цену и работать с ней... А цена получается как Стоимость/Количество.
Вот...
17 SanGvin
 
16.08.12
06:41
(15) см (16)
Количество-то известно у нас
18 SanGvin
 
16.08.12
06:42
ВЫБРАТЬ ПЕРВЫЕ 1
   ПартииТоваровНаСкладах.Номенклатура,
   ПартииТоваровНаСкладах.Стоимость,
   ПартииТоваровНаСкладах.Период,
   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ПартииТоваровНаСкладах.Количество,
   ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество КАК Цена
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ГДЕ
   ПартииТоваровНаСкладах.Период <= &Дата

УПОРЯДОЧИТЬ ПО
   Цена УБЫВ
19 m-serg74
 
16.08.12
06:43
(16) наконец то! (17) ты уверен что мне
(18) ты выберешь 1 (единственную) номенклатуру? )))
харе уже глумитьтся
20 SanGvin
 
16.08.12
06:49
(19) точно... туплю. тогда так! :)


ВЫБРАТЬ
   ПартииТоваровНаСкладах.Номенклатура,
   МАКСИМУМ(ПартииТоваровНаСкладах.Стоимость) КАК Стоимость,
   МАКСИМУМ(ПартииТоваровНаСкладах.Период) КАК Период,
   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   МАКСИМУМ(ПартииТоваровНаСкладах.Количество) КАК Количество,
   МАКСИМУМ(ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество) КАК Цена
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ГДЕ
   ПартииТоваровНаСкладах.Период <= &Дата

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
   ПартииТоваровНаСкладах.Номенклатура
21 m-serg74
 
16.08.12
06:53

ВЫБРАТЬ
   ПартииТоваровНаСкладах.Номенклатура КАК Номенклатура,
   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   МАКСИМУМ(ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество) КАК Цена
ПОМЕСТИТЬ Выбранные
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ГДЕ
   ПартииТоваровНаСкладах.Период <= &Период

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладах.Номенклатура,
   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Выбранные.Номенклатура,
   Выбранные.ХарактеристикаНоменклатуры,
   СУММА(ПартииТоваровНаСкладах.Количество) КАК Количество,
   СУММА(ПартииТоваровНаСкладах.Стоимость) КАК Стоимость
ИЗ
   Выбранные КАК Выбранные
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
       ПО Выбранные.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
           И Выбранные.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
           И (Выбранные.Цена = ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество)

СГРУППИРОВАТЬ ПО
   Выбранные.Номенклатура,
   Выбранные.ХарактеристикаНоменклатуры
22 SanGvin
 
16.08.12
06:56
(21) спасибо :)
23 m-serg74
 
16.08.12
06:57
наверно ТС скажет)))
24 SanGvin
 
16.08.12
06:57
а если надо например еще ссылку на партию:
25 m-serg74
 
16.08.12
07:02
тогда из ПартииТоваровНаСкладах Регистратор тянуть и в Группировку его тоже, но тогда для одной Цены может оказаться несколько строк
а главное я тоже что то затупил: (0) а приход/расход - похер? это ж РН
может ПартииТоваровНаСкладахОстатки пользовать?
26 iceman2112
 
16.08.12
07:40
Сначала делаешь таблицу: Период/Номенклатура/МаксЦена. Потом из этого регистра Партий Выбираешь соответсвующие им позиции.
27 iceman2112
 
16.08.12
07:42
+ что ты делаешь совершенно не понятно. Тебе наверно нужны Остатки по партиям, а не все движения?
28 iceman2112
 
16.08.12
07:46
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ПартииТоваровНаСкладахОстатки.Номенклатура,
   МАКСИМУМ(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток) КАК МаксСебестоимость
ПОМЕСТИТЬ ВТ_МаксСебестоимость
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОстатки.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТ_МаксСебестоимость.Номенклатура
ИЗ
   ВТ_МаксСебестоимость КАК ВТ_МаксСебестоимость
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
               &Дата,
               Номенклатура В
                   (ВЫБРАТЬ
                       МаксСебестоимость.Номенклатура
                   ИЗ
                       ВТ_МаксСебестоимость КАК МаксСебестоимость)) КАК ПартииТоваровНаСкладахОстатки
       ПО ВТ_МаксСебестоимость.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура
29 iceman2112
 
16.08.12
07:46
пардон:

ВЫБРАТЬ РАЗЛИЧНЫЕ
   ПартииТоваровНаСкладахОстатки.Номенклатура,
   МАКСИМУМ(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток) КАК МаксСебестоимость
ПОМЕСТИТЬ ВТ_МаксСебестоимость
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОстатки.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТ_МаксСебестоимость.Номенклатура,
   ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры,
   ПартииТоваровНаСкладахОстатки.СерияНоменклатуры,
   ПартииТоваровНаСкладахОстатки.СтатусПартии,
   ПартииТоваровНаСкладахОстатки.Качество,
   ПартииТоваровНаСкладахОстатки.Организация
ИЗ
   ВТ_МаксСебестоимость КАК ВТ_МаксСебестоимость
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
               &Дата,
               Номенклатура В
                   (ВЫБРАТЬ
                       МаксСебестоимость.Номенклатура
                   ИЗ
                       ВТ_МаксСебестоимость КАК МаксСебестоимость)) КАК ПартииТоваровНаСкладахОстатки
       ПО ВТ_МаксСебестоимость.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура
30 m-serg74
 
16.08.12
08:47
(26) это в чью сторону? ))) и читай (11) внимательно!!! а именно "в Париях стоимость это не Цена, а Сумма"
31 discant
 
16.08.12
10:15
Спасибо всем за помощь! Глупый вопрос... Когда вставляю текст из (29) ругается...
Конструкция выглядит так:

Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
   ПартииТоваровНаСкладахОстатки.Номенклатура,
   МАКСИМУМ(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток) КАК МаксСебестоимость
ПОМЕСТИТЬ ВТ_МаксСебестоимость
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОстатки.Номенклатура
;

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

ВЫБРАТЬ
   ВТ_МаксСебестоимость.Номенклатура,
   ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры,
   ПартииТоваровНаСкладахОстатки.СерияНоменклатуры,
   ПартииТоваровНаСкладахОстатки.СтатусПартии,
   ПартииТоваровНаСкладахОстатки.Качество,
   ПартииТоваровНаСкладахОстатки.Организация
ИЗ
   ВТ_МаксСебестоимость КАК ВТ_МаксСебестоимость
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
               &Дата,
               Номенклатура В
                   (ВЫБРАТЬ
                       МаксСебестоимость.Номенклатура
                   ИЗ
                       ВТ_МаксСебестоимость КАК МаксСебестоимость)) КАК ПартииТоваровНаСкладахОстатки
       ПО ВТ_МаксСебестоимость.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура";

А вот ошибки:
{ВнешняяОбработка.ЗаполнениеЦенНоменклатуры.МодульОбъекта(7,34)}: Пропущен символ '"' (двойная кавычка)
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ<<?>> (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.ЗаполнениеЦенНоменклатуры.МодульОбъекта(7,34)}: Ожидается символ ';'
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ<<?>> (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.ЗаполнениеЦенНоменклатуры.МодульОбъекта(8,47)}: Неопознанный оператор
   ПартииТоваровНаСкладахОстатки.Номенклатура<<?>>, (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.ЗаполнениеЦенНоменклатуры.МодульОбъекта(21,5)}: Неопознанный оператор
   <<?>>ВТ_МаксСебестоимость.Номенклатура, (Проверка: Толстый клиент (обычное приложение))
32 discant
 
16.08.12
10:28
Когда пытаюсь вызвать конструктор пишет: Неоднозначное поле
МаксСебестоимость.Номенклатура
33 discant
 
16.08.12
11:25
Так и не разобрался...
34 discant
 
16.08.12
12:37
K.lb! Yt vjkxbnt gkbp
35 Anastasiy
 
16.08.12
14:21
(20) рабочий запрос
36 iceman2112
 
16.08.12
15:07
(31) если ошибка в запросе и не можешь понять где, создай сам он же маленький, только учи в запросе (29) комментарий (30)
37 m-serg74
 
16.08.12
15:10
он уже завел новую тему и ее уже бросил)))
38 iceman2112
 
16.08.12
15:11
и че он там разобрался?
39 m-serg74
 
16.08.12
15:16
нет конечно
40 m-serg74
 
16.08.12
15:16
он наверное не может определится что ему ваще надо)
41 discant
 
17.08.12
09:29
Спасибо... Там просто неоднозначное поле было... Поле Имело тоже имя, что и таблица...