Имя: Пароль:
1C
1С v8
подсчет количества дней между датами
, ,
0 gutalin
 
12.11.13
13:56
Подскажите пожалуйста, что я делаю не так:
        Дата1 = Дата(2001,1,4,00,00,00);
    Дата2=ТекущаяДата();
    
    ГГ = Год (Дата1);   ММ=Месяц(Дата1);    ДД=День(Дата1);
    ГГГ=Год(Дата2);     МММ=Месяц(Дата2);    ДДД=День(Дата2);
    кол_дней=0;
    в_год=0;
    индекс_год=ГГ;
    пока индекс_год<ГГГ Цикл
                   Если ((индекс_год)%4)=0 Тогда
                     в_год=в_год+1;
                         КонецЕсли;
                            Если ((индекс_год)%100)=0 Тогда
                        в_год=в_год-1;
                            КонецЕсли;
                               Если ((индекс_год)%400)=0 Тогда
                           в_год=в_год+1;
                               КонецЕсли;

         индекс_год=индекс_год+1;
     КонецЦикла;
    
год=МММ;
Если год=1 ИЛИ год=3 ИЛИ год=5 ИЛИ  год=7 ИЛИ год=8 ИЛИ год=10 ИЛИ год=12 Тогда кол_дней=31;
    ИначеЕсли год=4 ИЛИ год=6 ИЛИ год=9 ИЛИ год=11
        Тогда кол_дней=30;
          ИначеЕсли год=2 Тогда кол_дней=28;
          КонецЕсли;
год2=ММ;      
Если год2=1 ИЛИ год=3 ИЛИ год2=5 ИЛИ  год2=7 ИЛИ год2=8 ИЛИ год2=10 ИЛИ год2=12 Тогда кол_дней2=31;
    ИначеЕсли год2=4 ИЛИ год2=6 ИЛИ год2=9 ИЛИ год2=11  Тогда кол_дней2=30;
    ИначеЕсли год2=2 Тогда кол_дней2=28;  КонецЕсли;

attr= (((ГГГ-ГГ)*365)+(МММ*кол_дней-ММ*кол_дней2)+(ДДД-ДД))+в_год  ;
1 zak555
 
12.11.13
13:56
возьми подсчёт из общего модуля
2 Wobland
 
12.11.13
13:57
Синтаксических ошибок не обнаружено! всё хорошо
3 Ненавижу 1С
 
гуру
12.11.13
13:57
(0) жесть
4 Godofsin
 
12.11.13
13:57
госпади...
5 Euguln
 
12.11.13
13:58
(0) Все так, только зря
6 r_p
 
12.11.13
13:58
Мужики, а что такое, откуда школьники прут?
7 Lev292
 
12.11.13
13:58
ВЫБРАТЬ
    РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ) КАК ВсегоДней
8 Ненавижу 1С
 
гуру
12.11.13
13:58
Дата1 = Дата(2001,1,4,00,00,00);
Дата2 = НачалоДня(ТекущаяДата());

ЧислоДней = (Дата2-Дата1)/86400;
9 wms
 
12.11.13
13:59
может так проще? запросом
ВЫБРАТЬ
    РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ) КАК КолДней
10 gutalin
 
12.11.13
14:02
надо именно самостоятельно алгоритмом написать , вычесть автоматически это слишком просто))
11 Godofsin
 
12.11.13
14:03
оптимальный, быстрый и короткий код не принимается?! =)
12 Wobland
 
12.11.13
14:04
(10) а ты каптчу повесь и распознавай. будет сложно
13 Ненавижу 1С
 
гуру
12.11.13
14:04
(10)
Дата1 = Дата(2001,1,4,00,00,00);
Дата2 = НачалоДня(ТекущаяДата());
ЧислоДней = 0;
Пока Дата1<Дата2 Цикл
  Дата1 = Дата1+86400;
  ЧислоДней = ЧислоДней+1;
КонецЦикла;
14 Euguln
 
12.11.13
14:05
(10) ну разложи в ряд фурье и возьми пятое приближение
15 Ненавижу 1С
 
гуру
12.11.13
14:06
(10) во франч устраиваешься?
16 gutalin
 
12.11.13
14:08
во франче дали такую задачу.. так сказать чтобы проверить наши навыки абстрактного мышления
17 Euguln
 
12.11.13
14:09
(16) беги оттуда
18 sergeev-ag-1977
 
12.11.13
14:09
(10) так это просто - передать в Эксель в шаблон, а потом из Экселя обратно забрать в 1С .... Так ТЗ будет больше и ч.часов тоже больше будет и оплата соответственно ....
19 Wobland
 
12.11.13
14:09
(16) как найти площадь Ленина?
20 Ненавижу 1С
 
гуру
12.11.13
14:10
(16) критинизм процветающий
21 sergeev-ag-1977
 
12.11.13
14:10
странно - девушка и без фото взлетает ....
22 vhl
 
12.11.13
14:11
(10) Потом отлаживать еще несколько лет будешь - вылазить всякие граничные значения будут :)
23 Wobland
 
12.11.13
14:11
(21) ещё не до конца. ждём, когда (14) закончит
24 Smallrat
 
12.11.13
14:14
(22) у меня недавно засыпалась функция, которая возраст считает клиентов - работала несколько лет стабильно. Попался клиент родившийся 29 февраля - при попытке взять 29 февраля текущего года случился фейл (((
25 sergeev-ag-1977
 
12.11.13
14:14
Дата2 - Дата1 = 1
Решение:
Д-Д=0
а-а=0
т-т=0
а-а=0
2-1=1
ИТОГО:00001
что равно 1
26 hhhh
 
12.11.13
14:23
(0) вот это

Если год=1 ИЛИ год=3 ИЛИ год=5 ИЛИ  год=7 ИЛИ год=8 ИЛИ год=10 ИЛИ год=12 Тогда кол_дней=31;

    ИначеЕсли год=4 ИЛИ год=6 ИЛИ год=9 ИЛИ год=11
        Тогда кол_дней=30;
          ИначеЕсли год=2 Тогда кол_дней=28;
          КонецЕсли;

будет одной строчкой

Кол_дней = День(КонецМесяца(Дата2));
27 Wobland
 
12.11.13
14:29
(26) ты так до (8) дооптимизируешься
28 hhhh
 
12.11.13
14:33
(27) всё таки странная логика: Год = МММ
29 Йохохо
 
12.11.13
15:30
(28) а количество дней февраля по сентябрь не смущает?)
(МММ*кол_дней-ММ*кол_дней2)
30 vhl
 
12.11.13
15:51
(0) на всякий случай почитай: http://habrahabr.ru/post/146109/
31 gutalin
 
12.11.13
17:33
спасибо, вот этот кусок  тоже правильно считает
(10)
Дата1 = Дата(2001,1,4,00,00,00);
Дата2 = НачалоДня(ТекущаяДата());
ЧислоДней = 0;
Пока Дата1<Дата2 Цикл
  Дата1 = Дата1+86400;
  ЧислоДней = ЧислоДней+1;
КонецЦикла;
32 Wobland
 
12.11.13
17:53
(31) при разности дат в 1 секунду число дней будет 1
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.