Имя: Пароль:
1C
1С v8
как отобрать цены если документ ведется не всегда в разрезе характеристик
0 Obama13
 
01.05.15
14:50
Уважаемые форумчане,Надоумьте дурака.В документе установка цен не всегда ведется учет в разрезе характеристик и потом когда делаю левое к запросу;

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК ШтрихКод  
ПО Номенклатура.Ссылка = ШтрихКод.Владелец

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
   ПО Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
   И ШтрихКод.ХарактеристикаНоменклатуры=ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
  И ШтрихКод.ХарактеристикаНоменклатуры=ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры

то получается такая картина:
2000000000398    330,00    2,000    
2000000000404        1,000    
2000000000411        2,000    
2000000000428        2,000    
2000000000435        2,000    
2000000009926        1,000    
2000000009933        1,000    

а если делаю так(не беру разрез характеристик по ценам):
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК ШтрихКод  
ПО Номенклатура.Ссылка = ШтрихКод.Владелец

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
   ПО Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
   И ШтрихКод.ХарактеристикаНоменклатуры=ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
///// И ШтрихКод.ХарактеристикаНоменклатуры=ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры

то получается такая петрушка:
2000000000398    220,00    2,000    
2000000000398    330,00    2,000    
2000000000404    220,00    1,000    
2000000000404    330,00  1,000    
2000000000411    220,00    2,000
2000000000411    330,00  2,000
2000000000428    220,00    2,000    
2000000000428    330,00    2,000    
2000000000435    220,00    2,000    
2000000000435    330,00    2,000    
2000000009926    220,00    1,000    
2000000009926    330,00    1,000    
2000000009933    220,00    1,000    
2000000009933    330,00    1,000    

Как сделать чтобы было как первый вариант но с ценами не зависимо от того почтавили харктеристику или нет.Спасибо
1 RomanYS
 
01.05.15
14:54
два левых соединения
одно по характеристика=характеристика
второе по характеристика=&пустая
ну и
ЕстьNull(ЦеныСХарактеристиками.Цена, ЦеныБезХарактеристик.Цена) Как Цена
2 Obama13
 
01.05.15
14:56
(1)так что ли?
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
  И ШтрихКод.ХарактеристикаНоменклатуры=ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
3 RomanYS
 
01.05.15
15:01
(2)
"КАК ЦеныНоменклатурыСрезПоследних" - синонимы должны быть разными

для второго соединения
ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = Значение(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)

работать это будет, только если есть цена в регистре с пустой характеристикой
4 Obama13
 
01.05.15
15:03
(3)огромное спасибо сейчас проверю
5 Obama13
 
01.05.15
15:32
(3)не работает
6 Obama13
 
01.05.15
15:36
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) <> 0
  ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
КОНЕЦ КАК Цена,
.........
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
  //И ШтрихКод.ХарактеристикаНоменклатуры=ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследнихПустаяХарактеристика
ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследнихПустаяХарактеристика.Номенклатура
  И ЦеныНоменклатурыСрезПоследнихПустаяХарактеристика.ХарактеристикаНоменклатуры =Значение(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
7 Obama13
 
01.05.15
15:44
изменил на

ВЫБОР
КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) <> 0
  ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
  
КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихПустаяХарактеристика.Цена, 0) <> 0
  ТОГДА ЦеныНоменклатурыСрезПоследнихПустаяХарактеристика.Цена
КОНЕЦ КАК Цена,

получил

10119    2000000000398    330,00    2,000    
10119    2000000000404    220,00    1,000    
10119    2000000000411    220,00    2,000    
10119    2000000000428    220,00    2,000    
10119    2000000000435    220,00    2,000    
10723    2000000009926    30,00    1,000    
10723    2000000009933    30,00    1,000    

  RomanYS спасибо. желаю удачи и понимания.