Как уже в запросе объединить число и строку?

1. Denis Kolebakin (thorben) 22.03.12 12:06
Как уже в запросе объединить ДопустимоеЧислоДнейЗадолженности (число) с со строкой «дней», т.е. чтобы сразу в таблице уже выдавалось "30 дней".
ДопустимоеЧислоДнейЗадолженности + « дней» не проходит.
Подписаться Добавить вознаграждение

Ответы

2. Алексей Бобылкин (alex_bob) 22.03.12 12:11
ВЫРАЗИТЬ(ДопустимоеЧислоДнейЗадолженности КАК СТРОКА(3)) + " дней"
3. Sergey Dikov (DikovSV) 22.03.12 12:11
(1) thorben,
У механизма запросов 1С проблема с преобразованием типов
4. Denis Kolebakin (thorben) 22.03.12 12:16
(2) alex_bob,
Так я уже пробовал. Программа ругается и пишет, что "Несовместимые типы..." Она дает приобразовать число только в число, а в строку нет.
5. Максим Серебр (Maximus993) 22.03.12 12:20
Число в строку можно преобразовать в строку через Представление(значение), однако прибавить к результату строку все равно не получится.
6. Антон Чарушкин (hulio) 22.03.12 12:21
(2) на 8.2.15.294 такое выражение не работает.
Не понимает язык запросов такие преобразования ...
7. Denis Kolebakin (thorben) 22.03.12 12:23
Понятно. Буду тогда результат запроса дорабатывать.
8. Дмитрий Звягинцев (Cerberdm) 22.03.12 13:35
вариант с разбитием на два запроса предлагать?
9. Denis Kolebakin (thorben) 22.03.12 13:41
10. Дмитрий Звягинцев (Cerberdm) 22.03.12 13:43
(9) thorben, дважды выполнить запрос будет медленнее, чем выполнить его один раз и обработать результат? )
11. Дмитрий Звягинцев (Cerberdm) 22.03.12 13:45
(9) thorben, Хотя, честно говоря, сам в таких случаях обрабатывал результат запроса... )
12. Denis Kolebakin (thorben) 22.03.12 13:48
(11) Cerberdm,
просто я уже сделал обработку результата и теперь переделывать не хочется.
13. andrewks 22.03.12 20:51
вы будете смеяться, но это возможно. пакетный запросы, временные таблицы и соединения спасут мир
14. Sergey Dikov (DikovSV) 23.03.12 07:47
(13) andrewks, есть рабочий пример?
15. andrewks 23.03.12 22:46
(14) вот, даже круче, чем в сабже

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. Алексей Бобылкин (alex_bob) 24.03.12 09:32
(15) Нда. Печально это всё выглядит. Не хотел бы я сопровождать такой код. Особенно если его еще засунуть в СКД.
Уж лучше обработать результат.
17. andrewks 24.03.12 15:05
(16) каков вопрос - таков и ответ. и пока 1с не сделает нормальный каст (а она этого, мне кажется, не сделает), это будет выглядеть именно так. либо отказаться от хотелок и делать по-другому
18. Васильева Нина (n_I_v_a) 27.03.12 08:23
В СКД совершенно спокойно можно соединить поле Представление(ИмяПоля) + "текст" на закладке "Вычисляемые поля", можно написать даже выражение для правильной записи "дней", "дня", "день"
temka_1105; Восьмой; +2 Ответить 1
19. Васильева Нина (n_I_v_a) 27.03.12 14:54
Кстати, в запросе всё прекрасно соединяется, ПРЕДСТАВЛЕНИЕ() +"текст"
20. andrewks 27.03.12 18:03
(19) ню-ню. а проверить прежде, чем советовать, не судьба?
21. Васильева Нина (n_I_v_a) 27.03.12 19:42
Проверено, работает. Может быть понятнее будет на примере:
Текст Набора данных Запрос

ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Наименование,
ПРЕДСТАВЛЕНИЕ(Номенклатура.Реквизит1) КАК ЭтоБылоЧисло
ИЗ
Справочник.Номенклатура КАК Номенклатура

Текст строки Вычисляемые поля Выражение

ЭтоБылоЧисло + " а это текст"

Всё прекрасно соединяет

А вот про запрос добавила зря. Извиняюсь.
22. Rett Batler (batlerrett) 06.02.13 12:09
Никак, попробуйте 8.3, возможно там заработал метод Выразить
23. andrewks 06.02.13 12:42
(22) batlerrett, с чего бы это он там заработал?
24. Hany (Hany) 06.02.13 12:48
неясно, найден ли вариант решения?

Если это СКД, то такой вопрос вообще не должен ставить в тупик, в (18) ответ.

Если это построитель или отчет со своим макетом - то что мешает добавить поле НазваниеДней как-то так:


...
|" дней" КАК стрНазваниеДней,
...


и выводить его сразу за полем, в котором число ДопустимоеЧислоДнейЗадолженности
25. Сергей Борисов (juntatalor) 06.02.13 15:59
Если ДЕЙСТВИТЕЛЬНО необходимо это делать в запросе, можно использовать пакет запросов (т.к. даже в справке по функции ПРЕДСТАВЛЕНИЕ указано, что ее результат нельзя дальше использовать, а ВЫРАЗИТЬ вообще для составных типов):

ВЫБРАТЬ
Справочник1.Поле1 КАК Поле1Число, // Это число
ПРЕДСТАВЛЕНИЕ(Справочник.Поле1) КАК Поле1Строка // Это строка
ПОМЕСТИТЬ ВремТаб
ИЗ Справочник.Справочник1 КАК Справочник1;

ВЫБРАТЬ
ВремТаб.Поле1Строка + " тут нужная строка"
ИЗ ВремТаб КАК ВремТаб
temka_1105; alean; +2 1 Ответить 1
26. Григорий (suggestive) 06.08.13 13:07
(25) juntatalor, При использовании временных таблиц все равно ругается и не дает запрос выполнить.
27. h00m (h00m) 16.08.13 15:47
Лично я сделал это коряво (но работает). СКД не вариант (переписывать дольше), а конвертить нужно было всего-навсего номер строки, который у нас ограничен количеством 99.
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	1 КАК НомерСтроки,
	|	""01"" КАК НомерСтрокиТекст
	|ПОМЕСТИТЬ СоответствиеЧислаСтроке
	|";
	
	
	Для Счетчик = 2 По 99 Цикл
		ТекстЗапроса = ТекстЗапроса + "ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	" + Счетчик + ",
		|	""" + Строка(Формат(Счетчик, "ЧЦ=2; ЧВН=")) + """";
	КонецЦикла;
...Показать Скрыть
28. Сергей Борисов (juntatalor) 27.08.13 17:39
(27) h00m, пожалейте голову и глаза того, кто будет после вас это разбирать! Уж лучше не использовать запросы вовсе (если нет технической возможности преобразовать число в строку), чем делать это так.
29. h00m (h00m) 27.08.13 23:53
(28) Это же не запрос в цикле, или какая-то другая ошибка, это вполне адекватный код. Вы не встречали в Бух-ии решение при помощи теории графов?
30. Алексей Молодов (Allexe8.1) 28.08.13 03:22
(29) h00m, а что мешает предварительно ТЗ заполнить и поместить ее во временную таблицу?
31. Pogonii (pogonii) 10.02.14 11:49
Самый лучший вариант . Преобразовать строку в число или число в строку в запросе не получиться.
32. Владислав Двойрин (fnxash) 10.02.14 12:37
(1) thorben, если у тебя скд то в нем делаешь макет для поля, в нем указываешь тип ячейки "шаблон" и к количеству дней добавляешь произвольный текст.
33. Евгений Кривошев (KrivosheevEV) 10.02.14 13:14
А ещё.. а ещё в СКД можно Пользовательские поля использовать.
34. Rett Batler (batlerrett) 11.02.14 09:26
Можно попробовать пользовательское поле уже в режиме пользователя
35. Andrey Kolesnikov (Boneman) 11.02.14 12:59
мне кажется топикстартер уже давно решил эту проблему.
АРХЕОЛОГИ )))
36. Елена Пименова (Bukaska) 11.02.14 17:50
(35) Boneman, Угу.. подняли старую тему)))
37. Жека (sheff161) 11.11.16 10:45
У меня была задача похожего плана в скд один ресурс тип строка "СтатусОплаты" а другой тип число "СуммаОплаты"
сделал так в вычисляемом поле написал: ""+Формат(СтатусОплаты)+Формат(СуммаОплаты)