Имя: Пароль:
1C
1С v8
Получить разницу между ценой в документе реализации и оптовой ценой из справочни
0 Koliaff
 
17.09.13
14:08
Доброго времени суток.
УТ 10.3
Стоит задача - получить разницу между суммой в документе реализации и оптовой ценой из справочника. Вот написал запрос :


"ВЫБРАТЬ
               |    ТабДОК.Контрагент КАК Контрагент,
               |    ТабДОК.СсылкаДок КАК Реализация,
               |    ТабДОК.Номенклатура КАК Номенклатура,
               |    ТабДОК.СуммаРеализации КАК СуммаРеализации,
               |    ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) * ТабДОК.Количество КАК СуммаВОптовыхЦенах,
               |    ТабДОК.СуммаРеализации - ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) * ТабДОК.Количество КАК Разница,
               |    ТабДОК.ПериодДок,
               |    ТабДОК.Дата
               |ИЗ
               |    (ВЫБРАТЬ
               |        РеализацияТоваровУслугТовары.Ссылка КАК СсылкаДок,
               |        МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодДок,
               |        РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
               |        РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
               |        РеализацияТоваровУслугТовары.Сумма КАК СуммаРеализации,
               |        РеализацияТоваровУслугТовары.Количество КАК Количество,
               |        РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент
               |    ИЗ
               |        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
               |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
               |            ПО (НАЧАЛОПЕРИОДА(РеализацияТоваровУслугТовары.Ссылка.Дата, ДЕНЬ) >= ЦеныНоменклатуры.Период)
               |                И РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
               |    ГДЕ
               |        РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
               |    
               |    СГРУППИРОВАТЬ ПО
               |        РеализацияТоваровУслугТовары.Ссылка,
               |        РеализацияТоваровУслугТовары.Номенклатура,
               |        РеализацияТоваровУслугТовары.Ссылка.Дата,
               |        РеализацияТоваровУслугТовары.Сумма,
               |        РеализацияТоваровУслугТовары.Количество,
               |        РеализацияТоваровУслугТовары.Ссылка.Контрагент) КАК ТабДОК
               |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
               |        ПО ТабДОК.ПериодДок = ЦеныНоменклатуры.Период
               |            И ТабДОК.Номенклатура = ЦеныНоменклатуры.Номенклатура
               |ГДЕ
               |    ЦеныНоменклатуры.ТипЦен = &ОптоваяЦена
               |ИТОГИ
               |    СУММА(СуммаРеализации),
               |    СУММА(СуммаВОптовыхЦенах),
               |    СУММА(Разница)
               |ПО
               |    ОБЩИЕ,
               |    Контрагент,
               |    Реализация";

====================

После выполнения запроса, смотрю результат.
Некоторые документы совпадают по сумме и номенклатуре. А в некоторых номенклатуры не хватает. Почему ?
1 GenAcid
 
17.09.13
14:13
Потому что ВНУТРЕННЕЕ СОЕДИНЕНИЕ и в РегистрСведений.ЦеныНоменклатуры нет записей по этой номенклатуре.

А еще жди лишних строк :)
2 GenAcid
 
17.09.13
14:16
(1) Хотя не, лишних строк не должно быть. Группировку не увидел.
3 Koliaff
 
17.09.13
14:16
Что делать ? Как запрос этот дурацкий написать ? Уже голову всю "изломал" )
4 Koliaff
 
17.09.13
14:17
(GenAcid) В регистре сведений по этой номенклатуре есть записи, проверял ...
5 GenAcid
 
17.09.13
14:18
(3) Отбор по типу цен бы во вложенный запрос сунуть. И Внутреннее соединение на левое поменять.
6 GenAcid
 
17.09.13
14:25
У тебя вложенный запрос отбирает максимальную дату для любого типа цен, а снаружи ты тип цен ограничиваешь, и вот когда они не совпадают - получаешь нестык по внутреннему соединению.
7 Koliaff
 
17.09.13
14:26
(GenAcid) Доходчиво объяснил ! Все бы так объясняли. Попробую как ты советуешь написать....
8 Koliaff
 
17.09.13
14:29
"ВЫБРАТЬ
              |    ТабДОК.Контрагент КАК Контрагент,
              |    ТабДОК.СсылкаДок КАК Реализация,
              |    ТабДОК.Номенклатура КАК Номенклатура,
              |    ТабДОК.СуммаРеализации КАК СуммаРеализации,
              |    ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) * ТабДОК.Количество КАК СуммаВОптовыхЦенах,
              |    ТабДОК.СуммаРеализации - ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) * ТабДОК.Количество КАК Разница,
              |    ТабДОК.ПериодДок,
              |    ТабДОК.Дата
              |ИЗ
              |    (ВЫБРАТЬ
              |        РеализацияТоваровУслугТовары.Ссылка КАК СсылкаДок,
              |        МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодДок,
              |        РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
              |        РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
              |        РеализацияТоваровУслугТовары.Сумма КАК СуммаРеализации,
              |        РеализацияТоваровУслугТовары.Количество КАК Количество,
              |        РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент
              |    ИЗ
              |        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
              |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
              |            ПО (НАЧАЛОПЕРИОДА(РеализацияТоваровУслугТовары.Ссылка.Дата, ДЕНЬ) >= ЦеныНоменклатуры.Период)
              |                И РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
              |    ГДЕ
              |        РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
              |        И ЦеныНоменклатуры.ТипЦен = &ОптоваяЦена
              |    
              |    СГРУППИРОВАТЬ ПО
              |        РеализацияТоваровУслугТовары.Ссылка,
              |        РеализацияТоваровУслугТовары.Номенклатура,
              |        РеализацияТоваровУслугТовары.Ссылка.Дата,
              |        РеализацияТоваровУслугТовары.Сумма,
              |        РеализацияТоваровУслугТовары.Количество,
              |        РеализацияТоваровУслугТовары.Ссылка.Контрагент) КАК ТабДОК
              |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
              |        ПО ТабДОК.ПериодДок = ЦеныНоменклатуры.Период
              |            И ТабДОК.Номенклатура = ЦеныНоменклатуры.Номенклатура
              |ГДЕ
              |    ЦеныНоменклатуры.ТипЦен = &ОптоваяЦена
              |ИТОГИ
              |    СУММА(СуммаРеализации),
              |    СУММА(СуммаВОптовыхЦенах),
              |    СУММА(Разница)
              |ПО
              |    ОБЩИЕ,
              |    Контрагент,
              |    Реализация";



Вот так переписал. Вроде похоже на правду. Сейчас дам на проверку ). Спасибо за помощь  GenAcid. Пока вопрос не закрываю...
Ошибка? Это не ошибка, это системная функция.