8.х Сравнение Дат

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем zayaroslava, 25 май 2011.

  1. TopicStarter Overlay
    zayaroslava
    Offline

    zayaroslava Опытный в 1С

    Регистрация:
    27 янв 2010
    Сообщения:
    329
    Симпатии:
    1
    Баллы:
    26
    Подскажите как правильно реализовать функцию сравнения дат.
    Нужно сравнить тек.дата и дату которая была сохранена раннее в реквизит (ПрошЕдшДата) и если ПрошЕдшДата Меньше Тек.Дата тогда Событие ;
    Проще говоря необходимо сделать так чтобы данные можно было менять только в течении дня до 24:00,а потом запретить редактирование данных.

    Пытался вот так :
    Код:
    Процедура ПриОткрытии()
    
    Если ВремяЗаказа < День(ТекущаяДата()) тогда //Как здесь правильно написать сравнение ?
    ЭлементыФормы.Заказ.Доступность = ложь;
    
    КонецЕсли;
    КонецПроцедуры
    
    Процедура ЗаказПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    ВремяЗаказа = День(ТекущаяДата());
    КонецПроцедуры
    
    
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Если ВремяЗаказа < КонецДня(ТекущаяДата()) И ВремяЗаказа > НачалоДня (ТекущаяДата())Тогда
    ЭлементыФормы.Заказ.Доступность = ложь;
    КонецЕсли;
  3. TopicStarter Overlay
    zayaroslava
    Offline

    zayaroslava Опытный в 1С

    Регистрация:
    27 янв 2010
    Сообщения:
    329
    Симпатии:
    1
    Баллы:
    26
    А у реквизита ВремяЗаказа какой должен быть ТИП ? Дата или Число ...Когда ставлю Дату то в процедуре:

    Код:
    Процедура ЗаказПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    ВремяЗаказа = День(ТекущаяДата());
    КонецПроцедуры
    
    
    Не происходит присвоение значения для ВремяЗаказа,а если ставлю тип число то появляется Ошибка
  4. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Тип должен быть дата.
    А в присвоении зачем функция День()?
    Код:
    ВремяЗаказа = ТекущаяДата();
    
    
    P.S. И в сравнении надо наверное не < и >, а <= и >=
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Даты сравниваются с датами.
    При ВремяЗаказа = День(ТекущаяДата()) в переменно ВремяЗаказа будет число, что не верно.

    Если предел измерения даты - день, то приводите дату к началу дня, т.е.
    ВремяЗаказа = НачалоДня(ТекущаяДата())
  6. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    вот так можно сравнить 2 даты. принадлежат ли они одному дню.

    Код:
    Если НачалоДня(Дата1)=НачалоДня(Дата2) Тогда
    // есть доступ
    Иначе
    // нет доступа
    КонецЕсли;
    
    
  7. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Зачем тогда сравнивать время? Если отличаются даты значит редактировать нельзя.

    Код:
    Процедура ПриОткрытии()
    
    Если НачалоДня(ВремяЗаказа) = НачалоДня(ТекущаяДата()) Тогда
    
    ЭлементыФормы.Заказ.Доступность = Истина;
    
    КонецЕсли;
    
    КонецПроцедуры
    


    Опередили =)
  8. TopicStarter Overlay
    zayaroslava
    Offline

    zayaroslava Опытный в 1С

    Регистрация:
    27 янв 2010
    Сообщения:
    329
    Симпатии:
    1
    Баллы:
    26
    Работает,но не совсем правильно.Этот документ будут открывать в течении дня много раз и добавлять туда различные данные(помимо ВремяЗАказа,есть Время Работы и пр) ..но при такой конструкции,при открытии второй раз те строчки которые не изменялись будут не доступны так как у них по умолчанию будет значение 01.01.0001 00:00:00...Как быть в таком случае ?
  9. TopicStarter Overlay
    zayaroslava
    Offline

    zayaroslava Опытный в 1С

    Регистрация:
    27 янв 2010
    Сообщения:
    329
    Симпатии:
    1
    Баллы:
    26
    Вот так вроде все работает:
    Код:
    Если НЕ ЭтоНовый() тогда
    
    Если НачалоДня(ВремяЗаказСписка) = НачалоДня(ТекущаяДата()) или Лев(ВремяЗаказСписка,10) = "01.01.0001" Тогда
    
    ЭлементыФормы.Заказ.Доступность = истина;
    иначе
    ЭлементыФормы.Заказ.Доступность = ложь;
    
    КонецЕсли;
    КонецЕсли;
    
    
    Всем Спасибо !

Поделиться этой страницей