Имя: Пароль:
1C
1С v8
Как определить количество дней в году если год имеет тип число?
0 vralR
 
25.11.16
11:00
в расчете среднего в больничном год расчета указан числом, тип - число.
как на скд прикрутить функцию ДЕНЬГОДА , она работает с типом дата, или по другому - как из поля с типом число получить дату и передать в ДеньГода чтоб узнать таки сколько дней в этом году?
1 DrShad
 
25.11.16
11:04
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(), ДАТАВРЕМЯ(), ДЕНЬ)
2 Serg_1960
 
25.11.16
11:04
Как я понял, таки, вопрос банальный - о календарных днях? Тогда всё сводится к вопросу "високосный или нет этот год?"
3 vralR
 
25.11.16
11:07
ну да - пересчитать средний заработок,(365,366)
4 h-sp
 
25.11.16
11:09
(3) не надо переводить в дату, там алгоритм простейший. Если число делится на 4, значит год високосный, кроме 2000, он невисокосный.
5 vralR
 
25.11.16
11:09
(1) датавремя и разность работают с типом ДАТА а не с числом
6 h-sp
 
25.11.16
11:10
(3) для расчета среднего 2000й вам не потребуется, значит просто делите на 4.
7 mkalimulin
 
25.11.16
11:11
(0) Добавить еще два числа: 12 и 31.
8 h-sp
 
25.11.16
11:11
(1) не прокатит, в Датавремя() должны быть константы.
9 vralR
 
25.11.16
11:17
теперь другая заморочка СКД - как найти остаток от деления (
10 DrShad
 
25.11.16
11:22
(5) наверное для тебя это будет новость, но ДАТАВремя() работает с числом

указывай ДатаВРЕМЯ(год, месяц, день, ....) и все будет
11 mkalimulin
 
25.11.16
11:23
(9) должно быть %
12 h-sp
 
25.11.16
11:28
(10) Литерал типа ДАТА записывается в виде:

ДАТАВРЕМЯ ( <Целое число>, <Целое число>,
<Целое число>[, <Целое число>,
<Целое число>, <Целое число>] )

Значения типа дата задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута, секунда. Последние три указывать необязательно.

Максимальная дата которую возможно задать при помощи литерала ДАТАВРЕМЯ – 31.12.3999 23:59:59.

только числа можно указывать в параметрах. Переменная не взлетит.
13 vralR
 
25.11.16
11:31
(12) вово -датавремя не работает с параметрами и полями, а у меня строка табличной части
14 vralR
 
25.11.16
11:32
(11) % - не для СКД
15 newbling
 
25.11.16
11:32
запрос по производственному календарю ;)
16 Serg_1960
 
25.11.16
11:36
"Пошалим, малыш?" :)

ВЫБРАТЬ    ДЕНЬГОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 12, 31, 0, 0, 0), ГОД, &ГодЧислом - 1)) КАК СколькоДнейВГодуВПоследнийДеньГода
17 vralR
 
25.11.16
11:43
(16) погорячился насчет параметров запроса, у меня
строка табличной части
18 vralR
 
25.11.16
11:52
ПоследниеБЛ.РасчетСреднего2011.РасчетныйГод - (4 * ВЫРАЗИТЬ((ПоследниеБЛ.РасчетСреднего2011.РасчетныйГод / 4) - 0.5) КАК Число(15,0) ) )  - дает остаток от деления
19 Serg_1960
 
25.11.16
12:05
(17) Без разницы. Сгодится даже дробное число (отбрасывается).

    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ДЕНЬГОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 12, 31, 0, 0, 0), ГОД, ГОД(СотрудникиОрганизаций.ДатаПриемаНаРаботу) - 1)) КАК ДнейВГодПриемаНаРаботу
    |ИЗ
    |    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |ГДЕ
    |    СотрудникиОрганизаций.Наименование = ""Иванов Иван Иванович (осн.)""";
20 Serg_1960
 
25.11.16
12:27
(18) Последний шаг :)

    "ВЫБРАТЬ
    |    ВЫБОР
    |        КОГДА ПоследниеБЛ.РасчетСреднего2011.РасчетныйГод / 4 = (ВЫРАЗИТЬ(ПоследниеБЛ.РасчетСреднего2011.РасчетныйГод / 4 КАК ЧИСЛО(15, 0)))
    |            ТОГДА 366
    |        ИНАЧЕ 365
    |    КОНЕЦ КАК ВсегоДнейВГоду";
21 Serg_1960
 
25.11.16
12:29
PS: открой для себя округление в запросе - http://tinyurl.com/ybqre2s :))
22 vralR
 
25.11.16
15:18
(21) последний шаг преодолел сам :) , а про округление - почитаю все одно - сенькю
23 kumena
 
25.11.16
15:31
какие то сложности у вас не понятные, соединение к производственному календарю очень просто решает проблему.
24 Vladal
 
25.11.16
15:41
(23) Не во всех конфигурациях есть этот РС.
Основная теорема систематики: Новые системы плодят новые проблемы.