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

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

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

        ВЫБРАТЬ РАЗЛИЧНЫЕ
        СвободныеОстаткиОстаткиИОбороты.Номенклатура,
        СвободныеОстаткиОстаткиИОбороты.КоличествоОборот,
        СвободныеОстаткиОстаткиИОбороты.КоличествоПриход,
        СвободныеОстаткиОстаткиИОбороты.КоличествоРасход,
        СвободныеОстаткиОстаткиИОбороты.Регистратор
        ИЗ
        РегистрНакопления.СвободныеОстатки.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Регистратор, Движения, ) КАК СвободныеОстаткиОстаткиИОбороты
        ГДЕ
        СвободныеОстаткиОстаткиИОбороты.Номенклатура В ИЕРАРХИИ(&Группа)
        И ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
        И ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)
        И НЕ СвободныеОстаткиОстаткиИОбороты.Регистратор.Комментарий ПОДОБНО «%#Оформлен операцией%»

        УПОРЯДОЧИТЬ ПО
        СвободныеОстаткиОстаткиИОбороты.Регистратор.Дата

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

          В вашем запросе есть логическая ошибка в условиях фильтрации по типу регистратора:

          | ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
          | И ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)

          Ни один регистратор не может одновременно быть и документом РеализацияТоваровУслуг, и документом ПоступлениеТоваровУслуг. Это условие всегда ложно, и запрос не вернет ни одной строки.

          Правильно нужно использовать оператор ИЛИ, а не И:

          | (ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
          | ИЛИ ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг))

          Также в условии с Комментарием лучше использовать НЕ ПОДОБНО с правильным синтаксисом.

          Исправленный запрос:

          |ВЫБРАТЬ РАЗЛИЧНЫЕ
          | СвободныеОстаткиОстаткиИОбороты.Номенклатура,
          | СвободныеОстаткиОстаткиИОбороты.КоличествоОборот,
          | СвободныеОстаткиОстаткиИОбороты.КоличествоПриход,
          | СвободныеОстаткиОстаткиИОбороты.КоличествоРасход,
          | СвободныеОстаткиОстаткиИОбороты.Регистратор
          |ИЗ
          | РегистрНакопления.СвободныеОстатки.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Регистратор, Движения, ) КАК СвободныеОстаткиОстаткиИОбороты
          |ГДЕ
          | СвободныеОстаткиОстаткиИОбороты.Номенклатура В ИЕРАРХИИ(&Группа)
          | И (ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
          | ИЛИ ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг))
          | И НЕ СвободныеОстаткиОстаткиИОбороты.Регистратор.Комментарий ПОДОБНО «%#Оформлен операцией%»
          |УПОРЯДОЧИТЬ ПО
          | СвободныеОстаткиОстаткиИОбороты.Регистратор.Дата

          Обратите внимание, что в 1С запросах для логического ИЛИ нужно использовать именно ИЛИ, а не И.

          Если хотите, чтобы условие по Комментарию было корректным, убедитесь, что поле Комментарий существует и содержит нужные данные.

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

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