Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Запрос с ЛЕВЫМ СОЕДИНИНИЕМ, выбор всех элементов , выбираются только те элементы, у которых есть соответствие          
irbis_triffle Подменю пользователя
сообщение 04.08.11, 19:43
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 7 раз
Рейтинг: 0

Всем добрый вечер!

Делаю небольшую таблицу со столбцами "Номенклатура" и "Цена". Делаю запрос через конструктор (все "по-книжке"):

Запрос.Текст = "ВЫБРАТЬ
               |    ТекНоменклатура.Ссылка,
               |    ТекНоменклатура.Наименование КАК Товар,
               |    ЦеныНоменклатуры.Цена КАК Цена
               |ИЗ
               |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
               |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ТекНоменклатура
               |        ПО ЦеныНоменклатуры.Номенклатура = ТекНоменклатура.Ссылка
               |ГДЕ
               |    ТекНоменклатура.ЭтоГруппа = ЛОЖЬ
               |    И ТекНоменклатура.Родитель = &Родитель
               |    И ТекНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
               |
               |УПОРЯДОЧИТЬ ПО
               |    ТекНоменклатура.Наименование";

Запрос.УстановитьПараметр("Родитель", ТекКатегория);
Запрос.УстановитьПараметр("ВидНоменклатуры", Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001"));
Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002"));
Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.НайтиПоКоду("980"));

Результат = Запрос.Выполнить().Выбрать();


и хочу получить таблицу со всеми элементами номенклатуры, а вместо этого получаю лишь те, у которых есть цена в регистре.
В конструкторе в "связях" устанавливал галочку "все" возле справочника номенклатуры...
Ткните пожалуйста куда копать...

Заранее благодарен!

... недовставился кусок запроса, под конец еще есть параметры, хотя это и не существенно:
             |    И ЦеныНоменклатуры.ТипЦен = &ТипЦен
               |    И ЦеныНоменклатуры.Валюта = &Валюта

logist Подменю пользователя
сообщение 04.08.11, 19:46
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

ЛЕВОЕ по регистру цен, а не по справочнику номенклатуры.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

irbis_triffle Подменю пользователя
сообщение 04.08.11, 20:35
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 7 раз
Рейтинг: 0

"ВЫБРАТЬ
               |    ТекНоменклатура.Ссылка,
               |    ТекНоменклатура.Наименование КАК Товар,
               |    ЦеныНоменклатуры.Цена КАК Цена
               |ИЗ
               |    Справочник.Номенклатура КАК ТекНоменклатура
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
               |        ПО ТекНоменклатура.Ссылка = ЦеныНоменклатуры.Номенклатура
               |ГДЕ
               |    ТекНоменклатура.ЭтоГруппа = ЛОЖЬ
               |    И ТекНоменклатура.Родитель = &Родитель
               |    И ТекНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
               |    И ЦеныНоменклатуры.ТипЦен = &ТипЦен
               |    И ЦеныНоменклатуры.Валюта = &Валюта
               |
               |УПОРЯДОЧИТЬ ПО
               |    ТекНоменклатура.Наименование";

эффект тот же(

точнее наверное так:
ПО ЦеныНоменклатуры.Номенклатура = ТекНоменклатура.Ссылка

logist Подменю пользователя
сообщение 04.08.11, 20:39
Сообщение #4

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Ну так если Вы отбираете по Типу цен, то естественно что отобразится только та у которой есть указанный Тип цен и Валюта. В начальном запросе этого не было.
А какая цель такого запроса?


Signature
Личные бесплатные консультации не даю, для этого есть форум!

irbis_triffle Подменю пользователя
сообщение 04.08.11, 20:49
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 7 раз
Рейтинг: 0

Показать таблицу со всеми ценами, товары часто добавляются (одними людьми), а те, кто формирует цены - не знаю что добавилось. вот и надо им показать все товары - есть ли цены - они тут и найдут и сделают...

можно конечно сделать отчет, но здесь же прикрутится система интерактивного изменения цен.

и еще, кстати, листаю ман и никак не могу найти почему не работает
    |УПОРЯДОЧИТЬ ПО
    |    Наименование ИЕРАРХИЯ


когда в запросе есть ЛЕВОЕ СОЕДИНЕНИЕ

как вариант думал сделать двумя отдельными запросами, но чую что так делать нельзя(

logist Подменю пользователя
сообщение 04.08.11, 20:51
Сообщение #6

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Тогда по-моему проще выбрать только ту номенклатуру у которой вообще нет цен, или нет определенного типа цен (списка типов цен).


Signature
Личные бесплатные консультации не даю, для этого есть форум!

yuritch Подменю пользователя
сообщение 05.08.11, 7:55
Сообщение #7

Общительный
Иконка группы
Группа: Местный
Сообщений: 46
Спасибо сказали: 21 раз
Рейтинг: 0

"ВЫБРАТЬ
               |    ТекНоменклатура.Ссылка,
               |    ТекНоменклатура.Наименование КАК Товар,
               |    ЦеныНоменклатуры.Цена КАК Цена
               |ИЗ
               |    Справочник.Номенклатура КАК ТекНоменклатура
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
               |        ПО ТекНоменклатура.Ссылка = ЦеныНоменклатуры.Номенклатура
               |ГДЕ
               |    НЕ ТекНоменклатура.ЭтоГруппа
               |    И ТекНоменклатура.Родитель = &Родитель
               |    И ТекНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
               |    И IsNULL(ЦеныНоменклатуры.ТипЦен, &ТипЦен) = &ТипЦен
               |    И IsNULL(ЦеныНоменклатуры.Валюта, &Валюта) = &Валюта
               |
               |УПОРЯДОЧИТЬ ПО
               |    ТекНоменклатура.Наименование";


Вот это отберет всю номенклатуру, для которой есть цены (подходящие по условиям), и всю, для которой цен нет.

Спасибо сказали: irbis_triffle,

irbis_triffle Подменю пользователя
сообщение 05.08.11, 23:32
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 7 раз
Рейтинг: 0

Цитата(yuritch @ 05.08.11, 8:55) *
"ВЫБРАТЬ
               |    ТекНоменклатура.Ссылка,
               |    ТекНоменклатура.Наименование КАК Товар,
               |    ЦеныНоменклатуры.Цена КАК Цена
               |ИЗ
               |    Справочник.Номенклатура КАК ТекНоменклатура
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
               |        ПО ТекНоменклатура.Ссылка = ЦеныНоменклатуры.Номенклатура
               |ГДЕ
               |    НЕ ТекНоменклатура.ЭтоГруппа
               |    И ТекНоменклатура.Родитель = &Родитель
               |    И ТекНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
               |    И IsNULL(ЦеныНоменклатуры.ТипЦен, &ТипЦен) = &ТипЦен
               |    И IsNULL(ЦеныНоменклатуры.Валюта, &Валюта) = &Валюта
               |
               |УПОРЯДОЧИТЬ ПО
               |    ТекНоменклатура.Наименование";


Вот это отберет всю номенклатуру, для которой есть цены (подходящие по условиям), и всю, для которой цен нет.

БОЛЬШОЕ Вам СПАСИБО, ДОБРЫЙ ЧЕЛОВЕК!!!

5_kopeek Подменю пользователя
сообщение 05.08.11, 23:45
Сообщение #9

Ветеран
*******
Женщине-одинэснику
Группа: Пользователи*
Сообщений: 940
Спасибо сказали: 285 раз
Рейтинг: 0

irbis_triffle, Вам стОит обратить внимание на это.

Спасибо сказали: Batchir,

irbis_triffle Подменю пользователя
сообщение 07.08.11, 2:31
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 7 раз
Рейтинг: 0

yuritch, запрос все равно работает не так как надо, потому что в результате получаем только те товары, у которых есть нужная цена (согласно параметрам) и те, у которых нет вообще никаких цен. Если у товара есть какая-то цена, кроме нужной - он не попадает в результата запроса (((
Разбираюсь дальше...

irbis_triffle Подменю пользователя
сообщение 07.08.11, 4:53
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 7 раз
Рейтинг: 0

В общем одним запросом по-моему не получится, так как условия влияют на весь запрос а не только на ЛЕВОЕ СОЕДИНЕНИЕ.
Я сделал через временную таблицу:
        // ФОРМИРУЕМ ВРЕМЕННУЮ ТАБЛИЦУ ЦЕН С ЖЕЛАЕМЫМИ УСЛОВИЯМИ
        ЗапросЦен = Новый Запрос;
        ЗапросЦен.Текст =
            "ВЫБРАТЬ
            |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
            |    ЦеныНоменклатурыСрезПоследних.Цена,
            |    ЦеныНоменклатурыСрезПоследних.ТипЦен
            |ПОМЕСТИТЬ СрезПоследнихРозничныхЦен
            |ИЗ
            |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
            |ГДЕ
            |    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен";
        ЗапросЦен.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002"));
        ЗапросЦен.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        
        ЗапросЦен.Выполнить();
        
        // ФОРМИРУЕМ ЗАПРОС НОМЕНКЛАТУРЫ С ЦЕНАМИ (или 0 если цены нет)
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ТекНоменклатура.Артикул,
        |    ТекНоменклатура.Наименование КАК Товар,
        |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
        |ИЗ
        |    Справочник.Номенклатура КАК ТекНоменклатура
        |        ЛЕВОЕ СОЕДИНЕНИЕ СрезПоследнихРозничныхЦен КАК ЦеныНоменклатурыСрезПоследних
        |        ПО ТекНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
        |ГДЕ
        |    (НЕ ТекНоменклатура.ЭтоГруппа)
        |    И ТекНоменклатура.Родитель = &Родитель
        |    И ТекНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
        |
        |УПОРЯДОЧИТЬ ПО
        |    Товар";
            
        Запрос.УстановитьПараметр("ВидНоменклатуры", Справочники.ВидыНоменклатуры.НайтиПоКоду("000000001"));
        Запрос.УстановитьПараметр("Родитель", Элемент.ТекущиеДанные.Группа.Ссылка);
        Запрос.МенеджерВременныхТаблиц=ЗапросЦен.МенеджерВременныхТаблиц;
        
        Результат = Запрос.Выполнить();


Кажется работает корректно, тестирую))
Может кому пригодится, или ГУРУ ткнут в явную ошибку.

Fynjy Подменю пользователя
сообщение 07.08.11, 15:06
Сообщение #12

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Условие Где нужно было поместить в ПО и цельный запрос бы заработал. Но в целом решение корректно и не повлечет падения производительности...
ЗЫ: не забывайте уничтожать временные таблицы, а то чревато для сервера 1с ...


Signature

irbis_triffle Подменю пользователя
сообщение 08.08.11, 1:32
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 40
Спасибо сказали: 7 раз
Рейтинг: 0

Цитата(Fynjy @ 07.08.11, 16:06) *
Условие Где нужно было поместить в ПО и цельный запрос бы заработал. Но в целом решение корректно и не повлечет падения производительности...
ЗЫ: не забывайте уничтожать временные таблицы, а то чревато для сервера 1с ...

А можно посмотреть правильный вариант одним запросом? Я пробовал поместить Где в По, но у меня ничего не получилось, поэтому и выбрал вариант временной таблицы.
Если на производительность не влияет - пусть так и остается ("работает - не лезь"), но на будущее хотелось бы понять...
Заранее благодарен!

Fynjy Подменю пользователя
сообщение 08.08.11, 11:03
Сообщение #14

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Цитата(irbis_triffle @ 08.08.11, 2:32) *
А можно посмотреть правильный вариант одним запросом? Я пробовал поместить Где в По, но у меня ничего не получилось, поэтому и выбрал вариант временной таблицы.
Если на производительность не влияет - пусть так и остается ("работает - не лезь"), но на будущее хотелось бы понять...
Заранее благодарен!

ВЫБРАТЬ
    ТекНоменклатура.Ссылка,
    ТекНоменклатура.Наименование КАК Товар,
    ЦеныНоменклатуры.Цена КАК Цена
ИЗ
    Справочник.Номенклатура КАК ТекНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ПО ТекНоменклатура.Ссылка = ЦеныНоменклатуры.Номенклатура
            И (ЦеныНоменклатуры.ТипЦен = &ТипЦен)
            И (ЦеныНоменклатуры.Валюта = &Валюта)
ГДЕ
    (НЕ ТекНоменклатура.ЭтоГруппа)
    И ТекНоменклатура.Родитель = &Родитель
    И ТекНоменклатура.ВидНоменклатуры = &ВидНоменклатуры

УПОРЯДОЧИТЬ ПО
    ТекНоменклатура.Наименование

как то так ...
ЗЫ: но правильнее юзать виртуальные таблицы ...

Сообщение отредактировал Fynjy - 08.08.11, 11:04


Signature

Vofka Подменю пользователя
сообщение 08.08.11, 11:11
Сообщение #15

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Цитата
но правильнее юзать виртуальные таблицы ...

Почему?

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

Зы. на корректность не проверял

Fynjy Подменю пользователя
сообщение 08.08.11, 14:05
Сообщение #16

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Цитата(Vofka @ 08.08.11, 12:11) *
Почему?

Так как именно это основное назначение РС.
Цитата(Vofka @ 08.08.11, 12:11) *
А вообще, почему не сделать так:
Запрос.Текст =
        "ВЫБРАТЬ
        |    ТекНоменклатура.Артикул,
        |    ТекНоменклатура.Наименование КАК Товар,
        |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
        |ИЗ
        |    Справочник.Номенклатура КАК ТекНоменклатура
        |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
        |    ЦеныНоменклатурыСрезПоследних.Цена,
        |    ЦеныНоменклатурыСрезПоследних.ТипЦен
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
        |ГДЕ
        |    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
        |        ПО ТекНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
        |ГДЕ
        |    (НЕ ТекНоменклатура.ЭтоГруппа)
        |    И ТекНоменклатура.Родитель = &Родитель
        |    И ТекНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
        |
        |УПОРЯДОЧИТЬ ПО
        |    Товар";

Зы. на корректность не проверял

Условия для ВТ должны задаваться не через ГДЕ.


Signature

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.06.24, 9:07
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!