Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 июн 2025, 14:02

1=1

Автор MrLvovsky, 28 фев 2017, 14:49

0 Пользователей и 1 гость просматривают эту тему.

MrLvovsky

Добрый день, Товарищи.
С 1с работаю около года и пару раз в коде встречал условие цикла на основе "1=1".
Пример:
Пока 1=1 Цикл
//Код цикла
КонецЦикла;

Я всегда думал, что выход из цикла будет осуществляться командой Возврат при определенных условиях и не парился.

Но давече встретил в запросе встретил такую вещь:
Выбрать бла бла
ИЗ бла бла
ГДЕ 1=1;

Собственно вопрос.
Накой черт нужно это условие?

Заранее спасибо за ответ.


Kironten

Добро пожаловать в сладостный и чарующий мир говнокода.

LexaK

эх вы зеленки!
правда это выглядеть должно так

Где
    1 = 1

Именно единица пробел равно пробел единица, такую запись понимает конструктор запросов и не ломает ее.
помимо этого условия могут быть еще и другие


Где
    Условие1
и   Условие2
и   1 = 1


вот это " и   1 = 1 " на общую картину условий не влияет
я обычно пишу "0 = 0" ну кому как нравится,

Для чего это надо?

это очень сильно помогает писать большие запросы, когда по определенным условиям в запросы нужно вставлять разные условия проверок, вы наверно встречали в коде такое

Запрос.Текст = "Выбрать .... Где Условие1 и "
+ ?(ЧтоТо=Истина,
"Какой-то кусок кода запроса",
"Какой-то другой кусок кода запроса") + " продолжение запроса ";

и таких "+?(...)" может быть несколько на один запрос
такое тело запроса в конфигураторе невозможно открыть конструктором запросов (им удобно синтаксис проверять)
да и читаемость запроса получается никакая.

а если вы используете "1 = 1" то этот кусок текста запроса очень легко потом заменить на нужное условие
пример

Запрос.Текст = "
    Выбрать
    ...
    Где
        Условие1
    и   1 = 1
    Сгруппировать по
    ...
    Упорядочить по
    ...";

//проверка и установка своих новых условий
Если НужноеУсловие Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "1 = 1", "НужноеУсловие");
Иначе
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "1 = 1", "ДругоеУсловие");
КоенцЕсли;


Это простенький пример применения, но он легко масштабируется, все зависит от вашей сообразительности.
Надеюсь я понятно изложил идею (ну не препод я :D ).

А тем, кто не понял, остается конструкция " + ? ( ... ) + " и др. подобные



если помогло нажмите: Спасибо!

MrLvovsky

Цитата: LexaK от 28 фев 2017, 16:35
эх вы зеленки!
правда это выглядеть должно так...

А вот это круто, за это спасибо!

AsadRoman

Цитата: LexaK от 28 фев 2017, 16:35
эх вы зеленки!
правда это выглядеть должно так

Где
    1 = 1

Именно единица пробел равно пробел единица, такую запись понимает конструктор запросов и не ломает ее.
помимо этого условия могут быть еще и другие


Где
    Условие1
и   Условие2
и   1 = 1


вот это " и   1 = 1 " на общую картину условий не влияет
я обычно пишу "0 = 0" ну кому как нравится,

Для чего это надо?

это очень сильно помогает писать большие запросы, когда по определенным условиям в запросы нужно вставлять разные условия проверок, вы наверно встречали в коде такое

Запрос.Текст = "Выбрать .... Где Условие1 и "
+ ?(ЧтоТо=Истина,
"Какой-то кусок кода запроса",
"Какой-то другой кусок кода запроса") + " продолжение запроса ";

и таких "+?(...)" может быть несколько на один запрос
такое тело запроса в конфигураторе невозможно открыть конструктором запросов (им удобно синтаксис проверять)
да и читаемость запроса получается никакая.

а если вы используете "1 = 1" то этот кусок текста запроса очень легко потом заменить на нужное условие
пример

Запрос.Текст = "
    Выбрать
    ...
    Где
        Условие1
    и   1 = 1
    Сгруппировать по
    ...
    Упорядочить по
    ...";

//проверка и установка своих новых условий
Если НужноеУсловие Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "1 = 1", "НужноеУсловие");
Иначе
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "1 = 1", "ДругоеУсловие");
КоенцЕсли;


Это простенький пример применения, но он легко масштабируется, все зависит от вашей сообразительности.
Надеюсь я понятно изложил идею (ну не препод я :D ).

А тем, кто не понял, остается конструкция " + ? ( ... ) + " и др. подобные





А про пакет запросов автор не слышал? Или в мозгу твердо засело: "Один сложный запрос выполняется быстрей чем несколько простых". Ню-ню. А использование индексов не помогает?

LexaK

Цитировать
А про пакет запросов автор не слышал? Или в мозгу твердо засело: "Один сложный запрос выполняется быстрей чем несколько простых". Ню-ню. А использование индексов не помогает?

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

Индексация нужна когда вы получили результат или временную таблицу а потом где-то ее используете 1000 раз!
в противном случае само построение индексов столько сжирает ресурсов, что это реальный тормоз.
не поленитесь сделайте пару примерчиков с замером производительности где таблицы/запросы с индексами и без.
я уже через это прошел :D

и к стати такую конструкцию "Где 1 = 1" конечно-же можно использовать и в пакетных запросах. :befhbt:
если помогло нажмите: Спасибо!

AsadRoman

Цитата: LexaK от 01 мар 2017, 15:17
Цитировать
А про пакет запросов автор не слышал? Или в мозгу твердо засело: "Один сложный запрос выполняется быстрей чем несколько простых". Ню-ню. А использование индексов не помогает?

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

Индексация нужна когда вы получили результат или временную таблицу а потом где-то ее используете 1000 раз!
в противном случае само построение индексов столько сжирает ресурсов, что это реальный тормоз.
не поленитесь сделайте пару примерчиков с замером производительности где таблицы/запросы с индексами и без.
я уже через это прошел :D

и к стати такую конструкцию "Где 1 = 1" конечно-же можно использовать и в пакетных запросах. :befhbt:


"....Пакет запросов возвращает вам несколько выборок/таблиц ни как не связанных друг с другом
и если вы их начинаете потом в цикле как-то обрабатывать друг с другом..." Вот никогда так не делал.
А вот с этим: "...Необходимо в запросе при получении данных сразу их и обработать, рассчитать, разнести и т.д...." абсолютно согласен.
Пример? Да хоть УНФ, модуль ОбменССайтом. Там что в макете, что в коде очень хорошо все видно.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск