Имя: Пароль:
1C
1С v8
Выводить сообщение с оставшимися днями до определенного числа
0 Константин536
 
08.04.15
09:59
Здравствуйте. Есть проблемка. Хочу чтобы при достижении определенного числа в месяце, добавлялся месяц и производился отсчет сколько дней осталось до этого числа.
Пример:

Процедура ПередНачаломРаботыСистемы(Отказ)
    ДатаКредита = '20150408';
    ДеньКредита = День(ДатаКредита);
    ТекущийДень = День(ТекущаяДата());
    Если ДатаКредита > ТекущаяДата() тогда
        Сообщить("До оплаты осталось" + " " + (ДеньКредита - ТекущийДень));
    КонецЕсли;
    
        Если ДеньКредита = ТекущийДень тогда
        ДатаКредита = ДобавитьМесяц(ДатаКредита, 1);

        //нужно чтоб из новой даты(20150508) вычитались дни
            
КонецЕсли;
    КонецПроцедуры
1 Fish
 
08.04.15
10:01
(0) Ну так и вычитай дни.
2 D_E_S_131
 
08.04.15
10:16
1С:Коллектор пишите?
3 Господин ПЖ
 
08.04.15
10:24
охота посмотреть чего будет

при

ДеньКредита = День('20151231');
ТекущийДень = День('20160101');


....
4 butterbean
 
08.04.15
10:30
(0) надо (НачалоДня(ДатаКредита) - НачалоДня(ТекущаяДата())) / 86400
5 Константин536
 
08.04.15
12:07
(2) нет, просто захотелось попробовать реализовать такую задачу.
6 Константин536
 
08.04.15
12:08
а как быть с тем, что в одном месяце 30 дней, а в другом 31?
7 kosts
 
08.04.15
12:10
(2) Систему защиты конфигурации, же
8 D_E_S_131
 
08.04.15
12:15
(7) Тогда это круто! Представляю, что там за "конфигурация", если ТС даже операции с датами не освоил. :)
9 DrShad
 
08.04.15
12:17
(6) скриптами считай
10 DrShad
 
08.04.15
12:19
(function(decl){
    decl.rusDeclention = function(single, twin, many, space) {
    if (!space) {
        space ='';
    }
    var div10 = this % 10;
    var div100 = Math.floor(this / 10) % 10;
    var result = many;
    if (div100!=1) {
        switch (div10) {
            case 1:result = single;
        break;
            case 2:
            case 3:
            case 4:
                result = twin;
        break;
            default:
        break;
        }
    }
    return this.toString() + space + result;
}
})(Number.prototype)

function generateText(difference) {
    var days = Math.floor(difference / 86400000);
    var hours = Math.floor(difference % 86400000 / 3600000);
    var minutes = Math.floor(difference % 3600000 / 60000);
    var seconds = Math.floor(difference % 60000 / 1000);
    return 'До нового года осталось '
            + (days?days.rusDeclention('день','дня','дней',' ') + ' ':'')
            + (hours?hours.rusDeclention('час','часа','часов',' ') + ' ':'')
            + (minutes?minutes.rusDeclention('минута','минуты','минут',' ') + ' ':'')
            + (seconds?'и ' + seconds.rusDeclention('секунда','секунды','секунд',' '):'');
}

$(document).ready(
function() {
    var i=5;
    var timer = document.createElement('div');
    $('h1.forum-title').after(timer);
    var d=new Date();
    var newYear = new Date(d.getFullYear()+1, 0, 1, 0,0,0,0);
    var lastdifference = newYear - d;
    timer.innerHTML = generateText(lastdifference);
    setInterval(function() {
        d = new Date;
        var difference = newYear - d;
        if (lastdifference == difference) return;
        lastdifference = difference;
        timer.innerHTML = generateText(difference);
    },500);
}
)
11 Новый участник
 
08.04.15
12:22
Вычитай даты, выводи "вам осталось 100500 секунд". Не забудь про КонецДня().
12 Константин536
 
08.04.15
12:34
вот такой код вышел:
Процедура ПередНачаломРаботыСистемы(Отказ)
ДатаКредита = '20150409';    
ДеньКредита = День(ДатаКредита);    
ТекущийДень = День(ТекущаяДата());
    
         
    Если ДатаКредита > ТекущаяДата() тогда
        Сообщить("До оплаты осталось" + " " + (ДеньКредита - ТекущийДень) + " " + "суток");
    КонецЕсли;
    
    
    
    Если День(ТекущаяДата()) = ДеньКредита и Месяц(ТекущаяДата()) = Месяц(ДатаКредита) тогда
        Сообщить("Сегодня последний день оплаты" + ", " + "следующая дата" + " " +
        (Формат(ДобавитьМесяц(ДатаКредита, 1),  "ДЛФ=DD")));
    КонецЕсли;
    
    
    Если ДеньКредита < ТекущийДень тогда
        ДатаКредита = ДобавитьМесяц(Датакредита, 1);
        Сообщить("До оплаты осталось"+ " " +(День(КонецМесяца(ТекущаяДата())) - ТекущийДень + ДеньКредита)
        + " " + "суток");
         КонецЕсли;

        КонецПроцедуры
13 kosts
 
08.04.15
12:39
(12) на следующий год опять появится сообщение?
14 kosts
 
08.04.15
12:52
В первую очередь надо писать понятный код, оптимизация на втором месте.
Как не идеальный вариант. Не тестировал, просто подумалось.
Потом в сообщениях не делай расчетов, делай заранее.

Процедура ПередНачаломРаботыСистемы(Отказ)
    
    ДатаОплаты = '20150409';
    ТекущаяДата = НачалоДня(ТекущаяДата());
    
    ПериодВыдачиСообщенияНачало = ДатаОплаты - 30*24*24;// За 30 дней
    ПериодВыдачиСообщенияОкончание = ДатаОплаты;
    
    Если ПериодВыдачиСообщенияНачало <= ТекущаяДата и ТекущаяДата <= ПериодВыдачиСообщенияОкончание Тогда
        
        Если ДатаКредита = ТекущаяДата тогда
            СледующаяДатаОплаты = ДобавитьМесяц(ДатаОплаты, 1);
            Сообщить("Сегодня последний день оплаты, следующая дата " + Формат(СледующаяДатаОплаты, "ДФ=dd.MM.yyyy"));
        ИначеЕсли ДатаКредита = ТекущаяДата тогда
            ДоПоследнейДатыОплатыОсталось = (ДатаОплаты - ТекущаяДата)/24/60/60;
            Сообщить("До последней дня оплаты осталось" + ДоПоследнейДатыОплатыОсталось + " дней");
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры
15 kosts
 
08.04.15
12:58
ПериодВыдачиСообщенияНачало = ДатаОплаты - 30*24*60*60;