Имя: Пароль:
1C
1С v8
Почему не работает функция Выразить( .... как строка(3)) в запросе для числ.знач
,
0 AlexandrV
 
17.12.15
10:56
Почему не правильно работает функция Выразить( .... как строка(3)) в запросе для числового значения
Выдает пустую строку
Если поставить Представить() то получаю значение, но негде его в группировке использовать не могу и не могу взять из него часть строки

Как получить из числового параметра в запросе строку нужной длинны, так что бы его дальше можно было использовать?
1 ДенисЧ
 
17.12.15
10:58
В запросе - никак.
2 GROOVY
 
17.12.15
10:58
Никак.
3 itlikbez
 
17.12.15
11:01
(0) В принципе - можно, но это будет изврат редкостный.
Используешь остаток от деления и ПОДСТРОКА().
4 PCcomCat
 
17.12.15
11:02
Хорошо подумай, зачем тебе именно так. Соглашусь с мнением большинства, что подобного рода требования - это ошибка проектирования. Попробуй найти другой вариант, учитывая, что первый вариант не реализуем - он точно есть.
5 AlexandrV
 
17.12.15
11:09
(4) сам запрос довольно большой и если не удастся получить этот кусок строки (его дальше надо сравнивать с другими строками и потом объединять, если не удастся придется переписывать весь алгоритм в модуль)
6 AlexandrV
 
17.12.15
11:10
(0) единственный метод я сам вижу это выгрузить все в таблицу в программе обработать и потом в запрос по новой забросить
7 PCcomCat
 
17.12.15
11:12
(5) Иногда проще переписать кусок запроса, чем вставлять костыли.
8 Посмотрим
 
17.12.15
11:14
Заполнить всевозможные числовые значения (если они конечны) в ТЗ (колонка1,колонка2 - 3,14,"3,14") и засунуть в запрос, ну и левым к ТЗ
9 PCcomCat
 
17.12.15
11:15
А для чего нужно число в строку, если не секрет?
10 itlikbez
 
17.12.15
11:34
Для трехзначных чисел будет работать что-то типа:


ВЫБРАТЬ ПОДСТРОКА("0123456789",563/100+1,1)+
ПОДСТРОКА("0123456789",(563-(Выразить(563/100 - 0.5 как ЧИСЛО(3,0))*100)-563+(Выразить(563/10 - 0.5 как ЧИСЛО(3,0))*10))/10+1,1)+
ПОДСТРОКА("0123456789",563-(Выразить(563/10 - 0.5 как ЧИСЛО(3,0))*10)+1,1)
11 mikecool
 
17.12.15
11:38
а что такое Представить() в языке запросов?
12 mikecool
 
17.12.15
11:38
+11 не нашел в списке функций
13 GROOVY
 
17.12.15
11:39
(11)  Ты даже не Представляешь()

Думаю ТС ошибся с Представление()
14 mikecool
 
17.12.15
11:40
(13) я уж подумал - может это 8.3.7 на лыжах дошла )
15 Ildarovich
 
17.12.15
12:43
(0) Если очень хочется, то можно!
Вот статья: Выразить число как строку и дату как строку в запросе http://catalog.mista.ru/public/331805/ .
Для трехзначного числа выражение будет не слишком сложным:
ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.06)) / 6 + 1, 1)
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.6)) / 6 + 1, 1)
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 6)) / 6 + 1, 1)
16 AlexandrV
 
17.12.15
12:50
(15) число может быть трехзначным, а этот вариант работает только для числа
17 AlexandrV
 
17.12.15
12:51
(16)+ только для одной цифры
18 itlikbez
 
17.12.15
13:06
(17) Для любого трехзначного числа работает.
19 AlexandrV
 
17.12.15
14:03
Все реализовал

ВЫБРАТЬ
    ВложенныйЗапрос.Объект,
    МАКСИМУМ(ВложенныйЗапрос.Значение) КАК Значение
ИЗ
    (ВЫБРАТЬ
        ВложенныйЗапрос1.Объект КАК Объект,
        ПОДСТРОКА("0123456789", ВложенныйЗапрос1.ПерваяЦифра + 1, 1) + ПОДСТРОКА("0123456789", ВложенныйЗапрос1.ВтораяЦифра + 1, 1) + ПОДСТРОКА("0123456789", ВложенныйЗапрос1.ТретьяЦифра + 1, 1) КАК Значение
    ИЗ
        (ВЫБРАТЬ
            ВложенныйЗапрос.Объект КАК Объект,
            ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 100 КАК ЧИСЛО(1, 0)) КАК ПерваяЦифра,
            (ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 10 КАК ЧИСЛО(2, 0))) - (ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 100 КАК ЧИСЛО(1, 0))) * 10 КАК ВтораяЦифра,
            ВложенныйЗапрос.Значение - (ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 10 КАК ЧИСЛО(2, 0))) * 10 КАК ТретьяЦифра,
            ВложенныйЗапрос.Значение КАК Значение
        ИЗ
            (ВЫБРАТЬ
                ЗначенияСвойствОбъектов.Объект КАК Объект,
                ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК ЧИСЛО(3, 0)) КАК Значение
            ИЗ
                РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
            ГДЕ
                ЗначенияСвойствОбъектов.Свойство.Код = "Оф086      ") КАК ВложенныйЗапрос) КАК ВложенныйЗапрос1) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Объект
20 itlikbez
 
17.12.15
14:07
(19) У тебя остаток от деления считается неправильно. Ты не учел, что ВЫРАЗИТЬ() округляет по правилам округления, а не отбрасывает дробную часть.
21 itlikbez
 
17.12.15
14:08
+(20) Вариант из (15) лучше.
22 AlexandrV
 
17.12.15
14:09
(20) в системе настраивается как округлять
23 itlikbez
 
17.12.15
14:12
(22) Каким образом?
24 AlexandrV
 
17.12.15
14:28
(23) поправил запрос

ВЫБРАТЬ
    ВложенныйЗапрос.Объект,
    МАКСИМУМ(ВложенныйЗапрос.Значение) КАК Значение
ИЗ
    (ВЫБРАТЬ
        ВложенныйЗапрос1.Объект КАК Объект,
        ПОДСТРОКА("0123456789", ВложенныйЗапрос1.ПерваяЦифра + 1, 1) + ПОДСТРОКА("0123456789", ВложенныйЗапрос1.ВтораяЦифра + 1, 1) + ПОДСТРОКА("0123456789", ВложенныйЗапрос1.ТретьяЦифра + 1, 1) КАК Значение
    ИЗ
        (ВЫБРАТЬ
            ВложенныйЗапрос.Объект КАК Объект,
            ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 100 - 0.5 КАК ЧИСЛО(1, 0)) КАК ПерваяЦифра,
            (ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 10 - 0.5 КАК ЧИСЛО(2, 0))) - (ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 100 - 0.5 КАК ЧИСЛО(1, 0))) * 10 КАК ВтораяЦифра,
            ВложенныйЗапрос.Значение - (ВЫРАЗИТЬ(ВложенныйЗапрос.Значение / 10 - 0.5 КАК ЧИСЛО(2, 0))) * 10 КАК ТретьяЦифра,
            ВложенныйЗапрос.Значение КАК Значение
        ИЗ
            (ВЫБРАТЬ
                ЗначенияСвойствОбъектов.Объект КАК Объект,
                ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК ЧИСЛО(3, 0)) КАК Значение
            ИЗ
                РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
            ГДЕ
                ЗначенияСвойствОбъектов.Свойство.Код = "Оф086      ") КАК ВложенныйЗапрос) КАК ВложенныйЗапрос1) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Объект
25 itlikbez
 
17.12.15
14:59
(24) Должно работать.