Запрос=Новый Запрос("ВЫБРАТЬ | Таблица_Номенклатура.Ссылка, //| Таблица_ЦеныСрезПоследних.Цена, | Таблица_Остатки.КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК Таблица_Номенклатура //| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК Таблица_ЦеныСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК Таблица_Остатки |ПО //| Таблица_Номенклатура.Ссылка = Таблица_ЦеныСрезПоследних.Номенклатура | Таблица_Номенклатура.Ссылка = Таблица_Остатки.Номенклатура |ГДЕ | Таблица_Номенклатура.ЭтоГруппа = Ложь И | Таблица_Номенклатура.ПометкаУдаления = Ложь И | Таблица_Номенклатура.ВидНоменклатуры НЕ В (&ВидыНоменклатуры) И | Таблица_Номенклатура.Ссылка В ИЕРАРХИИ(&Категория)");
Комментированные строки - это те, которые мне нужно заставить работать. Если сделать их не комментированными - то будет ругаться мол " Ожидается имя таблицы <<?>>ГДЕ ". Я попробовал выполнить по отдельности - только для цен, и только для остатков - и оно работает. Но из этого сразу же проблема ... Без отбора (и без цен, и без остатков) я получаю 105 единиц номенклатуры, при отсеве по остаткам я получаю всё те же 105; а вот при отсеве по ценам - мне сыпет 199. Откуда ? Всего в подопытной группе 105 позиций. Это особенно критично, если придётся таки пилить два запроса.
Запрос = Новый Запрос("ВЫБРАТЬ | Таблица_Номенклатура.Ссылка, | Таблица_Остатки.КоличествоОстаток, | Таблица_ЦеныСрезПоследних.Цена |ИЗ | Справочник.Номенклатура КАК Таблица_Номенклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Таблица_Остатки | ПО Таблица_Номенклатура.Ссылка = Таблица_Остатки.Номенклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК Таблица_ЦеныСрезПоследних | ПО Таблица_Номенклатура.Ссылка = Таблица_ЦеныСрезПоследних.Номенклатура |ГДЕ | Таблица_Номенклатура.ЭтоГруппа = ЛОЖЬ | И Таблица_Номенклатура.ПометкаУдаления = ЛОЖЬ | И НЕ Таблица_Номенклатура.ВидНоменклатуры В (&ВидыНоменклатуры) | И Таблица_Номенклатура.Ссылка В ИЕРАРХИИ(&Категория)");
Сорри, спутал немного таблицы
Запрос = Новый Запрос("ВЫБРАТЬ | Таблица_Номенклатура.Ссылка, | Таблица_Остатки.КоличествоОстаток, | Таблица_ЦеныСрезПоследних.Цена |ИЗ | Справочник.Номенклатура КАК Таблица_Номенклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК Таблица_Остатки | ПО Таблица_Номенклатура.Ссылка = Таблица_Остатки.Номенклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК Таблица_ЦеныСрезПоследних | ПО Таблица_Номенклатура.Ссылка = Таблица_ЦеныСрезПоследних.Номенклатура |ГДЕ | Таблица_Номенклатура.ЭтоГруппа = ЛОЖЬ | И Таблица_Номенклатура.ПометкаУдаления = ЛОЖЬ | И НЕ Таблица_Номенклатура.ВидНоменклатуры В (&ВидыНоменклатуры) | И Таблица_Номенклатура.Ссылка В ИЕРАРХИИ(&Категория)");
и если хотите - можете ВНУТРЕННЕЕ поменять на ЛЕВОЕ
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
berkut_0 @ Вчера, 18:21
, Вы делаете "левое соединение" цен с остатками, а не справочника номенклатуры с остатками. Вангую, что в вашем регистре "Цены" наверняка есть такие поля как "Тип цен" или "Валюта", соответственно скорее всего есть несколько цен на 1 товар либо с разной валютой либо типом цен. А связь с остатками идет чисто по номенклатуре. Отсюда соответственно и дубли строк и неправильный остаток. Также осмелюсь прованговать, что запрос который привел в качестве примера Salton тоже выдаст вам дубли, только уже по цене, если там есть ещё измерения кроме номенклатуры.
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
"ВЫБРАТЬ | Номенклатура.Ссылка КАК Товар |ПОМЕСТИТЬ втТовары |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка В ИЕРАРХИИ(&Категория) | И Номенклатура.ЭтоГруппа = ЛОЖЬ | И Номенклатура.ПометкаУдаления = ЛОЖЬ | И НЕ Номенклатура.ВидНоменклатуры В (&ВидыНоменклатуры) | |ИНДЕКСИРОВАТЬ ПО | Товар |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | втТовары.Товар, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток, | ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена |ИЗ | втТовары КАК втТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Номенклатура В | (ВЫБРАТЬ | втТовары.Товар | ИЗ | втТовары) | И Склад = &СкладОстатков) КАК ТоварыНаСкладахОстатки | ПО втТовары.Товар = ТоварыНаСкладахОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних( | , | Номенклатура В | (ВЫБРАТЬ | втТовары.Товар | ИЗ | втТовары) | И ТипЦен = &ТипЦенНоменклатуры) КАК ЦеныНоменклатурыСрезПоследних | ПО втТовары.Товар = ЦеныНоменклатурыСрезПоследних.Номенклатура | |УПОРЯДОЧИТЬ ПО | втТовары.Товар.Наименование"
Я тут нарвался на консоль запросов, и тут что то даже получается. Сейчас у меня куча осложнений, и в целом - я почти справляюсь. Но есть одна проблема ... Начну с того, что я уже имею - мой текущий запрос:
ВЫБРАТЬ Таблица_КурсыВалют.Курс, Таблица_Номенклатура.Артикул, Таблица_Цены.Цена, Таблица_Остатки.КоличествоОстаток, Таблица_Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Таблица_Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК Таблица_Цены ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Таблица_КурсыВалют ПО Таблица_КурсыВалют.Валюта.Ссылка = Таблица_Цены.ТипЦен.ВалютаЦены.Ссылка ПО Таблица_Номенклатура.Ссылка = Таблица_Цены.Номенклатура.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК Таблица_Остатки ПО Таблица_Номенклатура.Ссылка = Таблица_Остатки.Номенклатура.Ссылка ГДЕ Таблица_Номенклатура.ЭтоГруппа = ЛОЖЬ И Таблица_Номенклатура.Родитель В ИЕРАРХИИ(&Категории) И Таблица_Цены.ТипЦен В(&ТипыЦен) И НЕ Таблица_Номенклатура.ВидНоменклатуры В (&ВидыНоменклатуры)
Все мои сложности в словах: мне нужно получить артикул, цену, количество, наименование, и (гвоздь сегодняшней программы) курс той валюты, которая указана в срезе цены заданной номенклатуры. У меня это вроде как получилось.
Сам в шоке.
Так как цену я получаю в валюте - мне и нужен курс, на который я потом буду множить получаемую цену. Проблема в том, что НЕ выгружаются те позиции, у которых не указаны цены/остатки. Они нужны для того, что бы потом туда поставить нули (так надо, для сайта =) ). Помогите вылечить плиз =)
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0
[Зачеркнуто]Поясните
Цитата
Проблема в том, что НЕ выгружаются те позиции, у которых не указаны цены/остатки.
Судя по запросу, строки должны формироваться, просто некоторые поля будут содержать NULL [/Зачеркнуто] У вас проблема в налагаемых условиях
И Таблица_Цены.ТипЦен В(&ТипыЦен)
нужно
И (Таблица_Цены.ТипЦен В(&ТипыЦен) или Таблица_Цены.ТипЦен ЕСТЬ NULL)
Хотя правильнее будет так
ВЫБРАТЬ Таблица_КурсыВалют.Курс, Таблица_Номенклатура.Артикул, Таблица_Цены.Цена, Таблица_Остатки.КоличествоОстаток, Таблица_Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Таблица_Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(,ТипЦен В(&ТипыЦен)) КАК Таблица_Цены ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Таблица_КурсыВалют ПО Таблица_КурсыВалют.Валюта.Ссылка = Таблица_Цены.ТипЦен.ВалютаЦены.Ссылка ПО Таблица_Номенклатура.Ссылка = Таблица_Цены.Номенклатура.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК Таблица_Остатки ПО Таблица_Номенклатура.Ссылка = Таблица_Остатки.Номенклатура.Ссылка ГДЕ Таблица_Номенклатура.ЭтоГруппа = ЛОЖЬ И Таблица_Номенклатура.Родитель В ИЕРАРХИИ(&Категории) И НЕ Таблица_Номенклатура.ВидНоменклатуры В (&ВидыНоменклатуры)
Сообщение отредактировал pablo - 12.10.17, 16:35
Правильно поставленный вопрос содержит до 90% ответа.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!