Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Сравнение Даты документа с Датой переменной

Сравнение Даты документа с Датой переменной
Я
   sasha-asn
 
30.01.20 - 14:11
Уважаемые эксперты, прошу вашей помощи! Делаю проверку ПередЗаписью, но она не срабатывает.
Я сравниваю Дату текущего документа с Датой в переменной (Дата документа + 10 дней):

Функция ПроверкаДнейЗаписиКомменатрия()

    ЛимитДнейИзменЦен = ЭтотОбъект.Дата + 10;
    
    Если ЭтотОбъект.Дата >= ЛимитДнейИзменЦен Тогда
        Сообщить("Сработало!");
    КонецЕсли    
    
КонецФункции
 
 
   Волшебник
 
Модератор
1 - 30.01.20 - 14:13
+ 10*86400
   Builder
 
2 - 30.01.20 - 14:14
+10 - это +10 СЕКУНД.
   Волшебник
 
Модератор
3 - 30.01.20 - 14:14
Но лучше задействовать ещё функцию КонецДня, чтобы не было зависимости от времени.
   azernot
 
4 - 30.01.20 - 14:14
Как может выполниться условие А>=(А+10)? На мой взгляд - никак.
   Homer
 
5 - 30.01.20 - 14:14
(4) +
   sasha-asn
 
6 - 30.01.20 - 14:16
(3) (1)  Спасибо большое!
   Волшебник
 
Модератор
7 - 30.01.20 - 14:16
(4) в точку
   ZDenis
 
8 - 30.01.20 - 14:17
(6) Хочешь сказать, что условие стало работать?
   goodprog
 
9 - 30.01.20 - 14:19
а это ты КА 2.4 внедряешь? ой ой
   sasha-asn
 
10 - 30.01.20 - 14:19
(8) нет, где ошибаюсь?
   sasha-asn
 
11 - 30.01.20 - 14:20
(9) каждый живет как может)
   Fish
 
12 - 30.01.20 - 14:20
(10) Читай (4)
   welwel
 
13 - 30.01.20 - 14:22
(12) см. (11) :)
   goodprog
 
14 - 30.01.20 - 14:22
(10) условие никогда не сработает, пиши полную постановку задачи
   ZDenis
 
15 - 30.01.20 - 14:24
Тебе надо хранить прошлую дату в реквизите формы, а потом сравнивать ее с той, которую поставили в доке
   sasha-asn
 
16 - 30.01.20 - 14:28
(15) только созданием реквизита? А нельзя как то сравнивать текущие данные?
типо:

 ДатаДокументаЗаказПоставщику = ЭтотОбъект.Дата;
    ЛимитДнейИзменЦен = ЭтотОбъект.Дата + 10*86400;
    
    Если ДатаДокументаЗаказПоставщику >= ЛимитДнейИзменЦен  Тогда
        Сообщить("Сработало!");
    КонецЕсли
   welwel
 
17 - 30.01.20 - 14:28
(10) если без шуток, то, возможно, стоит воспользоваться отладчиком, чтоб увидеть работу кода по шагам и прийти к пониманию, чем опираться на подсказки, не приобретая опыт.
   Fish
 
18 - 30.01.20 - 14:31
(16) А ты (4) внимательно прочитал?
   sasha-asn
 
19 - 30.01.20 - 14:37
(17) (18) (15) (14)  Сработало, ВСЕМ ОГРОМНОЕ спасибо! Ваши советы мне помогают по жизни!

 ДатаДокументаЗаказПоставщику = ЭтотОбъект.Дата;
    ЛимитДнейИзменЦен = ЭтотОбъект.Дата + 10*86400;
    
    Если ЛимитДнейИзменЦен > ДатаДокументаЗаказПоставщику   Тогда
        Сообщить("Документ можно исправлять только в течение 10 дней");
    КонецЕсли
   sasha-asn
 
20 - 30.01.20 - 14:38
это то что я хотел!
   azernot
 
21 - 30.01.20 - 14:40
(19)
Мне прямо интересно, при каких условиях условие не сработает?
Зачем такие сложности? почему нельзя просто
Сообщить("Документ можно исправлять только в течение 10 дней");
   Ненавижу 1С
 
22 - 30.01.20 - 14:41
+(21) коварное условие просто
   Kigo_Kigo
 
23 - 30.01.20 - 14:42
есть такая проблема что датадокумента в формате дата + время, дата реквизита в основном дата, по этому прежде чем сравнивать надо дату форматнуть в вид даты без времени, тогда будет отрабатывать
   azernot
 
24 - 30.01.20 - 14:42
(22) :)

Мы берём дату, добавляем к ней 10 дней, потом проверяем, а точно дата увеличенная на 10 дней больше изначальной даты? Ожидаемо получаем, что да, точно, и сообщаем пользователю, что разработчик - придурок.
   sasha-asn
 
25 - 30.01.20 - 14:42
(21) я ещё дополнительно добавлю для условия роль ... но это уже совсем другая история
   azernot
 
26 - 30.01.20 - 14:44
(25) Спорим ваш код будет ВСЕГДА сообщать, что Документ можно исправлять только в течение 10 дней? Вне зависимости ни от чего.
   sasha-asn
 
27 - 30.01.20 - 14:44
(24) почему сразу ругаться, я ещё условия собираюсь дописать ;)
   azernot
 
28 - 30.01.20 - 14:45
(27) А-а, ну тогда - пардон.
   Fish
 
29 - 30.01.20 - 14:49
(27) Какие именно, если не секрет?
   azernot
 
30 - 30.01.20 - 14:49
А вообще, это натолкнуло меня на мысль об обучении программированию "по бразильской системе": если считается, что какое-то условие ну никогда-никогда не может выполниться, надо вставить в эту веточку Если Тогда что-то типа "Сообщить("Я, <имя рек> - пассивный гомосексуалист!")...
 
 Рекламное место пустует
   unregistered
 
31 - 30.01.20 - 14:50
Автор. Открой для себя функцию глобального контекста ТекущаяДата().
Осмелюсь предположить, что именно текущую дату следует сравнивать с десятидневным периодом от даты документа.
Ибо дата документа, увеличенная на 10 дней всегда будет больше даты документа. Вечно.
   goodprog
 
32 - 30.01.20 - 14:51
(22) я бы даже сказал кровавое
   Kigo_Kigo
 
33 - 30.01.20 - 14:52
Формат('20020820153309', "ДЛФ=Д");

Функция ПроверкаДнейЗаписиКомменатрия()

    ЛимитДнейИзменЦен = ЭтотОбъект.Дата + 10;
    
    Если Формат(ТекущаяДата(),"ДЛФ=Д") >= Формат(ЛимитДнейИзменЦен,"ДЛФ=Д") Тогда
        Сообщить("Сработало!");
    КонецЕсли    
    
КонецФункции
   Kigo_Kigo
 
34 - 30.01.20 - 14:53
точнее так
Функция ПроверкаДнейЗаписиКомменатрия()

    ЛимитДнейИзменЦен = ЭтотОбъект.Дата + 10;
    
    Если Дата(Формат(ТекущаяДата(),"ДЛФ=Д")) >= Дата(Формат(ЛимитДнейИзменЦен,"ДЛФ=Д")) Тогда
        Сообщить("Сработало!");
    КонецЕсли    
    
КонецФункции
   goodprog
 
35 - 30.01.20 - 14:55
(34) Ему дней надо, а не секунд
   azernot
 
36 - 30.01.20 - 14:56
(34) Это что?! Это образец индусского кода?
   goodprog
 
37 - 30.01.20 - 14:56
(36) я надеюсь это стеб
   piter3
 
38 - 30.01.20 - 14:57
Ну вы зажигаете тут)
   azernot
 
39 - 30.01.20 - 15:00
(37) Ну для стёба как-то маловато извращений.

Можно ещё сделать так:

ЛимитДнейИзменЦен = ЭтотОбъект.Дата;
Для Дни = 1 по 10 Цикл//Дни

    Для Часы = 1 по 24 Цикл//Часы

        Для Минуты = 1 по 60 Цикл//Минуты

            Для Секунды = 1 по 60 Цикл//Секунды

                ЛимитДнейИзменЦен = ЛимитДнейИзменЦен+1; 
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
КонецЦикла;
   goodprog
 
40 - 30.01.20 - 15:02
Умный пользователь всегда будет держать спорные документы с актуальной для редактирования датой)
   azernot
 
41 - 30.01.20 - 15:04
(40) Раз в 9 дней передвигать их на текущую дату..


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.