Как уже в запросе объединить ДопустимоеЧислоДнейЗадолженности (число) с со строкой «дней», т.е. чтобы сразу в таблице уже выдавалось "30 дней".
ДопустимоеЧислоДнейЗадолженности + « дней» не проходит.
Единственный метод сделать из числа строку - это деление на 10. Т.е.:
"ВЫБОР КОГДА ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) = 0 ТОГДА "0"
КОГДА ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) = 1 ТОГДА "1"
КОГДА ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) = 2 ТОГДА "2"
КОГДА ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) = 3 ТОГДА "3"
КОГДА ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) = 4 ТОГДА "4"
КОГДА ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) = 5 ТОГДА "5"
...
КОГДА ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) = 9 ТОГДА "9"
КОНЕЦ + ВЫБОР КОГДА ВЫРАЗИТЬ(ЧД - ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) * 1000 КАК ЧИСЛО(1)) = 0 ТОГДА "0"
ВЫБОР КОГДА ВЫРАЗИТЬ(ЧД - ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) * 1000 КАК ЧИСЛО(1)) = 1 ТОГДА "1"
...
ВЫБОР КОГДА ВЫРАЗИТЬ(ЧД - ВЫРАЗИТЬ(ЧД/1000 КАК ЧИСЛО(2)) * 1000 КАК ЧИСЛО(1)) = 9 ТОГДА "9"
КОНЕЦ + ВЫБОР КОГДА ...
...
КОНЕЦ КАК ЧислоСтрокой"
Показать
Т.е. делим на 1000 и получаем количество тысяч, потом вычитаем все полные тысячи и получаем количество сотен, потом вычитаем все полные тысячи, сотни и десятки - получаем количество единиц. Через временную таблицу со значениями 0..10 можно сделать более лаконичный код, но количество дней может в перспективе быть и более 9999, что уже дополнительно нужно будет предусмотреть. У Ильдаровича тут были какие-то запросики в минимализмах или еще где - поиском воспользуйтесь.
select
2012 as DwnBound
,2015 as UpBound
into InputTable
union select 2000,2005 union select 2024,2032 union select 1997,1999
;
select
0 as num
,"0" as numstr
into digits
union select 1,"1" union select 2,"2" union select 3,"3" union select 4,"4" union select 5,"5"
union select 6,"6" union select 7,"7" union select 8,"8" union select 9,"9"
;
select
digits1.num+10*digits2.num+100*digits3.num+1000*digits4.num as num
,digits4.numstr+digits3.numstr+digits2.numstr+digits1.numstr as numstr
into numbers
from
digits as digits1
,digits as digits2
,digits as digits3
,digits as digits4
index by num
;
select
"период с "+numbers1.numstr+" по "+numbers2.numstr+" год" as BoundPresent
from
InputTable
inner join
numbers as numbers1
on (InputTable.DwnBound=numbers1.num)
inner join
numbers as numbers2
on (InputTable.UpBound=numbers2.num)
(16) каков вопрос - таков и ответ. и пока 1с не сделает нормальный каст (а она этого, мне кажется, не сделает), это будет выглядеть именно так. либо отказаться от хотелок и делать по-другому
Может кому-то пригодится.
В отчете на СКД нужно было вывести в колонку данные по номенклатуре: "Дата поставки" + ("Количество"). Еще и через запятую, для всех ожидаемых поступлений. Пример: 24.09.2018(14), 28.10.2018(6).
В запросе изначально дата выходила со временем. Получилось так:
Запрос:
ВЫБРАТЬ
ЗаказыПоставщикамОстатки.Номенклатура КАК Материал,
ЗаказыПоставщикамОстатки.Характеристика КАК МХарактеристика,
ПРЕДСТАВЛЕНИЕ(ЗаказыПоставщикамОстатки.ЗаказПоставщику.Дата) КАК ДатаПоступления,
ПРЕДСТАВЛЕНИЕ(ЕСТЬNULL(ЗаказыПоставщикамОстатки.ЗаказаноОстаток, 0)) КАК КоличествоНаДату,
СУММА(ЗаказыПоставщикамОстатки.ЗаказаноОстаток) КАК МОтПоставщика
ИЗ
РегистрНакопления.ЗаказыПоставщикам.Остатки КАК ЗаказыПоставщикамОстатки
СГРУППИРОВАТЬ ПО
ЗаказыПоставщикамОстатки.Номенклатура,
ЗаказыПоставщикамОстатки.Характеристика,
ПРЕДСТАВЛЕНИЕ(ЗаказыПоставщикамОстатки.ЗаказПоставщику.Дата),
ПРЕДСТАВЛЕНИЕ(ЕСТЬNULL(ЗаказыПоставщикамОстатки.ЗаказаноОстаток, 0))
В СКД совершенно спокойно можно соединить поле Представление(ИмяПоля) + "текст" на закладке "Вычисляемые поля", можно написать даже выражение для правильной записи "дней", "дня", "день"
Проверено, работает. Может быть понятнее будет на примере:
Текст Набора данных Запрос
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Наименование,
ПРЕДСТАВЛЕНИЕ(Номенклатура.Реквизит1) КАК ЭтоБылоЧисло
ИЗ
Справочник.Номенклатура КАК Номенклатура
Если ДЕЙСТВИТЕЛЬНО необходимо это делать в запросе, можно использовать пакет запросов (т.к. даже в справке по функции ПРЕДСТАВЛЕНИЕ указано, что ее результат нельзя дальше использовать, а ВЫРАЗИТЬ вообще для составных типов):
ВЫБРАТЬ
Справочник1.Поле1 КАК Поле1Число, // Это число
ПРЕДСТАВЛЕНИЕ(Справочник.Поле1) КАК Поле1Строка // Это строка
ПОМЕСТИТЬ ВремТаб
ИЗ Справочник.Справочник1 КАК Справочник1;
ВЫБРАТЬ
ВремТаб.Поле1Строка + " тут нужная строка"
ИЗ ВремТаб КАК ВремТаб
Лично я сделал это коряво (но работает). СКД не вариант (переписывать дольше), а конвертить нужно было всего-навсего номер строки, который у нас ограничен количеством 99.
ТекстЗапроса =
"ВЫБРАТЬ
| 1 КАК НомерСтроки,
| ""01"" КАК НомерСтрокиТекст
|ПОМЕСТИТЬ СоответствиеЧислаСтроке
|";
Для Счетчик = 2 По 99 Цикл
ТекстЗапроса = ТекстЗапроса + "ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| " + Счетчик + ",
| """ + Строка(Формат(Счетчик, "ЧЦ=2; ЧВН=")) + """";
КонецЦикла;
(27) h00m, пожалейте голову и глаза того, кто будет после вас это разбирать! Уж лучше не использовать запросы вовсе (если нет технической возможности преобразовать число в строку), чем делать это так.
У меня была задача похожего плана в скд один ресурс тип строка "СтатусОплаты" а другой тип число "СуммаОплаты"
сделал так в вычисляемом поле написал: ""+Формат(СтатусОплаты)+Формат(СуммаОплаты)
Тема старая, но по итогу объединение в запросе строки с числом невозможно, можно придумывать велосипеды но они не заработают, поэтому раз все сейчас на СКД , то после запроса либо делаешь шаблон в печатной форме, либо как тут выше было написано пишешь вычисляемое поле , хотя мне кажется что вычисляемое поле тоже может вывалиться в ошибку.
Я сделал все через шаблон уже в момент вывода печатной формы.
(45) Для чего это делать в запросе-то? Запрос - не интерфейсная финтифлюшка. Запрос для выборки данных. А для вывода пользователю в любом удобном виде существует куча бантиков.
(47) Потому что на начальном этапе может быть удобно получить и далее с этим работать. Мне вообще нравится получать максимум в запросах, а потом уже плюшки СКД и все такое
(52) Извращаться как то не очень хочется. Статьи и т.д. как бы сказать - задача мелкая по своей сути
---
Вообще не понимаю какие могут быть проблемы с преобразованием числа в строку - указал формат и все, обратное - да, чуть сложнее
(45) Если очень нужно и именно в запросе, то в статье Выразить число как строку и дату как строку в запросе написано как это сделать. Там не такое уж громоздкое выражение получается (по сравнению с выделением разрядов делением как предлагается в (49)).
Кстати, в (41) предлагается решение именно из указанной статьи.
(49) Все же это не единственный метод - посмотрите статью по ссылке.
Как вариант: (ВЫРАЗИТЬ("ВашаСтрока" КАК СТРОКА(100))) + (ВЫРАЗИТЬ(ВашеЧисло) КАК СТРОКА(100)))
Важно: тип СТРОКА(кол-во симв.) должен быть одинаковым у подстрок в операции конкатенации (сцепления)
в СКД
Есть поле ЭтоЧисло,
1) в запросе делаем Представление(ЭтоЧисло) как ЧислоСтрокой,
2) в вычисляемых полях тогда уже делаем новое вычисляемое поле: ЧислоСтрокой+"Текст"
Работает
создал справочник, с полями число - строка с необходимым мне диапазоном,
для решения проблем с отсутствием row_number() over (partition by ... order by ... desc, ...desc)
;(
Вот так работает Строка(РеквизитЧисло) + " некий текст " в запросе
Начиная с версии 8.3.20
Строка(String) – преобразует значение примитивного типа в строку с учетом национальных установок.
(65) "текст" + Строка(1)
работает
"текст" + Строка(Товары.НомерРаздела)
не работает
"текст" + Строка(ВЫРАЗИТЬ (Товары.НомерРаздела КАК ЧИСЛО(10)))
работает
О_О