[Практика программирования] Как преобразовать строку в число в запросе
Этот технический прием может потребоваться тогда, когда в запросе необходимо организовать, например упорядочивание по полю выборки как если бы оно было числовым.
В частности эта задача возникла на примере справочника "Договоры контрагентов", у которого разработчики номер договора реализовали в качестве "строки". Но в отдельно взятой организации в этом реквизите было условлено, что всегда хранился номер договора только в цифровом (числовом) выражении. На самом деле данный пример служит в статье только для демонстрации. Сам подход для реализации дальнейшего упорядочивания в запросе будет одинаков для любых других подобных задач с другими справочниками или данными в 1С 8. Отправной точкой для реализации технического решения послужило обсуждение на форуме mista.ru Преобразование строки в число в запросе. Можно перейти по ссылке на форум и найти в таком объемном обсуждении решение. Но ниже предлагается выдержка и решение, которое по сути универсально. Но, чтобы было понимание того, для чего нужен такой прием и как он должен будет работать, кратко опишу суть технической задачи. Требовалось с помощью запроса упорядочивать по убыванию элементы справочника "Договоры контрагентов" по реквизиту "Номер договора", который является строковым, чтобы была возможность быстро выбирать первый как последний номер нумерации, чтобы в рамках более масштабной задачи доработать автонумерацию договоров. Так же в задаче было условлено, что никаких букв реквизит справочника содержать не должен, только символы цифр. Иначе задача автонумерации требовала бы другого подхода в реализации. Известно, что упорядочивание строковых данных, даже если они содержать исключительно цифры в 1С 8 отличается от упорядочивания числовых значений. Пример в интервале перехода от десятков к сотням. Слева представлено "типовое" упорядочивание текстовых данных - даже не смотря на то, что они полностью содержат только цифры - первый символ строки используется для упорядочивания. Если же представить
Таким образом, чтобы упорядочивание было возможно в запросе, необходимо - как вариант предлагаемого решения добавлять лидирующие нули, и тогда упорядочивание будет правильным (правильность упорядочивания на самом деле от задачи к задаче понятие относительное))) ), а точнее таким, каким нужно для задачи. В запросе добавляется отдельно поле, в котором производится обработка исходного поля. В выражении поля используем: ПОДСТРОКА(<Строка>, <НачальнаяПозиция>, <Длина>)
Принцип такой, что строка проверяется выражением запроса слева-направо. Если левый символ отличен от "пробела", то значит поле заполнено целиком. Но, если символ пустой("пробел"), то заменяем его на лидирующий "0" или "ноли". Т.е. такое решение так же предполагает, что лишних пробелов между цифрами в строке быть не должно, иначе это нужно учитывать дополнением технического решения в задачу. Т.е. по факту, как можем видеть, по сути преобразования к числу на самом деле в запросе не произошло, как было заявлено в заголовке статьи. Но все-же таким образом проблема сортировки формально, но решается корректно в рамках поставленной задачи. В этом месте важно заметить, что - максимальная длина строки исходного поля будет определять количество раз использования конструкции: Но, еще раз отметим, что данная реализация возможна при условии, что текстовое поле должно содержать только цифры, иначе потребуется уже доработка приведенного решения под отдельную задачу с исключением. Оцените, оказалась ли эта публикация полезна для Вас?
© www.azhur-c.ru 2013-2025. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу. 03-01-2023 Журавлев А.С. (Сайт azhur-c.ru) |
|
|||||||||||||
Copyright 2013-. Azhur-c.ru
ИП Журавлев Александр Сергеевич ИНН 667000271590 ОГРНИП 312667014300041 |