Выполнение модуля в зависимости от номера версии 1С

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

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

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

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


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

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

выполняется любой код в кавычках, а он компилятору по барабану
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. user1863362 16.12.22 14:31 Сейчас в теме
(1) Надо почитать СП:

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


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


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

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


Показать
10. user1863362 16.12.22 14:45 Сейчас в теме
(4) Ему этап компиляции преодолеть надо, а не выполнения
6. user865784 16.12.22 14:38 Сейчас в теме
Первое, что мне пришло в голову использовать инструкции препроцессора, но дело в том, что 8.2 может работать в тонком клиенте. Поэтому совет 2. GeraltSnow не подходит
8. DBV 16.12.22 14:40 Сейчас в теме
да почему вы пишете про проверку версии, у него проблема в другом же
9. user865784 16.12.22 14:40 Сейчас в теме
Через механизм Исключений тоже не получается, так как в момент открытия (компиляции) кода выскакивает ошибка. И ей плевать на Исключение.
11. user865784 16.12.22 14:46 Сейчас в теме
На самом деле меня интересует не конкретная проблема, а механизм как правильно писать код с учетом изменений вносимых в написании операторов в процессе выхада новых версий.
В данном примере в старых версиях 8.3 не существовала возможность открывать конструктор в легком клиенте, начиная с определенного номера версии эта возможность появилась.
Как исключить код компиляции если версия не поддерживает этот оператор.
12. soft_wind 16.12.22 14:47 Сейчас в теме
(9) а компиляция обманывается с помощью команды
//Выполнить("лкНапр = НаправлениеПоиска.СНачала");

выполняется любой код в кавычках, а он компилятору по барабану
14. user1863362 16.12.22 14:51 Сейчас в теме
(12) А уж в комментариях - тем более.
Выполнить
Не поддерживатеся в веб клиенте. У вас еще есть шанс устроить себе открытие года и прочитать синтакс-помощник.
13. user865784 16.12.22 14:50 Сейчас в теме
Не понял 12. soft_wind
Пожалуйста напишите подробнее
15. user865784 16.12.22 14:55 Сейчас в теме
Спосибо за совет. Постараюсь проработать конструкцию Выполнить(
16. soft_wind 16.12.22 15:05 Сейчас в теме
(14) Внимательнее надо читать Автора! ни о каком упоминании Веб клиента - не было!
17. user865784 16.12.22 15:14 Сейчас в теме
Большое спасибо за подсказку ! ! !
Помог оператор Выполнить (разумеется без значков комментария).
Вначале определяю тип клиента, затем номер версии 1С, если все подходит выполняю нужного варианта Выполнить(), если нет то вывожу сообщение пользователю.
18. user865784 16.12.22 15:14 Сейчас в теме
Спасибо всем, кто принял участие в дискусии ! ! !
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот