|
Как получить порядковый номер декады в году? | ☑ | ||
---|---|---|---|---|
0
aptomilov
16.02.12
✎
14:57
|
Есть интересный момент
если номер декады в месяцы последний (3) тогда работает такая формула: номер месяца * на номер декады в месяце, например 3 декада*4(апрель)=14, действительно это 12 я декада в году. Для 1 ой и 2 ой декады это не работает. |
|||
1
aptomilov
16.02.12
✎
14:58
|
сорри там не 14 а 12 в итоге))
|
|||
2
aptomilov
16.02.12
✎
15:06
|
Функция ПолучитьДекадуИзДаты(ИсхДата)
ДеньДаты=День(ИсхДата); МесяцДаты=Месяц(ИсхДата); Если ДеньДаты<11 Тогда НомерДекадыВмесяце=1; ИначеЕсли ДеньДаты>10 и ДеньДаты<21 Тогда НомерДекадыВмесяце=2; Иначе НомерДекадыВмесяце=3; КонецЕсли; Если НомерДекадыВмесяце=1 Тогда Декада=(НомерДекадыВмесяце+2)*МесяцДаты-2; ИначеЕсли НомерДекадыВмесяце=2 Тогда Декада=(НомерДекадыВмесяце+1)*МесяцДаты-1; Иначе Декада=НомерДекадыВмесяце*МесяцДаты; КонецЕсли; КонецФункции вот эта заветная функция)))))))))))) |
|||
3
Один С
16.02.12
✎
15:41
|
3-е апреля - это не 12 декада в году есличо..
|
|||
4
Один С
16.02.12
✎
15:48
|
>> номер месяца * на номер декады в месяце
2 февраля - номер месяца - 2 номер декады - 1 2х1=2 чото не работает твоя формула.. |
|||
5
jump if zero
16.02.12
✎
15:55
|
ВЫБРАТЬ
Месяц(ДатаЧ )* Выбор КОГДА День(ДатаЧ) > 0 И День(ДатаЧ) <=10 ТОГДА 1 КОГДА День(ДатаЧ) > 10 И День(ДатаЧ) <=20 ТОГДА 2 ИНАЧЕ 3 КОНЕЦ КАК Декада ИЗ ( ВЫБРАТЬ ДатаВремя(2012,12,11) КАК ДатаЧ ) КАК Таблица |
|||
6
Reset
16.02.12
✎
15:57
|
(0)
Что ты покурил, решив, что номер декады в году - это ее порядковый номер в месяце, умноженный на номер месяца? 1 декабря - 12 декада? В школу, в первый класс, учиться умножению! |
|||
7
Один С
16.02.12
✎
16:06
|
(6) зато 31 декабря - 36 декада. автор начитался занимательной арифметики..
|
|||
8
Один С
16.02.12
✎
16:10
|
функция кстате вполне себе рабочая, если учесть что автор выпилил "Возврат Декада"..
непонятно что его так развеселило.. |
|||
9
НЕА123
16.02.12
✎
16:12
|
(Месяц(ДД)-1)*4 + Мин(цел(День/10),3)
|
|||
10
НЕА123
16.02.12
✎
16:12
|
(Месяц(ДД)-1)*4 + Мин(цел(День(ДД)/10),3)
|
|||
11
Reset
16.02.12
✎
16:13
|
(8) функцию тоже дошкольник писал. Куча проверок вместо одной строки
|
|||
12
НЕА123
16.02.12
✎
16:13
|
неа, так
(Месяц(ДД)-1)*4 + Мин(цел(День/10)+1,3) |
|||
13
Один С
16.02.12
✎
16:20
|
(12) 31 декабря - (12-1)*4+мин(цел(365/10)+1,3)=47 как-то так..
|
|||
14
FarFar
16.02.12
✎
16:20
|
ВЫБРАТЬ
влож2.ДеньГода, влож2.ЦелаяЧасть, ВЫБОР КОГДА влож2.ДеньГода <= влож2.ЦелаяЧасть * 10 ТОГДА влож2.ЦелаяЧасть ИНАЧЕ влож2.ЦелаяЧасть + 1 КОНЕЦ КАК НомерДекады ИЗ (ВЫБРАТЬ влож.ДеньГода КАК ДеньГода, ВЫРАЗИТЬ(влож.ДеньГода / 10 - 0.5 КАК ЧИСЛО(2, 0)) КАК ЦелаяЧасть ИЗ (ВЫБРАТЬ ДЕНЬГОДА(&ТекущаяДата) КАК ДеньГода) КАК влож) КАК влож2 вложенными запрос сделал для простоты понимания. |
|||
15
Asmody
16.02.12
✎
16:20
|
Цел(ДеньГода(Дата)-ДеньГода(НачалоМесяца(Дата)))+1 — пойдёт?
|
|||
16
Asmody
16.02.12
✎
16:21
|
(15)+ тьфу, не то
|
|||
17
НЕА123
16.02.12
✎
16:22
|
(13) неа. не 365, а 31.
31 декабря - (12-1)*4+мин(цел(31/10)+1,3)=47 как-то так.. |
|||
18
НЕА123
16.02.12
✎
16:22
|
(17)
вроде правильно. |
|||
19
Asmody
16.02.12
✎
16:22
|
а тупо Цел(ДеньГода(Дата)/10)+1
|
|||
20
FarFar
16.02.12
✎
16:24
|
(19) Что за Цел ?
|
|||
21
FarFar
16.02.12
✎
16:24
|
смотри (14) - работает точно.
Если день 49 в году, возвратит 5. Если 50 - тоже 5. Если 51 - 6. |
|||
22
Asmody
16.02.12
✎
16:27
|
(19)+ точнее Цел((ДеньГода(Дата)+1)/10)+1
|
|||
23
FarFar
16.02.12
✎
16:29
|
(22) Да что за Цел такой в запросе?
(14) можно упростить: ВЫБРАТЬ ВЫБОР КОГДА ДЕНЬГОДА(&ТекущаяДата) <= ВЫРАЗИТЬ(ДЕНЬГОДА(&ТекущаяДата) / 10 - 0.5 КАК ЧИСЛО(2, 0)) * 10 ТОГДА ВЫРАЗИТЬ(ДЕНЬГОДА(&ТекущаяДата) / 10 - 0.5 КАК ЧИСЛО(2, 0)) ИНАЧЕ ВЫРАЗИТЬ(ДЕНЬГОДА(&ТекущаяДата) / 10 - 0.5 КАК ЧИСЛО(2, 0)) + 1 КОНЕЦ КАК НомерДекады |
|||
24
Asmody
16.02.12
✎
16:33
|
(23) а где в (0) про запросы? в запросе цел() прекрасно заменяется конструкцией ВЫРАЗИТЬ
|
|||
25
FarFar
16.02.12
✎
16:36
|
(24) в ВЫРАЗИТЬ округление работает. 4.4 тебе округлит до 4, а 4.6 до 5. Верный пример использования "Выразить" для получения целого числа - в (14) и (23)
|
|||
26
Asmody
16.02.12
✎
16:38
|
(25) ты математику учил? как выразить Цел() через Окр() знаешь?
|
|||
27
FarFar
16.02.12
✎
16:40
|
(26) Учил в физмат лицее
|
|||
28
FarFar
16.02.12
✎
16:41
|
(24) Действительно, в (0) не сказано, что нужно делать запросом. Тогда в чемвообще проблема у ТС, непонятно.
|
|||
29
zak555
16.02.12
✎
16:51
|
> Как получить порядковый номер декады в году?
в году ? легко : ДеньГода = ДеньГода(ИсхДата) Десяток = Цел(ДеньГода / 10); ПорядковыйНомерДекадыВГоду = Десяток + ?( ДеньГода % 10 = 0, 0, 1); |
|||
30
Asmody
16.02.12
✎
16:53
|
(29) т.е. по твоему 1 января — это 0-я декада?
|
|||
31
zak555
16.02.12
✎
16:54
|
(30) а что будет 0 ? о_О
|
|||
32
Asmody
16.02.12
✎
16:56
|
(31) ах, нет, простите. но всё равно, (22) проще
|
|||
33
zak555
16.02.12
✎
17:02
|
(32) да
но как быть с 31.12 ??? =) |
|||
34
zak555
16.02.12
✎
17:03
|
кстати, в (22) 10 января покажет 2ую декаду, а это ещё первая
|
|||
35
hhhh
16.02.12
✎
17:06
|
вообще-то в месяце четко 3 декады, поэтому (29) не сработает.
|
|||
36
Asmody
16.02.12
✎
17:17
|
(35) да ну?! а 31.01 — это какая декада?
|
|||
37
Asmody
16.02.12
✎
17:17
|
(34) там + на - надо поменять
|
|||
38
zak555
16.02.12
✎
17:19
|
||||
39
zak555
16.02.12
✎
17:19
|
(37) ты конечное напиши =)
|
|||
40
Asmody
16.02.12
✎
17:20
|
(39) Цел((ДеньГода(Дата)-1)/10)+1
|
|||
41
zak555
16.02.12
✎
17:22
|
осталось написать функцию по вычислению декад/дюжин и т.д. в месяцах/годах и т.д. =)
|
|||
42
hhhh
16.02.12
✎
17:24
|
(40)31-е января - это четко 3-я декада. Вы что на заводе не работали или там на фабрике? Госплан вам задачи не ставил?
|
|||
43
FarFar
16.02.12
✎
17:27
|
Альтернативный (39)-му незапросный вариант:
ОКР(ДеньГода(ТекДата)-6,-1)/10+1 |
|||
44
FarFar
16.02.12
✎
17:29
|
(43) Ах, только он для 01.01 не работает ((
|
|||
45
Kashemir
16.02.12
✎
17:29
|
ВЫБРАТЬ
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(НАЧАЛОПЕРИОДА(ВЫРАЗИТЬ(&Дата КАК ДАТА), ГОД), ДЕКАДА), НАЧАЛОПЕРИОДА(ВЫРАЗИТЬ(&Дата КАК ДАТА), ДЕКАДА), ДЕНЬ)/10+1 КАК НомерДекады |
|||
46
vmv
16.02.12
✎
17:30
|
фигня какая-то в запросе
можно использовать НАЧАЛОПЕРИОДА, ДЕКАДА и РАЗНОСТЬДАТ этих литералов достаточно для решения задачи в 0, че вы бред пишите с вложениеми какими-то |
|||
47
vmv
16.02.12
✎
17:30
|
(45) телепатировал)
|
|||
48
FarFar
16.02.12
✎
17:35
|
(40) Я укоротил функцию на 2 символа! Кто лучше? :-)
Цел((ДеньГода(ТекДата)+9)/10) |
|||
49
Kashemir
16.02.12
✎
17:36
|
(48) -6 символов ;-)
Цел((ДеньГода(Т)+9)/10) |
|||
50
FarFar
16.02.12
✎
17:36
|
(49) Хитрый, да? Не канает!
|
|||
51
Kashemir
16.02.12
✎
17:38
|
(50) Ставь ТЗ корректно :)
|
|||
52
hhhh
16.02.12
✎
17:41
|
(42)+ из типовой БП ОСВ (разворачивать по дакадам)
Обороты за 01.01.12 - 10.01.12 Обороты за 11.01.12 - 20.01.12 Обороты за 21.01.12 - 31.01.12 Обороты за 01.02.12 - 10.02.12 Обороты за 11.02.12 - 20.02.12 |
|||
53
FarFar
16.02.12
✎
17:42
|
ТС уже уволился, осознав неразрешимость задачи. А холивар в ветке продолжается...
|
|||
54
Asmody
16.02.12
✎
18:03
|
(52) и правда. это сурово меняет дело...
|
|||
55
Asmody
16.02.12
✎
18:09
|
тогда так:
ВЫБРАТЬ (МЕСЯЦ(&Дата)-1)*3+ВЫРАЗИТЬ(ДЕНЬ(НАЧАЛОПЕРИОДА(&Дата,ДЕКАДА))/10 КАК ЧИСЛО(1))+1 |
|||
56
Один С
16.02.12
✎
18:10
|
в общем, приз за самый правильный ответ, получает автор за вариант из (2)..
|
|||
57
Kashemir
16.02.12
✎
18:10
|
(52) "Незамысловатый запрос" для всех декад года выбранной даты
ВЫБРАТЬ 1 КАК Ц ПОМЕСТИТЬ Цифры ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата, ГОД), ДЕНЬ, Цифры.Ц + 10 * Цифры1.Ц + 100 * Цифры2.Ц), ДЕКАДА) КАК НачалоДекады ПОМЕСТИТЬ ВсеДекадыГоды ИЗ Цифры КАК Цифры, Цифры КАК Цифры1, Цифры КАК Цифры2 ГДЕ Цифры.Ц + 10 * Цифры1.Ц + 100 * Цифры2.Ц < ДЕНЬГОДА(КОНЕЦПЕРИОДА(&Дата, ГОД)) СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата, ГОД), ДЕНЬ, Цифры.Ц + 10 * Цифры1.Ц + 100 * Цифры2.Ц), ДЕКАДА) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВсеДекадыГоды.НачалоДекады КАК НачалоДекады, КОЛИЧЕСТВО(ВсеДекадыГоды1.НачалоДекады) КАК НомерДекадыГода ИЗ ВсеДекадыГоды КАК ВсеДекадыГоды ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеДекадыГоды КАК ВсеДекадыГоды1 ПО ВсеДекадыГоды.НачалоДекады >= ВсеДекадыГоды1.НачалоДекады СГРУППИРОВАТЬ ПО ВсеДекадыГоды.НачалоДекады УПОРЯДОЧИТЬ ПО НачалоДекады |
|||
58
Reset
16.02.12
✎
18:11
|
;)
По мотивам (12) и по указанным в (35) и (52) требованиям (Месяц(Дата)-1)*3+Мин(Цел(День(Дата)-1)/10)+1,3) |
|||
59
aptomilov
17.02.12
✎
05:50
|
то есть господа хотите сказать что моя функция не работает? я канечно не проверял по но поему она очень даже верно считает, (3)- читай внимательней формула работает только для 3 ей декады
|
|||
60
aptomilov
17.02.12
✎
05:55
|
(4) - вы чо все читай внимательно! формула работет только для третьей декады
|
|||
61
aptomilov
17.02.12
✎
06:14
|
(6) читай внимательнее!! (0), работает только для третьей декады
|
|||
62
НЕА123
17.02.12
✎
08:07
|
(Месяц(Дата)-1)*3+ //в каждом месяце 3 декады
Мин(Цел(День(Дата)/10)-?(Дата%10=0, 1, 0)+1, 3) //-?(Дата%10=0,1,0) т.к. 10 это все-таки 1-я декада, 20 - вторая. Для 30,31 сработает МИН(). |
|||
63
НЕА123
17.02.12
✎
08:10
|
(62)+
пардон. это дописано с (58). единственная разница вместо 1 ставим ?(Дата%10=0,1,0) ЗЫ. что-то сложновато... |
|||
64
Asmody
17.02.12
✎
08:20
|
(59) мы хотим сказать, что это все пишется в одну строку без кучи если.
|
|||
65
Песец
17.02.12
✎
08:25
|
(0) Пятничная тема! Присоединяюсь:
Функция НомерДекады(Дата) Возврат (Месяц(Дата)-1)*3 + Мин(Число(Лев(Формат(День(Дата),"ЧЦ=2; ЧВН="),1)),2) +1; КонецФункции |
|||
66
Ненавижу 1С
гуру
17.02.12
✎
08:48
|
ДеньМесяца = День(Дата);
ДекадаМесяца = ?(ДеньМесяца>=30,3,(ДеньМесяца-ДеньМесяца%10)/10+1); ДекадаГода = (Месяц(Дата)-1)*3+ДекадаМесяца; |
|||
67
НЕА123
17.02.12
✎
09:07
|
(66)
10 число - это вторая декада? |
|||
68
Ненавижу 1С
гуру
17.02.12
✎
09:11
|
(67)
ДеньМесяцаМинус1 = День(Дата)-1; ДекадаМесяца = ?(ДеньМесяцаМинус1=30,3,(ДеньМесяцаМинус1-ДеньМесяцаМинус1%10)/10+1); ДекадаГода = (Месяц(Дата)-1)*3+ДекадаМесяца; |
|||
69
НЕА123
17.02.12
✎
09:19
|
(68)
О! оно. но неужели нельзя проще? |
|||
70
zak555
17.02.12
✎
10:02
|
(68) 01 января не подходит =)
|
|||
71
НЕА123
17.02.12
✎
10:23
|
(70)
почему? единицу даст. |
|||
72
zak555
17.02.12
✎
10:25
|
(71) ДеньМесяцаМинус1 будет 0 => ДекадаГода = 0 + 0
|
|||
73
Reset
17.02.12
✎
11:24
|
(62) В (58) одна скобка пропущена после Цел
т.е. правильно
Даже проверил) все отрабатывает согласно (52). Усложнение с "?(Дата%10=0,1,0)" не нужно |
|||
74
Reset
17.02.12
✎
11:27
|
(59) Функция работатет, но раздражает Это
Почему нельзя было написать
|
|||
75
vmv
17.02.12
✎
11:32
|
это задача решается запросом без всяких извращений мозга, выше уже показали как.
без аппеляций, как дети прям шота складывают, сворачивают и прочий бред) |
|||
76
Reset
17.02.12
✎
11:34
|
(75) Для сложения/умножения двух чисел выполнять запрос?
|
|||
77
Песец
17.02.12
✎
11:36
|
(75) Можно продолжить конкурс на самый быстрый способ :)
|
|||
78
Баклажанов
17.02.12
✎
11:37
|
порядок http://goo.gl/GiLcc
|
|||
79
НЕА123
17.02.12
✎
12:01
|
(72)
(ДеньМесяцаМинус1-ДеньМесяцаМинус1%10)/10+1 = (0 - 0%10)/10+1 = 1 не? (73) согласен. что-то я туплю... со вчера... сегодня полечусь - благо пятница. |
|||
80
vmv
17.02.12
✎
12:02
|
(76) да - он очевиднее и без косяков, да и быстрее
|
|||
81
zak555
17.02.12
✎
12:04
|
(79) +1 не заметил =)
|
|||
82
vmv
17.02.12
✎
12:05
|
+(80) и не надо лукавить - это не сложение двух чисел, а задача вычисления периодического пераметра с нестандартным периодом, ога. использовать для этой задачи запрос вполне логично, все ваши остатки от делния, сложения и прочия - ересь пятиклассников)
|
|||
83
zak555
17.02.12
✎
12:05
|
(82) может ты просто не умеешь использовать остатки от деления ?
|
|||
84
Ненавижу 1С
гуру
17.02.12
✎
12:06
|
(82) арифметику поучи
|
|||
85
vmv
17.02.12
✎
12:09
|
(83) вам бы счеты и считали бы себе арифметоры - задачу вычисления периодических значений должен решать запрос, а не костящки.
все можете дальще искать блох в своих поделках с арифметикой) |
|||
86
Reset
17.02.12
✎
12:09
|
(82) Да, да ) Сложения, вычитания, остатки - все ересь :)
|
|||
87
Ненавижу 1С
гуру
17.02.12
✎
12:10
|
(85) да ты чего такой буйный?
|
|||
88
Kashemir
17.02.12
✎
12:13
|
(85) на самом деле запрос из (45) некорректен, ибо основан на предпосылке что декада считается от начала года по 10 дней. Оказалось что считается от начала месяца + по 3 декады на каждый прошедший месяц, потому без арифметики даже в запросе не обойтись - либо решение получить на базе громоздкого запроса (57) без оной.
|
|||
89
Kashemir
17.02.12
✎
12:16
|
(88) То бишь хоть в запросе хоть без общая логика КоличествоПрошедшихПолнымМесяцев*3 + Декада от начала текущего
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |