Всем привет. Помогите разобраться. Спасибо.

На форме есть две СТРОКИ больше равно и меньше равно.
В запросе Наименование типа СТРОКА но выглядит как число например 0000001
 | И ИзменениеПараметров.Пл.Наименование >= &НомерНачало
 | И ИзменениеПараметров.Пл.Наименование <= &НомерКонец

Как сделать чтобы Интервал отображался нормально как с числом????

если я ставлю НомерНачало 1 а Номер конец 2 , то результат такой см.файл

```1c
    "ВЫБРАТЬ
    | ИзменениеПараметров.Пл.Наименование КАК Наименование,
    | ИзменениеПараметров.Пл.Вид КАК Вид,
    | ИзменениеПараметров.Пл.ЧисловойНомер КАК ЧисловойНомер,
    | ИзменениеПараметров.Пл.Ссылка КАК ПлСсылка,
    | ИзменениеПараметров.ДатаИзменения КАК ДатаИзменения,
    | ИзменениеПараметров.Аб КАК Абонент,
    | ИзменениеПараметров.Исп.Ссылка КАК ИспСсылка
    |ИЗ
    | Документ.ИзменениеПараметров.Пл КАК ИзменениеПараметровПл
    | ПОЛНОЕ СОЕДИНЕНИЕ Документ.ИзменениеПараметров КАК ИзменениеПараметров
    | ПО ИзменениеПараметровПл.Ссылка = ИзменениеПараметров.Ссылка
    |ГДЕ
    | НЕ ИзменениеПараметров.ПометкаУдаления
    | И НЕ ИзменениеПараметров.Пл.ПометкаУдаления
    | И ИзменениеПараметров.Действует = ЛОЖЬ
    | И ИзменениеПараметров.Пл.Наименование >= &НомерНачало
    | И ИзменениеПараметров.Пл.Наименование <= &НомерКонец
    |
    |УПОРЯДОЧИТЬ ПО
    | ДатаИзменения";

    Запрос.УстановитьПараметр("НомерНачало", НомерНачало);
    Запрос.УстановитьПараметр("НомерКонец", НомерКонец);
```
---
пробуйте:

```1c
    "ВЫБРАТЬ
    | ИзменениеПараметровПл.Наименование КАК Наименование,
    | ИзменениеПараметровПл.Вид КАК Вид,
    | ИзменениеПараметровПл.Ссылка КАК ПлСсылка,
    | ИзменениеПараметров.ДатаИзменения КАК ДатаИзменения,
    | ИзменениеПараметровПл.Аб КАК Абонент,
    | ИзменениеПараметров.Исп КАК ИспСсылка
    |ИЗ
    | Документ.ИзменениеПараметров КАК ИзменениеПараметров
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ИзменениеПараметров.Пл КАК ИзменениеПараметровПл
    | ПО ИзменениеПараметровПл.Ссылка = ИзменениеПараметров.Ссылка
    |ГДЕ
    | НЕ ИзменениеПараметров.ПометкаУдаления
    | И НЕ ИзменениеПараметров.Действует
    | И ИзменениеПараметровПл.ЧисловойНомер МЕЖДУ &НомерНачало И &НомерКонец
    |
    |УПОРЯДОЧИТЬ ПО
    | ДатаИзменения";

    ТипЧисло = Новый ОписаниеТипов("Число");
    Запрос.УстановитьПараметр("НомерНачало", ТипЧисло.ПривестиЗначение(НомерНачало));
    Запрос.УстановитьПараметр("НомерКонец", ТипЧисло.ПривестиЗначение(НомерКонец));
```
---
запросом задача не решается. В запросе нет преобразование типов из строки в число.
По хорошему, нужно изменить структуру хранения данных. К примеру, добавить новый реквизит типа Число, в котором и сохранять нужные значения при сохранении элемента справочника, и уже по нему строить отчет.
---
запросом задача не решается. В запросе нет преобразование типов из строки в число.
По хорошему, нужно изменить структуру хранения данных. К примеру, добавить новый реквизит типа Число, в котором и сохранять нужные значения при сохранении элемента справочника, и уже по нему строить отчет.
---
есть этот реквизит Числовой номер
---
ну так и стройте отчет(запрос) с отбором по нему, а не строковому Наименование.
---
а мне нужно чтобы на форме пользователь именно Наименование
---
а мне нужно чтобы на форме пользователь именно Наименование

ну так заведите пользователя с именем Наименование :)
---
Ну так и преобразовывайте в параметры запроса то, что ввел пользователь в число.
---
я правильно понимаю... пользователь ввел 000123123, я преобразую в 123123, делаю запрос, получаю 123123 ,но в отчет то я должен вернуть 000123123 а не 123123
---
так и возвращайте Наименование, а не числовой реквизит. По числовому реквизиту делаете только отбор.
---
Сообщение было скрыто модератором.
---
И да, на вашем примере, первое "число" будет больше, чем восьмое. Понимаем, да?
---
ПОЛНОЕ СОЕДИНЕНИЕ
убирай вообще соединение ТЧ с документом, все вытаскивый через ИзменениеПараметров.Пл.Ссылка.ДатаИзменения, ИзменениеПараметров.Пл.Ссылка.Аб
---
Сообщение было скрыто модератором.
---
Если бы там были только цифры, то можно было бы привести строку к числу в запросе, и далее сравнить как числа. Пример есть тут
https://infostart.ru/1c/articles/170336/?ysclid=lf9mdsjuc0186104804
---
ИзменениеПараметров.Пл.ЧисловойНомер КАК ЧисловойНомер,Чой-то ржу. Давай потоньше.
---
Кстати, Вас не учили пользоваться поиском? Хотя бы по ИС? Первая же ссылка
https://infostart.ru/1c/articles/170336/
---
такую постановку задачи догнать мало кто осилит.
Посмотри со стороны. Представь, что ты не знаешь ничего, кроме буквально и только того, что написано в сообщении. Что ты поймешь оттуда? Ничего. Вот поэтому задача и не решается. Начинать надо с внятной и понятной любому постановки задачи. Какие-то строки, какой-то интервал, наименование, запрос, к чему это все, зачем, как связано друг с другом, что нужно получить - не понятно ровным счетом ничего.
---
Нужно чтобы в отчет выводился диапазон между Номер начало и Номер конец тут больше и написать нечего. Номер в запросе это Наименование типа строка вида 0000001 или 000055555
---
А в чем проблема? Я, например, сделал простой запрос:

```1c
    ВЫБРАТЬ
    "001" КАК Поле1
    ПОМЕСТИТЬ ВременнаяТаблица

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "002"

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "003"

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "004"
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВременнаяТаблица.Поле1 КАК Поле1
    ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица
    ГДЕ
    ВременнаяТаблица.Поле1 > "001"
    И ВременнаяТаблица.Поле1 < "004"
```

В итоге запрос мне выдал
002
003
---
проблема в том что попадают в результат 0031 и 00247 и так далее...
---
Сообщение было скрыто модератором.
---
если ты хочешь сортировать строки как числа, то это в принципе можно, надо после запроса прогнать весь результат через преобразование строки в число и потом сортировать. Если хочешь делать отбор по строкам как по числам, то соответственно надо до запроса проделать такое преобразование и потом уже отбор.
но почему не сказать внятно, что нужно, я все равно не понимаю
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
это расчитано на добрых людей, кто подскажет))
---
расчитано на добрых людейНу, тему ты переименовал, теперь никаких добрых.
---
Сообщение было скрыто модератором.
---
ну как бы в этом и вопрос как мне сделать так чтобы как с числами работать, но при этом наименования начинались с 000
---
Сообщение было скрыто модератором.
---
ну а как обойти это)
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
ты наверноВау, моя теория о том, что борзость пропорциональна тупости, работает!
---
Сообщение было скрыто модератором.
---
(24) Тебе уже все ответили - никак. Строки не работают как числа. Используй числа. Особенно обрати внимание на (15)

И даже дважды ответили что можно в (13) и (16). :-)
Извращение, но можно.

(33) Если сравнивать строки, то ещё надо привести к единому формату количества цифр и убрать все не цифры - пробелы и т.д.
Далее по сути Прав("000000000000000000000"+ т.Наиманование, 15)", но всё в запросе.

Либо более простое решение добавить таки числовой реквизит, прописать его автоматическое заполнение при записи и перезаписать у всех уже существующих.

И это всё только из-за того что в 1С нет простых функций преобразования типов и стандартных для всех СУБД, используемых 1С. :-)
---
Сообщение было скрыто модератором.
---
везет же некоторым. А у меня тот набор слов в осмысленный текст так и не получилось собрать.
---
Сообщение было скрыто модератором.
---
Оборжался, извини.

Держи - ещё посмейся.
https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/?ysclid=lf9u68dxdh734288345

И тут это уже достаточно давно обсуждали. Поиском в Яндексе первое же ссылка.

https://infostart.ru/1c/articles/1733279/?ysclid=lf9uhw87y2425362100
---
Сообщение было скрыто модератором.
---
(твоя очередь ржать):

С учетом (49) Чья очередь теперь ржать?
Запрос-то рабочий.

Запрос простой и достаточно стандартный для 1С.
Понятно что в SQL никто таким извращением не занимается. Там со строками всё на много луче. В Постгри регулярные выражения даже есть (В MS SQL пока вроде нет).

Почему в 1C запросы такие длинные в тысячи строк и работает всё как-то не быстро?

Потому что язык запросов в 1С очень скудный и простые и быстрые алгоритмы приходится переводить по факту в стандарт до SQL-92, использовать кучу джоинов, заниматься созданием кучи временных таблиц и прочими извращениями.

Заниматься извращениями - это не выбор самих программистов 1С, а это директива сверху :-)
---
пробуйте:

```1c
    "ВЫБРАТЬ
    | ИзменениеПараметровПл.Наименование КАК Наименование,
    | ИзменениеПараметровПл.Вид КАК Вид,
    | ИзменениеПараметровПл.Ссылка КАК ПлСсылка,
    | ИзменениеПараметров.ДатаИзменения КАК ДатаИзменения,
    | ИзменениеПараметровПл.Аб КАК Абонент,
    | ИзменениеПараметров.Исп КАК ИспСсылка
    |ИЗ
    | Документ.ИзменениеПараметров КАК ИзменениеПараметров
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ИзменениеПараметров.Пл КАК ИзменениеПараметровПл
    | ПО ИзменениеПараметровПл.Ссылка = ИзменениеПараметров.Ссылка
    |ГДЕ
    | НЕ ИзменениеПараметров.ПометкаУдаления
    | И НЕ ИзменениеПараметров.Действует
    | И ИзменениеПараметровПл.ЧисловойНомер МЕЖДУ &НомерНачало И &НомерКонец
    |
    |УПОРЯДОЧИТЬ ПО
    | ДатаИзменения";

    ТипЧисло = Новый ОписаниеТипов("Число");
    Запрос.УстановитьПараметр("НомерНачало", ТипЧисло.ПривестиЗначение(НомерНачало));
    Запрос.УстановитьПараметр("НомерКонец", ТипЧисло.ПривестиЗначение(НомерКонец));
```
---
Сообщение было скрыто модератором.
---
Спасибо.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
А по существу, есть что сказать?
---
Сообщение было скрыто модератором.
---
операции сравнения строк на больше-меньше работают только по диапазону строковой сортировки, а не по числовому диапазону

Если дополнил нулями слева и правильно с добавленными нулями слева параметры запроса задал, то отработает.

(45) Пояснить, почему "121" больше, чем "1201"?
Сравнивать же будут "00121" и "01201".
---
Сообщение было скрыто модератором.
---
1. Нет. Строки могут быть разной длины в исходной таблице, поэтому гадать с лидирующими нулями - бесперспективно.
Внимательно картинку посмотри. Там тоже разной длины на входе.
Гадать не нужно - есть размерность наименования. И если оно 25 - это не много.

2. Нет. Запрос сам не добавляет лидирующих нулей к передаваемым параметрам.
Смотрим картинку - долго удивляемся результату. Не верим глазам. :-)
Если появляется желание "поржать" - ржем конечно, но потом надо будет определится над чем.
---
Сообщение было скрыто модератором.
---
Именно поэтому твой метод никогда не сработает.
Т.е. картинка как запрос дал правильный результат тебя не убедила? Ну тогда я не знаю.

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

Параметров необходимо задавать правильные и правильной длины.
В любой запрос если передавать параметры не те, которые нужны, то получишь не то, что ожидаешь.
---
Сообщение было скрыто модератором.
---
Какой ПРАВИЛЬНОЙ длины надо передать параметр в запрос, если ты не знаешь длины исходных данных?
Не нужно раздувать из мухи слона. Параметры тоже можно привести к правильной длины и даже дополнить нулями прямо в запросе по образу и подобию. Если все к длине 15 приводим, то и параметры тоже.
---
Сообщение было скрыто модератором.
---
Какая картинка в твоем сообщении нет картинок.
В (49) картинка с текстом запроса и результатом внизу.
---
А вот тут смешно. Это может быть запрос к внешнему источнику (или в качестве источника используется ТЗ). Какой ПРАВИЛЬНОЙ длины надо передать параметр в запрос, если ты не знаешь длины исходных данных?

Что значит не знаю? Я что не могу посмотреть откуда всё это приходит? С какого перепуга работая с конфигурацией я бы не знал максимальную размерность поля?
Какая максимальная, такая и используется.

И ещё раз повторюсь, я бы добавил реквизит с числом, если он уже не имеется конечно.
Я про:
ИзменениеПараметров.Пл.ЧисловойНомер КАК ЧисловойНомер

(1) Что в этом поле хранится?
---
Сообщение было скрыто модератором.
---
Напомню. Источником может быть таблица значений. Или внешний источник.
Ты не знаешь типизацию их полей.

Призадумайся.

(75) Ноль. Неограниченная. Приступай.

В данном случае источник "Документ.ИзменениеПараметров" и не надо тут ничего придумывать. Это объект конфигурации с известной размерностью.
---
С какого перепуга работая с конфигурацией я бы не знал максимальную размерность поля?
Какая максимальная, такая и используется.

Ноль. Неограниченная. Приступай.
---
Про типовую конфигурацию в вопросе (1) ты сам придумал?

Опять же без функций RIGHT() можно решить эту задачу. Тоже извращение, но можно.
По факту разобрать наименование на символы дополнив до условных 15 нулями и собрать обратно с конца.

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

Сейчас же как-то без плюшек обходятся.
Ниже пример запроса который не в число переводит, а дополняет строку впереди нулями ниже с длиной строки 5.
Для большей размерности чуть добавить и чуть подправить. Либо в параметры к запросу эту длину перенести, но в этом случае тоже переписать.

Максимум(т.а) с условием т.симв<>"" - это фактически вычисление длины строки.

Необходимо только в этот запрос добавить проверки, на то, что вообще необходимо добавлять нули. Стока может быть изначально даже с лишними нулями. Что бы не была с лишними можно заранее посчитать максимальную длину строки, которая есть в БД. Если это не разовая операция, то плясать от размерности поля. Печаль если Наименование длина 150. :-) Запрос разрастется.

Пустые наименования в запрос не попадут. Тут уж тоже надо либо хоть что-то заполнить, либо брать не наименование, а например "0"+Наименование.

(48) По извращениям - это к тебе.
Нет это к автору - он хранит в наименовании без контроля уникальности какие-то цифры в виде строки. Артикулы наверное.
---
Сообщение было скрыто модератором.
---
А с чего ты решил, что Наименование - это именно стандартный реквизит справочника? Из текста запроса этого не вытекает.
Странный вопрос.
Лучше бы спросил что такое:
ИзменениеПараметров.Пл.ЧисловойНомер КАК ЧисловойНомер
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
можете уже перестать спорить по поводу использования реквизита Наименование в отборе.
Достаточно посмотреть скрин в (0). 5 элемент (символично). Там не числовое значение.
---
Сообщение было скрыто модератором.
---
А кто говорил что там не строка?
Не помню ни одного поста в котором, кто-то говорил бы про то что в наименовании не строка.

Суть спора в том что, user1881120 постоянно пытается придумать не существующие барьеры для возможности решить задачу переводя строку в число или не переводя, но дополняя нулями.

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

Так понятнее стало?
---
Посмотрите скрин еще раз. Там 5 элемент заканчивается * (звездочкой). Так что никакие ухищрения, добить начальные нули, никак не помогут.

Я об этом писал. Если автор согласен игнорировать все символы не относящиеся к [0-9], то это в запросе тоже можно сделать. Это не сложно.
Вопрос же не в том, что это НУЖНО реализовывать в запросе, а в том, что теоретически это можно решить запросом.

Я уже раза три наверное написал, начиная со своего первого поста в (37), что задачу необходимо решать путем структурных изменений. Так она проще и эффективнее решается.
И опять же ждали долго от автора, что это за реквизит такой "ЧисловойНомер" и что содержит. Возможно всё что нужно.

(33)
        |ИЗ
        | Документ.ИзменениеПараметров КАК ИзменениеПараметров
        | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ИзменениеПараметров.Пл КАК ИзменениеПараметровПл
        | ПО ИзменениеПараметровПл.Ссылка = ИзменениеПараметров.Ссылка

Не нужно тут никакое соединение. Сразу табличную часть брать.

        |ИЗ
        | Документ.ИзменениеПараметров.Пл КАК ИзменениеПараметровПл

Уже кто-то писал выше.
---
Я уже раза три наверное написал, начиная со своего первого поста в (37), что задачу необходимо решать путем структурных изменений. Так она проще и эффективнее решается.
И опять же ждали долго от автора, что это за реквизит такой "ЧисловойНомер" и что содержит. Возможно всё что нужно.
Плохо читали ветку. Это было озвучено в 7 и 17 сообщениях.
Не нужно тут никакое соединение. Сразу табличную часть брать.
Что значит не нужно никакого соединения? То что можно написать без соединения, не означает, что такого соединения не будет. Оно будет создано в любом случае.
А так да, можно писать используя через Ссылка доступ к реквизитам документа, только довольно много где. Через соединение проще и нагляднее.
---
То что можно написать без соединения, не означает, что такого соединения не будет. Оно будет создано в любом случае.

Это понятно что оно будет, так как обращение к шапке и табличной части это разные таблицы.
1С строит такие соединения через ТЧ.Ссылка.Реквизит. Вопрос зачем усложнять наглядность кода в среде 1С лишними соединениями, которые и так будут построены.

Плохо читали ветку. Это было озвучено в 7 и 17 сообщениях.
Нормально я читал ветку.
Мой пост был вызван не столько самой задаче в (1) сколько утверждением того, что запросом 1С нельзя это решить, при этом даже после того как дважды дали ссылку на алгоритм перевода строки в число запросом 1С.
Никто не говорит, что использовать этот алгоритм плохо или хорошо. Вопрос лишь в возможности реализации.
---
это просто предпочтения написания. Мне нагляднее использовать соединение, так как еще на этапе написания запроса вижу, как будет отрабатывать оптимизатор. В простом запросе это не так важно, но при сложном запросе это может помочь.
Так что говорить, что использовать соединение не нужно, это просто предпочтение написания запроса, а не ошибка.
В общем случае, написание запроса без соединения и используя соединение может привести к разным результатам.
Так что не следует слепо использовать доступ через Ссылка.
(79) 1С строит такие соединения через ТЧ.Ссылка.Реквизит.
Это как? Вот прям платформа так строит?
---
Это как? Вот прям платформа так строит?
На сколько я понимаю, это риторический вопрос.

это просто предпочтения написания - редкое предпочтение, но почему многие делают иначе я написал. Ещё одна причина в том, что в типовых конфигурациях тоже обращаются через ссылку. Скажем так - так повелось.
---
это попытка притянуть за уши. Откройте наконец типовую конфигурацию и удивитесь.
Примеры из УТ11.5

```1c
    |ИЗ
    | Документ.ЗаказКлиента КАК Шапка
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ТЧ
```

```1c
    |ИЗ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ЗаказКлиента
```

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