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

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

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

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

        текст запроса:
        ВЫБРАТЬ
        ОсновнойОстаткиИОбороты.Субконто1 КАК Субконто1,
        ОсновнойОстаткиИОбороты.Субконто2 КАК Субконто2,
        ОсновнойОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
        ОсновнойОстаткиИОбороты.СуммаНачальныйОстатокКт КАК СуммаНачальныйОстатокКт,
        ОсновнойОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
        ОсновнойОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
        ОсновнойОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,
        ОсновнойОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКонечныйОстатокКт
        ИЗ
        РегистрБухгалтерии.Основной.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет В (&ВыбСчета), ,) КАК ОсновнойОстаткиИОбороты

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

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

          В вашем случае итоговые строки по Субконто1 — это строки, где:

          — Субконто1 заполнено (не пустое значение)
          — Субконто2 пустое (NULL или пустое значение)

          Поэтому в запросе нужно добавить условие в раздел ГДЕ, например:

          |ГДЕ
          | НЕ (ОсновнойОстаткиИОбороты.Субконто1 <> NULL ИЛИ ОсновнойОстаткиИОбороты.Субконто1 <> «» )
          | И ОсновнойОстаткиИОбороты.Субконто2 = NULL

          Но в 1С лучше писать так:

          |ГДЕ
          | НЕ (ОсновнойОстаткиИОбороты.Субконто1 <> Неопределено И ОсновнойОстаткиИОбороты.Субконто2 = Неопределено)

          Или, если в вашей базе пустые значения — это пустая строка, то:

          |ГДЕ
          | НЕ (ОсновнойОстаткиИОбороты.Субконто1 <> Неопределено И (ОсновнойОстаткиИОбороты.Субконто2 = Неопределено ИЛИ ОсновнойОстаткиИОбороты.Субконто2 = «»))

          Если в вашем случае итоговые строки — это именно строки, где Субконто2 пустое, а Субконто1 заполнено, то условие фильтрации будет именно таким.

          Итоговый запрос с фильтром:

          |ВЫБРАТЬ
          | ОсновнойОстаткиИОбороты.Субконто1 КАК Субконто1,
          | ОсновнойОстаткиИОбороты.Субконто2 КАК Субконто2,
          | ОсновнойОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
          | ОсновнойОстаткиИОбороты.СуммаНачальныйОстатокКт КАК СуммаНачальныйОстатокКт,
          | ОсновнойОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
          | ОсновнойОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
          | ОсновнойОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,
          | ОсновнойОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКонечныйОстатокКт
          |ИЗ
          | РегистрБухгалтерии.Основной.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет В (&ВыбСчета), ,) КАК ОсновнойОстаткиИОбороты
          |ГДЕ
          | НЕ (ОсновнойОстаткиИОбороты.Субконто1 <> Неопределено И (ОсновнойОстаткиИОбороты.Субконто2 = Неопределено ИЛИ ОсновнойОстаткиИОбороты.Субконто2 = «»))

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

          Если же пустые значения — это пустая строка, то замените Неопределено на «».

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

          |ГДЕ
          | НЕ (ОсновнойОстаткиИОбороты.Субконто1 <> Неопределено И (ОсновнойОстаткиИОбороты.Субконто2 = Неопределено ИЛИ ОсновнойОстаткиИОбороты.Субконто2 = «»))

          Таким образом вы исключите из выборки итоговые строки по Субконто1, которые не имеют детализации по Субконто2.

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