![]() |
![]() |
![]() |
|
Сложение в запросе ВложенныЗапрос.Цена + "*". Может я хочу невозможного? | ☑ | ||
---|---|---|---|---|
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)+" КАК Стр "); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |