| 
    
            
         
         | 
    
  | 
Почему не работает функция Выразить( .... как строка(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 
 | 
         
        Для трехзначных чисел будет работать что-то типа:
 
        
 | 
|||
| 
    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)
     | 
|||
| 
    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) Должно работать.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |