Имя: Пароль:
1C
1С v8
ДАТАВРЕМЯ() Понимает только литералы?
,
0 YouAreEmpty
 
17.10.13
16:59
Вечер добрый! Понадобилось мне в запросе получить поле, где дата время берутся из разных полей. Соответственно написал ДАТАВРЕМЯ(Т1.ДатаГода), Т1(ДатаМесяц),...) и т.д. На что получил сообщение об ошибке, что у меня в функции неверные параметры и указывает на год. Ставлю вместо года 2013, ругается что не правильный параметр месяц, ну и так далее. Собственно непонятно как в запросе-то дату и время соединить теперь?
1 Мимохожий Однако
 
17.10.13
17:00
Не стесняйся, код покажи.
2 Rovan
 
гуру
17.10.13
17:00
а так
ДАТАВРЕМЯ(Т1.ДатаГода, Т1.ДатаМесяц,...)
3 ptiz
 
17.10.13
17:01
пробуй ДобавитьКДате(...)
4 YouAreEmpty
 
17.10.13
17:02
(2) Именно так и делал, разложил дату на составляющие и попробовал собрать дату по новому, нифига. Пропускает только литералы.
5 YouAreEmpty
 
17.10.13
17:03
(1) Пожалуйста:

ДатаНачала = Период;
    
    ТаблицаПериодов = ПолучитьТаблицуПериодов(Период, Период);
    
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    ТаблицаПериодов.Период КАК Дата,
                          |    ТаблицаПериодов.НомерДняНедели,
                          |    ТаблицаПериодов.ДеньНедели
                          |ПОМЕСТИТЬ ВТ_ТаблицаПериодов
                          |ИЗ
                          |    &ТаблицаПериодов КАК ТаблицаПериодов
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          |    склГрафикРаботыЖивойОчереди.Склад,
                          |    склГрафикРаботыЖивойОчереди.УчастокСклада,
                          |    склГрафикРаботыЖивойОчереди.Пост,
                          |    склГрафикРаботыЖивойОчереди.ШаблонГрафика
                          |ПОМЕСТИТЬ ВТ_ШаблоныГрафика
                          |ИЗ
                          |    РегистрСведений.склГрафикРаботыЖивойОчереди КАК склГрафикРаботыЖивойОчереди
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          |    ВТ_ШаблоныГрафика.Склад,
                          |    ВТ_ШаблоныГрафика.УчастокСклада,
                          |    ВТ_ШаблоныГрафика.Пост,
                          |    ВТ_ШаблоныГрафика.ШаблонГрафика,
                          |    склШаблоныГрафикаДниНедели.НомерДняНедели,
                          |    склШаблоныГрафикаДниНедели.ВремяС,
                          |    склШаблоныГрафикаДниНедели.ВремяПо
                          |ПОМЕСТИТЬ ВТ_НедельноеРасписание
                          |ИЗ
                          |    ВТ_ШаблоныГрафика КАК ВТ_ШаблоныГрафика
                          |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.склШаблоныГрафика.ДниНедели КАК склШаблоныГрафикаДниНедели
                          |        ПО ВТ_ШаблоныГрафика.ШаблонГрафика = склШаблоныГрафикаДниНедели.Ссылка
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          |    ВТ_ТаблицаПериодов.Дата,
                          |    ВТ_ТаблицаПериодов.НомерДняНедели,
                          |    ВТ_ТаблицаПериодов.ДеньНедели,
                          |    ВТ_НедельноеРасписание.Склад,
                          |    ВТ_НедельноеРасписание.УчастокСклада,
                          |    ВТ_НедельноеРасписание.Пост,
                          |    ВТ_НедельноеРасписание.ВремяС,
                          |    ВТ_НедельноеРасписание.ВремяПо
                          |ИЗ
                          |    ВТ_ТаблицаПериодов КАК ВТ_ТаблицаПериодов
                          |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НедельноеРасписание КАК ВТ_НедельноеРасписание
                          |        ПО ВТ_ТаблицаПериодов.ДеньНедели = ВТ_НедельноеРасписание.НомерДняНедели");
    Запрос.УстановитьПараметр("ТаблицаПериодов", ТаблицаПериодов);
    
    Табл = Запрос.Выполнить().Выгрузить();
    Табл.ВыбратьСтроку();
    
КонецПроцедуры
6 Enders
 
17.10.13
17:03
Т1.ДатаГода тип строка ?
7 YouAreEmpty
 
17.10.13
17:05
(6) Число
8 YouAreEmpty
 
17.10.13
17:07
(3) Каким образом?
9 Мимохожий Однако
 
17.10.13
17:20
У ДАТАВРЕМЯ() нет аргументов. Полагаю, поэтому и не получается
10 Ненавижу 1С
 
гуру
17.10.13
17:21
в запросе ДАТАВРЕМЯ это не функция, читайте описание
11 RomanYS
 
17.10.13
17:22
(5) а где там ДАТАВРЕМЯ?
12 YouAreEmpty
 
17.10.13
17:22
(9) Вы шутите, милейший?
13 1C_OOLer
 
17.10.13
17:23
(8)
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, Т1.ДатаГода)

а что из (5) получить нужно?
14 YouAreEmpty
 
17.10.13
17:23
(11) А каким макаром я ее туда запихаю, если запрос ругается на ошибку?
15 YouAreEmpty
 
17.10.13
17:24
(10) Допустим, но что ей мешает принять значение, возвращенное другой функцией?
16 fisher
 
17.10.13
17:24
Странно. Неоднократно юзал ДАТАВРЕМЯ с данными из полей и без проблем.
17 YouAreEmpty
 
17.10.13
17:25
(13) ДатаНачала  = Период(Дата) + ВремяС(Время)
ДатаОкончания = Период(Дата) + ВремяПо(Время)
18 YouAreEmpty
 
17.10.13
17:25
(16) Мне тоже странно
19 fisher
 
17.10.13
17:27
Какой тип данных полей "ДатаГода" и "ДатаМесяц"?
20 Мимохожий Однако
 
17.10.13
17:28
(12)Я серьёзен как никогда.
(16)Пример кода покажи.
21 YouAreEmpty
 
17.10.13
17:29
(20) Дык выше привел же!
22 1C_OOLer
 
17.10.13
17:29
(17) ВремяС/ВремяПо - типы?
23 YouAreEmpty
 
17.10.13
17:30
(22) Дата естесно
24 hhhh
 
17.10.13
17:31
вроде же недавно обсуждали, Что ДАТАВРЕМЯ() - это литерал
25 YouAreEmpty
 
17.10.13
17:33
Пробывал и так, чтобы отвязаться от кода, результат тот же самый.

ВЫБРАТЬ ПЕРВЫЕ 1
    РеализацияТоваровУслуг.Ссылка,
    РеализацияТоваровУслуг.Дата КАК Дата,
    ГОД(РеализацияТоваровУслуг.Дата) КАК ДатаГод,
    РеализацияТоваровУслуг.ДатаОплаты
ПОМЕСТИТЬ ВТ_Т
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Т.Ссылка,
    ВТ_Т.Дата,
    ВТ_Т.ДатаГод,
    ДАТАВРЕМЯ(ВТ_Т.ДатаГод,2,2) КАК ПолеДата
ИЗ
    ВТ_Т КАК ВТ_Т
26 YouAreEmpty
 
17.10.13
17:33
(24) И что мне это дает? Как мне даты соединить-то?
27 RomanYS
 
17.10.13
17:35
(26) используй добавить к дате
28 fisher
 
17.10.13
17:38
Кажись я прогнал. Видать спутал с чем-то.
В рабочей базе примера не нашел.
На тестовом примере - ругается...
Странно. Ща покручу :)
29 YouAreEmpty
 
17.10.13
17:40
(28) УТ10, УПП БП должно работать, сам запускал на УПП 1.3
30 YouAreEmpty
 
17.10.13
17:41
(27) Можешь расписать как, конец раб. дня - невкурю что-то
31 fisher
 
17.10.13
17:42
Да у меня даже на такое ругается:
ВЫБРАТЬ ДАТАВРЕМЯ(ГОД(&ТекущаяДата), Месяц(&ТекущаяДата), ДЕНЬ(&ТекущаяДата))
32 YouAreEmpty
 
17.10.13
17:42
(31) Вот и я о ТОМ ЖЕ!
33 1C_OOLer
 
17.10.13
17:43
ДОБАВИТЬКДАТЕ(&Дата1, СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Дата2, ДЕНЬ), &Дата2, СЕКУНДА))
34 fisher
 
17.10.13
17:47
Хм... Может это в СКД работало? В языке выражений СКД есть аналогичная функция.
35 fisher
 
17.10.13
17:48
Ща проверю.
36 1C_OOLer
 
17.10.13
17:48
+ (33) от даты1 тоже надо НачалоПериода взять
37 YouAreEmpty
 
17.10.13
17:50
(36) Вроде понял как, щас попробую
38 fisher
 
17.10.13
17:52
Не. Нифига. В СКД тоже литералы требует.
39 fisher
 
17.10.13
17:53
Значит, пригрезилось :)
40 YouAreEmpty
 
17.10.13
17:55
ВСЕ господа, решил! Конструкция ахтунг конечно, но работает:

    ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ВТ_ТаблицаПериодов.Дата, ЧАС, ЧАС(ВТ_НедельноеРасписание.ВремяС)), МИНУТА, МИНУТА(ВТ_НедельноеРасписание.ВремяС)), СЕКУНДА, СЕКУНДА(ВТ_НедельноеРасписание.ВремяС)) КАК ДатаНачала
41 YouAreEmpty
 
17.10.13
17:56
to 1C: И неужели работу с датами в запросе нельзя было проще и функциональней сделать...
42 fisher
 
17.10.13
17:57
(40) Проще было одними секундами, как показывали.
43 YouAreEmpty
 
17.10.13
17:58
(42) С секундами не совсем понял, можно пример?
44 WildSery
 
17.10.13
17:59
(41) дадада. И со строками. И с числами.
45 YouAreEmpty
 
17.10.13
18:00
А, то естт к дате просто прибавляется количество секунд между датами, но мне не подходит, поля ВремяС и ВремяПо, хранят только ВРЕМЯ, т.е в виде '0001-01-01:12-00-00'. Если разность посчитать охрененно получиться
46 fisher
 
17.10.13
18:00
Дык выше пример был.
ДОБАВИТЬКДАТЕ(ВТ_ТаблицаПериодов.Дата, СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВТ_НедельноеРасписание.ВремяС, ДЕНЬ),ВТ_НедельноеРасписание.ВремяС, СЕКУНДА))
47 YouAreEmpty
 
17.10.13
18:01
(46) Да уже догнал, подтормаживаю, сорри)
48 fisher
 
17.10.13
18:04
Чорд, а такая уверенность откуда-то была, что ДАТАВРЕМЯ не только литералы хавает...
49 YouAreEmpty
 
17.10.13
18:05
(48) А какая у меня была, когда я сказал что задача пару часов займет всего))) Не ожидал подставы такой...
50 Maggie
 
17.10.13
18:23
ВЫБРАТЬ ПЕРВЫЕ 1
    РеализацияТоваровУслуг.Ссылка,
    РеализацияТоваровУслуг.Дата КАК Дата,
    ГОД(РеализацияТоваровУслуг.Дата) КАК ДатаГод
    
ПОМЕСТИТЬ ВТ_Т
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Т.Ссылка,
    ВТ_Т.Дата,
    ВТ_Т.ДатаГод,
    ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 2, 2, 0, 0, 0), ГОД, ВТ_Т.ДатаГод - 1) КАК ПолеДата
    ИЗ
    ВТ_Т КАК ВТ_Т