Открытие формы на тонком клиенте

1. Stanislav1993 11.02.19 07:40 Сейчас в теме
Здравствуйте. Столкнулся с одной проблемой. Не могу вызвать форму на тонком клиенте.
Подскажите как можно реализовать.
Внутри функции "ПолучитьДанныеЗаметок" хочу вызывать форму списка.
Всем заранее спасибо.

Функция ПолучитьДанныеЗаметок()Экспорт
	НаборЗаписей = РегистрыСведений.Заметки.СоздатьНаборЗаписей();
	НаборЗаписей.Прочитать();
	Для Каждого Запись из НаборЗаписей Цикл
		ЗаметкаДатаОповещения = Формат(Запись.ДатаОповещения,"ДФ=dd.MM.yyyy");
		ЗаметкаДокумент = Запись.Документ;
		ЗаметкаПользователь = Запись.Пользователь;
		ЗаметкаЗавершенно = Запись.Завершено;
		
		ТекДата = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
		
		Если ТекДата > ЗаметкаДатаОповещения И ЗаметкаЗавершенно = Ложь Тогда
			Сообщить("Просрочена дата заметки по договору "+ " " + ЗаметкаДокумент);
		ИначеЕсли ТекДата = ЗаметкаДатаОповещения И ЗаметкаЗавершенно = Ложь Тогда
			Сообщить("Проверьте заметки на сегодняшний день");
		КонецЕсли;
	КонецЦикла;
КонецФункции
Показать



Модуль управляемого приложения
Процедура  ОболочкаОбработчика ()Экспорт
	ОбработатьОжидание();
КонецПроцедуры
Процедура ОбработатьОжидание()Экспорт
	ОбщегоНазначения.ПолучитьДанныеЗаметок();
КонецПроцедуры


ПодключитьОбработчикОжидания("ОболочкаОбработчика",2,Ложь);   
Показать
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 11.02.19 07:46 Сейчас в теме
(1) судя по всему функция ПолучитьДанныеЗаметок серверная. С сервера невозможно открыть форму. Открывайте форму после возвращения на клиент.
+
3. Stanislav1993 11.02.19 07:49 Сейчас в теме
(2)Могли бы подсказать как это реализовать?
+
5. spacecraft 11.02.19 08:02 Сейчас в теме
(3) что именно подсказать?
Процедура ОбработатьОжидание()Экспорт
    ОбщегоНазначения.ПолучитьДанныеЗаметок();
    // тут открываете форму.
КонецПроцедуры
+
6. Stanislav1993 11.02.19 08:06 Сейчас в теме
(5)Я хочу что при условии открывалась форма.
А так я уже писал код.
+
4. TimoninD 11.02.19 07:53 Сейчас в теме
(1) Добрый день! Не понятно где идет получение формы списка документов???? Точнее я вообще не вижу этой попытки. Если только собираешься написать вызов формы, то напиши подробнее чего хочешь достигнуть. Из серверной процедуры нельзя получать форму..
+
10. lefthander 11.02.19 08:56 Сейчас в теме
(4)В смысле? Что значит нельзя получать форму из серверной процедуры?
ОткрытьФорму - в глобальном контексте, доступна и в тонком клиенте, и в толстом. При открытии обращается к серверу.
+
11. Stanislav1993 11.02.19 08:57 Сейчас в теме
(10) Я не в курсе. Поэтому решил более опытных программистов решить мою проблему.
+
13. lefthander 11.02.19 09:06 Сейчас в теме
(11)Одно дело когда вы хотите открыть список, и другое дело когда вы говорите про форму списка.
У вас функция очень похожа на процедуру, она ничего не возвращает. Как по мне так в функции надо сформировать сам список и вернуть его на клиента и уже на клиенте открыть.
Что то типа
Процедура ОбработатьОжидание()Экспорт
 СписокЗаметок =   ОбщегоНазначения.ПолучитьДанныеЗаметок();
КонецПроцедуры

В теле функции где то добавить в список значений или таблицу значений данные по заметкам. Затем после прочтения записать в регист результат просмотра.
Трудно судить по одной функции что именно Вы хотите.
Я когда то решал подобную задачу, При старте системы проверялись новые сообщения по обновлениям и после прочтения помечались как прочитанные. Но там однозначно было больше одной функции.
+
14. Stanislav1993 11.02.19 09:08 Сейчас в теме
(13) Хорошо, попробую сделать так.
+
16. Stanislav1993 11.02.19 09:55 Сейчас в теме
(13) Как вам вот такая функция?
Функция ПолучитьТаблЗаметок(ДатаОповещения,Пользователь)Экспорт
	
	МассивТипаВыбора = Новый Массив;
	МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
	ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
	МассивРеквизитов = Новый Массив;
	ИмяТЗ = "ТаблицаЗаметок"; ЗаголовокТЗ = "Заметки";
	МассивРеквизитов.Добавить(Новый РеквизитФормы(ИмяТЗ, ОписаниеТипаВыбора, "", ЗаголовокТЗ));
	
	//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Заметки.Пользователь КАК Пользователь,
	|	Заметки.Статус КАК Статус,
	|	Заметки.Документ КАК Документ,
	|	Заметки.ДатаОповещения КАК ДатаОповещения
	|ИЗ
	|	РегистрСведений.Заметки КАК Заметки
	|ГДЕ
	|	Заметки.ДатаОповещения = &ДатаОповещения
	|	И Заметки.Пользователь = &Пользователь";
	
	Запрос.УстановитьПараметр("ДатаОповещения", ДатаОповещения);
	Запрос.УстановитьПараметр("Пользователь", Пользователь);
	
	РезультатЗапроса = Запрос.Выполнить();
	ТЗ = РезультатЗапроса.Выгрузить();	
	
	Для Каждого Колонка Из ТЗ2.Колонки Цикл
		ТипыЗначений = Новый Массив;
		Для каждого тТип из Колонка.ТипЗначения.Типы() Цикл
			Если тТип <> Тип("Null") Тогда
				ТипыЗначений.Добавить(тТип);
			КонецЕсли;
		КонецЦикла;
		МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(ТипыЗначений), ИмяТЗ2));
	КонецЦикла;
	
	ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);      
	эТаблица = Элементы.Добавить(ЗаголовокТЗ, Тип("ТаблицаФормы"));
	эТаблица.ПутьКДанным = ИмяТЗ2;
	эТаблица.Отображение = ОтображениеТаблицы.Список;
	эТаблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
	эТаблица.ИзменятьСоставСтрок = Ложь;    
	
	Для Каждого Колонка Из ТЗ.Колонки Цикл
		НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), эТаблица);
		НовыйЭлемент.ПутьКДанным = ИмяТЗ + "." + Колонка.Имя;
		Если Колонка.Имя = "Выб" Тогда
			НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
		Иначе
			НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
			НовыйЭлемент.КнопкаОчистки = Ложь;
			НовыйЭлемент.КнопкаВыбора = Ложь;
			НовыйЭлемент.РедактированиеТекста = Ложь;
			НовыйЭлемент.КнопкаОткрытия = Истина;
		КонецЕсли;
	КонецЦикла;
	
	ЭтаФорма.ЗначениеВРеквизитФормы(ТЗ2, ИмяТЗ2);
	
	
КонецФункции

Показать
+
17. lefthander 11.02.19 10:11 Сейчас в теме
(16)Если она делает то что Вам надо, то это очень хорошо.
+
20. Stanislav1993 11.02.19 10:21 Сейчас в теме
(17)Когда я тестирую код в обработке, то все норм.
Но когда переношу код в общий модуль, то начинаются проблемки.
+
22. spacecraft 11.02.19 14:10 Сейчас в теме
(20) забудьте уже про форму в общем серверном модуле, если ее туда не передаете.
+
15. TimoninD 11.02.19 09:53 Сейчас в теме
(10) Я про УФ говорил. Невозможно открыть форму объекта, находясь на сервере. В неуправляемых формах другой расклад.
+
18. lefthander 11.02.19 10:14 Сейчас в теме
(15)Все равно не очень понятно что Вы имеете в виду когда говорите - невозможно открыть форму объекта находясь на сервере. Из серверной процедуры (директива &НаСервере) форма любого объекта прекрасно открывается. (не список, а именно форма)
+
19. Stanislav1993 11.02.19 10:18 Сейчас в теме
(18)У меня ошибка
{ОбщийМодуль.ОбщегоНазначения.Модуль(135,18)}: Переменная не определена (Элементы)
		НовыйЭлемент = <<?>>Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), эТаблица); (Проверка: Сервер)

+
23. lefthander 12.02.19 09:07 Сейчас в теме
(19)Естественно - Элементы находятся на форме а вы в общем модуле.
Колонки лучше всего добавлять в процедуре приСозданииНаСервере той формы где добавляете колонки. (сорри за каламбурчик)
Когда вы ее тестируете в обработке у вас есть форма обработки где вы и играете с элементами. И зачем вы все потом переносите в общий модуль?
+
21. spacecraft 11.02.19 14:09 Сейчас в теме
(18)
Из серверной процедуры (директива &НаСервере) форма любого объекта прекрасно открывается.

Давайте пример. Про Толстый клиент файловой базы только не надо.
Но в (0) не серверный контекст модуля формы, а серверный общий модуль. А это 2 большие разницы.
+
24. lefthander 12.02.19 09:30 Сейчас в теме
(21)Упс, Вы меня поймали, конечно форма открывается только из клиентских общих модулей. :)
+
7. Stanislav1993 11.02.19 08:15 Сейчас в теме
В функции "ПолучитьДанныеЗаметок" есть условие:
Если ТекДата > ЗаметкаДатаОповещения И ЗаметкаЗавершенно = Ложь Тогда
            Сообщить("Просрочена дата заметки по договору "+ " " + ЗаметкаДокумент);
        ИначеЕсли ТекДата = ЗаметкаДатаОповещения И ЗаметкаЗавершенно = Ложь Тогда
            Сообщить("Проверьте заметки на сегодняшний день");
КонецЕсли;

При этом условии хочу, чтобы открывалась форма списка.
+
8. spacecraft 11.02.19 08:30 Сейчас в теме
(7) меняйте бизнес-логику. Сначала все что возможно выполнить целиком на сервере. Вернуть нужный результат на клиент. На клиенте открыть форму.
Именно в такой последовательности.
+
9. Stanislav1993 11.02.19 08:40 Сейчас в теме
(8) Хорошо, спасибо.
+
12. lefthander 11.02.19 08:58 Сейчас в теме
(7)Сделайте свою форму списка и открывайте ее, при открытии заполняйте, при выборе закрывайте или что там дольше по логике.
+
Внимание! Тема сдана в архив

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