Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0
Привет. Это мой 3-й запрос в браке с 1С и что-то с ним не так
ВЫБРАТЬ СпрНоменклатура.Наименование КАК Наименование, ЦенаОпт.ЦенаСНДС КАК ОптЦенаСНДС, ЦенаРозница.ЦенаСНДС КАК РозницаЦенаСНДС ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныПродажи.СрезПоследних(&Дата, ) КАК ЦенаОпт ПО (ЦенаОпт.Номенклатура.Ссылка = СпрНоменклатура.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныПродажи.СрезПоследних(&Дата, ) КАК ЦенаРозница ПО (ЦенаРозница.Номенклатура.Ссылка = СпрНоменклатура.Ссылка) ГДЕ ЦенаОпт.Прайс = &ПрайсОпт И ЦенаРозница.Прайс = &ПрайсРозница
На выходе хочу получить номенклатуру + 2 колонки цен Опт/Розница. Проблема в том, что по одному из прайсов (Розница) цены в регистре не заполнены - в результате получаю НОЛЬ строк. Если выберу скажем прайсы ОПТ и КИЕВ (оба заполнены) получаю то, что хочу - список номенклатуры с ценами в обоих колонках ОПТ и КИЕВ. Как быть? Может зря заморочился с левосторонним соединением? И есть другой способ?
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Прайсы надо отбирать во вложенном запросе и там накладывать условие, т.е. у вас должно быть два вложенных запроса - для одного и другого прайса, и в них условия отбора. А номенклатуру уже соединять с результатами вложенных запросов.
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Как-то так
"ВЫБРАТЬ | Номенклатура.Наименование, | ВложенныйЗапрос.Цена1, | ВложенныйЗапрос1.Цена2 |ИЗ | Справочник.Номенклатура КАК Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура2, | ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена2 | ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &Прайс2) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос1 | ПО Номенклатура.Ссылка = ВложенныйЗапрос1.Номенклатура2 | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура1, | ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена1 | ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &Прайс1) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос | ПО Номенклатура.Ссылка = ВложенныйЗапрос.Номенклатура1"
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(logist @ 26.06.15, 11:38)
Как-то так
"ВЫБРАТЬ | Номенклатура.Наименование, | ВложенныйЗапрос.Цена1, | ВложенныйЗапрос1.Цена2 |ИЗ | Справочник.Номенклатура КАК Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура2, | ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена2 | ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &Прайс2) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос1 | ПО Номенклатура.Ссылка = ВложенныйЗапрос1.Номенклатура2 | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура1, | ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена1 | ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &Прайс1) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос | ПО Номенклатура.Ссылка = ВложенныйЗапрос.Номенклатура1"
Подогнал под свои поля - работает нормально. Но это только начало задачи ...
Цитата(sava1 @ 26.06.15, 11:40)
А зачем ? Сформировать еще одну виртуальную таблицу? Так она уже есть.
А можете ткнуть носом? Для самых понятливых, но не знающих теории вообще ;-) Если можно переделать мой пример?
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &Прайс2) КАК ВложенныйЗапрос1 | ПО Номенклатура.Ссылка = ВложенныйЗапрос1.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &Прайс1) КАК ВложенныйЗапрос | ПО Номенклатура.Ссылка = ВложенныйЗапрос.Номенклатура
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0
Задача усложнена тем, что в начале я показал только 2 прайса в запросе. на самом деле их известное количество, но оно большее. Есть справочник прайсовых типов. В нём перечислены наименования прайсов (Опт, Розница, Киев ...) и есть поле с номером (порядоковый номер для колонки отчёта). Смысл сделать реестр цен Наименование / колонки с ценами этого наименования в определённых прайсах. Можно ли замутить какой-то цикл в запросе, который бы перебрал справочник прайсов на предмет наличия этого поля с номером и по каждому найденному прайсу получить цену для номенклатуры? Завернул?
Слава, направление понял, спасибо. Сейчас прикручу, думаю это более простой вариант из предложенных. А с циклом в запросе поможете?
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0
Возник дополнительный вопрос:
ВЫБРАТЬ | СпрНоменклатура.Наименование КАК Наименование, | ЦенаОпт.ЦенаСНДС КАК ОптЦенаСНДС, | ЦенаКиев.ЦенаСНДС КАК КиевЦенаСНДС |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныПродажи.СрезПоследних(&Дата, Прайс = &ПрайсОпт) КАК ЦенаОпт | ПО (ЦенаОпт.Номенклатура.Ссылка = СпрНоменклатура.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныПродажи.СрезПоследних(&Дата, Прайс = &ПрайсКиев) КАК ЦенаКиев | ПО (ЦенаКиев.Номенклатура.Ссылка = СпрНоменклатура.Ссылка)
Если в дополнение к этому мне нужно ещё по одному признаку отловить 3-й прайс, скажем РОЗНИЦА но не с ценой, а с количеством записей Как это сделать?
Задачку решил через группировку всего и вся, чтобы из одной присоединённой таблицы выгрести количество записей. Может есть решение получше?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!