Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 ноя 2021, 21:36

Проблемы с запросом

Автор SSC, 01 июн 2021, 16:52

0 Пользователей и 1 гость просматривают эту тему.

SSC

Добрый день

Помогите. пожалуйста, решить проблему. Она не сложная, но я завис. Есть запрос:

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

Здесь все параметры передаются правильно. Первый запрос по отбору количества номенклатуры по регистру "Остатки номенклатуры" отрабатывает правильно. Проблема возникает при соединение его с регистром "Цены номенклатуры".

Что нужно: допустим в регистре "Остатки номенклатуры" за период есть всего 2 записи: товар 1 пришел в количестве 3 штук и товар 2 пришел в количестве 5 штук. Мне нужно чтобы каждый товар перемножился на актуальную цену из регистра "Цены номенклатуры". Т.е. 3 товара один перемножился, например, на 15 рублей, а 5 товаров2 перемножился на 10 рублей. Но в запросе почему то тянет все цены и премножает и складывает потом.

antoneus

В ценах номенклатуры поди еще несколько видов цен?

SSC

Цитата: antoneus от 01 июн 2021, 17:03
В ценах номенклатуры поди еще несколько видов цен?
Ну да :D

Ивашка

Цитата: SSC от 01 июн 2021, 17:08
Цитата: antoneus от 01 июн 2021, 17:03
В ценах номенклатуры поди еще несколько видов цен?
Ну да :D
тогда в отборы включи еще &ВидЦен наверно так

LexaK

Цитата: SSC от 01 июн 2021, 17:08
Ну да :D
замечательный ответ.
добавьте в запрос условие по виду цены, и расчет суммы, примерно так

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск