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

```1c
    ТЕСТ = (НОВЫЙ(ТИП("ЗАПРОС"), "ВЫБРАТЬ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2020, 2, 29), ГОД, -1), МЕСЯЦ)")).Выполнить().Выгрузить();
```
?
Иногда хочется упростить код, избавившись от ненужных переменных или быстро посмотреть результат вычисления выражения.
---
вот так:

```1c
    Вычислить("Новый Запрос("ВЫБРАТЬ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2020, 2, 29), ГОД, -1), МЕСЯЦ)") ").Выполнить().Выгрузить()
```
---
Иногда хочется упростить код,
Насчет упростить - ваш код не упрощен для прочтения...
Его понять гораздо труднее в отличие от стандартного написания текста с запросом
---
Вы немного неправильно используете параметры оператора "Новый". Вторым параметром должен быть массив. Количество элементов массива и их порядок уже должны совпадать с количеством и порядком параметров конструктора указанного типа.

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

```1c
    Запрос = Новый Запрос(ТекстЗапроса);
    Результат = (Запрос).Выполнить();
```
---
Запрос = Новый("Запрос", ТекстЗапроса)
Так тоже работает.
---
У меня не вышло. Синтаксически такая конструкция корректна, но срабатывает конструктор по умолчанию, т.е. без установки текста запроса.
---
Можно и текст запроса так установить, но не в этом суть.
Перепроверил, Вы -- правы.
---
Что касается сути вопроса, то нашел вот такую цитату в документации к платформе:
При работе с функциональной формой оператора Новый следует помнить, что операция разыменования непосредственно к результату работы оператора не может быть применена. Вначале следует присвоить результат работы оператора Новый какой-либо переменной, а затем использовать уже эту переменную.К сожалению, я не понимаю, какая из двух форм оператора является функциональной. Буду признателен, если подскажете.
---
ЧТД. Спасибо. Я так понимаю, что обе формы. Нельзя ставить точку после оператора Новый.
---
Ага, я думал будет работать как и с Ком-соединением:

```1c
    КомЗапрос = Соединение.NewObject("Запрос", ТекстЗапроса);
```
---
соединение.evalexpr(...);?
---
evalexpr
Это из 7-ки. Просто в ком соединении к 8-ке запрос можно создать с заданным текстом запроса непосредственно в конструкторе NewObject, поэтому я ошибочно полагал, что также будет работать и в конструкции Новый(). В (4) прав, "вторым параметром должен быть массив". Кстати, такое:

```1c
    Массив = Новый Массив;
    Массив.Добавить("ВЫБРАТЬ 0");
    Запрос = Новый("Запрос", (Массив));
```
 работает.
---
вот так:

```1c
    Вычислить("Новый Запрос("ВЫБРАТЬ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2020, 2, 29), ГОД, -1), МЕСЯЦ)") ").Выполнить().Выгрузить()
```
---
Спасибо! Я попробовал использовать Вычислить(), но что-то Выполнить().Выгрузить() стал внутрь Вычислить() засовывать и ошибку получил.
---
Упростить? Вот этой конструкцией???
---
конечно "упростить" тут и не пахнет, но вот Вычислить выражение в отладчике (Shift + F9), почему бы и нет?
---
Ну для вычисления выражения вполне можно пользоваться вашим кодом. Но автор же пишет об "упрощении" и "избавлении от ненужных по версии автора переменных" и приводит при этом вот такое:
ТЕСТ = (НОВЫЙ(ТИП("ЗАПРОС"), "ВЫБРАТЬ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2020, 2, 29), ГОД, -1), МЕСЯЦ)")).Выполнить().Выгрузить();

Т.е., если я правильно понял, он собирается это всё в рабочих код вставлять, а не просто на лету выражения вычислять.
---
там еще вторая часть была: "или быстро посмотреть результат вычисления выражения".
Ну и основной вопрос был: "подскажите, есть ли возможность использовать оператор "Новый" внутри выражения"
Но все почему-то увидели только узкую часть высказывания...
---
Предполагая, что автор уже знает, как использовать Вычислить, рискну предположить, что идея была в использовании Новый вне Вычислить.
---
если посмотреть хронологию ответов, то как раз у него не получалось использовать Новый в выражении Вычислить. (15)
И соответственно для отладки приходилось в рабочем коде создавать переменные для дебага. Вот от этого и искалось решение.
А не в продакшен коде использовать эти конструкции.
Я понял именно так.
---
Еще раз спасибо! На этот раз за поддержку. Не думал, что "морально-этическая" сторона вопроса всех заинтересует больше собственно технической.
---
Оператор Новый можно использовать внутри выражений, главное корректно его использовать...

В части вашего примера - ну так проверьте - что ответит - и будете в курсе...
В чем суть вопроса?
запустите и все сразу станет ясно, ошибки сейчас 1С пишет очень информативно - для полных программистов...
---
Если Вы пробовали когда-нибудь написать подобный код, то знаете, что мой вариант выдаст ошибку. Хотелось бы найти другой вариант, я его не знаю, и поэтому спрашиваю.
(3)Для меня упрощает, а что там для других -- меня не волнует.
---
Тогда вы как минимум программист не 1С и лучше уж двигайтесь в своем направлении программирования.
1С - это коллективное программирование, когда ты должен быстро разобраться в том , что написали до тебя, и сам оставить такой код, в котором быстро разберутся.
Если этой философии не придерживаешься - лучше уйти в другую сферу...
---
Спасибо.
Теперь по сути вопроса...
---
А не будет по сути - Программистов 1С вы больше не волнуете...