Имя: Пароль:
1C
1С v8
v8: Вывод повторяющихся позиций в запросе
0 manti
 
21.02.13
16:04
Отчет выводит затроенные позиции. Какую связь нужно изменить или добавить для полноценого вывода?
Конфигрурация УТ
ВЫБРАТЬ
  ОстаткиТоваров.Номенклатура КАК Номенклатура,
  ОстаткиТоваров.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
  ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
  ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
  ОстаткиТоваров.Качество КАК Качество,
  СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
  ВЫБОР
     КОГДА СУММА(ОстаткиПартий.КоличествоОстаток) = 0
           ИЛИ СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL
        ТОГДА 0
     ИНАЧЕ СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток)
  КОНЕЦ КАК Сумма,
  ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
  РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
        &МоментДокумента,
        ТипЦен = &ТипЦен
           И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
           &МоментДокумента,
           Склад = &Склад
              И Номенклатура = &Номенклатура) КАК ОстаткиТоваров
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
              &МоментДокумента,
              Склад = &ПартионныйСклад
                 И Номенклатура = &Номенклатура) КАК ОстаткиПартий
        ПО ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
           И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
           И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
     ПО (ОстаткиТоваров.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)

СГРУППИРОВАТЬ ПО
  ОстаткиТоваров.Номенклатура,
  ОстаткиТоваров.ХарактеристикаНоменклатуры,
  ОстаткиТоваров.Качество,
  ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков,
  ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
  ЦеныНоменклатурыСрезПоследних.Цена
1 viktor_vv
 
21.02.13
16:10
ПартииТоваров сгруппировать перед соединением, да и остатки на складах тоже.
Ну и наверное основной таблицей сделать ОстаткиНаСкладах.
2 Kashemir
 
21.02.13
16:10
У тебя в таблице остатков измерения только склад, номеклатура, характеристика и качество ? В ценах только тип цен и номенклатура ?
3 GLazNik
 
21.02.13
16:12
(1) ВТ выдают уже сгруппированный результат
(0) затроение строк после "СГРУППИРОВАТЬ ПО". Если да, то данные таки разные.
4 Kashemir
 
21.02.13
16:14
1. Ты не учитываешь характеристику номенклатуры на регистр цен.
2. Ты не учитываешь серию номенклатуры на регистре остатков товаров.
3. Ты не учитываешь развороты по серри, документу оприходования, статусу партии, заказачу на остатках партии


Отсюда, по любому из вышеперечисленных полей у тебя может быть задубливание.
5 GANR
 
21.02.13
16:15
(0) потому что 3 записи, соответствующих условию соединения
6 viktor_vv
 
21.02.13
16:15
(3) Думал об этом, а в соединении по каким полям будет группировать? По тем , которые в ПО есть ?
7 GANR
 
21.02.13
16:16
8 Kashemir
 
21.02.13
16:18
+(4) Проблема скорее всего в пункте 1. Ибо как замечено в (3) виртуальные таблицы выдают свернутый результат по неиспользуемым измерениям.
9 Kashemir
 
21.02.13
16:19
+(8) В отличии от вт регистров сведений.
10 Kashemir
 
21.02.13
16:21
Кстати присутствие соединений по номенклатуре в твоем запросе бессмысленно - ибо на все таблицы накладывается отбор на значение.
11 manti
 
21.02.13
16:32
(1) тоесть во временную таблицу поместить часть запроса, что выводит партии и в др. временную что выводит остатки? Тоесть проблема в том, что стоит сгруппировать?
12 hhhh
 
21.02.13
16:36
(11) скорее всего 3 цены у вас по этой номенклатуре в регистре ЦеныНоменклатуры. Поэтому 3 строчки выводится.
13 Emilio
 
21.02.13
16:38
+(4)
14 manti
 
21.02.13
16:54
(4)так стал выводить первой пустую строку с ценой из рег свед Цены Номенклатуры.
ВЫБРАТЬ
   ОстаткиТоваров.Номенклатура КАК Номенклатура,
   ОстаткиТоваров.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
   ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
   ОстаткиТоваров.Качество КАК Качество,
   СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
   ВЫБОР
       КОГДА СУММА(ОстаткиПартий.КоличествоОстаток) = 0
               ИЛИ СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL
           ТОГДА 0
       ИНАЧЕ СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток)
   КОНЕЦ КАК Сумма,
   ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
           &МоментДокумента,
           ТипЦен = &ТипЦен
               И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
               &МоментДокумента,
               Склад = &Склад
                   И Номенклатура = &Номенклатура) КАК ОстаткиТоваров
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
                   &МоментДокумента,
                   Склад = &ПартионныйСклад
                       И Номенклатура = &Номенклатура) КАК ОстаткиПартий
           ПО ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
               И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
               И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
       ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ОстаткиТоваров.Номенклатура
           И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ОстаткиТоваров.ХарактеристикаНоменклатуры

СГРУППИРОВАТЬ ПО
   ОстаткиТоваров.ХарактеристикаНоменклатуры,
   ОстаткиТоваров.Качество,
   ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков,
   ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
   ЦеныНоменклатурыСрезПоследних.Цена,
   ОстаткиТоваров.Номенклатура
15 viktor_vv
 
21.02.13
17:00
(11) Да не, (1) было по не совсем правильной интерпретации работы ВТ.
16 viktor_vv
 
21.02.13
17:04
Добавь еще в Выбрать и Сгруппировать

ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры

Что в этом поле выведет ?
17 manti
 
21.02.13
17:12
(16) переделал связь так:
ИЗ
   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&МоментДокумента, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментДокумента, Склад = &Склад) КАК ОстаткиТоваров
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента, Склад = &ПартионныйСклад) КАК ОстаткиПартий
           ПО ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
               И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
               И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
       ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ОстаткиТоваров.Номенклатура
           И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ОстаткиТоваров.ХарактеристикаНоменклатуры

вроде бы стал нормально выводить. Этот запрос - типовой из документа Инвентаризация товаров
Закон Брукера: Даже маленькая практика стоит большой теории.