Имя: Пароль:
1C
1С v8
Сложение в запросе ВложенныЗапрос.Цена + "*". Может я хочу невозможного?
0 Pashkaa
 
09.04.08
08:35
Сижу туплю. Надо в запросе в зависимости от условия добавить к цене звёздочку, 100,00 и 100,00*

Типы преобразовывать нельзя, т.е. из цены строку не сделать. А как тогда сложить Цену с *.

Есть ли выход?
1 shuhard
 
09.04.08
08:40
(0) меняй алгоритмы дальнейшей обработки запроса, ибо сделать искомое в 8.1 нельзя
2 i-rek
 
09.04.08
08:42
(1) зато в 8.1 можно в выражении СКД написать. Или даже пользоватлеьскую функцию вызвать.
3 shuhard
 
09.04.08
08:44
(2) о чем и говорено, * надо налепить дальше по ходу данных
4 Pashkaa
 
09.04.08
08:46
Всё понятно. Пасибо. Я думал я туплю. А это просто 8.1 не умеет
5 NewNick
 
09.04.08
09:03
я тут где то на форуме кидал очень даже работающиq пример преобразования в запросе числа в строку ;)
6 selenat
 
09.04.08
09:16
(5) повторить не можешь?
7 D_E_S_131
 
09.04.08
09:17
ИМХО это SQL не умеет...
8 i-rek
 
09.04.08
09:18
(5) видите - он смайлик какой поставил
ща выложит какой-нибудь пример с объединением с заранее подготовленной таблицей-словарём цифр
9 NewNick
 
09.04.08
09:20
Функция ВЗапросеИзЧислаСтроку(ИмяПоля,ДлинаЦел,ДлинаДробь,ЛидирующийСимвол="")
   Запрос = Новый Запрос("ВЫБРАТЬ ВЫРАЗИТЬ(0.5 КАК ЧИСЛО (15,0)) КАК Проверка");
   РЗ = Запрос.Выполнить().Выбрать();
   РЗ.Следующий();
   ЗапросОкругляетПоАрифметическимПравилам = Рз.Проверка = 1;
   
   Ткст = "ВЫБОР КОГДА "+ИмяПоля+"<0 Тогда ""-"" ИНАЧЕ """" КОНЕЦ " + Символы.ПС;
   ИмяПоляАбс = " ВЫБОР КОГДА "+ИмяПоля+"<0 ТОГДА -"+ИмяПоля+" ИНАЧЕ "+ИмяПоля+" КОНЕЦ ";
   Парам = Pow(10,ДлинаЦел-1);
   Для Бегим = 1 По ДлинаЦел+ДлинаДробь цикл
       Ткст = Ткст + ?(Бегим = ДлинаЦел+1,"+"".""+","+");
       Ткст = Ткст + " ВЫБОР " + Символы.ПС +
       ?(Бегим<ДлинаЦел," КОГДА " + ИмяПоляАбс + " < " +Формат(Парам,"ЧРД=.; ЧГ=")+" ТОГДА """+ЛидирующийСимвол+""" " + Символы.ПС,"");
       Для Цифирка = 0 По 9 Цикл
           Ткст = Ткст + " КОГДА "+ИмяПоляАбс+"-"+Формат(Парам*10,"ЧРД=.; ЧГ=")+"*ВЫРАЗИТЬ(("+ИмяПоляАбс+?(ЗапросОкругляетПоАрифметическимПравилам,"-"+Формат(Парам*5,"ЧРД=.; ЧГ="),"")+")/"+Формат(Парам*10,"ЧРД=.; ЧГ=")+" КАК ЧИСЛО(15, 0))"+" >= "+Формат((9-Цифирка)*Парам,"ЧН=0; ЧРД=.; ЧГ=")+" ТОГДА """+Формат(9-Цифирка,"ЧН=0; ЧРД=.; ЧГ=")+""" " + Символы.ПС;
       КонецЦикла;
       Ткст = Ткст + " ИНАЧЕ ""0"""+Символы.ПС+" Конец " + Символы.ПС;
       Парам = Парам/10;
   КонецЦикла;
       
   Возврат Ткст;
КонецФункции

Запрос = Новый Запрос(" ВЫБРАТЬ ""Полученная строка : ""+"+ВЗапросеИзЧислаСтроку(ИмяПоля2,ДлинаЦел2,ДлинаДробь2)+" КАК Стр ");
РЗ = Запрос.Выполнить().Выбрать();
пока РЗ.Следующий() цикл
Сообщить(РЗ.СТр);
конеццикла;
10 NewNick
 
09.04.08
09:20
(7) скуль как раз умеет
11 selenat
 
09.04.08
09:37
(9) спасибо. Интересно было на это глянуть...
12 НЕА123
 
09.04.08
09:41
(9)круто.Спасибо!
А от чего зависит округление? От СУБД или 1С настроек.
13 NewNick
 
09.04.08
09:44
(12) если про округление в запросе то и от скуля и от 1с как показала практика ;)
14 i-rek
 
09.04.08
09:48
(9) не пойму в чём цимус
запрос-то динамически формируется, для каждого числа - другой.
С таким же успехом можно было и просто запросом вывести готовый параметр =Строка(ТоЧисло)

хотя код забавный конечно, но претендовать на решение задачи не может
15 НЕА123
 
09.04.08
09:52
(14)
?
для каждого поля, а не числа.
16 i-rek
 
09.04.08
09:54
извините, недогнал
NewNick, респект :)
17 Pashkaa
 
09.04.08
10:06
Что не вкупил, как его применить в реальном запросе
18 selenat
 
09.04.08
10:08
(17)
Запрос = Новый Запрос(" ВЫБРАТЬ ""Полученная строка : ""+"+ВЗапросеИзЧислаСтроку(ИмяПоля2,ДлинаЦел2,ДлинаДробь2)+" КАК Стр ");