8.х Нужная помощь с запросом?

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

  1. TopicStarter Overlay
    step86
    Offline

    step86 Опытный в 1С

    Регистрация:
    22 май 2009
    Сообщения:
    137
    Симпатии:
    0
    Баллы:
    26
    Помогите разобраться отчет пишу для УТ, отчет что то типа валовой прибыли себестоимость на дату документа продажи получаем закупочную цену для номенклатуры, выдает пустой результат помогите разобраться???

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

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Параметры устанавливаете ?
  3. Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    Соединение по условию равенства даты документа периоду записи в регистр может быть некорректным, так на дату документа записи может и не быть - и тогда надо брать более раннюю запись.
    Вообще, в таких ситуациях срез последних не используют. Здесь нужно поработать с реальной таблицей регистра.
  4. TopicStarter Overlay
    step86
    Offline

    step86 Опытный в 1С

    Регистрация:
    22 май 2009
    Сообщения:
    137
    Симпатии:
    0
    Баллы:
    26
    да вот
    Код:
     Запрос.УстановитьПараметр("Дата1", ДатаНачала);
    Запрос.УстановитьПараметр("Дата2", ДатаОкончания);
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("ТипЦен", ТипЦеныСебестоимости);
  5. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Данные есть вообще в регистре? я бы вот так советовал делать

    Код:
    Запрос.УстановитьПараметр("Дата1", НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("Дата2", КонецДня(ДатаОкончания));
    
  6. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    В консоли запросов запускали ваш запрос ?
  7. TopicStarter Overlay
    step86
    Offline

    step86 Опытный в 1С

    Регистрация:
    22 май 2009
    Сообщения:
    137
    Симпатии:
    0
    Баллы:
    26
    Регистр сведений убирал из запроса оставлял только регистр накопления продажи данные выбираются, но хочется одним запросом и цену закупочную номенклатуры получить на дату продажи, можно конечно функцию отдельную сделать куда передавать номенклатуры, тип цен и дату но потеряем скорость формирования запроса, хочется одним запросом???
  8. Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    Вы, наверное, меня не услышали? У Вас условие соединения некорректное и сам подход к получению цены на дату документа неправильный.
  9. TopicStarter Overlay
    step86
    Offline

    step86 Опытный в 1С

    Регистрация:
    22 май 2009
    Сообщения:
    137
    Симпатии:
    0
    Баллы:
    26
    Как тогда лучше сделать подскажите???
  10. Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    Если Вы хотитите получать цену на дату каждого документа, то Вам нужно работать с реальной таблицей регистра, а не виртуальной. Срез тут не поможет.

    Сначала к временной таблице "Продажи" слева присоединяете записи из регистра "ЦеныНоменклатуры" по условию равенства полей "Номенклатура" и условию "ДокументПродажиДата >= ЦеныНоменклатуры.Период". Группируете эту выборку по номенклатуре , а для поля "Период" используйте функцию "Максимум". Помещаете эту выборку во временную таблицу.
    Связываете эту таблицу с записями регистра "ЦеныНоменклаьуры" (да, опять!) левым соединением по условию равенства полей "Номенклатура" и "Период"

    Примерно так.
  11. TopicStarter Overlay
    step86
    Offline

    step86 Опытный в 1С

    Регистрация:
    22 май 2009
    Сообщения:
    137
    Симпатии:
    0
    Баллы:
    26
    Вроде получилось, спасибо большое, только не понял почему так заморочено да еще и функцию максимум используем для периода???
  12. Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    Дата документа - это дата и время с точностью до секунды. Когда для соединения с таблицей среза Вы указываете условие "ДатаДокумента = Период", система ищет записи среза с периодом в точности, равным документа, то есть, если дата документа равна "21.05.2012 15:14:15", то и период в срезе должен быть "21.05.2012 15:14:15", А Вы же цены на номенклатуру небось не каждую секунду устанавливаете, поэтому вероятность. что в регистре сведений есть запись с точно таким же периодм крайне мала. Зато есть запись с периодом, меньшим, чем дата документа, и она-то Вам и нужна, но Вы её не получите из-за своего условия

    В таких случаях всегда используют реальные таблицы, а не виртуальные.

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