|
Работа с датой | ☑ | ||
---|---|---|---|---|
0
Hennessy
15.01.14
✎
13:15
|
Я наткнулся на проблему, взял цикл в него внес условие
Пока '20140101'<='20241231 Цикл (это все грубо говоря) После чего мне стало нужно определить ПЕРЕМЕННУЮ с конкретной датой, но не указывая ГОД в ней! чтобы когда цикл продолжался в каждом из годов в который переходит цикл была конкретная дата! Подскажите что можно использовать и как записать? К примеру чтобы переменная содержала только месяц и дату! |
|||
2
Hennessy
15.01.14
✎
13:17
|
Ну либо проще говоря, из такой записи: Дата(2014, 02, 23); мне нужно отрезать ГОД
|
|||
3
Wobland
15.01.14
✎
13:18
|
(2) а=2; б=23;
|
|||
4
GROOVY
15.01.14
✎
13:18
|
Дата(0001, 02, 23) пойдет?
|
|||
5
Hennessy
15.01.14
✎
13:21
|
(3) у меня цель чтобы переменная содержала дату и месяц, но года небыло, в данном случае год всеравно придется указывать же?!
|
|||
6
Maxus43
15.01.14
✎
13:22
|
Пока Месяц(дата)<=10 И день(дата)<= 12 Цикл
|
|||
7
Wobland
15.01.14
✎
13:22
|
(5) занятная цель. без меня
|
|||
8
Wobland
15.01.14
✎
13:23
|
(7) сторно: структура
|
|||
9
Hennessy
15.01.14
✎
13:27
|
(8) интересное предложение, но как конкретно мне это использовать, я от думаю над этим
|
|||
10
Wobland
15.01.14
✎
13:28
|
(9) всё-таки другая цель, да?
|
|||
11
Ненавижу 1С
гуру
15.01.14
✎
13:29
|
(0) зачем?
|
|||
12
Hennessy
15.01.14
✎
13:29
|
(10) ну вот я говорю, моя конкретная цель это получение переменной со значением, 23 февраля, год должен меняться сам по себе
|
|||
13
Ненавижу 1С
гуру
15.01.14
✎
13:30
|
(12) еще раз, для чего?
|
|||
14
Wobland
15.01.14
✎
13:30
|
(11) а чтоб с днём рождения поздравить. перебираем все года, перебираем сотрудников...
|
|||
15
Wobland
15.01.14
✎
13:30
|
(12) это решение, причём не самое прямое
|
|||
16
Wobland
15.01.14
✎
13:31
|
(12) раз уж так хочется: ПеременнаяСоЗначением="23 февраля"
|
|||
17
Defender aka LINN
15.01.14
✎
13:32
|
(12) "Само по себе" в этом мире ничего не происходит, а в программировании - тем более.
Даты "23 февраля" в информатике не существует. Если 23 февраля 2014 года, 13:57:06. Ну и если "конкретная цель это получение переменной со значением" - представь, что ты ее получил и успокойся, ведь по твоим собственным словам это и есть цель, никто ничего с этой переменной больше делать не будет. |
|||
18
Hennessy
15.01.14
✎
13:32
|
(15) дело в том что я делаю это внешней обработкой, у меня нет ни ревизитов, ни чего либо, у меня есть лишь модуль формы, в котором я описываю цикл определенного времени и мне нужно отследить 23 февраля в каждом из всех перечисленых годов!
|
|||
19
Рэйв
15.01.14
✎
13:33
|
для н=1 По 2014 Цикл
Сообщить(Формат(Дата(н,2,23,0,0,0),"ДФ=""дд.ММММ.гггг""")); Конеццикла |
|||
20
Wobland
15.01.14
✎
13:34
|
(18) а запускается обработка в чистом ДОСе
|
|||
21
Hennessy
15.01.14
✎
13:35
|
(19) Неплохая идея, попробую поэксперементировать, спасибо!
|
|||
22
Defender aka LINN
15.01.14
✎
13:36
|
(21) Рукалицо.
(18) О как. Уже, оказывается, годы где-то перечислены. |
|||
23
catena
15.01.14
✎
13:37
|
А чем структура не подходит?
|
|||
24
Hennessy
15.01.14
✎
13:39
|
(23) структурой тоже попробую воспользоваться
P.S.: (8) Спасибо! |
|||
25
azernot
15.01.14
✎
13:43
|
Посмотрите темы автора. Мне кажется, что программирование - просто не его тема, и чем раньше он займётся чем-то другим, тем больше шансов добиться успеха.
|
|||
26
Hennessy
15.01.14
✎
13:45
|
(25) Не стоит, я тебя не критикую и меня тоже не стоит! я учусь!
|
|||
27
Михаил 1С
15.01.14
✎
13:46
|
(0) сделай просто - год поставь 0001. И все.
Можешь сравнивать две такие даты, у которых нет года. Ты им поставь обоим одинаковый год (0001), и все. |
|||
28
Hennessy
15.01.14
✎
13:47
|
(25) Больше чем уверен ты тоже сталкивался с огромным множеством проблем когда учился! и многое не понимал! + к тому же у многих были курсы и тому подобное! а я самоучка, сижу и учусь по различным книгам и смотрю различные видиокурсы, если у меня есть проблема, мне даже неукого спросить что то, кроме как тут!!!
|
|||
29
Михаил 1С
15.01.14
✎
13:47
|
(27) А потом, когда надо - поставь место года 0001 уже тот, что надо. И будет тебе "мне надо, чтобы год менялся сам по себе".
|
|||
30
Hennessy
15.01.14
✎
13:48
|
(27) спасибо, попробую
|
|||
31
Михаил 1С
15.01.14
✎
13:48
|
В справке найди как работать с типом Дата. И составишь дату какую тебе надо.
|
|||
32
Wobland
15.01.14
✎
13:48
|
(28) тебя русским языком спросили: зачем? а ты не понял
|
|||
33
Рэйв
15.01.14
✎
13:50
|
(28)Ты не поверишь. Когда я начинал не было ни курсов ни литературы. У меня не было даже интернета. Только желто-красные книжки и старенький комп. Так что нечего бравировать. Тут большинство самоучки в 1С.
|
|||
34
Cube
15.01.14
✎
13:50
|
(28) Так тебя пытаются спросить зачем, выяснить детали... А ты упираешься, молчишь как партизан... "Ну и ходи босой, раз такой умный" (С)
|
|||
35
Hennessy
15.01.14
✎
13:52
|
(33) я ничего плохого ни про кого не сказал! Более того я признаю тот факт что я сейчас нулевой в программировании! НО! не стоит пытаться критиковать! То что сказал тот человек, было не целесообразно и не очень красиво!
|
|||
36
Hennessy
15.01.14
✎
13:53
|
Зачем мне это нужно? Я же уже описал это
|
|||
37
Wobland
15.01.14
✎
13:53
|
(36) ничего ты не описал
|
|||
38
Рэйв
15.01.14
✎
13:54
|
(35)Какие мы нежные:-) Могу тебя уверить, что пока ты не выйдешь хотя бы на средний уровень - тебя будут нещадно пинать. Спасет тебя только выдержка и правильно заданные вопросы.Так что привыкай.
|
|||
39
vicof
15.01.14
✎
13:54
|
(35) справедливости нет
|
|||
40
Wobland
15.01.14
✎
13:54
|
(39) есть. я могу кидаться какашками, а ТС - нет ;)
|
|||
41
Hennessy
15.01.14
✎
13:55
|
Хорошо, сейчас опишу подробнее
|
|||
42
Wobland
15.01.14
✎
13:55
|
(41) про желаемый конечный результат не забудь
|
|||
43
Hennessy
15.01.14
✎
14:00
|
Процедура Вычисление5(Команда)
ДатаНач = Дата(2018, 01, 01, 0, 0, 0); ДатаКон = Дата(2018, 12, 30, 23, 59, 59); НовГод = Дата(2018, 01, 01); ДвТрФев = Дата(2018, 02, 23); ВосМарта = Дата(2018, 03, 08); Счетчик = 1; Счетчик2 = 1; Счетчик3 = 1; Пока ДатаНач<=ДатаКон Цикл ДатаНач = ДатаНач+86400; ДН = ДеньНедели(ДатаНач); Если ДН=1 или ДН=2 или ДН=3 или ДН=4 или ДН=5 Тогда Счетчик2 = Счетчик2+1; Если НовГод = ДатаНач Тогда Счетчик3=Счетчик3+1; //Сообщить("НОВЫЙ ГОД"); КонецЕсли; Если ДвТрФев = ДатаНач Тогда Счетчик3=Счетчик3+1; //Сообщить("23 Февраля"); КонецЕсли; Если ВосМарта = ДатаНач Тогда Счетчик3=Счетчик3+1; //Сообщить("8 Марта"); КонецЕсли; КонецЕсли; Счетчик = Счетчик+1; Если ДН = 6 или ДН = 7 Тогда Иначе //Сообщить(ДН); //Сообщить(ДатаНач); КонецЕсли; КонецЦикла; ИтогДней = Счетчик2-Счетчик3; Сообщить("Всего дней в 2018 году:"+" "+ Счетчик); Сообщить("Рабочих дней всего в 2018 году:"+" "+Счетчик2); Сообщить("Количество рабочих Дней с учетом Праздников в 2018г:"+ИтогДней); ПоказатьОповещениеПользователя("ИНФОРМАЦИЯ ДЛЯ ПОЛЬЗОВАТЕЛЯ", ,"Теперь прокрутите бегунок вниз и вы увидите результат"); КонецПроцедуры У меня есть такая процедура, в ней расчитывается количество рабочих дней в году! Выходные и праздники не отображаются! мне нужно поменять её, сделать период цикла с 2014год по 2024! соотвецтвенно праздничные дни, такие как "новый год", "23 февраля" и "8 марта" мне нужно привязать не конкретно к 2014 году а чтобы когда я перепишу процедуру дата так же не отображалась в другие годы! Пример того что хочу, без того что мне нужно: ДатаНач = Дата(2014, 01, 01, 0, 0, 0); ДатаКон = Дата(2024, 12, 30, 23, 59, 59); Счетчик = 1; Счетчик2 = 1; Пока ДатаНач<=ДатаКон Цикл ДатаНач = ДатаНач+86400; ДН = ДеньНедели(ДатаНач); Если ДН=1 или ДН=2 или ДН=3 или ДН=4 или ДН=5 Тогда Счетчик2 = Счетчик2+1; КонецЕсли; Счетчик = Счетчик+1; Если ДН = 6 или ДН = 7 Тогда Иначе //Сообщить(ДН); //Сообщить(ДатаНач); КонецЕсли; КонецЦикла; Сообщить("Всего дней в Промежуток ЛЕТ:"+" "+ Счетчик); Сообщить("Рабочих дней всего в Промежуток ЛЕТ:"+" "+Счетчик2); |
|||
44
vicof
15.01.14
✎
14:01
|
ПоказатьОповещениеПользователя("ИНФОРМАЦИЯ ДЛЯ ПОЛЬЗОВАТЕЛЯ", ,"Теперь прокрутите бегунок вниз и вы увидите результат");
класс, спасибо, поржал :))) |
|||
45
Wobland
15.01.14
✎
14:01
|
правильно ли будет сказать, что тебе нужно поиметь количество рабочих дней в указанных пользователем годах?
|
|||
46
Hennessy
15.01.14
✎
14:04
|
(45) мне нужно получить количество рабочих дней! Другим языком из 365 дней убрать ВЫХОДНЫЕ дни и ПРАЗДНИКИ(те которые указываю)
|
|||
47
Wobland
15.01.14
✎
14:04
|
(46) видишь, как всё просто
|
|||
48
Wobland
15.01.14
✎
14:06
|
самый тупой вариант. шарашить циклом по дням и смотреть в день недели и в попадание в праздник
|
|||
49
Wobland
15.01.14
✎
14:07
|
(48) попадание в праздник делается сравнением дня и месяца с эталонным
|
|||
50
Jofa
15.01.14
✎
14:07
|
(46)А зачем тебе это?
|
|||
51
vicof
15.01.14
✎
14:07
|
(46) Обрати внимание на РС РегламентированныйПроизводственныйКалендарь в типовых
|
|||
52
1dvd
15.01.14
✎
14:07
|
Функция ДатаБезГода(ЗначениеДаты) Экспорт
ДеньДаты = День(ЗначениеДаты); МесяцДаты = Месяц(ЗначениеДаты); Возврат Дата(01, МесяцДаты, ДеньДаты); КонецФункции //Использование: ВосьмоеМарта = ДатаБезГода(Дата(2014, 03, 08)); Если ДатаБезГода(ТекущаяДата) = ВосьмоеМарта Тогда Предупреждение("С 8 марта! @>-\---"); КонецЕсли; |
|||
53
Wobland
15.01.14
✎
14:08
|
(51) у него хардкор. пустая скорей всего
|
|||
54
Jofa
15.01.14
✎
14:08
|
(51)А за чем туда смотреть?
|
|||
55
vicof
15.01.14
✎
14:09
|
(53) Я понимаю, поэтому и советую посмотреть в нужную сторону)
|
|||
56
Hennessy
15.01.14
✎
14:10
|
(52) Спасибо!
|
|||
57
Wobland
15.01.14
✎
14:10
|
(55) я поддерживаю идею запроса, да. но календарь ещё заполнять положено. а ну как препод захочет затестить 19й век
|
|||
58
Рэйв
15.01.14
✎
14:10
|
(43)>>ДатаКон = Дата(2024, 12, 30, 23, 59, 59);
В декабре 31 день вообщето:-) Делал бы уж тогда ДатаКон = КонецГода(ДатаНач); |
|||
59
Hennessy
15.01.14
✎
14:10
|
(55) Я уже смотрел это и пробовал, спсибо за предложение! просто мне нужно это сделать самому!
|
|||
60
Wobland
15.01.14
✎
14:11
|
(52) а не взлетит же после 3999го, не?
|
|||
61
Hennessy
15.01.14
✎
14:11
|
(58) я знаю, я написал 30 целенаправлено! потому что если написать 31 то в цикл войдет и 1.01.2015г., а мне это не подходит
|
|||
62
Wobland
15.01.14
✎
14:12
|
(58) я бы не поручился за медведева в 24м году...
|
|||
63
1dvd
15.01.14
✎
14:12
|
(60) Знаешь, я буду очень рад, если этот код будет использоваться хотя бы до 3998-го
|
|||
64
Wobland
15.01.14
✎
14:12
|
(61) и день потерял, двоечник
|
|||
65
Ненавижу 1С
гуру
15.01.14
✎
14:14
|
(57) в 19 веке 23-е февраля не праздновали еще
|
|||
66
Hennessy
15.01.14
✎
14:15
|
(64) я ничего не потерял, получилось все верно 365 дней, цикл заканчивается как раз когда в цикл переходит на 31.12.2014, а мои условия это устраивает
|
|||
67
Wobland
15.01.14
✎
14:16
|
(66) цикл устроен неверно вне зависимости от степени удоветворённости результатом
|
|||
68
Hennessy
15.01.14
✎
14:16
|
Ребят прекращайте тролить, я учусь, не надо меня осуждать! Я уверен что все начинали не во много лучше!
|
|||
69
Wobland
15.01.14
✎
14:17
|
(68) закройся газеткой и учись ;)
|
|||
70
Рэйв
15.01.14
✎
14:18
|
А вобще все просто
если твоим перебором, то как то так тДанные=Новый ТаблицаЗначений; тДанные.Колонки.Добавить("Год"); тДанные.Колонки.Добавить("Дней"); Для н=2014 По 2024 Цикл Д=(н,1,1,23,59,59); ДатаКон=Дата(н,12,31,23,59,59); Нов=тДанныеДобавить(); Нов.Год=н; Нов.Дней=0; Пока Д <=ДатаКон Цикл ДеньН=ДеньНедели(Д); Если ДеньН=6 Или ДеньН=7 Или (День(Д)=1 И Месяц(Д)=1) Или (День(Д)=23 И Месяц(Д)=2) Или (День(Д)=8 И Месяц(Д)=3)Тогда Прододжить; КонецЕсли; Нов.Дней=Нов.Дней+1; КонецЦикла; Конеццикла; тДанные.ВыбратьСтроку(); |
|||
71
Рэйв
15.01.14
✎
14:19
|
да..Забыл в цикле надо еще добавить перед КонецЦикла
Д=Д+86400; |
|||
72
Рэйв
15.01.14
✎
14:19
|
во вложенном цикле по дням
|
|||
73
Hennessy
15.01.14
✎
14:21
|
(70) спасибо
|
|||
74
Рэйв
15.01.14
✎
14:21
|
(73)Не во что:-)
|
|||
75
Пятничник
15.01.14
✎
14:36
|
(28) здесь проблема не в программировании на конкретном языке, а в построении алгоритма, что невозможно (или существенно затруднено) без стройного логического мышления.
|
|||
76
Пятничник
15.01.14
✎
14:40
|
(70) а 1, 2, 9 мая?
кстати, у вас 23 февраля - выходной? а у нас - рабочий... |
|||
77
Рэйв
15.01.14
✎
14:43
|
(76)У нас тоже. Но раз автор хочет, пусть отдыхает:-)
А остальные праздники пусть сам в условие добавляет копипастом, если ему лень регистр сведений какойнить придумать |
|||
78
Torquader
15.01.14
✎
14:48
|
Функция ДеньРожденияСотрудникаСегодня(лдДеньРождения,лдТекущаяДата)
лчМесяцРождения=Месяц(лдДеньРождения); лчДеньМесяца=День(лдДеньРождения); Если(День(лдТекущаяДата)=лчДеньМесяца)И(Месяц(лдТекущаяДата)=лчМесяцРождения)Тогда Возврат Истина; КонецЕсли; Если(лчМесяцРождения=2)И(лчДеньМесяца=29)Тогда Если(День(лдТекущаяДата)=28)И(Месяц(лдТекущаяДата)=2)И(День(ТекущаяДата+86400)=1)Тогда Возврат Истина; КонецЕсли; Возврат Ложь; КонецФункции Функция НапомнитьОДнеРожденияСотрудника(лдДеньРождения,лдТекущаяДата,лчКоличествоДней) Если ДеньРожденияСотрудникаСегодня(лдДеньРождения,лдТекущаяДата)=Истина Тогда Возврат "Сегодня"; КонецЕсли; Для лч=1 По лчКоличествоДней Цикл Если ДеньРожденияСотрудникаСегодня(лдДеньРождения,лдТекущаяДата+(86400*лч))=Истина Тогда Возврат "Напомнить"; КонецЕсли; КонецЦикла; Возврат "Не скоро"; КонецФункции |
|||
79
catena
15.01.14
✎
15:22
|
ВЫБРАТЬ
ВЫБОР КОГДА РАЗНОСТЬДАТ(&ТекущаяДата, ДОБАВИТЬКДАТЕ(Ссылка.ДатаРождения, ГОД, РАЗНОСТЬДАТ(Ссылка.ДатаРождения, &ТекущаяДата, ГОД)), ДЕНЬ) < 0 ТОГДА РАЗНОСТЬДАТ(&ТекущаяДата, ДОБАВИТЬКДАТЕ(Ссылка.ДатаРождения, ГОД, РАЗНОСТЬДАТ(Ссылка.ДатаРождения, &ТекущаяДата, ГОД) + 1), ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(&ТекущаяДата, ДОБАВИТЬКДАТЕ(Ссылка.ДатаРождения, ГОД, РАЗНОСТЬДАТ(Ссылка.ДатаРождения, &ТекущаяДата, ГОД)), ДЕНЬ) КОНЕЦ КАК ОсталосьДнейДоДняРождения ИЗ Справочник.ФизическиеЛица |
|||
80
Пятничник
15.01.14
✎
15:31
|
(78) (79) при чем тут дни рождения? вроде уже выяснили, что речь идет о праздниках, точнее - посчитать количество рабочих дней в году (за вычетом выходных и праздников), не используя типовые графики и регистры сведений :-)
|
|||
81
catena
15.01.14
✎
15:34
|
(80)Как пример сравнения даты_числа в разных годах.
|
|||
82
Hennessy
15.01.14
✎
15:46
|
Сделал так, только вот теперь нужно отделить года друг от друга, Дополнительно выводить сообщения "Сообщить()" с определенным годом, количеством дней в нем и количеством рабочих дней в нем!
Процедура Дополнительно(Команда) ДатаНач = Дата(2014, 01, 01, 0, 0, 0); ДатаКон = Дата(2024, 12, 30, 23, 59, 59); Счетчик = 1; Счетчик2 = 1; Счетчик3 = 1; Пока ДатаНач<=ДатаКон Цикл ДатаНач = ДатаНач+86400; ДН = ДеньНедели(ДатаНач); ДГ = ДеньГода(ДатаНач); Если ДГ = 1 или ДГ = 54 или ДГ = 67 Тогда Счетчик3 = Счетчик3+1; КонецЕсли; Если ДН=1 или ДН=2 или ДН=3 или ДН=4 или ДН=5 Тогда Счетчик2 = Счетчик2+1; КонецЕсли; Счетчик = Счетчик+1; Если ДН = 6 или ДН = 7 Тогда Иначе //Сообщить(ДН); //Сообщить(ДатаНач); //Сообщить(ДГ); КонецЕсли; КонецЦикла; ИтоговоеЗначениеВсехЛет=Счетчик2-Счетчик3; Сообщить("ИТОГ, ВСЕГО ДНЕЙ с 2014 по 2024:"+" "+ Счетчик); Сообщить("ИТОГ РАБОЧИХ ДНЕЙ С УЧЕТОМ ВЫХОДНЫХ:"+" "+Счетчик2); Сообщить("ИТОГ РАБОЧИХ ДНЕЙ С УЧЕТОМ ВЫХОДНЫХ И ПРАЗДНИКОВ:"+" "+ИтоговоеЗначениеВсехЛет); ПоказатьОповещениеПользователя("ОПОВЕЩЕНИЕ...", ,"ГОТОВО"); КонецПроцедуры |
|||
83
Wobland
15.01.14
✎
16:02
|
(82) вперёд!
|
|||
84
Wobland
15.01.14
✎
16:03
|
>Если ДГ = 1 или ДГ = 54 или ДГ = 67 Тогда
это для обычного или високосного? |
|||
85
Пятничник
15.01.14
✎
16:14
|
(84) опередил... :-)
|
|||
86
Пятничник
15.01.14
✎
16:15
|
(84) хотя с другой стороны, ему же нужно количество, так что особой разницы, когда он назначит выходной - на 8-е марта или на 7-е - не вижу.
|
|||
87
Wobland
15.01.14
✎
16:22
|
(86) возражений не имею. неплохо было бы это услышать от автора ;)
|
|||
88
vmv
15.01.14
✎
16:25
|
запросом сгенерить таблицу дат с полями номера года, месяца, дня и фильтруй как хочешь в полпинка
переборы для девочек |
|||
89
vmv
15.01.14
✎
16:27
|
(88) производственный календарь + запрос рулит, если там замес и на праздники/выходные
все остальное от лукавого |
|||
90
alxxsssar
15.01.14
✎
16:44
|
(53) В чем сложность скопировать из типовой производственный календарь? даже драг энд дропом
|
|||
91
Wobland
15.01.14
✎
16:45
|
(90) будет ветка про заполнить календарь. а оно нам надо? ;)
|
|||
92
alxxsssar
15.01.14
✎
16:47
|
(91) а чо? поможем. Поржем заодно)))
|
|||
93
Torquader
15.01.14
✎
23:15
|
(80) А как тогда узнать, что у нас праздник, а что выходной день, и как быть, если праздник выпадает на выходной или через день перед ним ?
|
|||
94
Seducer
16.01.14
✎
00:09
|
(82) В 2015 переписывать код будем? И кстати, у вас только три праздника в году? Не жалеете вы себя.
|
|||
95
Пятничник
16.01.14
✎
13:25
|
(93) а у нас если праздник попадает на выходной - то выходным объявляется и первый рабочий день после выходных! :-)
то есть типа КолПраздников++ :-) |
|||
96
Wobland
16.01.14
✎
13:32
|
(95) у него по ТЗ переноса праздников нет
|
|||
97
Пятничник
16.01.14
✎
13:38
|
(96) поэтому я и сказал ему (75)
|
|||
98
Wobland
16.01.14
✎
13:41
|
вот в канун пятницы и сделаем сотку..
|
|||
99
Wobland
16.01.14
✎
13:41
|
кто тут главный по сотням?
|
|||
100
Torquader
16.01.14
✎
13:41
|
Сотко!
|
|||
101
Torquader
16.01.14
✎
13:43
|
(95) Насколько я помню, табель-календарь на следующий год утверждает правительство - в том числе и переносы дней, если праздник приходится на выходные. При этом, считается, что число выходных и праздничных дней не должно уменьшится.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |