Имя: Пароль:
1C
1С v8
Ошибка при сравнении двух полей дата
,
0 Ly_Alena
 
20.10.14
13:11
Есть такой фрагмент кода:

    Если ДатаОтгрузки<>Null Тогда
            
            Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказПокупателя.ДатаОтгрузки,
        |    ЗаказПокупателя.СрокРезерва
        |ИЗ
        |    Документ.НакладнаяНаОтгрузку КАК НакладнаяНаОтгрузку
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
        |        ПО НакладнаяНаОтгрузку.ДокументОснование = ЗаказПокупателя.Ссылка
        |            И НакладнаяНаОтгрузку.Сделка = ЗаказПокупателя.Ссылка
        |ГДЕ
        |    ЗаказПокупателя.ДокументОснование = &ЗаказПокупателя";

    Запрос.УстановитьПараметр("ЗаказПокупателя", ДокументОснование);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

        Если ЭлементыФормы.ДатаОтгрузки.Значение>ВыборкаДетальныеЗаписи.СрокРезерва Тогда
            Сообщить ("Условие выполняется. Документ нельзя проводить!");
        Иначе Сообщить ("Условие НЕ выполняется. Документ можно провести!");
        КонецЕсли;
        КонецЕсли;
Выдает сообщение при попытке провести. Оба поля тип дата.

{Документ.НакладнаяНаОтгрузку.Форма.ФормаДокумента.Форма(2298)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
            Если ЭлементыФормы.ДатаОтгрузки.Значение>ВыборкаДетальныеЗаписи.СрокРезерва Тогда
1 Godofsin
 
20.10.14
13:12
Пока  ВыборкаДетальныеЗаписи.Следующий() Цикл
2 КтоКакБог
 
20.10.14
13:12
Если ДатаОтгрузки >ВыборкаДетальныеЗаписи.СрокРезерва Тогда
3 Ly_Alena
 
20.10.14
13:16
(2) Такой вариант был начальный. А потом начала мудрить. СПасибо!
4 Maxus43
 
20.10.14
13:18
(3) обхода выборки всё равно нет
5 Ly_Alena
 
20.10.14
13:21
(4) Да почему-то не проверяет условие
6 Maxus43
 
20.10.14
13:22
(5) см (1)
7 Ly_Alena
 
20.10.14
13:23
В цикле тоже не попадает (6)
8 Godofsin
 
20.10.14
13:23
(7) Выложи код с циклом
9 Ly_Alena
 
20.10.14
13:24
Если ДатаОтгрузки<>Null Тогда
            
            Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказПокупателя.ДатаОтгрузки,
        |    ЗаказПокупателя.СрокРезерва
        |ИЗ
        |    Документ.НакладнаяНаОтгрузку КАК НакладнаяНаОтгрузку
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
        |        ПО НакладнаяНаОтгрузку.ДокументОснование = ЗаказПокупателя.Ссылка
        |            И НакладнаяНаОтгрузку.Сделка = ЗаказПокупателя.Ссылка
        |ГДЕ
        |    ЗаказПокупателя.ДокументОснование = &ЗаказПокупателя";

    Запрос.УстановитьПараметр("ЗаказПокупателя", ДокументОснование);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
        Пока  ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ДатаОтгрузки>ВыборкаДетальныеЗаписи.СрокРезерва Тогда
            Сообщить ("Условие выполняется. Документ нельзя проводить!");
        Иначе Сообщить ("Условие НЕ выполняется. Документ можно провести!");
        КонецЕсли;
        КонецЦикла;
        КонецЕсли;
        
    КонецЕсли; (8)
10 Godofsin
 
20.10.14
13:26
Если ничего не выводит, значит результат запроса пустой
11 Maxus43
 
20.10.14
13:26
>>Если ДатаОтгрузки<>Null Тогда
выкинь, никогда оно null не будет
12 Godofsin
 
20.10.14
13:27
(11) Кстати, да
13 Ly_Alena
 
20.10.14
13:27
(10) Должен хотя бы сообщение вывести.
14 Godofsin
 
20.10.14
13:27
Ну и вообще, научись пользоваться отладчиком
15 Cube
 
20.10.14
13:28
(9) На NULL потому что надо в запросе затычки делать:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЕстьNULL(ЗаказПокупателя.ДатаОтгрузки, ДатаВремя(1, 1, 1)) КАК ДатаОтгрузки,
        |    ЕстьNULL(ЗаказПокупателя.СрокРезерва, ДатаВремя(1, 1, 1)) КАК СрокРезерва
        |ИЗ
        |    Документ.НакладнаяНаОтгрузку КАК НакладнаяНаОтгрузку
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
        |        ПО НакладнаяНаОтгрузку.ДокументОснование = ЗаказПокупателя.Ссылка
        |            И НакладнаяНаОтгрузку.Сделка = ЗаказПокупателя.Ссылка
        |ГДЕ
        |    ЗаказПокупателя.ДокументОснование = &ЗаказПокупателя";
16 Godofsin
 
20.10.14
13:28
(13) Если выборка пустая - цикл отрабатываться не будет, значит, не будет никаких сообщений. И см (11)
17 ObjectRelation Model
 
20.10.14
13:30
(15) верно, но тогда такие документы попадут в
Сообщить ("Условие выполняется. Документ нельзя проводить!");
18 Ly_Alena
 
20.10.14
13:33
Без Null в цикл попадает, а условие все равно не отрабатывает.
(14) Отладчиком считала что умею пользоваться до Вашей реплики )
19 Godofsin
 
20.10.14
13:34
(18) Вот если бы умела, то тогда легко бы узнала, почему твое условие не отрабатывается =)
20 Ly_Alena
 
20.10.14
13:37
(19) Ну а что делать? ) В цикл попадает и сразу в конецесли;
21 Cube
 
20.10.14
13:41
(20) Задачу опиши, а то не понятно, для чего это надо всё...
22 Godofsin
 
20.10.14
13:44
(20) Ставишь точку остановы на "Если" и смотришь, что там у тебя в ДатаОтгрузки и ВыборкаДетальныеЗаписи.СрокРезерва
23 Ly_Alena
 
20.10.14
13:44
Есть документ ЗаказПокупателя на основании его вводятся данные в документ НакладнаяНаОтгрузку. В документе НакладнаяНаОтгрузку вводится дата отгрузки. В документе ЗаказПокупателя вводится дата закрытия заказа (СрокРезерва).
НакладнаяНаОтгрузку не должна проводиться, если дата отгрузки больше даты закрытия заказа.
24 Ly_Alena
 
20.10.14
13:45
(22) Так и делала - в если не попадает и значения не показывает.
25 Godofsin
 
20.10.14
13:46
(23) ахахах))))
Если ДатаОтгрузки > ДокументОснование.ДатаРезерва тогда
.....
КонецЕсли;
26 Godofsin
 
20.10.14
13:46
(24) Значит выборка пустая ))))
27 Cube
 
20.10.14
13:49
(23) Зачем тебе запрос тогда? Решение в (25) вполне нормальное.
28 Godofsin
 
20.10.14
13:54
+(25) Ну вот так еще на всякий случай:
Если ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.ЗаказПокупателя") И ДатаОтгрузки > ДокументОснование.ДатаРезерва тогда
29 Cube
 
20.10.14
13:57
+(28) И ещё:
Если ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.ЗаказПокупателя") И НЕ ДокументОснование.Пустая() И ДатаОтгрузки > ДокументОснование.ДатаРезерва Тогда
30 Godofsin
 
20.10.14
13:59
(29) +1 =)
31 ObjectRelation Model
 
20.10.14
14:00
(29) осподи...
32 Ly_Alena
 
20.10.14
14:02
А че-то у меня не пошло без запроса. Попробую то что предложили.
33 Ly_Alena
 
20.10.14
14:41
Тада-да-дааам!
Если ЗначениеЗаполнено(ДокументОснование)
        И ЗначениеЗаполнено(ДатаОтгрузки)
        И ДатаОтгрузки > ДокументОснование.СрокРезерва Тогда
        Предупреждение("Дата отгрузки позднее даты закрытия заказа!");
        Отказ=Истина;    
        Иначе Отказ=Ложь;
    КонецЕсли;

Cube Отдельное спасибо!