Формат даты в запросе

1. compreSSor 10 12.02.13 12:31 Сейчас в теме
Добрый день.
Помогите, пожалуйста.
Есть запрос по документам - у документа есть дата (формат "Д=mm-dd-YYYY MM:HH:SS)
а мне нужно в результат запроса добавить колонку, которая содержала бы эту же дату, но только в формате "Д = mm-dd-YYYY"
user1544628; PavelTihonov; natarezn; +3 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. beldieff 12.02.13 12:51 Сейчас в теме
(1) compreSSor,
мне нужно в результат запроса добавить колонку, которая содержала бы эту же дату, но только в формате "Д = mm-dd-YYYY"

Зачем? Не проще, уже работая с результатом, форматировать как душе угодно?
3. compreSSor 10 12.02.13 12:53 Сейчас в теме
(2) beldieff, ну это уже как спортивный интерес был - переросло в навязчивую идею )
понятно, что можно работать с результатом... но хотелось реализовать как то сразу - одним действием
PavelTihonov; rozhkovdmitriy; +2 Ответить
5. starjevschik 12.02.13 12:59 Сейчас в теме
(1) compreSSor, формат - это характеристика вывода данных. А дата - это тип. В запросе и в его результатах - данные типа "дата", никакого формата у них нет.
в результат запроса добавить колонку, которая содержала бы эту же дату, но только в формате "Д = mm-dd-YYYY"

- эта задача не имеет смысла, потому что в результате запроса дата - это значение типа "дата" и хранится оно в формате, который предусмотрен используемой СУБД.
Monex; purgin; natarezn; EMelihoff; +4 Ответить
29. natarezn 10.09.15 12:10 Сейчас в теме
(5) starjevschik, а я находила в инете решение этой задачи ! и .. забыла
10. andrewks 1370 12.02.13 14:24 Сейчас в теме
(1) compreSSor, дата хранится не в текстовом представлении формат "Д=mm-dd-YYYY MM:HH:SS или "Д = mm-dd-YYYY"

дата хранится во внутреннем представлении, и уже при формировании строкового представления происходит форматирование в соответствии с заданным представлением
28. natarezn 10.09.15 12:09 Сейчас в теме
(1) compreSSor, мне тоже так нужно !
34. user1619761 23.06.23 14:14 Сейчас в теме
4. compreSSor 10 12.02.13 12:57 Сейчас в теме
странно, что в запросе работает
ДАТАВРЕМЯ(1,1,1,0,0,0)

но не работает
ДАТАВРЕМЯ(Год(Документ.Дата),Месяц(Документ.Дата),День(Документ.Дата),0,0,0)

пишет, что "Неверные параметры "ДАТАВРЕМЯ""
6. beldieff 12.02.13 13:00 Сейчас в теме
(4) compreSSor, ДАТАВРЕМЯ возвращает дату, а форматированная дата уже строка.
natarezn; +1 Ответить
7. KonstB 180 12.02.13 13:28 Сейчас в теме
(6) beldieff, исходя из СП в (4) должно работать.
ДАТАВРЕМЯ ( <Целое число>, <Целое число>,...
Функция ГОД - Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа ЧИСЛО.

Сам вначале попробовал как в (4) но не взлетело.
8. compreSSor 10 12.02.13 13:43 Сейчас в теме
(7) KonstB, так в том то и дело, что не катит
9. KonstB 180 12.02.13 14:06 Сейчас в теме
(8) compreSSor, И я про тоже. Исходя из СП должно катить... Видимо ДатаВремя жрет исключительно Число, ибо даже так не катит:
Выбрать ДатаВремя(&_П1,&_П2,&_П3) (какая уж речь об разыменование)
30. natarezn 10.09.15 12:10 Сейчас в теме
31. XelOla 18 14.03.17 20:20 Сейчас в теме
(30) а вы $m cобираете? много ваших комментариев в статьях
11. andrewks 1370 12.02.13 14:29 Сейчас в теме
(4) compreSSor, а с чего бы ему работать-то? в документации чёрным по белому написано, что ДАТАВРЕМЯ служит для записи литерала даты
25. mikle_kah 1 21.05.15 11:42 Сейчас в теме
(4) compreSSor, Функция ДатаВремя() в запросе возвращает дату из целых чисел, переданных в эту функцию в качестве параметров
12. andrewks 1370 12.02.13 14:30 Сейчас в теме
а вот ДОБАВИТЬКДАТЕ - это функция, её можно использовать для подобных целей
13. SPID 12.02.13 14:33 Сейчас в теме
А если преобразовать в строку полученную дату и взять подстроку первых 10 символов, типо
ПОДСТРОКА(Строка(ПолученнаяДата), 1, 10)

Взлетит?
burni4; Manticor; +2 1 Ответить
14. compreSSor 10 12.02.13 14:34 Сейчас в теме
мне кажется, что я неправильно выразился в 1-м посте (или меня не правильно поняли).
вот запрос
Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЧекККМ.Ссылка КАК Ссылка,
	|	ЧекККМ.Дата КАК Дата,
	|	ДАТАВРЕМЯ(Год(ЧекККМ.Дата),Месяц(ЧекККМ.Дата),Число(ЧекККМ.Дата),0,0,0) КАК ДатаДокумента,
	|	ЧекККМ.СуммаДокумента
	|ИЗ
	|	Документ.ЧекККМ КАК ЧекККМ
	|ГДЕ
	|	И ЧекККМ.СтатусЧекаККМ = &СтатусЧекаККМ
	|	И ЧекККМ.Магазин = &Магазин
	|
	|УПОРЯДОЧИТЬ ПО
	|	Дата";
Показать


я просто хочу, чтобы запрос у меня содержал ещё одну колонку с форматом Дата (без времени).
но вот эта строка
ДАТАВРЕМЯ(Год(ЧекККМ.Дата),Месяц(ЧекККМ.Дата),Число(ЧекККМ.Дата),0,0,0) КАК ДатаДокумента,

не работает
17. andrewks 1370 12.02.13 14:42 Сейчас в теме
(14) compreSSor, ёшкин кот! ну сразу бы так и сказали! а то мы тут в холивар скатились.

НАЧАЛОПЕРИОДА / beginofperiod
prog1c_vl; user640247; dimadec; +3 Ответить
18. compreSSor 10 12.02.13 14:48 Сейчас в теме
(17) andrewks, нивинаватаяЯ !!! )))
15. SPID 12.02.13 14:38 Сейчас в теме
В данном случае выражение
НАЧАЛОПЕРИОДА(ЧекККМ.Дата, ДЕНЬ)
вернет то же что вы хотите строкой
ДАТАВРЕМЯ(Год(ЧекККМ.Дата),Месяц(ЧекККМ.Дата),Число(ЧекККМ.Дата),0,0,0)
jekill71; user1619761; user640247; yasar92; VOPOH; Nikitos_NSK; Henistaromin; neo-ti; Insanity; Squisher; Olga_Mil; pizhenkov; 24rus; compreSSor; +14 Ответить
16. compreSSor 10 12.02.13 14:41 Сейчас в теме
(15) SPID, ооооооооо !!!
то, что доктор прописал !!!
19. KonstB 180 12.02.13 14:58 Сейчас в теме
что то и в правду потянуло не туда )
20. compreSSor 10 12.02.13 15:07 Сейчас в теме
а если немного усложнить задачу ? )))
запрос приобрёл вид
Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЧекККМ.Ссылка КАК Ссылка,
	|	ЧекККМ.Дата КАК Дата,
	|	1 КАК Количество,
	|	ЧекККМ.СуммаДокумента,
	|	НАЧАЛОПЕРИОДА(ЧекККМ.Дата, ДЕНЬ) КАК ДатаДокумента
	|ИЗ
	|	Документ.ЧекККМ КАК ЧекККМ
	|ГДЕ
	|	ЧекККМ.Дата МЕЖДУ &Дата1 И &Дата2
	|	И ЧекККМ.СтатусЧекаККМ = &СтатусЧекаККМ
	|	И ЧекККМ.Магазин = &Магазин
	|	И ЧекККМ.ВидОперации = &ВидОперации
	|
	|УПОРЯДОЧИТЬ ПО
	|	Дата";
Показать


а как теперь тут же указать, чтобы выбирало чеки только с 22:00:00 по 22:59:59 ?
у меня мозгов хватило на условие

|	И Час(ЧекККМ.Дата) = 22


но это катит только если в течении одного часа, а если нужно с 22:00:00 по 23:59:59 - тогда у меня ступор )
21. juntatalor 63 12.02.13 15:11 Сейчас в теме
(20) compreSSor,
Если в течение 1 часа, то как у вас. Если в течение нескольких часов, то:
ЧекККМ.Дата МЕЖДУ &Дата1 И &Дата2 И Час(ЧекККМ.Дата) >= 22 И Час(ЧекККМ.Дата) <= 23

Еще можно пользоваться конструкцией ДАТАВРЕМЯ(), для формирования произвольной даты в запросе.
23. andrewks 1370 12.02.13 16:00 Сейчас в теме
(20) compreSSor,

И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ЧекККМ.Дата, ДЕНЬ),ЧекККМ.Дата,СЕКУНДА) между 79200 и 86399
user1619761; login1020; compreSSor; +3 Ответить
22. SPID 12.02.13 15:19 Сейчас в теме
или в параметрах передать массив часов в которых надо отобрать
МассивЧасов = Новый Массив;
МассивЧасов.Добавить(22);
МассивЧасов.Добавить(23);
Запрос.УстановитьПараметр("ВключеныеЧасы",МассивЧасов);
...
И Час(ЧекККМ.Дата) В(&ВключеныеЧасы)
compreSSor; +1 Ответить
24. compreSSor 10 12.02.13 16:09 Сейчас в теме
всем спасибо за отзывы !!!
26. AlexO 135 21.05.15 11:50 Сейчас в теме
А не проще было сначала определить границы периода, а потом установить их в запросе? Тем более, 1С не поддерживает в запросах преобразование типов.
27. Ambakollajder 21.05.15 11:53 Сейчас в теме
Это плохая идея, все сложное не нужно, все нужное просто
32. websamson 307 23.06.23 11:03 Сейчас в теме
https://ta2i4.ru/stroka-kak-data-v-1c/
ПОДСТРОКА("0123456789", ДЕНЬ(&Дата) / 10 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата))) / 6 + 1, 1)
+ "."
+ ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата) / 10 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата))) / 6 + 1, 1)
+ "."
+ ПОДСТРОКА("0123456789", ГОД(&Дата) / 1000 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.06)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.6)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 6)) / 6 + 1, 1)
Показать
33. soft_wind 23.06.23 13:26 Сейчас в теме
(32) у меня еще такой вариант получился
ВЫБРАТЬ

ПОДСТРОКА("0123456789", ДЕНЬ(&Дата)/10 + 1, 1)
+ ПОДСТРОКА("0123456789", ДЕНЬ(&Дата)-Цел(ДЕНЬ(&Дата)/10)*10 + 1, 1)
+ "."
+ ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата) / 10 + 1, 1)
+ ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата)-Цел(МЕСЯЦ(&Дата)/10)*10 + 1, 1)
+ "."
+ ПОДСТРОКА("0123456789", ГОД(&Дата)/1000 + 1, 1)
+ ПОДСТРОКА("0123456789", (ГОД(&Дата)-Цел(ГОД(&Дата)/1000)*1000)/100 + 1, 1)
+ ПОДСТРОКА("0123456789", (ГОД(&Дата)-Цел(ГОД(&Дата)/100)*100)/10 + 1, 1)
+ ПОДСТРОКА("0123456789", (ГОД(&Дата)-Цел(ГОД(&Дата)/10)*10) + 1, 1)
Показать
35. SlavaKron 23.06.23 15:14 Сейчас в теме
(32) (33) (34) Какая же дичь. Ну вы своим программистским нутром неужели не чувствуете, что это неправильно?
37. websamson 307 29.06.23 05:11 Сейчас в теме
(35) Аргументы? Конструктивная критика? Свой вариант решения?
38. SlavaKron 29.06.23 09:24 Сейчас в теме
(37) Это не нужно делать в запросе. Запросы для получения данных. С форматами, представлением можно "играться" после получения данных. Не могу себе представить такой ситуации, чтобы кроме как в запросе нельзя было сделать произвольный формат представления данных.
NicolasCage; +1 Ответить
39. Tciban 09.11.23 07:03 Сейчас в теме
(38) Легко! Вот моя ситуация. Выгрузка состояния складов на каждый день (начальный остаток, приход, расход, конечный остаток) в CISLINK (может сталкивались?). Период - 45 дней. При том нужно выгружать строку даже на ту дату, когда не было движения номенклатуры.
По их требованиям "Формат даты строгий: ГГГГММДД, где ГГГГ – год, ММ – месяц, ДД – день". Таблица на выходе запроса - ну миллиона 3 строк. А теперь давайте, коллега, в цикле будем менять дату на каждую строку, после того как запросом получим конечную таблицу!

На самом деле проще для каждой даты, а их всего 45, заранее получить нужное представление даты, а потом подставить в конечную выборку. Тем более ildarovich давно уже все придумал в https://infostart.ru/1c/articles/331805/ еще в 2017 году!
И там его за это уже критиковали типа "игры ума, зачем это надо".

вот решение, кому пригодиться:


ВЫБРАТЬ
	0 КАК Ч
ПОМЕСТИТЬ ВТ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, ВТ0.Ч + ВТ1.Ч * 10 + ВТ2.Ч * 100 + ВТ3.Ч * 1000) КАК День
ПОМЕСТИТЬ ВТ_СписокДат
ИЗ
	ВТ КАК ВТ0,
	ВТ КАК ВТ1,
	ВТ КАК ВТ2,
	ВТ КАК ВТ3
ГДЕ
	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, ВТ0.Ч + ВТ1.Ч * 10 + ВТ2.Ч * 100 + ВТ3.Ч * 1000) <= НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_СписокДат.День КАК День,
	ПОДСТРОКА("0123456789", ГОД(ВТ_СписокДат.День) / 1000 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(ВТ_СписокДат.День) * 0.06)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(ВТ_СписокДат.День) * 0.6)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(ВТ_СписокДат.День) * 6)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", МЕСЯЦ(ВТ_СписокДат.День) / 10 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(ВТ_СписокДат.День))) / 6 + 1, 1) + ПОДСТРОКА("0123456789", ДЕНЬ(ВТ_СписокДат.День) / 10 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(ВТ_СписокДат.День))) / 6 + 1, 1) КАК ДатаСтрокой
ИЗ
	ВТ_СписокДат КАК ВТ_СписокДат
Показать
40. SlavaKron 09.11.23 09:23 Сейчас в теме
(39)
миллиона 3 строк. А теперь давайте, коллега, в цикле будем менять дату на каждую строку
Не вижу проблемы – откуда такая боязнь циклов?
41. Tciban 10.11.23 10:03 Сейчас в теме
(40) Откуда боязнь циклов и при чем тут она? Но тупо гонять цикл по такому количеству строк - медленно, зачем?
42. SlavaKron 10.11.23 11:19 Сейчас в теме
(41) Поменять формат даты для 3 млн. строк в цикле займет не более 1 минуты. Для ежедневной выгрузки это ничто.
36. soft_wind 23.06.23 15:23 Сейчас в теме
(35) Чувствуем! но интересно ЖЕ !!!
(я так себе на заметку взял этот способ, мало ли где может пригодиться получить дату в таком формате "2023-06-27" )
user1619761; +1 Ответить
43. vitaliy.makushev@gmail.com 14.01.24 16:52 Сейчас в теме
Столкнулся с задачей, когда в запросе надо было сделать описание, в которое включить дату в формате "DD.mm.YYYY" У меня получилось так, может кому пригодится:
... + " от " + ВЫБОР
					КОГДА ДЕНЬ(ТаблицаИнтересов.Дата) < 10
						ТОГДА "0"
					ИНАЧЕ ""
				КОНЕЦ + СТРОКА(ДЕНЬ(ТаблицаИнтересов.Дата)) + "." + ВЫБОР
					КОГДА МЕСЯЦ(ТаблицаИнтересов.Дата) < 10
						ТОГДА "0"
					ИНАЧЕ ""
				КОНЕЦ + СТРОКА(МЕСЯЦ(ТаблицаИнтересов.Дата)) + "." + СТРЗАМЕНИТЬ(СТРОКА(ГОД(ТаблицаИнтересов.Дата)), " ", "") + ...
Показать


В годе идёт замена неразрывного пробела, чтобы год не выглядел как "2 024"
44. sikvel2012 96 16.01.24 11:12 Сейчас в теме
(43) как удалось с помощью СТРЗАМЕНИТЬ удалить пробел из года? у меня не срабатывает
45. Said-We 16.01.24 12:02 Сейчас в теме
(44) Неразрывный пробел код имеет не 20h (32 десятичное), а десятичное 160 (если не перепутал :-) ).
С клавиатуры вводится как Alt+160. Визуально от пробела не отличается, так как это тоже пробел.
Неразрывный, так как слово не прерывает и авто перенос в текстовых редакторах его воспринимает как обычную букву, а не пробел.
sikvel2012; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот