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

Запрос 8.2

Автор 1cka, 26 авг 2014, 09:28

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

1cka

Делаю запрос:
хочу видеть все позиции номенклатуры с остатками и ценами для нее
А  получается, что если нет цены, то номенклатура не выводится
Что не так делаю?
|    ВЫБРАТЬ
    //|    РАЗРЕШЕННЫЕ
    ////*** Начальный остаток
    |    СвободныеОстатки.Номенклатура,
    |    СвободныеОстатки.КоличествоСУчетомСерииОстаток КАК КоличествоНачОстаток,
    |   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена

    |ИЗ
    |    РегистрНакопления.СвободныеОстатки.Остатки(&ДатаНач,) КАК СвободныеОстатки
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаНач,) КАК ЦеныНоменклатурыСрезПоследних
    |    ПО СвободныеОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

cska-fanat-kz

В приведенном тексте запроса - все нормально.
Не выведется номенклатура, не имеющая остатков, а вот цены - не должны влиять.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

1cka

разобралась, я даже не стала писать условия, а оказалось дело в них.
Условие по ТипуЦен добавила сразу в соединении, а не в конце.
    |    ВЫБРАТЬ
    |    СвободныеОстатки.Номенклатура,
    |    СвободныеОстатки.КоличествоСУчетомСерииОстаток КАК КоличествоНачОстаток,
    |   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена

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


возник параллельный вопрос
результат выполнения запроса я сворачиваю так
ТаблицаЗ.Свернуть("Номенклатура", "КоличествоНачОстаток, Цена");
и получается что если Номенклатура была на двух складах, то цена увеличивается в 2 раза, т.е. ровно то что я и написала - сгруппировалась номенклатура, а количество и цена ссумировались.
хочется чтобы номеклатура сгруппировалась, количество сложилось, а цена осталась на одну позицию
если так
ТаблицаЗ.Свернуть("Номенклатура, Цена", "КоличествоНачОстаток"); то не группируется номенклатура
   
   

Kironten

Так сгруппируйте в самом запросе. Зачем группировать уже результат, который, как я понимаю вы еще и в ТЗ выгружаете.
На закладке группировка:
в группируемое поле - номенклатуру
в суммируемые поля - количество(сумма), цена(ну например МАКСИМУМ)

1cka

Цитата: Kironten от 26 авг 2014, 16:16
Так сгруппируйте в самом запросе. Зачем группировать уже результат, который, как я понимаю вы еще и в ТЗ выгружаете.
На закладке группировка:
в группируемое поле - номенклатуру
в суммируемые поля - количество(сумма), цена(ну например МАКСИМУМ)
я дальше с помощью ОБЪЕДИНИТЬ ВСЕ еще запросы добавляю..
уже скопировала запрос в модуль формы, ковыряю запрос руками..:(
результат запроса выгружаю и копирую в тз, а там уже  сворачиваю
так ведь можно? а куда СГруппировать по синтаксису добавить в случает использования ОБЪЕДИНИТЬ ВСЕ?

Kironten

Ну а что мешает сделать вложенный запрос или временную таблицу, там все сгруппировать и потом добавить через объеденитьвсе еще запросы?

1cka

Цитата: Kironten от 26 авг 2014, 17:13
Ну а что мешает сделать вложенный запрос или временную таблицу, там все сгруппировать и потом добавить через объеденитьвсе еще запросы?
сейчас запрос выглядит так, никак до меня не доходит что куда вложить((( подскажите пожалуйста

|    ВЫБРАТЬ
    |    СвободныеОстатки.Номенклатура,
    |    СвободныеОстатки.КоличествоСУчетомСерииОстаток КАК КоличествоНачОстаток,
    |   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
    | 0 КАК КоличествоОборот

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

        | ЗакупкиОбороты.Номенклатура КАК Номенклатура,
| 0 КАК КоличествоНачОстаток,
|       0 КАК Цена,
        | ЗакупкиОбороты.КоличествоОборот КАК КоличествоОборот

|ИЗ
| РегистрНакопления.Закупки.Обороты(&ДатаНач, &ДатаКон , Авто, ) КАК ЗакупкиОбороты



cska-fanat-kz

примерно следующее нужно сделать:

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

Kironten

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

СГРУППИРОВАТЬ ПО
СвободныеОстаткиОстаткиИОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Номенклатура,
ВТ.КоличествоНач,
ВТ.Цена,
ЕСТЬNULL(ЗакупкиОбороты.КоличествоОборот, 0) КАК КоличествоОборот
ИЗ
ВТ КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты(&ДатаНач, &ДатаКон, , ) КАК ЗакупкиОбороты
ПО ВТ.Номенклатура = ЗакупкиОбороты.Номенклатура

Склады я бы передал в массив и из него подбирал, чем 3 раза задавать параметр - склад1, склад2, склад3.

1cka

Цитата: Kironten от 27 авг 2014, 13:39
Я бы делал так:

так не учитываются номенклатуры у которых не проставлены цены (((((

Теги:

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

Рейтинг@Mail.ru

Поиск