Добрый день!!!
Пишу обработку, которая должна запускаться на различных версий 1С в легком клиенте.
В ней нужно открыть окно Конструктора запроса.
Для версии 8.2 в толстом клиенте для этого пишу.

Конструктор = Новый КонструкторЗапроса();
Конструктор.ОткрытьМодально()

Для версии 8.3 (начиная с определенной версии) в легком клиенте можно открыть конструктор:

Конструктор = Новый КонструкторЗапроса();
Оповещение = Новый ОписаниеОповещения("ОткрытьКонструкторЗапросаЗавершение", ЭтотОбъект);
Конструктор.Показать(Оповещение);

Хочу, чтобы в зависимости от версии 1С открывался Конструктор тем или другим способом.
Но проблема в том, что при открытии формы в старых версиях выводиться ошибка:

Тип не определен (КонструкторЗапроса)
Конструктор = Новый <<?>>КонструкторЗапроса(ЭлементДерева.ТекстЗапроса); (Проверка: Тонкий клиент)
---
а компиляция обманывается с помощью команды
//Выполнить("лкНапр = НаправлениеПоиска.СНачала");

выполняется любой код в кавычках, а он компилятору по барабану
---
Надо почитать СП:

Синтаксис (вариант 2):
Новый(<Тип>[, <ПараметрыКонструктора>])
Параметры:
Тип
Имя типа или значение типа Тип
ПараметрыКонструктора
Массив параметров конструктора
Описание:
Оператор позволяет создать значение указанного типа. Допустим только для тех типов, для которых разрешено создание с помощью данного оператора (подробнее см. описание объектов языка).
Для прикладных объектов необходимо использовать функциональную форму оператора Новый (вариант 2), так как при проверке модулей в конфигураторе не определены типы для прикладных объектов.
Если в качестве второго параметра указано значение, отличное от массива, то параметр полностью игнорируется.
---
Для версии 8.2 в толстом клиенте

Тип не определен (КонструкторЗапроса)
Конструктор = Новый <<?>>КонструкторЗапроса(ЭлементДерева.ТекстЗапроса); (Проверка: Тонкий клиент)

ОткрытьМодально (DoModal)

Доступность:
Толстый клиент.
---
Самое простое

```1c
    #Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
    //код 8.2
    #Иначе
    //код8.3
    #КонецЕсли
```
---
а если я запустил 8.3 через толстый клиент?
---
я использовал такой код
(это пример)

```1c
    //определение версии и совместимости
    ВерсияПлатформы = ПолучитьВерсиюПлатформы();
    ...
    Если ВерсияПлатформы >= "8.3.08.0" Тогда
    Попытка
    Дата1 = ТекущаяУниверсальнаяДатаВМиллисекундах();//ТекущаяДата();
    МассивРезультатов = лкЗапрос.ВыполнитьПакетСПромежуточнымиДанными();
    Дата2 = ТекущаяУниверсальнаяДатаВМиллисекундах();//ТекущаяДата();
    Исключение
    лкОшибка = ОписаниеОшибки();
    //Сообщить(лкОшибка);
    Возврат лкОшибка;
    КонецПопытки;
    лкИмена = ПолучитьИменаТаблиц(лкЗапрос.Текст);
    ПоместитьРезультатВХранилище(МассивРезультатов, "Peзультaт", лкИмена);
    //ПоместитьВремТабВХранилище_838(лкЗапрос);
    Иначе
    Если лкЗапрос.МенеджерВременныхТаблиц = Неопределено Тогда
    лкЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
    КонецЕсли;
    лкЗапрос.Текст = ЗакоментаритьКоманду(лкЗапрос.Текст,"УНИЧТОЖИТЬ");
    Попытка
    Дата1 = ТекущаяУниверсальнаяДатаВМиллисекундах();//ТекущаяДата();
    МассивРезультатов = лкЗапрос.ВыполнитьПакет();
    Дата2 = ТекущаяУниверсальнаяДатаВМиллисекундах();//ТекущаяДата();
    Исключение
    лкОшибка = ОписаниеОшибки();
    //Сообщить(лкОшибка);
    Возврат лкОшибка;
    КонецПопытки;
    ПоместитьРезультатВХранилище(МассивРезультатов, "Peзультaт");
    ПоместитьВремТабВХранилище_81(лкЗапрос);
    лкЗапрос.МенеджерВременныхТаблиц.Закрыть();
    КонецЕсли;
```
---
Ему этап компиляции преодолеть надо, а не выполнения
---
Первое, что мне пришло в голову использовать инструкции препроцессора, но дело в том, что 8.2 может работать в тонком клиенте. Поэтому совет 2. GeraltSnow не подходит
---
да почему вы пишете про проверку версии, у него проблема в другом же
---
Через механизм Исключений тоже не получается, так как в момент открытия (компиляции) кода выскакивает ошибка. И ей плевать на Исключение.
---
На самом деле меня интересует не конкретная проблема, а механизм как правильно писать код с учетом изменений вносимых в написании операторов в процессе выхада новых версий.
В данном примере в старых версиях 8.3 не существовала возможность открывать конструктор в легком клиенте, начиная с определенного номера версии эта возможность появилась.
Как исключить код компиляции если версия не поддерживает этот оператор.
---
а компиляция обманывается с помощью команды
//Выполнить("лкНапр = НаправлениеПоиска.СНачала");

выполняется любой код в кавычках, а он компилятору по барабану
---
А уж в комментариях - тем более.ВыполнитьНе поддерживатеся в веб клиенте. У вас еще есть шанс устроить себе открытие года и прочитать синтакс-помощник.
---
Не понял 12. soft_wind
Пожалуйста напишите подробнее
---
Спосибо за совет. Постараюсь проработать конструкцию Выполнить(
---
Внимательнее надо читать Автора! ни о каком упоминании Веб клиента - не было!
---
Большое спасибо за подсказку ! ! !
Помог оператор Выполнить (разумеется без значков комментария).
Вначале определяю тип клиента, затем номер версии 1С, если все подходит выполняю нужного варианта Выполнить(), если нет то вывожу сообщение пользователю.
---
Спасибо всем, кто принял участие в дискусии ! ! !