8.х Вложеный запрос

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем nosovk, 23 ноя 2009.

  1. TopicStarter Overlay
    nosovk
    Offline

    nosovk

    Регистрация:
    23 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Я пытаюсь получить обороты по продажам в разрезе номенклатуры (Номенклатура, КоличествоОборот) + дополнительная колонка - цена, но не из регистра, а как
    Код:
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних
    
    передав параметром нужный мне тип цен.

    То есть мне нужен запрос вида
    Код:
    SELECT a.Номенклатура, а.КоличествоОборот, б.Цена, 
    а.КоличествоОборот * б.Цена AS ОбНаЦен 
    FROM РегистрНакопления.Продажи.Обороты AS a Left Join РегистрСведений.ЦеныНоменклатуры.СрезПоследних(а.Номенклатура, &ТипЦен) as б
    on a.номенклатура=b.номенклатура 
    
    но как я понял вложенные запросы срез цен для такого не предназначенный, нужно использовать вложенный запрос :unsure:
  2. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Собсно а где вопрос :unsure:
  3. TopicStarter Overlay
    nosovk
    Offline

    nosovk

    Регистрация:
    23 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Вопрос в том как правильно написать третью строчку
  4. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Вполне конкретный запрос без использования вложенных запросов

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

    Вложения:

    • 1.JPG
      1.JPG
      Размер файла:
      50,8 КБ
      Просмотров:
      212
  5. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    только этот заьпрос для проданного товара... если вы хотите что то типа пьрайса.. то это не пойдет
    Вам надо перебор номенклатуры с левым соединением запроса по СрезПоследних на дату
  6. TopicStarter Overlay
    nosovk
    Offline

    nosovk

    Регистрация:
    23 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое. Это оно самое :unsure:
    Необходимо именно по проданному товару.
    Но загвоздка в том что так показываются только базовые цены, а если тип цен динамически рассчитываемый то на выходе имеем пустые строки.
  7. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Если он динамический то и расчитайте его в запросе (если он у вас нигде не храниться конечно)
  8. TopicStarter Overlay
    nosovk
    Offline

    nosovk

    Регистрация:
    23 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Он хранится как тип цен в свойствах которого указанно "Динамический"
    Посмотреть вложение 3006

    Вложения:

  9. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    регистр цен срез последних по типу цен
  10. TopicStarter Overlay
    nosovk
    Offline

    nosovk

    Регистрация:
    23 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Код:
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,&ТипЦен)
    
    
    Как раз такой код и возвращает пустые строки для динамически рассчитываемых цен.
  11. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена
    ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТИпЦен) КАК ЦеныНоменклатурыСрезПоследних
  12. TopicStarter Overlay
    nosovk
    Offline

    nosovk

    Регистрация:
    23 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Да, да - именно этот вопрос ничего не выдаст если Вид ТипЦен не базовый, а динамический.
    А почему не понятно. Что ли срез wety не умеет работать с не базовым типом цен?

    Вложения:

    • PriceTypes.PNG
      PriceTypes.PNG
      Размер файла:
      21,2 КБ
      Просмотров:
      76
  13. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    закрути без типа цен и посмотри что у тебя вообще есть в регистре
  14. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Причины:
    Дело в том что Вы не разу не устанавливали процент скидки\наценки документом установка цен номенклатуры, который записывает новые данные в регистр сведений по процентным наценкам\скидкам в вышеуказанный регистр сведений, всвязи с чем Вы не можете их прочитать, их нету, вот и всё.

    Что могу посоветовать:
    1. Ищем нужные данные в регистре сведений
    2. Если данных нету, тогда их вычисляем

    Что нужно для реализации поставленной задачи:
    1. Осознать что цены на товары, находящиеся на разных складах могут отличаться.
    2. Осознать что цены, взависимости от характеристик товара так же могут быть различны.

    Как получить цены на складах:
    Данный запрос получил из модуля управление запасами (выкладываю в файл, т.к. запрос очень большой)
    Посмотреть вложение 3018
    Данный запрос вернет значение установленных в список цен, цены любых типов, однако запрос адаптирован для 1 номенклатурной позиции. Для решения Вашей задачи Вам нужно адаптировать данный запрос под свои нужды.

    Удачи в поиске решений!

    Вложения:

  15. TopicStarter Overlay
    nosovk
    Offline

    nosovk

    Регистрация:
    23 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Спасибо.
    Изучение регистра показало что я действительно не указал ни разу установки цен решив что раз это рассчитываемый тип, то можно и не устанавливать. Это было ошибкой. Правда при установке цен на динамические типы цен выяснилось что цена на них не записывается - только процент наценки. Но учитывая что в заказах до этого выбивалась правильная цена - это вообще не проблема )
    Буду ее вычислять в зависимости от указанного в регистре Способа Расчета.

    Про склады -как-то раньше не задумывался - но в данном случае это и не важно, потому что я разбираю уже отпущенные со склада товары - учетная стоимость ко мне не имеет отношения.
    А вот скидки и характеристики еще предстоит учесть.
    Буду разбирать запрос.
    Спасибо.

    Вложения:

Поделиться этой страницей