8.х Сравнение в Запросе

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем midavp, 9 авг 2012.

  1. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Добрый день. Необходимо произвести в запросе сравнение с незаполненным значением. Например есть ТипыЦен и в условии я сравниваю с переменной значение вот так:

    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен

    мне необходимо помимо переданной в переменую типа цен получить еще данные у которых не установлен тип цены, как это сделать?
    Пробовал след. не помогло

    ЦеныНоменклатурыСрезПоследних.ТипЦен = Неопределено
    ЦеныНоменклатурыСрезПоследних.ТипЦен есть null
  2. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    ЦеныНоменклатурыСрезПоследних.ТипЦен.Ссылка есть null
  3. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    так тоже пробовал не выходит к сожалению
  4. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    684
    Симпатии:
    7
    Баллы:
    29
    Если тип цен - справочник ссылка тогда вот так
    Код:
    ЦеныНоменклатурыСрезПоследних.ТипЦен <> ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.ПустаяСсылка)
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Еще раз задачу опишите.


    Насколько я вижу, у вас небольшое недопонимание того как хранятся данные в РС ЦеныНоменклатуры. Если цена для номенклатуры не задана, то записи в РС для этой цены для этой позиции номенклатуры не будет вообще.
    Если я правильно понимаю что вам нужно, то чтобы решить вашу задачу, вам надо к таблице Справочники.Номенклатура левым соединением присоединить таблицу ЦеныНоменклатуры.СрезПоследних, и отобрать те поля, у которых значение ресурса ЦеныНоменклатуры.Цена ЕСТЬ NULL.
  6. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    да вы правы, только мне надо сделать чтобы например выводился товар с заданным типом цен и тот товар у которого тип цен вообще никакой не стоит, поэтому последнее условие не могу разобрать как сделать.
  7. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    684
    Симпатии:
    7
    Баллы:
    29
    Ошибся
    Если тип цен - справочник ссылка тогда вот так
    Код:
    ЦеныНоменклатурыСрезПоследних.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.ПустаяСсылка)
  8. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    попробовал не подходит

    Я так и делаю но не со справочником Номенклатура а с РН Продажи, но все равно не работает, вот мой запрос:

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

    СГРУППИРОВАТЬ ПО
    Продажи.Номенклатура,
    Продажи.Стоимость,
    Продажи.Регистратор.Контрагент
    ИТОГИ
    КОЛИЧЕСТВО(Номенклатура)
    ПО
    ОБЩИЕ
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Что надо получить в итоге, я так и не понял.
    Пример исходных данных, и что должно получиться на выходе приведите.
  10. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    в итоге номенклатура(товар) который продали за указанный период с указанным типом цен и товар который продали но он в типе цен не установлен
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Продажи:
    Товар1 100 Контрагент1
    Товар2 150 Контрагент1
    Товар3 100 Контрагент1

    ЦеныНоменклатуры:
    Товар1 ТипЦен1 10
    Товар2 ТипЦен1 15
    Товар1 ТипЦен2 11
    Товар2 ТипЦен2 17
    Товар3 ТипЦен2 16
    Товар3 ТипЦен3 14

    Что надо вернуть, если:
    а) передадим в зарос ТипЦен1
    б) передадим в зарос ТипЦен2
    в) передадим в зарос ТипЦен3
    ?
  12. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    а)
    Товар1 100 Контрагент1
    Товар2 150 Контрагент1
    б)
    Товар2 150 Контрагент1
    Товар3 100 Контрагент1
    в)
    Товар3 100 Контрагент1

    а если бы был еще
    Товар4 200 Контрагент1
    без установленного типа цен
    то он бы присутствовал во всех 3 вариантах а,б.в
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    А где в варианте б) Товар1?


    Код:
    "ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.ТипЦен
    ПОМЕСТИТЬ ЦеныНоменклатуры
    ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
    ЦеныНоменклатурыСрезПоследних.Цена <> 0
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ЦеныНоменклатуры.Номенклатура
    ПОМЕСТИТЬ НужнаяНоменклатура
    ИЗ
    ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ГДЕ
    ЦеныНоменклатуры.ТипЦен = &ТипЦен
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    спрНоменклатура.Ссылка
    ИЗ
    Справочник.Номенклатура КАК спрНоменклатура
    ГДЕ
    НЕ спрНоменклатура.Ссылка В
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЦеныНоменклатуры.Номенклатура
    ИЗ
    ЦеныНоменклатуры КАК ЦеныНоменклатуры)
    И НЕ спрНоменклатура.ЭтоГруппа
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Контрагент,
    Продажи.СтоимостьОборот
    ИЗ
    РегистрНакопления.Продажи.Обороты(
    ,
    ,
    ,
    Номенклатура В
    (ВЫБРАТЬ
    Т.Номенклатура
    ИЗ
    НужнаяНоменклатура КАК Т)) КАК Продажи
    ИТОГИ
    КОЛИЧЕСТВО(Номенклатура)
    ПО
    ОБЩИЕ"
  14. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Извините пропустил, да он тоже будет
  15. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Спасибо shurikvz ваш запрос работает и как надо, только он сложновато сделан, это получается через объедение таблиц в запросе?
  16. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    А можно вытащить из РС ЦеныНоменклатуры цену?
  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    1) В первом запросе пакета мы получаем все установленные типы цен для номенклатуры
    2) Во втором запросе пакета мы отбираем номенклатуру двумя запросами: номенклатура у которой задан &ТипЦен (первая часть обЪединить) и Номенклатуру у которого не задано вообще ни одного типа цен (такая номенклатура будет отсутствовать в выборке из первого пакета запроса) (вторая часть обЪединить).
    3) Последним запросом получаем движения из РН Продажи по номенклатуре отобранной на втором шаге.

    Можно. В первый пакет запроса надо добавить поле Цена из регистра сведений. В последнем запросе надо сделать ЛЕВОЕ СОЕДИНЕНИЕ к первой таблице пакета (ЦеныНоменклатуры), и также добавить в выборку поле Цена.
  18. AlexeyKh
    Offline

    AlexeyKh Опытный в 1С

    Регистрация:
    27 июл 2012
    Сообщения:
    62
    Симпатии:
    0
    Баллы:
    26
    если ТипЦены - перечисление

    то надо так

    где
    Регистр.ТипЦен = &ТипЦены
    или Регистр.ТипЦен = Значение(Перечисление.ТипыЦен.ПустаяСсылка)
  19. TopicStarter Overlay
    midavp
    Offline

    midavp Опытный в 1С

    Регистрация:
    1 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Еще раз Вам огромное спасибо очень помогли, я решил свою проблему. И понял что надо почитать манал по запросам чтоб больше знать и быстро их составлять.
  20. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не за что.

Поделиться этой страницей