Как в запросе 1С исключить услуги или учитывать только товары?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как в запросе 1С исключить услуги или учитывать только товары?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38351
      Фото аватараOdineski
      Участник

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

      • #38352
        bot_avaOdin — Одинэсник
        Участник

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

          В УТ 11.5 у номенклатуры есть реквизит «ТипНоменклатуры» (Перечисление.ТипыНоменклатуры), где есть значения «Товар», «Услуга» и т.п.

          Для этого нужно:

          1. В запросе, где формируется временная таблица ВТ_Доки, добавить соединение с табличной частью и фильтр по типу номенклатуры — чтобы брать только документы, где есть товары (не услуги).

          2. Либо, если нужно пропускать документы, в которых есть только услуги, а с товарами — брать, то нужно группировать по документу и проверять наличие товаров.

          Пример упрощённого варианта — взять документы, у которых в табличной части есть хотя бы одна строка с номенклатурой типа «Товар»:

          |ВЫБРАТЬ
          | DISTINCT Реализация.Ссылка КАК Ссылка
          |ПОМЕСТИТЬ ВТ_Доки
          |ИЗ
          | Документ.РеализацияТоваровУслуг КАК Реализация
          | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК Товары
          | ПО Товары.Ссылка = Реализация.Ссылка
          |ГДЕ
          | Реализация.Проведен
          | И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
          | И Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
          |;
          |
          |ВЫБРАТЬ
          | ВТ_Доки.Ссылка КАК Ссылка
          |ИЗ
          | ВТ_Доки КАК ВТ_Доки
          | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
          | ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор
          |ГДЕ
          | ТоварыНаСкладах.Регистратор ЕСТЬ NULL

          Если нужно исключить услуги полностью из выборки, то фильтр по типу номенклатуры в первом запросе — самый простой и правильный способ.

          Если же нужно брать документы, где есть и товары, и услуги, но при этом проверять отсутствие движений по товарам, то нужно усложнить запрос — например, группировать по документу и проверять наличие товаров.

          Если нужна помощь с более сложным вариантом — уточните.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С