Имя: Пароль:
1C
1С v8
Условие в запросе(скд)
,
0 Буковка
 
05.07.23
12:43
Добрый день! Мне нужно чтобы в отчет попали значения, где в табличной части не заполнено значение реквизита уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт и также значения, где в табличной части отсутствуют строки (отчет формируется также по данным реквизитов не из табличной части). Написала условие, где проверяется на пустую дату первого реквизита (здесь всё нормально), но не попадают строки, где тч не заполнена. Подскажите, пожалуйста, как можно переписать это условие?

ВЫБОР
            КОГДА &ТолькоОткрытыеВопросы
                ТОГДА уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт = ДАТАВРЕМЯ(1, 1, 1)
                        ИЛИ уникаЛистОткрытыхВопросовИстория.Дата = ДАТАВРЕМЯ(1, 1, 1)
            ИНАЧЕ ИСТИНА
        КОНЕЦ
1 lodger
 
05.07.23
12:45
(0) вопрос ещё в том, где ты это условие ставишь.
в блоке ГДЕ или в связях таблиц ИЗ . ПО .
2 azernot
 
05.07.23
12:54
(0)  Не видя запроса сложно сказать. Но предположительно, можно попробовать это:

естьnull(уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт, ДАТАВРЕМЯ(1, 1, 1)) = ДАТАВРЕМЯ(1, 1, 1)
3 Буковка
 
05.07.23
12:58
(2) это работает! спасибо большое!!!
4 Буковка
 
06.07.23
14:59
Еще раз добрый день! Теперь нужно добавить условие, в случае, если отсутствует табличная часть, то проверить статус и выводить данные только в случае, если он закрыт. При этом оставить условие без проверки статуса, если в тч есть строки и там не заполнена датафакт(их выводим). Сло
мала всю голову. Подскажите, пожалуйста
5 Буковка
 
06.07.23
15:01
вот так работает, но нужно еще сделать проверку на статус, если нет строк в тч
ВЫБОР
            КОГДА &ТолькоОткрытыеВопросы
                ТОГДА ЕСТЬNULL(уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ИНАЧЕ ИСТИНА
        КОНЕЦ
6 CepeLLlka
 
06.07.23
15:04
(0)Вы в курсе про "Метод Буковки" для решения одного из билетов?
7 Буковка
 
06.07.23
15:05
(6) нет, нужно читать по слогам? показать весь запрос?
8 CepeLLlka
 
06.07.23
15:08
(7)Да нее, значит вы не та Буковка прост :)
9 azernot
 
06.07.23
15:08
(7) >показать весь запрос?
Да. По крайней мере значащую часть. В (2) было просто попадание пальцем в небо. Рассчитывать на повторение такой угадайки - глупо.
10 Буковка
 
06.07.23
15:10
(9)
ВЫБРАТЬ
    уникаЛистОткрытыхВопросов.НазваниеВопроса КАК НазваниеВопроса,
    уникаЛистОткрытыхВопросов.Дата КАК Дата,
    уникаЛистОткрытыхВопросов.Инициатор КАК Инициатор,
    уникаЛистОткрытыхВопросов.Статус КАК Статус,
    уникаЛистОткрытыхВопросов.Тема КАК КатегорияВопроса,
    уникаЛистОткрытыхВопросов.ТекстВопроса КАК ТекстВопроса,
    уникаЛистОткрытыхВопросов.ПланируемыйСрок КАК ПланируемыйСрок,
    уникаЛистОткрытыхВопросов.ДатаЗакрытия КАК ДатаЗакрытия,
    уникаЛистОткрытыхВопросов.Объект КАК Объект,
    уникаЛистОткрытыхВопросов.ТипЗадачи КАК ТипЗадачи,
    уникаЛистОткрытыхВопросов.Ссылка КАК Ссылка,
    уникаЛистОткрытыхВопросовИстория.ОтветственнаяСторона КАК ОтветственнаяСторона,
    уникаЛистОткрытыхВопросовИстория.ДатаОтвета КАК ДатаОтвета,
    уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт КАК ДатаОтветаФакт,
    уникаЛистОткрытыхВопросовИстория.Дата КАК ДатаВопроса,
    ВЫРАЗИТЬ(уникаЛистОткрытыхВопросовИстория.ОписаниеИзменения КАК СТРОКА(500)) КАК ОписаниеИзменения
ИЗ
    Документ.уникаЛистОткрытыхВопросов КАК уникаЛистОткрытыхВопросов
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.уникаЛистОткрытыхВопросов.ИсторияРешения КАК уникаЛистОткрытыхВопросовИстория
        ПО (уникаЛистОткрытыхВопросовИстория.Ссылка = уникаЛистОткрытыхВопросов.Ссылка)
ГДЕ
    НЕ уникаЛистОткрытыхВопросов.ПометкаУдаления
    И ВЫБОР
            КОГДА &ИсключитьВнутреннийПротокол
                ТОГДА НЕ уникаЛистОткрытыхВопросов.ТипЗадачи = ЗНАЧЕНИЕ(Перечисление.уникаТипыЗадачЛистОткрытыхВопросов.ВнутреннийПротокол)
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И ВЫБОР
            КОГДА &ТолькоОткрытыеВопросы
                ТОГДА ЕСТЬNULL(уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ИНАЧЕ ИСТИНА
        КОНЕЦ
{ГДЕ
    (уникаЛистОткрытыхВопросов.Объект = &Объект),
    (уникаЛистОткрытыхВопросов.ТипЗадачи = &ТипЗадачиП),
    (уникаЛистОткрытыхВопросов.Статус = &Статус),
    (уникаЛистОткрытыхВопросов.Тема = &КатегорияВопроса),
    (ВЫБОР
            КОГДА &ОтветственнаяКомпания = ЗНАЧЕНИЕ(Перечисление.уникаОтветственнаяСторона.уника)
                ТОГДА уникаЛистОткрытыхВопросовИстория.ОтветственнаяСторона.Код = "000000382"
            КОГДА &ОтветственнаяКомпания = ЗНАЧЕНИЕ(Перечисление.уникаОтветственнаяСторона.подрядчики)
                ТОГДА уникаЛистОткрытыхВопросовИстория.ОтветственнаяСторона.Родитель.Наименование = "подрядчики"
                        И НЕ уникаЛистОткрытыхВопросовИстория.ОтветственнаяСторона.Код = "000000382"
            КОГДА &ОтветственнаяКомпания = ЗНАЧЕНИЕ(Перечисление.уникаОтветственнаяСторона.заказчики)
                ТОГДА уникаЛистОткрытыхВопросовИстория.ОтветственнаяСторона.Родитель.Наименование = "Заказчики"
        КОНЕЦ)}
11 azernot
 
06.07.23
15:12
Судя по всему, таблица "уникаЛистОткрытыхВопросовИстория" - это табличная часть.
Значит условие
"уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт IS NULL" - означает отсутствие строки табличной части
Что за статус, и в какой таблице он хранится - неизвестно, но видимо вам нужно проверить этот статус. Что-то типа


уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт IS NULL И уникаЛистОткрытыхВопросов.Статус = &ЗначениеСтатусаЗакрыт
12 azernot
 
06.07.23
15:31
(10) Вы попробуйте просто в рамках булевой логики расписать все свои условия. А потом уже переложить это на язык запросов.

Вот как бы вы решали проблему в коде 1С?
Например, у вас условия типа:

Если НетСтрокВТабличнойЧасти Тогда
  Если Статус = Закрыт Тогда
   СтрокаТаблицыПоходит = Истина;
  Иначе
   СтрокаТаблцыПодходит = Ложь;
  КонецЕсли;
Иначе
  Если ДатаФакт = Дата(1,1,1) Тогда
   СтрокаТаблицыПоходит = Ложь;
  Иначе
   СтрокаТаблцыПодходит = Истина;
  КонецЕсли;
КонецЕсли;


Вот и попробуйте всё это написать через Выбор когда.
13 Буковка
 
06.07.23
15:37
(11) да, этот код как раз то, что нужно, данные отбираются. сейчас попробую соединить эти условия. Получается нужно:


ЕСТЬNULL(уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

И


уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт ЕСТЬ NULL
                        И уникаЛистОткрытыхВопросов.Статус = ЗНАЧЕНИЕ(Перечисление.уникаВопросОткрытЗакрыт.Открыт)
14 azernot
 
06.07.23
15:41
(13) очевидно, что это не сработает для документов с таблтчной частью. И вы поймете это, когда попробуете.
15 Буковка
 
06.07.23
15:47
(14) а объединение меня не спасет?
16 azernot
 
06.07.23
15:48
(13) Конструкция ВЫБОР допускает вложенность.
Например

ВЫБОР КОГДА уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт IS NULL ТОГДА
  уникаЛистОткрытыхВопросов.Статус = ЗНАЧЕНИЕ(Перечисление.уникаВопросОткрытЗакрыт.Открыт)
ИНАЧЕ
  ВЫБОР КОГДА &ТолькоОткрытыеВопросы
       ТОГДА уникаЛистОткрытыхВопросовИстория.ДатаОтветаФакт = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
       ИНАЧЕ ИСТИНА
  КОНЕЦ
КОНЕЦ

Можно также использовать ИЛИ, можно испольновать ВЫБОР КОГДА .... ТОГДА КОГДА (это как бы ИНАЧЕ)... ТОГДА КОГДА ... ТОГДА КОНЕЦ
17 azernot
 
06.07.23
15:49
(15) Спасёт. Но надо ли?
18 azernot
 
06.07.23
15:49
(16) * это как бы ИНАЧЕЕСЛИ
19 Буковка
 
06.07.23
15:56
(18) всё работает, меня спасло не объединение, а Вы. А тут есть донаты? скину Вам на кофе или шоколадку
20 azernot
 
06.07.23
16:04
(19) Да, конечно. Это очень просто:
Отправьте SMS со словом ДОБРО на короткий номер 5541.
Заранее спасибо.