Имя: Пароль:
1C
 
Открытие формы обработки созданной на сервере
,
0 mrCreator
 
30.08.16
08:47
Добрый день!

Извечный вопрос сервера и клиента в УФ

Задача такая:

ОбработчикОжидания у меня вызывает процедуру на сервере, в которой выполняется запрос по регистру на наличие подходящих записей и если они есть (их может быть несколько) создается обработка, заполняется и открывается.

а теперь собственно боль. На сервере форму открыть нельзя, а вся процедура начиная от проверки нужно ли создать и до открытия заполненной формы выполняется на сервере


&НаСервере
Процедура СоздатьУведомлениеПользователя() Экспорт
    запрос = новый запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЗапланированныеЗадачиСрезПоследних.Период,
                   |    ЗапланированныеЗадачиСрезПоследних.ДатаНапоминания,
                   |    ЗапланированныеЗадачиСрезПоследних.Задача,
                   |    ЗапланированныеЗадачиСрезПоследних.ПоследнийКомментарий,
                   |    ЗапланированныеЗадачиСрезПоследних.Важность,
                   |    ЗапланированныеЗадачиСрезПоследних.Автор,
                   |    ЗапланированныеЗадачиСрезПоследних.Состояние
                   |ИЗ
                   |    РегистрСведений.ЗапланированныеЗадачи.СрезПоследних КАК ЗапланированныеЗадачиСрезПоследних
                   |ГДЕ
                   |    ЗапланированныеЗадачиСрезПоследних.Состояние = Истина
                   |    И ЗапланированныеЗадачиСрезПоследних.Автор = &Автор
                   |    И ЗапланированныеЗадачиСрезПоследних.ДатаНапоминания < &ТекущаяДата";
    Запрос.УстановитьПараметр("Автор", ПараметрыСеанса.ТекущийПользовательИБ);
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    выборка = Запрос.Выполнить().Выбрать();
    пока выборка.Следующий() цикл
        Уведомление = Обработки.УведомлениеОЗаплпнированнойЗадаче.Создать();
        Уведомление.Автор = Выборка.Автор;
        Уведомление.Важность = Выборка.Важность;
        Уведомление.Задача = Выборка.Задача;
        Уведомление.Контрагент = Уведомление.Задача.Контрагент;
        Уведомление.Ответственный = Уведомление.Задача.Ответственный;
        Уведомление.ПоследнийКоментарий = Выборка.ПоследнийКомментарий;
        Уведомление.Состояние = Выборка.Состояние;

    КонецЦикла;
КонецПроцедуры
1 iceman2112
 
30.08.16
08:53
Результат = СоздатьУведомлениеПользователя();
Для Каждого Строка Из Результат Цикл

// а форме уже делаешь обработку параметров
  
ОткрытьФорму("Обработки.УведомлениеОЗаплпнированнойЗадаче.Форма", Строка);

КонецЦикла;
2 aleks_default
 
30.08.16
08:54
"ОбработчикОжидания у меня вызывает процедуру на сервере"
вызывай процедуру на клиенте
3 mrCreator
 
30.08.16
08:57
(2) Суть от этого не поменяется, мне нужно запросом получить данные нужно создавать или не нужно, а если нужно то сколько и чем заполнять, а это только на сервере
4 aleks_default
 
30.08.16
08:59
Ну и получай на сервере нужные данные, кто тебе мешает, только возвращай потом на клиент и там вызывай форму
5 mrCreator
 
30.08.16
09:00
(1) с сервера на клиент на сколько я помню можно передавать только примитивные типы а ТаблицаЗначений или РезультатЗапроса таковыми не являются
6 iceman2112
 
30.08.16
09:01
(5) у тебя этот код на форме выполняется? или это общий модуль?
7 mrCreator
 
30.08.16
09:02
это общий модуль
8 aleks_default
 
30.08.16
09:02
(5) ну дык это же вообще неразрешимая проблема, да
9 DmitrO
 
30.08.16
09:06
Омерзительная 8ка не позволяет передавать на клиента таблицу значений, но ее можно пихнуть во временное хранилище, а формы уведомлений открывать передавая им адрес в хранилище и номер строки в этой ТЗ.
10 DmitrO
 
30.08.16
09:07
а еще одинесники очень уважают массив структур :)
11 iceman2112
 
30.08.16
09:09
(9) массив структур
12 aleks_default
 
30.08.16
09:09
Вообще странная какая-то задача - обработчиком ожидания открывать форму обработки... А что потом с этой формой будут делать?
13 DmitrO
 
30.08.16
09:14
(12)а что странного.. сидишь такой сидишь, засыпаешь, и раз три формы тебе открылось, НА ПОЛУЧИ.. здорово
а если что-то делал при этом, какую-то форму заполнял..
поэтому на работе лучше ничего не делать, спать..
14 oslokot
 
30.08.16
09:14
(11) +1
для этого даже во всех типовых есть ОбщегоНазначения.ТаблицаЗначенийВМассив()
на сервере запрос в таблицу и возвращай массив структур
15 aleks_default
 
30.08.16
09:17
(13) А точно, это, наверное, проверка на то спит сотрудник на работе или нет. А по тому сколько форм открыто, можно считать сколько проспал...
16 DmitrO
 
30.08.16
09:19
(14)ога, т.е. это понимают все кто в ней пишет (даже разработчики БСП), но этого не понимают разработчики платформы (т.е. те кто в ней не пишет).
17 mrCreator
 
30.08.16
09:30
(12) пользователь ставит себе напоминание о каком то действии и программа должна переодический смотреть нет ли подошедших событий и сообщить об этом, для этого открывается форма с данными об этом событии и из этой формы можно либо перенести событие на более поздний срок либо перейти к выполнению задачи.

Вот для чего это нужно.
18 DmitrO
 
30.08.16
09:34
(0)совет: сделай одну форму для отображения всех уведомлений, обработчик ожидания размести в ней, данные получай в ее контексте (получишь в ТЗ или ТЧ), форму поставь на рабочий стол, чтобы всегда торчала, а внимание пользователя привлекай ПоказатьОповещениеПользователя, либо миганием панели задач ОС (управление панелью задач ОС есть начиная с 8.3.8).
19 aleks_default
 
30.08.16
09:36
(18)+1 или сообщай через ПоказатьОповещениеПользователя()
20 mrCreator
 
30.08.16
09:42
Всем спасибо ребят! Воспользовался масивом структур.
Основная теорема систематики: Новые системы плодят новые проблемы.