8.х Сумма вложенного запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Zergos, 16 мар 2010.

  1. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Вопрос к профессионалам:
    почему следующие два запроса выдают совершенно разные цифры?

    Запрос1 =
    Код:
    ВЫБРАТЬ
    СУММА(ПродажиОбороты.СтоимостьОборот) КАК Продажа
    ИЗ
    РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты
    
    
    Запрос2 =
    Код:
    ВЫБРАТЬ
    СУММА(Вложенный.СтоимостьОборот) КАК Продажа
    ИЗ
    (ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот
    ИЗ
    РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ПродажиОбороты
    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура,
    СтоимостьОборот,
    КоличествоОборот
    ) КАК Вложенный
    
    
    :unsure:
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А, вы в первый добавьте то же разделитель учета Регистратор, думаю так же выдаст.
  3. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну и думаю группировать не к чему совсем.
  4. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Спасибо... Но,
    первый запрос считает правильно, второй - нет (считает меньше?)
    Группировка нужна для выборки цен из регистра сведений... Без неё никак.
    Вот пример развития сюжета:
    Код:
    ВЫБРАТЬ
    СУММА(Вложенный.СтоимостьОборот) КАК Продажа,
    СУММА(ТаблицаЦен2.Цена * Вложенный.КоличествоОборот) КАК Стоимость
    ИЗ
    (ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
    МАКСИМУМ(ТаблицаЦен.Период) КАК ДатаЦен
    ИЗ
    РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Регистратор,) КАК ПродажиОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ТаблицаЦен
    ПО ПродажиОбороты.Номенклатура = ТаблицаЦен.Номенклатура
    И (ТаблицаЦен.Период <= ПродажиОбороты.Период)
    И (ТаблицаЦен.ТипЦен = &Базовая)
    
    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.СтоимостьОборот,
    ПродажиОбороты.КоличествоОборот) КАК Вложенный
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ТаблицаЦен2
    ПО Вложенный.Номенклатура = ТаблицаЦен2.Номенклатура
    И Вложенный.ДатаЦен = ТаблицаЦен2.Период
    И (ТаблицаЦен2.ТипЦен = &Базовая)
    
    
  5. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Че то я не пойму вы 2 раза соединяетесь стаблицей цен что во вложеном что после него. Зачем? причем оно и там и там одинаково
  6. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Такой изврат используется для извлечения актуальных цен из регистра (нужны цены на позиции документов продажи). Данную идею почерпнул из "простых примеров разработки на 1С". Если 1С предоставляет более простые способы, с радостью готов об этом узнать :unsure:
  7. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Опишите вообще задачу.

    Просто во вложенном запросе вы соединяете что бы получить Дату цены (насколькко сужу по запросу это последняя дата цены) и она у вас в выборке есть.

    А во втором случае вы берете с получаете цену из этого же регистра на эту же дату. Так?

    Переделать можно след образом

    Получаете остатки можете и без вложеного. Полседнюю цену можете получть через
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних() т.к этот регистр периодический. Он как раз выдаст вам самую последнюю установленную цену.
    И соединяетет эти 2 регистра

    Т.е в остатках | Регистр сведений
    |
    Номенклатура 1 500 | Ном 1 100
    Номенклатура 2 30 | Ном 2 200

    И соединяем
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Вместо регистратор напишите авто. Остатки и обороты по регистратору имеет свои тонкости - в данном случае это не к чему.

    Нет, тут другая задача - цены надо получать на дату документа. Так не прокатит...
  9. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Если написать "авто", то поле "ПродажиОбороты.Период" сразу становится "не найдено"...
    Так, как именно сделать, чтобы прокатило?

    Да
    Сейчас попробую... (раньше не получалось).
  10. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Вспомнил, почему не получалось:
    В таблице "ЦеныНоменклатуры.СрезПоследних" надо указывать в качестве первого параметра дату выборки. А запросы вида:
    Код:
    РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ПродажиОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(ПродажиОбороты.Период,) КАК ТаблицаЦен
    
    
    1С не поддерживаются...
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Вам нужно поле ПериодДень
  12. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    А если в текущей конфигурации периодичность регистра цен расширена до регистратора?
    Кстати, а что это за поле такое "ПериодДень"? :)
    Тем не менее, наметился прогресс: после смены периодичности выборки с "регистратора" на "день", заветная сумма считается без искажений. Конечно, бы, что-нибудь с детализацией цен на регистратор сделать, но это уже не та беда :)
  13. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. Цены номенклатуры идут по дням, поэтому смотреть на регистратор смысла нет.
    2. Судя по вопросам, очень сильно плаваете в периодах. Настойчиво рекомендую ознакомиться с этим вопросом более подробно, тогда сразу поймете, что за поле ПериодДень, ПериодНеделя, ПериодДекада и прочее.
  14. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    я же объясняю: у клиента цены идут по регистраторам (было переделано)

    замечание, которое Я совсем не понял. даже в справке про такие поля нет ни одного упоминания.
    На понимании не настаиваю :) Мне бы с текущей задачей разобраться...
  15. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. Тогда нужно поле Регистратор.Дата брать
    2. Из-за непонимания вопросы-то и возникают :)
  16. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    1. В таком случае, проблема начинается с первого поста (неправильный расчет суммы вложенного запроса). Просьба, не уходить от основной темы, цепляясь за пробелы в моих знаниях ;)
    2. Не в той справке смотрел. Спасибо, буду знать, что такие поля есть :) Пока что для данной задачи знание не помогло.
  17. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Неправильный расчет вложенного из-за детализации по регистратору. На диске ИТС есть подробная статья по этому поводу.

    По поводу выборки по датам - пример
  18. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Статью в студию :unsure:

    И чем это тут поможет?
    Или это такая ссылка на то, что я и так пытаюсь всё сделать правильно?
  19. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    У меня нет по рукой сейчас ИТС, да и скопировать с него статью дело не пяти минут. Быстрее будет самому посмотреть.
    А пример на всякий случай :)))


    ЗЫ. К слову, нафига вообще нам регистратор? Есть документ продажи - вот его-то дата нам и нужна!
  20. TopicStarter Overlay
    Zergos
    Offline

    Zergos

    Регистрация:
    16 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Конечно, особенно, если ИТС - это такая маленькая дискетка с единственной статьёй про вложенные запросы.

    А вот это можно попробовать...

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