Имя: Пароль:
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. Пока вопрос не закрываю...
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан