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

Запрос 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

Поиск