| 
    
            
         
         | 
    
  | 
МоментВремени в условии ГДЕ в Запросе. | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        PuhUfa    
     20.07.20 
            ✎
    17:14 
 | 
         
        Есть простой запрос:
 
        ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ | ОтбираемыйДокумент.Ссылка |ПОМЕСТИТЬ ТаблицаДокументов |ИЗ | Документ.РеализацияТоваров КАК ОтбираемыйДокумент |ГДЕ | ОтбираемыйДокумент.Проведен | И ОтбираемыйДокумент.МоментВремени >= &ДатаНачала | И ОтбираемыйДокумент.МоментВремени <= &ДатаОкончания |"; ДатаНачала и ДатаОкончания - МоментВремени Запрос работает, вот только в выборку не попадают документы на основании которых создан момент времени. Делал через МЕЖДУ - результат тот же. Это нормально и просто нужно смириться или как то можно в результат запроса включить граничные документы?  | 
|||
| 
    1
    
        lodger    
     20.07.20 
            ✎
    17:20 
 | 
         
        ВидГраницы - Определяет набор видов границ по отношению к граничному значению:
 
        ВидГраницы.Включая - Граница включает граничное значение. ВидГраницы.Исключая - Граница исключает граничное значение.  | 
|||
| 
    2
    
        PuhUfa    
     20.07.20 
            ✎
    17:23 
 | 
         
        (1) и с чем сравнивать Границу в условии ГДЕ? Что при сравнении с Дата, что при сравнении с МоментВремени получаю ошибку о том, что сравнивать можно только одинаковые типы.     
         | 
|||
| 
    3
    
        ZDenis    
     20.07.20 
            ✎
    17:23 
 | 
         
        Запрос.УстановитьПараметр("ДатаНачала", Новый Граница(Отчет.НачалоПериода, ВидГраницы.Включая) );
 
        Запрос.УстановитьПараметр("ДатаОкончания", Новый Граница(Отчет.КонецПериода, ВидГраницы.Включая) );  | 
|||
| 
    4
    
        RomanYS    
     20.07.20 
            ✎
    17:40 
 | 
         
        (0) Условие ">=" вроде корректно работает с моментами, а вот "<=" почему-то возвращает ложь при равенстве.
 
        Делай отдельно условия на дату и на ссылку.  | 
|||
| 
    5
    
        PuhUfa    
     20.07.20 
            ✎
    17:43 
 | 
         
        (4) Понятно. Значит буду извращаться. Спс.     
         | 
|||
| 
    6
    
        fisher    
     20.07.20 
            ✎
    17:43 
 | 
         
        (0)(4) Странно. Выглядит ненормально. Но я в таком варианте и не использовал никогда.     
         | 
|||
| 
    7
    
        PuhUfa    
     20.07.20 
            ✎
    17:46 
 | 
         
        (6) Как минимум не логично это выглядит -)     
         | 
|||
| 
    8
    
        RomanYS    
     20.07.20 
            ✎
    17:52 
 | 
         
        (6) Там вообще странно
 
        В консоли запросов УПП (на построителе) ВЫБРАТЬ АвансовыйОтчет.Ссылка, АвансовыйОтчет.Представление, АвансовыйОтчет.МоментВремени, &МоментВремени КАК МоментВремениПараметр, АвансовыйОтчет.МоментВремени <= &МоментВремени КАК Поле1, АвансовыйОтчет.МоментВремени >= &МоментВремени КАК Поле2, &МоментВремени <= &МоментВремени КАК Поле3, &МоментВремени >= &МоментВремени КАК Поле4 ИЗ Документ.АвансовыйОтчет КАК АвансовыйОтчет ГДЕ АвансовыйОтчет.МоментВремени >= &МоментВремени МоментВремени - нормально выводится, МоментВремениПараметр - выдает ошибку (Неверные параметры <<?>>&МоментВремени КАК МоментВремениПараметр) Поле1 и Поле2 - выводятся, Поле3 и Поле4 - выдают ошибку (Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. &МоментВремени <<?>><= &МоментВремени КАК Поле3) Проще считать, что запрос просто не умеет работать с моментами, проблем меньше будет  | 
|||
| 
    9
    
        PuhUfa    
     20.07.20 
            ✎
    18:02 
 | 
         
        (8) Да уж. При таком раскладе лучше вообще отказаться от момента времени. Не ясно, что 1С еще не включит в запрос. Хотелось сделать красиво, а получится как всегда -)     
         | 
|||
| 
    10
    
        Конструктор1С    
     20.07.20 
            ✎
    18:19 
 | 
         
        Эээ... А в документе-то нафига отбирать по моменту времени? МВ создан для регистров     
         | 
|||
| 
    11
    
        RomanYS    
     20.07.20 
            ✎
    18:25 
 | 
         
        (10) нафига это ТС конечно интересно. А вот с "МВ создан для регистров" можно поспорить. Границы - да, вероятно для запросов к виртуальным таблицам, с МВ не так однозначно.     
         | 
|||
| 
    12
    
        Конструктор1С    
     20.07.20 
            ✎
    18:35 
 | 
         
        (11) ни разу в жизни даже в голову не пришло фильтровать документы по моменту времени. Они прекрасно отбираются по дате. Все документы внутри одной секунды неминуемо загребутся запросом, если эта секунда входит в диапазон отбора. А если нужно отобрать только часть документов внутри одной секунды... тут уже нужно сперва задуматься, для нафига оно надо
 
        попробовал сейчас сделать отбор в документе по МВ (внутри МВ дата и ссылка), получилось вот такое уродство исходный запрос: ВЫБРАТЬ ПриходнаяНакладная.Ссылка КАК Ссылка, ПриходнаяНакладная.Номер КАК Номер, ПриходнаяНакладная.Дата КАК Дата, ПриходнаяНакладная.МоментВремени КАК МоментВремени ИЗ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная ГДЕ ПриходнаяНакладная.МоментВремени >= &МоментВремени прилетело в СУБД: exec sp_executesql N'SELECT T1._IDRRef, T1._Number, T1._Date_Time, T1._Date_Time, T1._IDRRef FROM dbo._Document34 T1 WHERE (T1._Date_Time >= P1 AND (T1._Date_Time > @P2 OR (T1._Date_Time = @P3 AND (T1._IDRRef >= @P4))))',N'P1 datetime2(3),@P2 datetime2(3),@P3 datetime2(3),@P4 varbinary(16)','4020-01-01 00:00:00','4020-01-01 00:00:00','4020-01-01 00:00:00',0x831DB06EBF821FE511EAA1BCF0CEC88A  | 
|||
| 
    13
    
        Йохохо    
     20.07.20 
            ✎
    18:38 
 | 
         
        (12) но ведь порядок не гарантирован     
         | 
|||
| 
    14
    
        RomanYS    
     20.07.20 
            ✎
    18:50 
 | 
         
        (12) а сделай условие "<="     
         | 
|||
| 
    15
    
        PuhUfa    
     20.07.20 
            ✎
    18:53 
 | 
         
        (10)(11) Своя последовательность. Свой РН. Документы при проведении движения по своему РН НЕ формируют. Движения потом доформировываются отдельным модулем. Движения зависимы от последовательности документов. ДатаНачала формируется как раз из текущей границы последовательности и от нее потом по порядку формируются/переформировываются движения по РН. Понятно, что брать все документы попавшие в секунду дополнительной нагрузки не дадут. Подумаешь, по каким то документам они сформируются без необходимости. Но поскольку, в запросе, можно выбрать МоментВремени то хотел сделать красиво -)     
         | 
|||
| 
    16
    
        Конструктор1С    
     20.07.20 
            ✎
    19:16 
 | 
         
        (13) но не в отборе же. Вот есть, допустим, 1000 документов первой секундой дня. Какой смысл отбирать из всей тыщи документы, которые позже ПриходнойНакладной №598? Технически-то оно возможно, но вот на бизнес-логику такой подход не натянуть
 
        (14) то же самое exec sp_executesql N'SELECT T1._IDRRef, T1._Number, T1._Date_Time, T1._Date_Time, T1._IDRRef FROM dbo._Document34 T1 WHERE (T1._Date_Time <= P1 AND (T1._Date_Time < @P2 OR (T1._Date_Time = @P3 AND (T1._IDRRef <= @P4))))',N'P1 datetime2(3),@P2 datetime2(3),@P3 datetime2(3),@P4 varbinary(16)','4020-01-01 00:00:00','4020-01-01 00:00:00','4020-01-01 00:00:00',0x831DB06EBF821FE511EAA1BCF0CEC88A  | 
|||
| 
    17
    
        Конструктор1С    
     20.07.20 
            ✎
    19:22 
 | 
         
        (15) и что, сильно много документов внутри одной секунды сидит?     
         | 
|||
| 
    18
    
        Йохохо    
     20.07.20 
            ✎
    19:23 
 | 
         
        (16) "но вот на бизнес-логику такой подход не натянуть " повторяемость это то что должен делать момент времени, решения не знаю     
         | 
|||
| 
    19
    
        PuhUfa    
     20.07.20 
            ✎
    19:35 
 | 
         
        (17) Нет не много. В моем случае вообще не критично. Говорю же - хотел сделать красиво раз в запросе есть МоментВремени. Уже переделал.     
         | 
|||
| 
    20
    
        RomanYS    
     20.07.20 
            ✎
    22:14 
 | 
         
        (16) интересно почему "<=" не корректно отрабатывает, если в SQL так переводится. Или криво только в файловой?     
         | 
|||
| 
    21
    
        Конструктор1С    
     21.07.20 
            ✎
    06:36 
 | 
         
        (20) вот такой странный отбор получился, если в отбор передать МВ с датой и ссылкой
 
        ВЫБРАТЬ ПриходнаяНакладная.Ссылка КАК Ссылка, ПриходнаяНакладная.Номер КАК Номер, ПриходнаяНакладная.Дата КАК Дата ИЗ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная ГДЕ ПриходнаяНакладная.МоментВремени >= &НачалоПериода И ПриходнаяНакладная.МоментВремени <= &КонецПериода exec sp_executesql N'SELECT T1._IDRRef, T1._Number, T1._Date_Time FROM dbo._Document34 T1 WHERE (T1._Date_Time >= P1 AND (T1._Date_Time > @P2 OR (T1._Date_Time = @P3 AND (T1._IDRRef >= @P4)))) AND (T1._Date_Time <= @P5 AND (T1._Date_Time < @P6 OR (T1._Date_Time = @P7 AND (T1._IDRRef <= @P8))))',N'P1 datetime2(3),@P2 datetime2(3),@P3 datetime2(3),@P4 varbinary(16),@P5 datetime2(3),@P6 datetime2(3),@P7 datetime2(3),@P8 varbinary(16)','4020-05-01 00:00:00','4020-05-01 00:00:00','4020-05-01 00:00:00',0x8325B06EBF821FE511EACB02EE9F02CB,'4020-07-01 00:00:00','4020-07-01 00:00:00','4020-07-01 00:00:00',0x831DB06EBF821FE511EAA1BCF0CEC88A  | 
|||
| 
    22
    
        RomanYS    
     21.07.20 
            ✎
    11:00 
 | 
         
        (21) почему странный, вроде норм как и в (16). Почему глючит непонятно.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |