Имя: Пароль:
1C
1С v8
Вечный баян №2 (решение?): преобразование строки в число в запросе
0 skaparez
 
28.09.12
17:57
Может кому нибудь пригодится, извращение 80-лвл преобразование параметр число от 1 до 999 на выходе тоже но в строке:
ВЫБРАТЬ
   ВЫБОР
       КОГДА &Параметр <= 9
           ТОГДА ВТЦифры.Поле1
       КОГДА &Параметр > 9
               И &Параметр <= 99
           ТОГДА ВТЦифры.Поле1 + ВТДоп.Поле1
       ИНАЧЕ ВТЦифры.Поле1 + ВТДоп.Поле1 + ВТДопДоп.Поле1
   КОНЕЦ КАК Поле1
ИЗ
   (ВЫБРАТЬ
       "0" КАК Поле1,
       0 КАК Поле2
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "1",
       1
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "2",
       2
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "3",
       3
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "4",
       4
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "5",
       5
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "6",
       6
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "7",
       7
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "8",
       8
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "9",
       9) КАК ВТЦифры
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ВЫБОР
               КОГДА &Параметр <= 9
                   ТОГДА ВТЦифры.Поле1
               КОГДА &Параметр > 9
                       И &Параметр <= 99
                   ТОГДА ВТЦифры.Поле1
               ИНАЧЕ ВТЦифры.Поле1
           КОНЕЦ КАК Поле1
       ИЗ
           (ВЫБРАТЬ
               "0" КАК Поле1,
               0 КАК Поле2
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "1",
               1
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "2",
               2
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "3",
               3
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "4",
               4
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "5",
               5
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "6",
               6
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "7",
               7
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "8",
               8
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "9",
               9) КАК ВТЦифры
       ГДЕ
           ВЫБОР
                   КОГДА &Параметр <= 9
                       ТОГДА ВТЦифры.Поле2 = &Параметр
                   КОГДА &Параметр > 9
                           И &Параметр <= 99
                       ТОГДА ВТЦифры.Поле2 = &Параметр - ВЫБОР
                               КОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) * 10 > &Параметр
                                   ТОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) - 1
                               ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))
                           КОНЕЦ * 10
                   ИНАЧЕ ВТЦифры.Поле2 = (&Параметр - ВЫБОР
                           КОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) * 100 > &Параметр
                               ТОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) - 1
                           ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))
                       КОНЕЦ * 100 - (&Параметр - ВЫБОР
                           КОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) * 10 > &Параметр
                               ТОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) - 1
                           ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))
                       КОНЕЦ * 10)) / 10
               КОНЕЦ) КАК ВТДоп
       ПО (ИСТИНА)
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ВЫБОР
               КОГДА &Параметр <= 9
                   ТОГДА ВТЦифры.Поле1
               КОГДА &Параметр > 9
                       И &Параметр <= 99
                   ТОГДА ВТЦифры.Поле1
               ИНАЧЕ ВТЦифры.Поле1
           КОНЕЦ КАК Поле1
       ИЗ
           (ВЫБРАТЬ
               "0" КАК Поле1,
               0 КАК Поле2
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "1",
               1
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "2",
               2
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "3",
               3
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "4",
               4
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "5",
               5
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "6",
               6
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "7",
               7
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "8",
               8
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               "9",
               9) КАК ВТЦифры
       ГДЕ
           ВЫБОР
                   КОГДА &Параметр <= 9
                       ТОГДА ВТЦифры.Поле2 = &Параметр
                   КОГДА &Параметр > 9
                           И &Параметр <= 99
                       ТОГДА ВТЦифры.Поле2 = &Параметр - ВЫБОР
                               КОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) * 10 > &Параметр
                                   ТОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) - 1
                               ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))
                           КОНЕЦ * 10
                   ИНАЧЕ ВТЦифры.Поле2 = &Параметр - ВЫБОР
                           КОГДА (ВЫРАЗИТЬ((&Параметр - ВЫБОР
                                       КОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) * 100 > &Параметр
                                           ТОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) - 1
                                       ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))
                                   КОНЕЦ * 100) / 10 КАК ЧИСЛО(2, 0))) * 10 > &Параметр - ВЫБОР
                                   КОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) * 100 > &Параметр
                                       ТОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) - 1
                                   ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))
                               КОНЕЦ * 100
                               ТОГДА (ВЫРАЗИТЬ((&Параметр - ВЫБОР
                                           КОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) * 100 > &Параметр
                                               ТОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) - 1
                                           ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))
                                       КОНЕЦ * 100) / 10 КАК ЧИСЛО(2, 0))) - 1
                           ИНАЧЕ ВЫРАЗИТЬ((&Параметр - ВЫБОР
                                       КОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) * 100 > &Параметр
                                           ТОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) - 1
                                       ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))
                                   КОНЕЦ * 100) / 10 КАК ЧИСЛО(2, 0))
                       КОНЕЦ * 10 - ВЫБОР
                           КОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) * 100 > &Параметр
                               ТОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) - 1
                           ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))
                       КОНЕЦ * 100
               КОНЕЦ) КАК ВТДопДоп
       ПО (ИСТИНА)
ГДЕ
   ВЫБОР
           КОГДА &Параметр <= 9
               ТОГДА ВТЦифры.Поле2 = &Параметр
           КОГДА &Параметр > 9
                   И &Параметр <= 99
               ТОГДА ВТЦифры.Поле2 = ВЫБОР
                       КОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) * 10 > &Параметр
                           ТОГДА (ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))) - 1
                       ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 10 КАК ЧИСЛО(2, 0))
                   КОНЕЦ
           ИНАЧЕ ВТЦифры.Поле2 = ВЫБОР
                   КОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) * 100 > &Параметр
                       ТОГДА (ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))) - 1
                   ИНАЧЕ ВЫРАЗИТЬ(&Параметр / 100 КАК ЧИСЛО(3, 0))
               КОНЕЦ
       КОНЕЦ
1 Fragster
 
гуру
28.09.12
17:58
я так делал уже. только этот тормоз нафиг не нужен
2 Wobland
 
28.09.12
17:58
а теперь скажи, зачем ты это придумал?
3 Ахиллес
 
28.09.12
17:58
Вызовите скорую психиатрическую помощь для топик стартера.
4 skaparez
 
01.10.12
09:54
(2) была необходимость, чтобы таблицы не гонять на сервер и обратно
(3) я тоже об этом подумал, но написал и забыл - я теперь в норме :)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший