1с запрос выразить дату как строку
Перейти к содержимому

1с запрос выразить дату как строку

  • автор:

Дата в строку в запросе..

В продолжение темы v8: Как преобразовать дату в строку в запросе ?,
где речь шла о номере и дате документа.
Изящный метод «.Представление» для справочника ДоговорыКонтрагентов, к сожалению, не подходит.
«Забивать» в запрос все возможные даты — тоже не вариант.

Предлагаю другое универсальное решение:

//====================================================================
«Договор № «+ВЫРАЗИТЬ(Табл.Номер КАК Строка(12))+
» от » + //——— день ———
ВЫБОР КОГДА ВЫРАЗИТЬ(ДЕНЬ(Табл.Дата)/10 КАК Число(1) )*10
— ДЕНЬ(Табл.Дата) > 0 //округленные десятки
ТОГДА //десятки округлены в большую сторону
ПОДСТРОКА(«0123», //десятков + «0»
ВЫРАЗИТЬ(ДЕНЬ(Табл.Дата)/10 КАК Число(1) )
,1) +
ПОДСТРОКА(«0123456789»,
ДЕНЬ(Табл.Дата)- //единиц + «0»
((ВЫРАЗИТЬ(ДЕНЬ(Табл.Дата)/10 КАК Число(1)) — 1) * 10) + 1
,1)
ИНАЧЕ //десятки округлены в меньшую сторону
ПОДСТРОКА(«0123», //десятков дней не больше 3х
ВЫРАЗИТЬ(ДЕНЬ(Табл.Дата)/10 КАК Число(1) ) + 1
,1) +
ПОДСТРОКА(«0123456789»,
ДЕНЬ(Табл.Дата)-
(ВЫРАЗИТЬ(ДЕНЬ(Табл.Дата)/10 КАК Число(1) ) * 10) + 1
,1)
КОНЕЦ + «.» + //———- месяц —————
ВЫБОР КОГДА ВЫРАЗИТЬ(МЕСЯЦ(Табл.Дата)/10 КАК Число(1) )*10
— МЕСЯЦ(Табл.Дата) > 0 //округленные десятки
ТОГДА //десятки округлены в большую сторону
ПОДСТРОКА(«01», //десятков месяцев не больше 1
ВЫРАЗИТЬ(МЕСЯЦ(Табл.Дата)/10 КАК Число(1) )
,1) +
ПОДСТРОКА(«0123456789»,
МЕСЯЦ(Табл.Дата)-
((ВЫРАЗИТЬ(МЕСЯЦ(Табл.Дата)/10 КАК Число(1)) — 1) * 10) + 1
,1)
ИНАЧЕ //десятки округлены в меньшую сторону
ПОДСТРОКА(«01»,
ВЫРАЗИТЬ(МЕСЯЦ(Табл.Дата)/10 КАК Число(1) ) + 1
,1) +
ПОДСТРОКА(«0123456789»,
МЕСЯЦ(Табл.Дата)-
(ВЫРАЗИТЬ(МЕСЯЦ(Табл.Дата)/10 КАК Число(1) ) * 10) + 1
,1)
КОНЕЦ + «.» + //——— год ——————
// сами понимаете, во что выльется «выбирание» цифр года без переменных,
// поэтому упростим :
// считаем, что кроме 0001, 19хх и 20хх — нет др годов

//тысячи и сотни года
ВЫБОР КОГДА ГОД(Табл.Дата) <> 1
ТОГДА
ВЫБОР КОГДА ГОД(Табл.Дата) > 1999
ТОГДА «20» + //десятки и единицы года
ВЫБОР КОГДА ВЫРАЗИТЬ((ГОД(Табл.Дата) — 2000)/10 КАК Число(1) )*10
— (ГОД(Табл.Дата) — 2000) > 0
ТОГДА //десятки округлены в большую сторону
ПОДСТРОКА(«0123456789»,
ВЫРАЗИТЬ((ГОД(Табл.Дата) — 2000)/10 КАК Число(1) )
,1) +
ПОДСТРОКА(«0123456789»,
(ГОД(Табл.Дата) — 2000) —
((ВЫРАЗИТЬ((ГОД(Табл.Дата) — 2000)/10 КАК Число(1)) — 1) * 10) + 1
,1)
ИНАЧЕ //десятки округлены в меньшую сторону
ПОДСТРОКА(«0123456789»,
ВЫРАЗИТЬ((ГОД(Табл.Дата) — 2000)/10 КАК Число(1) ) + 1
,1) +
ПОДСТРОКА(«0123456789»,
(ГОД(Табл.Дата) — 2000) —
(ВЫРАЗИТЬ((ГОД(Табл.Дата) — 2000)/10 КАК Число(1) ) * 10) + 1
,1)
КОНЕЦ
//————————-
ИНАЧЕ «19» + //десятки и единицы года
ВЫБОР КОГДА ВЫРАЗИТЬ((ГОД(Табл.Дата) — 1900)/10 КАК Число(1) )*10
— (ГОД(Табл.Дата) — 1900) > 0
ТОГДА //десятки округлены в большую сторону
ПОДСТРОКА(«0123456789»,
ВЫРАЗИТЬ((ГОД(Табл.Дата) — 1900)/10 КАК Число(1) )
,1) +
ПОДСТРОКА(«0123456789»,
(ГОД(Табл.Дата) — 1900) —
((ВЫРАЗИТЬ((ГОД(Табл.Дата) — 1900)/10 КАК Число(1)) — 1) * 10) + 1
,1)
ИНАЧЕ //десятки округлены в меньшую сторону
ПОДСТРОКА(«0123456789»,
ВЫРАЗИТЬ((ГОД(Табл.Дата) — 1900)/10 КАК Число(1) ) + 1
,1) +
ПОДСТРОКА(«0123456789»,
(ГОД(Табл.Дата) — 1900) —
(ВЫРАЗИТЬ((ГОД(Табл.Дата) — 1900)/10 КАК Число(1) ) * 10) + 1
,1)
КОНЕЦ

Подсказки «1с»

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПОДСТРОКА(Константы.Ц, Числа.Число_ / 10000000 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 0.000006)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 0.00006)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 0.0006)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 0.006)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 0.06)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 0.6)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 6)) / 6 + 1, 1) + «.» + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 60)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 600)) / 6 + 1, 1) + ПОДСТРОКА(Константы.Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(Константы.О, СЕКУНДА, Числа.Число_ * 6000)) / 6 + 1, 1) КАК Строка
ИЗ
(ВЫБРАТЬ
«0123456789» КАК Ц,
ДАТАВРЕМЯ(1, 1, 1) КАК О) КАК Константы,
Числа КАК Числа

Блог компьютерного гения

Сегодня при написании запроса в 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)

Добавить комментарий

Ваш адрес email не будет опубликован.