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

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

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

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

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

Сообщить("Документ можно исправлять только в течение 10 дней");
22 Ненавижу 1С
 
гуру
30.01.20
14:41
+(21) коварное условие просто
23 Kigo_Kigo
 
30.01.20
14:42
есть такая проблема что датадокумента в формате дата + время, дата реквизита в основном дата, по этому прежде чем сравнивать надо дату форматнуть в вид даты без времени, тогда будет отрабатывать
24 azernot
 
30.01.20
14:42
(22) :)

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

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

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

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

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

ЛимитДнейИзменЦен = ЭтотОбъект.Дата;
Для Дни = 1 по 10 Цикл //Дни
    Для Часы = 1 по 24 Цикл //Часы
        Для Минуты = 1 по 60 Цикл //Минуты
            Для Секунды = 1 по 60 Цикл //Секунды
                ЛимитДнейИзменЦен = ЛимитДнейИзменЦен+1;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
КонецЦикла;
40 goodprog
 
30.01.20
15:02
Умный пользователь всегда будет держать спорные документы с актуальной для редактирования датой)
41 azernot
 
30.01.20
15:04
(40) Раз в 9 дней передвигать их на текущую дату..
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.