1С преобразование числа в строку в запросе

МАКСИМУМ(выразить(Номенклатура.Код как число(6,2))) – к сожалению вот так преобразовать строку в число не получится!

На помощь придут вот такие функции. Нашел их тут.

Использовать их так:

Получаем максимальный числовой код для товара из спр Номенклатура, где код – строка:

  • Главная
  • В помощь 1с программисту
  • 1С Строку в число в запросе. Число в строку в запросе.

Google+

  • © 2020 Услуги 1С программиста. Доработка и обслуживание 1С. Удаленное программирование по всей России. Платформы 7.7 8.2 8.3 , битрикс.
  • Ограничение предсказуемо, т.к. для преобразования числа в строку возникает много вариантов представления числа: выводить лидирующие нули, до какого знака выводить после запятой, и т.д. Система счисления тоже может быть разная: десятичная, двоичная, шестнадцатеричная или n-ичная.

    Данное ограничение можно преодолеть с помощью математической операции округления. Далее представлен текст запроса, который вернет строку "Число приведенное к строке 97443.456".

    Рассмотрим как это работает. Каждая цифра вычисляется и выводится отдельно. Для цифры в разряде i вычисление проводится следующим образом

    Операция Цел(x) реализуется в запросе 1С 8.x с помощью округления Выразить. Несложно проверить:

    Цел(x)=Выразить(x – 0.5 КАК ЧИСЛО(14,0))

    Мы получили весь набор цифр числа в виде чисел от 0 до 9. Сделать из них строки можно с помощью Строковой функции ПОДСТРОКА("0123456789",1+Цифра).

    Аналогично можно реализовать вывод чисел в другой системе счисления.

    Подобный функционал можно просмотреть здесь: http://kb.mista.ru/article.php? >

    Специальные предложения

    вы, думаю, не потрудились разобраться в тонкостях приведенных выражений, а они могут быть интересны и поучительны. Поэтому и возводите напраслину. Прежде чем что либо "изобрести" я обычно просматриваю уже имеющиеся решения и чужие решения стараюсь не повторять. И в "минимализмах" , "минимализмах2" (с) и в статье Выразить число как строку и дату как строку в запросе опубликованы мои собственные оригинальные решения, всегда имеющие признаки какой-либо новизны.

    Читайте также:  Составьте вопрос высокого порядка по несплошному тексту

    Преобразование строки в число приведенным здесь способом – более-менее очевидное решение. В своей статье я бы его повторять не стал, но мотивы автора статьи мне понятны, претензию на оригинальность автор объяснил.

    Вообще такое решение я уже видел ранее несколько раз. В ссылке на мисте оно записано наиболее "коряво". Данное решение мне не нравилось тем, что аргумент приходится записывать дважды. В моем решении остаток от деления вычисляется через функции работы с датами (в этом суть изобретения), что дает более короткую запись с одним упоминанием аргумента при нахождении каждого разряда.

    (14) Fragster,
    В идеальном мире, где единороги какают радугой, и есть бесконечные ресурсы и бесконечное время на разработку такие запросы, наверное, не нужны. Почти всегда они говорят о каких-то неприятных вещах типа технического долга или кривой архитектуры. Но у нас, в реальном мире, они часто пригождаются. Примеры:

    • Иногда (в отчетах) очень нежелательно протягивать в источнике данных новое поле и нужно сформировать строку типа "Название+Размер". А если этот отчет на построителе отчетов, а не на СКД, то и вообще альтернатив нет, если не переписывать его полностью.
    • При вытягивании достаточно больших объёмов из базы (выгрузки или очень большие отчеты) то же самое представление на сервере будет считаться быстрее и меньше данных придётся тянуть с сервера. А если весь код выгрузки/отчета вообще оперирует только результатами запроса, то опять же – альтернатив кроме как "переписать всё" нет. Я сталкивался с отчетами и выгрузками по 100 млн строк.
    • Внешняя система даёт вам неразбираемый фильтр по такому представлению ("Название+Размер"). приходится собирать из своих полей в запросе и сравнивать с таким фильтром. Не тянуть же без фильтра всё на клиента.
    • Нужно отсортировать выборку по представлению числа в алфавитном порядке (1, 10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9)

    В обратную сторону тоже примеры есть. Да, еще раз подчеркну, когда возникает эта задача – это явный признак, что что-то не так в системе. Но обычно решение нужно скорее, чем полная переработка решения и структур данных, особенно, если это задачи отчетов или интеграции (которые часто ставятся и решаются после реализации основного функционала).

    Читайте также:  Это имя пользователя уже занято попробуйте другое

    Другой вопрос, что задача тянет на слегка продвинутую задачу на собеседовании (если без текста, то хотя бы путь решения, и это минут на 5-7). Причем для ведущего программиста можно еще и с дополнительными ограничениями (например, "нам не известна разрядность") или ожидать 3-4 решения. А для лида или архитектора еще и вопрос "что надо сделать, чтобы не писать такие запросы".

    Но вам, видимо, нужно не строку в число преобразовать, а строку в строку без ведущих нулей и всего, что справа от точки (и без самой точки).
    Хотя это и можно сделать "универсально" с помощью искусственных таблиц, при вашей длине строки лучше использовать громоздкое выражение ВЫБОР КОГДА ПОДСТРОКА(Х, 1, 1) = "0" ТОГДА ПОДСТРОКА(Х, 2, 8) КОГДА ПОДСТРОКА(Х, 1, 2) = "00" ТОГДА ТОГДА ПОДСТРОКА(Х, 3, 7) . . Аналогично потом можно определить положение точки и обрезать строку справа.

    Лидирующие нули выбором убираем. За исключением их весьма годное решение. Как – то так получилось. Надо было писать сроки производства строкой через тире собирая из 2х чисел.

    Дописал код примера, что бы убирались нули, для полноты картины)

    См. также

    Сходство Джаро – Винклера. Нечеткое сравнение строк 89

    В области информатики и статистики сходство Джаро – Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.

    25.12.2019 1737 brooho 10

    1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

    Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения.

    Читайте также:  Тест страница для струйного принтера 4 цвета

    Функция – Формат государственного номера автомобиля 5

    Возникла необходимость в приведении к единому формату хранящихся, и вводимых вновь, автомобильных Регистрационных знаков – Гос.номер.

    Данная конструкция в 1С используется в запросе для усечения длины строки,а также для приведения строки неограниченной длины к переменной строке с фиксированным ограничением.

    Синтаксис функции

    ВЫРАЗИТЬ ( КАК СТРОКА( )

    • Если на входе строка больше указанной длины — она усекается.
    • Если меньше — остается неизменной.
    • При передаче строки неограниченной длины происходит тоже самое.

    Никаких пробелов в конце короткой строки не добавляется.

    Другие особенности использования ВЫРАЗИТЬ КАК СТРОКА

    Передача NULL в качестве параметра не вызывает ошибки, но на выходе будет NULL (не строкой).
    Передача для преобразования других типов вызывает ошибку «Несовместимые типы ВЫРАЗИТЬ».

    Преобразовать число как строку в запросе или же ссылку как строку в данной функции (да и в любых других функциях запроса невозможно). Это отличает TSQL запрос select cast(‘321’ as numeric(10) от запроса в 1С.

    Функция ПРЕДСТАВЛЕНИЕ(ЧИСЛО), может на выходе запроса выдать строку, но внутри запроса ее результат использовать невозможно даже в качестве параметра для ВЫРАЗИТЬ.

    Конкантенация (сложение) строк допустима и с результатом ВЫРАЗИТЬ:

    «321»+ ВЫРАЗИТЬ («Строка» КАК СТРОКА(100))

    Идентификатор ссылочного объекта в запросе получить невозможно и ожидаемое многими начинающими программистами 1С в КАЧЕСТВЕ ВЫРАЗИТЬ(ССЫЛКА как СТРОКА()) не работает: ни наименования, ни кода, ни идентификатора не получится — будет ошибка несовместимости типов.

    Вот такая простая функция без особых сюрпризов.

    Возможно когда-нибудь в платформе 8.4 1С исправит ситуацию с преобразованиями типов в запрос, а может тут дело в поддержании совместимости всех баз данных.

    Можно дурачить всех все время, — при условии, что реклама ведется правильно, а расходы на нее достаточно велики.

    Оцените статью
    Добавить комментарий

    Adblock detector