Имя: Пароль:
1C
1С v8
Как доработать запрос
0 VadimBahteev
 
01.02.13
11:41
Есть вот такой запрос, как мне его доработать что бы КоличествоОстаток, проставлялось только по одной ЛЮБОЙ! строке номенклатуры, а не по каждой как сейчас?

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

СГРУППИРОВАТЬ ПО
   схПродажиОбороты.Номенклатура,
   схПродажиОбороты.Контрагент,
   схПродажиОбороты.КоличествоОборот,
   ХозрасчетныйОстатки.КоличествоОстаток

УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
1 VadimBahteev
 
01.02.13
13:04
Есть варианты?
2 salvator
 
01.02.13
13:05
Че значит любой?
3 VadimBahteev
 
01.02.13
13:09
Ну вот выполни в консоле запросов, там получится что каждой строчке стоит остаток, мне надо что бы тольок в одной, любой по различным номенклатурам
4 palpetrovich
 
01.02.13
13:10
а это вообще работает?
СГРУППИРОВАТЬ ПО
   схПродажиОбороты.КоличествоОборот
5 salvator
 
01.02.13
13:12
(3) Я знаю. Я не понимаю слово "любой". Понимаю, "первой,"второй" и т.д.
6 VadimBahteev
 
01.02.13
13:12
Да
7 VadimBahteev
 
01.02.13
13:13
ну хорошо как сделать  в первой строке, по этой номенклатуре. в остальных пусто, в след номенклатуре опять в первой строке продажи
8 Галахад
 
гуру
01.02.13
13:13
Как-то так, наверное:

ВЫБРАТЬ
   схПродажиОбороты.Номенклатура КАК Номенклатура,
   схПродажиОбороты.Контрагент,
   СУММА(схПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
   0
ИЗ
   РегистрНакопления.схПродажи.Обороты(&Дата1, &Дата2, , ) КАК схПродажиОбороты

объединить все

ВЫБРАТЬ
   ХозрасчетныйОстатки.Номенклатура КАК Номенклатура,
   ХозрасчетныйОстатки.Контрагент,
   0,
   СУММА(ХозрасчетныйОстатки.КоличествоОборот) КАК КоличествоОборот
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата2, , , ) КАК ХозрасчетныйОстатки
9 VadimBahteev
 
01.02.13
13:20
Совершенно два разных регистра
10 VadimBahteev
 
01.02.13
13:20
там нет одинаковых полей
11 Галахад
 
гуру
01.02.13
13:22
А по каким ты соединяешь?
12 VadimBahteev
 
01.02.13
13:24
(11)  я про объединение
13 Classic
 
01.02.13
13:28
(0)
Что это?
14 acsent
 
01.02.13
13:29
(0) Вот это ПИ..ЗДЕЦ
15 Classic
 
01.02.13
13:32
(10)
И чё?
ВЫБРАТЬ
  ПервыйРегистр.ПолеСоединия,
  ПервыйРегистр.НужноеПоле1,
  ПервыйРегистр.НужноеПоле2,
  .........
  NULL,
  NULL
ИЗ ПервыйРегистр

ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
  ВторойРегистр.ПолеСоединения,
  NULL,
  NULL,
  ..........
  ВторойРегистр.Поле1,
  ВторойРегистр.Поле2
16 sapphire
 
01.02.13
13:33
(14) Впечатлил тебя ТС, да?
17 sapphire
 
01.02.13
13:34
ВЫБРАТЬ
   схПродажиОбороты.Номенклатура КАК Номенклатура,
   схПродажиОбороты.Контрагент,
   СУММА(схПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
   СУММА(схПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
   SUM(ISNULL(ХозрасчетныйОстатки.КоличествоОстаток,0)) КоличествоОстаток
ИЗ
   РегистрНакопления.схПродажи.Обороты(&Дата1, &Дата2, , ) КАК схПродажиОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата2, , , ) КАК ХозрасчетныйОстатки
       ПО схПродажиОбороты.Номенклатура.Наименование = ХозрасчетныйОстатки.Субконто1.Наименование
           И схПродажиОбороты.ДокументПродажи.Склад.Наименование = ХозрасчетныйОстатки.Субконто3.Наименование
ГДЕ
   схПродажиОбороты.Организация = &Организация
   И схПродажиОбороты.ДокументПродажи.Склад = &Склад
   И ХозрасчетныйОстатки.Субконто3 = &Склад

СГРУППИРОВАТЬ ПО
   схПродажиОбороты.Номенклатура,
   схПродажиОбороты.Контрагент,
//    схПродажиОбороты.КоличествоОборот,
//    ХозрасчетныйОстатки.КоличествоОстаток

УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
18 YuPetr
 
01.02.13
13:38
(0) Убери из группировок поля: схПродажиОбороты.КоличествоОборот,
ХозрасчетныйОстатки.КоличествоОстаток

а по полю ХозрасчетныйОстатки.КоличествоОстаток сделай сумму
19 sapphire
 
01.02.13
13:59
(18) , а (17) мало?
20 VadimBahteev
 
01.02.13
14:04
Всяко перепробовал, не работает, наверно утопия изначально
21 sapphire
 
01.02.13
14:11
(20) А ну, конечно, конечно :)

ВЫБРАТЬ
   схПродажиОбороты.Номенклатура КАК Номенклатура,
   схПродажиОбороты.Контрагент,
   СУММА(схПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
   СУММА(схПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
   SUM(ISNULL(ХозрасчетныйОстатки.КоличествоОстаток,0)) КоличествоОстаток
ИЗ
   РегистрНакопления.схПродажи.Обороты(&Дата1, &Дата2, , ) КАК схПродажиОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата2, , , ) КАК ХозрасчетныйОстатки
       ПО схПродажиОбороты.Номенклатура = ХозрасчетныйОстатки.Субконто1
           И схПродажиОбороты.ДокументПродажи.Склад = ХозрасчетныйОстатки.Субконто3
ГДЕ
   схПродажиОбороты.Организация = &Организация
   И схПродажиОбороты.ДокументПродажи.Склад = &Склад
//    И ХозрасчетныйОстатки.Субконто3 = &Склад

СГРУППИРОВАТЬ ПО
   схПродажиОбороты.Номенклатура,
   схПродажиОбороты.Контрагент,
//    схПродажиОбороты.КоличествоОборот,

//    ХозрасчетныйОстатки.КоличествоОстаток


УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
22 sapphire
 
01.02.13
14:16
И исчо можно часть отборов в параметры виртуально таблицы засунуть :)))
23 VadimBahteev
 
01.02.13
14:30
(22) Спасибо за старание, не реально не то что надо:)
24 Baron Samedi
 
01.02.13
14:34
(20) соединить с подзапросом
левеое соединение ( выбрать Номенклатура, МАКСИМУМ(Контрагент) ) ИЗ <оттуда же> ) как ЛюбойКонтрагент
по ЛюбойКонтрагент.Номенклатура = схПродажиОбороты.Номенклатура
и ЛюбойКонтрагент.Контрагент = схПродажиОбороты.Контрагент

Остаток выводить так:
ВЫБОР КОГДА ЛюбойКонтрагент.Контрагент НЕ ЕСТЬ NULL
ТОГДА ХозрасчетныйОстатки.КоличествоОстаток
КОНЕЦ
25 VadimBahteev
 
01.02.13
14:44
(24) не понял что то
26 Baron Samedi
 
01.02.13
19:32
(25)
ВЫБРАТЬ
   схПродажиОбороты.Номенклатура КАК Номенклатура,
   схПродажиОбороты.ДоговорКонтрагента.Владелец,//схПродажиОбороты.Контрагент,
   СУММА(схПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
   СУММА(схПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
   ХозрасчетныйОстатки.КоличествоОстаток,
   ВЫБОР КОГДА КонтрагентПодходит.ТакиДа ТОГДА ХозрасчетныйОстатки.КоличествоОстаток КОНЕЦ как ИногдаОстаток
ИЗ
   РегистрНакопления.Продажи.Обороты(&Дата1, &Дата2, ,
       ДоговорКонтрагента.Организация = &Организация //схПродажиОбороты.Организация = &Организация
       И ДокументПродажи.Склад = &Склад
   ) КАК схПродажиОбороты
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата2, , &МассивВидыСубконтоНоменклатураИСклады, Субконто2 = &Склад) КАК ХозрасчетныйОстатки
       ПО схПродажиОбороты.Номенклатура = ХозрасчетныйОстатки.Субконто1
       И схПродажиОбороты.ДокументПродажи.Склад = ХозрасчетныйОстатки.Субконто2
   ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Истина как ТакиДа) как КонтрагентПодходит
       ПО    (
               схПродажиОбороты.Номенклатура,
               схПродажиОбороты.ДоговорКонтрагента.Владелец //схПродажиОбороты.Контрагент
           ) В (
               ВЫБРАТЬ Номенклатура, Максимум(ДоговорКонтрагента.Владелец) //Максимум(Конрагент)
               ИЗ РегистрНакопления.Продажи.Обороты(&Дата1, &Дата2, ,
                       ДоговорКонтрагента.Организация = &Организация //схПродажиОбороты.Организация = &Организация
                       И ДокументПродажи.Склад = &Склад
                   )
               СГРУППИРОВАТЬ ПО
                   Номенклатура
       )
       
СГРУППИРОВАТЬ ПО
   схПродажиОбороты.Номенклатура,
   схПродажиОбороты.ДоговорКонтрагента.Владелец,//схПродажиОбороты.Контрагент,
   КонтрагентПодходит.ТакиДа,
   ХозрасчетныйОстатки.КоличествоОстаток

УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
27 Baron Samedi
 
01.02.13
19:36
(26)
- Чтобы проверить на своей базе заменил регистр схПродажи на Продажи. Не сочтите за труд поменять обратно

- пользуйте фильтры в параметрах виртуальных таблиц, и будет счастье

- пользуйте массив видов субконто в параметрах вирт.таблиц регистров бухгалтерии. С номерами субконто ясности и скорости будет больше в 10 раз.

P.S. Надежнее и прямее делать через ОБЪЕДИНИТЬ ВСЕ, но тогда в строке с бух. остатком не будет оборота по продажам. Как и контрагента, что правильно. Не делится остаток на складе по покупателям.