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 Сейчас в теме
12. lefthander 11.02.19 08:58 Сейчас в теме
(7)Сделайте свою форму списка и открывайте ее, при открытии заполняйте, при выборе закрывайте или что там дольше по логике.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии


Специалист техподдержки 1С
Иркутск
зарплата от 28 000 руб. до 34 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 48 000 руб. до 96 000 руб.
По совместительству

Программист 1С
Ставрополь
зарплата от 40 000 руб. до 60 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день