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

Страницы: 1

Как уже в запросе объединить ДопустимоеЧислоДнейЗадолженности (число) с со строкой «дней», т.е. чтобы сразу в таблице уже выдавалось "30 дней".
ДопустимоеЧислоДнейЗадолженности + « дней» не проходит.

Ответили: (3) (32)

ВЫРАЗИТЬ(ДопустимоеЧислоДнейЗадолженности КАК СТРОКА(3)) + " дней"

Ответили: (4) (6)

(1) thorben,
У механизма запросов 1С проблема с преобразованием типов


(2) alex_bob,
Так я уже пробовал. Программа ругается и пишет, что "Несовместимые типы..." Она дает приобразовать число только в число, а в строку нет.


Число в строку можно преобразовать в строку через Представление(значение), однако прибавить к результату строку все равно не получится.


(2) на 8.2.15.294 такое выражение не работает.
Не понимает язык запросов такие преобразования ...


Понятно. Буду тогда результат запроса дорабатывать.


вариант с разбитием на два запроса предлагать?

Ответили: (9)

(8) Cerberdm,
не, спасибо.

Ответили: (10) (11)

(9) thorben, дважды выполнить запрос будет медленнее, чем выполнить его один раз и обработать результат? )


(9) thorben, Хотя, честно говоря, сам в таких случаях обрабатывал результат запроса... )

Ответили: (12)

(11) Cerberdm,
просто я уже сделал обработку результата и теперь переделывать не хочется.


вы будете смеяться, но это возможно. пакетный запросы, временные таблицы и соединения спасут мир

Ответили: (14)

(13) andrewks, есть рабочий пример?

Ответили: (15)

(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)

(15) Нда. Печально это всё выглядит. Не хотел бы я сопровождать такой код. Особенно если его еще засунуть в СКД.
Уж лучше обработать результат.

Изменено: alex_bob - 24.03.12 9:34

Ответили: (17)

(16) каков вопрос - таков и ответ. и пока 1с не сделает нормальный каст (а она этого, мне кажется, не сделает), это будет выглядеть именно так. либо отказаться от хотелок и делать по-другому


В СКД совершенно спокойно можно соединить поле Представление(ИмяПоля) + "текст" на закладке "Вычисляемые поля", можно написать даже выражение для правильной записи "дней", "дня", "день"

Ответили: (24)

Кстати, в запросе всё прекрасно соединяется, ПРЕДСТАВЛЕНИЕ() +"текст"

Ответили: (20)

(19) ню-ню. а проверить прежде, чем советовать, не судьба?


Проверено, работает. Может быть понятнее будет на примере:
Текст Набора данных Запрос

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

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

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

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

А вот про запрос добавила зря. Извиняюсь.


Никак, попробуйте 8.3, возможно там заработал метод Выразить

Ответили: (23)

(22) batlerrett, с чего бы это он там заработал?


неясно, найден ли вариант решения?

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

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


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


и выводить его сразу за полем, в котором число ДопустимоеЧислоДнейЗадолженности


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

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

ВЫБРАТЬ
ВремТаб.Поле1Строка + " тут нужная строка"
ИЗ ВремТаб КАК ВремТаб

Ответили: (26)
+ 2 [ temka_1105; alean; ]

(25) juntatalor, При использовании временных таблиц все равно ругается и не дает запрос выполнить.


Лично я сделал это коряво (но работает). СКД не вариант (переписывать дольше), а конвертить нужно было всего-навсего номер строки, который у нас ограничен количеством 99.

	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	1 КАК НомерСтроки,
	|	""01"" КАК НомерСтрокиТекст
	|ПОМЕСТИТЬ СоответствиеЧислаСтроке
	|";
	
	
	Для Счетчик = 2 По 99 Цикл
		ТекстЗапроса = ТекстЗапроса + "ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	" + Счетчик + ",
		|	""" + Строка(Формат(Счетчик, "ЧЦ=2; ЧВН=")) + """";
	КонецЦикла;
...Показать Скрыть

Ответили: (28)

(27) h00m, пожалейте голову и глаза того, кто будет после вас это разбирать! Уж лучше не использовать запросы вовсе (если нет технической возможности преобразовать число в строку), чем делать это так.

Ответили: (29)

(28) Это же не запрос в цикле, или какая-то другая ошибка, это вполне адекватный код. Вы не встречали в Бух-ии решение при помощи теории графов?

Изменено: h00m - 27.08.13 23:58

Ответили: (30)

(29) h00m, а что мешает предварительно ТЗ заполнить и поместить ее во временную таблицу?

+ 1 [ pogonii; ]

Самый лучший вариант . Преобразовать строку в число или число в строку в запросе не получиться.


(1) thorben, если у тебя скд то в нем делаешь макет для поля, в нем указываешь тип ячейки "шаблон" и к количеству дней добавляешь произвольный текст.

Изменено: fnxash - 10.02.14 12:38


А ещё.. а ещё в СКД можно Пользовательские поля использовать.


Можно попробовать пользовательское поле уже в режиме пользователя


мне кажется топикстартер уже давно решил эту проблему.
АРХЕОЛОГИ )))

Изменено: Boneman - 11.02.14 13:00

Ответили: (36)
+ 1 [ Bukaska; ]

(35) Boneman, Угу.. подняли старую тему)))

Страницы: 1
Форма ответов
Логин:
Пароль:
Текст сообщения*
Прикрепить файл