Инструкция препроцессора ТолстыйКлиентУправляемоеПриложение - не едут лыжи!

1. triviumfan 99 24.12.19 10:29 Сейчас в теме
Добрый день, коллеги.

Управляемое приложение, толстый клиент, платформа 8.3.14.1854

Пытаюсь открыть конструктор СКД
&НаКлиенте
Процедура ОткрытьСКД(Команда)
	
	#Если ТолстыйКлиентУправляемоеПриложение Тогда
		
		СтандартнаяОбработка = Ложь;
		
		Конструктор = Новый КонструкторСхемыКомпоновкиДанных;
		Схема = ПолучитьТекущуюСхему(Запись.ИмяСхемы);
		
		Если Схема <> Неопределено Тогда 
			Конструктор.УстановитьСхему(Схема);
		КонецЕсли;	
		
		Конструктор.Редактировать(ЭтаФорма);
		
	#Иначе
		
		ПоказатьПредупреждение(,(НСтр("ru='Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'")));
		
	#КонецЕсли
	
КонецПроцедуры
Показать

и получаю по лицу:

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


Что я делаю не так?! Запускаю толстый клиент из конфигуратора Отладка -> Начало отладки -> Толстый клиент (не стал пробовать добавлением параметра запуска).
Притом этот баг то воспроизводится, то нет! Раза с 10го эта инструкция препроцессора ТолстыйКлиентУправляемоеПриложение заработает, но очень нестабильно все. Либо я дурак, либо лыжи не едут.
Прикрепленные файлы:
Найденные решения
13. ImHunter 333 24.12.19 14:54 Сейчас в теме
(12) Норм работает...
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	#Если Сервер Тогда 
		Сообщить("Сервер");
	#ИначеЕсли ВебКлиент Тогда 
		Сообщить("ВебКлиент");
	#ИначеЕсли ТонкийКлиент Тогда 
		Сообщить("ТонкийКлиент");
	#ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда 
		Сообщить("ТолстыйКлиентОбычноеПриложение");
	#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда 
		Сообщить("ТолстыйКлиентУправляемоеПриложение");
		Конструктор = Новый КонструкторСхемыКомпоновкиДанных;
		Конструктор.Редактировать(ЭтотОбъект); // Открывается...
	#Иначе
		Сообщить("??");
	#КонецЕсли
	
КонецПроцедуры
Показать


Кеш почисти чтоль...
plotnikov1c; SIrina9; dindzilin; Evilleo; Tailor_Made; yghmd; +6 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. YannikAlx 28 24.12.19 10:46 Сейчас в теме
Попробуйте делать не на клиенте...
А на сервере
Но это просто гипотеза (чисто методом научного тыка)
3. triviumfan 99 24.12.19 10:58 Сейчас в теме
(2) Подсмотрел в типовых (УТ, ДО) - там в клиентских процедурах имеется такая проверка контекста выполнения. Значит это не то.
Но попробовал переписать ради интереса - не помогло:
&НаСервереБезКонтекста
Функция ЭтоТолстыйКлиент()
	
	#Если ТолстыйКлиентУправляемоеПриложение Тогда
		Возврат Истина;
	#Иначе
		Возврат Ложь;
	#КонецЕсли	
		
КонецФункции

&НаКлиенте
Процедура ОткрытьСКД(Команда)
	
	Если ЭтоТолстыйКлиент() Тогда
		
		СтандартнаяОбработка = Ложь;
		
		Конструктор = Новый КонструкторСхемыКомпоновкиДанных;
		Схема = ПолучитьТекущуюСхему(Запись.ИмяСхемы);
		
		Если Схема <> Неопределено Тогда 
			Конструктор.УстановитьСхему(Схема);
		КонецЕсли;	
		
		Конструктор.Редактировать(ЭтаФорма);
		
	Иначе
		
		ПоказатьПредупреждение(,(НСтр("ru='Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'")));
		
	КонецЕсли
	
КонецПроцедуры
Показать
4. triviumfan 99 24.12.19 10:58 Сейчас в теме
Короче это какой-то глюк определения контекста. Похоже баг платформы?!
16. KilloN 74 30.01.22 21:02 Сейчас в теме
Столкнулся с таким же глюком платформы =(
5. seevkik 9 24.12.19 11:16 Сейчас в теме
В багрепортах ничего? Создай
6. ImHunter 333 24.12.19 12:52 Сейчас в теме
Может попробовать
#Если НЕ ТонкийКлиент Тогда

?
7. triviumfan 99 24.12.19 13:40 Сейчас в теме
(6)
#Если НЕ ТонкийКлиент Тогда

В таком случае будет ошибка инициализации КонструкторСхемыКомпоновкиДанных
9. ImHunter 333 24.12.19 14:21 Сейчас в теме
(7) Ошибка - будет (предположительно) или возникает?
По логике, вроде должно работать.
Исследуй подробно свой глюк - пропиши все директивы типа
#Если ... Тогда
  Сообщить("Директива такая-то");
#ИначеЕсли
#Иначе
#КонецЕсли
10. triviumfan 99 24.12.19 14:23 Сейчас в теме
(9) Возникает. А вы можете у себя проверить?
11. ImHunter 333 24.12.19 14:33 Сейчас в теме
(10) Попробую попробовать... Позже только.
Еще, как вариант, - написать две одноименные процедуры для разных клиентов. А вызывающий код сделать без директив.
12. triviumfan 99 24.12.19 14:45 Сейчас в теме
(11) директива компиляции одна и та же. Да и разделять тут нечего, конструктор схемы только в толстом работает.
13. ImHunter 333 24.12.19 14:54 Сейчас в теме
(12) Норм работает...
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	#Если Сервер Тогда 
		Сообщить("Сервер");
	#ИначеЕсли ВебКлиент Тогда 
		Сообщить("ВебКлиент");
	#ИначеЕсли ТонкийКлиент Тогда 
		Сообщить("ТонкийКлиент");
	#ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда 
		Сообщить("ТолстыйКлиентОбычноеПриложение");
	#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда 
		Сообщить("ТолстыйКлиентУправляемоеПриложение");
		Конструктор = Новый КонструкторСхемыКомпоновкиДанных;
		Конструктор.Редактировать(ЭтотОбъект); // Открывается...
	#Иначе
		Сообщить("??");
	#КонецЕсли
	
КонецПроцедуры
Показать


Кеш почисти чтоль...
plotnikov1c; SIrina9; dindzilin; Evilleo; Tailor_Made; yghmd; +6 Ответить
14. triviumfan 99 24.12.19 16:05 Сейчас в теме
(13) Странно, почему я сразу побежал тему на ИС пилить, а не почистил кэш... это же одинэс... мдааа...
В общем - чистка кеша помогла. Пардон.
15. Tailor_Made 23.06.21 16:47 Сейчас в теме
17. dindzilin 27.07.22 11:00 Сейчас в теме
(13) - спасибо что ткнул опять носом в неочевидное решение многих непонятных проблемм... Да, очистка кэша помогла
8. triviumfan 99 24.12.19 13:42 Сейчас в теме
В последней версии ДО КОРП есть похожая функция редактирования схемы:
&НаКлиенте
Процедура РедактироватьСхему(Команда)
#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
	СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы);
	
	Если СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных") Тогда
		СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ДополнительныеСвойства.СхемаКомпоновкиДанных = Неопределено;
	КонецЕсли;
	
	Конструктор = Новый КонструкторСхемыКомпоновкиДанных(СхемаКомпоновкиДанных);
	Конструктор.Редактировать(ЭтотОбъект);
#Иначе
	ПоказатьПредупреждение(, (НСтр("ru='Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'")));
#КонецЕсли
КонецПроцедуры
Показать

Как видно - это должно работать. Но у меня какой-то глюк.
18. arxangelivan 30.11.22 14:34 Сейчас в теме
(1) Уберите Таб в начале строки. Директивы должны начинаться без символов перед #
19. triviumfan 99 30.11.22 14:42 Сейчас в теме
20. arxangelivan 30.11.22 16:19 Сейчас в теме
(19) Проверить стоит. У меня сработал именно этот вариант (8.3.22.1704)
21. ImHunter 333 01.12.22 06:25 Сейчас в теме
22. aaakhm 20.12.22 13:06 Сейчас в теме
Та же история, как в стартовом сообщении.
Помогает чистка кэша. Можно просто удалить базу из списка и добавить заново.
Оставьте свое сообщение

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