Имя: Пароль:
1C
1С v8
Обращение к конкретной форме задачи 1С 8.3
0 vlasabo
 
06.11.15
16:27
Доброго дня. Видимо не знаю как корректно построить поисковый запрос, поэтому не могу найти интересующую инфу.
Суть вопроса: есть объект Задачи с именем "Задачи". У него есть две формы объекта - ФормаЗадачи и ФормаЗадачиДополнительно. По умолчанию - ФормаЗадачи.
Программно  в документе создаётся задача (не привязанная к бизнес-процессу). Естественно по умолчанию создается ФормаЗадачи, а как выбрать требуемую форму ФормаЗадачиДополнительно?

Код:

&НаСервере
Процедура СоздатьЗадачуСтаршемуАдминистратору(ФИОСотрудника,Процедура1,ФИОАдмин,ФИОАдмин2,ФИОАдмин3,Дата1)
    НоваяЗадача = Задачи.Задачи.СоздатьЗадачу();
    НоваяЗадача.Наименование = "Установить сотруднику " + ФИОСотрудника + " процент за процедуру " + Процедура1 + ", за  дату " + Формат(Дата1,"ДЛФ=DD");
    НоваяЗадача.Записать();
КонецПроцедуры
1 VikingKosmo
 
06.11.15
16:29
И где в (0) создается вообще хоть какая то форма?!
2 vlasabo
 
06.11.15
16:31
(1) не правильно выразился. Создается не форма, конечно, создается задача. Вопрос в том,  как при последующем открытии этой программно созданной задачи открыть нужную форму?
3 VikingKosmo
 
06.11.15
16:32
(2) ОткрытьФорму(). Всегда Ваш, К.О.
4 vlasabo
 
06.11.15
16:40
(3)
-На форме по умолчанию нет поля реквизита Рекв.
-Программно создаем задачу, заполняем реквизит Рекв.
-Пользователь открывает из клиента задачу, открывается форма по умолчанию - на котором нет поля реквизита Рекв и он его не видит. Вопрос: как при открытии пользователем задачи разграничить когда какую форму открывать?
5 VikingKosmo
 
06.11.15
16:46
(4) вариантов масса:
Открывать нужную форму программно.
Воспользоваться событием ОбработкаПолученияФормы
Придумать, что то еще...
6 vde69
 
06.11.15
16:48
в форме задачи "по умолчанию":


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ОткрыватьМодально = МодальныйРежим;
    
    // сначало проверим для вложеных БП, если есть - вообще форму не покажем
    Если Ссылка.ТочкаМаршрута <> Неопределено Тогда
        Если Ссылка.ТочкаМаршрута.Вид = ВидТочкиМаршрутаБизнесПроцесса.ВложенныйБизнесПроцесс Тогда
            Отказ = Истина;
            // здесь можно сделать открытие формы вложеного БП, или списка текущих задачь по вложеному БП
            Возврат;
        КонецЕсли;                                            
    КонецЕсли;                                            
    
    // проверим, что нельзя двигать процесс если есть пред обработка (0-уровень)
    Если  (ТипЗнч(Ссылка.ГлавныйБП) = Тип("БизнесПроцессСписок.ВедениеПоручений"))
        И (Константы.ИспользоватьПредварительныйКонтроль.Получить() = Истина)
        И (Константы.ГруппаАдресацииПервойЛинии.Получить() = Ссылка.Адресат) тогда
        
        Предупреждение("Используется режим предварительной оценки. Используйте быструю переадресацию");
        Отказ = Истина;
        СтандартнаяОбработка = Ложь;
        Возврат;
    КонецЕсли;
    
    АльтернативнаяФорма = Неопределено;
    Попытка
        Если ВидЗадачи = Перечисления.ВидЗадачи.Уведомление И ЗначениеЗаполнено(Сделка) Тогда
            
            АльтернативнаяФорма = Сделка.ПолучитьФорму();
            
        ИначеЕсли ВидЗадачи = Перечисления.ВидЗадачи.Уведомление И НЕ ЗначениеЗаполнено(Сделка) Тогда
            
            АльтернативнаяФорма = Ссылка.ПолучитьФорму("ФормаУведомленияМинимальногоОстатка", ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
            
        ИначеЕсли ВидЗадачи = Перечисления.ВидЗадачи.ПоБизнесПроцессу Тогда
            
            // ВНИМАНИЕ!!! данный алгоритм возможно надо будет переделать, сравнение строк не надежно,
            // возможно совпадение с названиями в будующих БП
            Попытка
                АльтернативнаяФорма = Ссылка.ПолучитьФорму(СокрЛП(Ссылка.ТочкаМаршрута.Имя), ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
            Исключение
                АльтернативнаяФорма = Неопределено;
            КонецПопытки;
            
            // позможно есть форма по умолчанию для этого БП
            Если АльтернативнаяФорма = Неопределено Тогда
                Если БизнесПроцесс.Метаданные().Имя = "ИсполнениеПоручений" Тогда
                    АльтернативнаяФорма = Ссылка.ПолучитьФорму("ОсновнаяДляБПИсполнениеПоручений", ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
                ИначеЕсли БизнесПроцесс.Метаданные().Имя = "СогласованиеПоручений" Тогда
                    АльтернативнаяФорма = Ссылка.ПолучитьФорму("ОсновнаяДляБПСогласованиеПоручений", ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
                ИначеЕсли БизнесПроцесс.Метаданные().Имя = "ВедениеПоручений" Тогда
                    АльтернативнаяФорма = Ссылка.ПолучитьФорму("ОсновнаяДляПоручений", ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
                КонецЕсли;        
            КонецЕсли;       
            
            Если АльтернативнаяФорма = Неопределено Тогда
                АльтернативнаяФорма = ГлавныйБП.ПолучитьФорму();
            КонецЕсли;
            
        ИначеЕсли ВидЗадачи = Перечисления.ВидЗадачи.ПоДокументу
            И БизнесПроцесс.Метаданные().Имя = "СогласованиеДопЗатрат" Тогда    
            АльтернативнаяФорма = Ссылка.ПолучитьФорму("ОсновнаяДляЗаполненияДопЗатрат", ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);

        ИначеЕсли ВидЗадачи = Перечисления.ВидЗадачи.ПоДокументу Тогда
            
            АльтернативнаяФорма = ГлавныйБП.ДокументСогласования.ПолучитьФорму();
            
        КонецЕсли;
    Исключение
        АльтернативнаяФорма = Неопределено;
    КонецПопытки;
    
    Если АльтернативнаяФорма <> Неопределено Тогда
        // есть специальная форма, надо работать с ней    
        АльтернативнаяФорма.ТолькоПросмотр = ТолькоПросмотр;
        Если ОткрыватьМодально Тогда
            АльтернативнаяФорма.ОткрытьМодально();
        Иначе
            АльтернативнаяФорма.Открыть();
        КонецЕсли;
        Отказ = Истина;
        СтандартнаяОбработка = Ложь;
        Возврат;
    КонецЕсли;
КонецПроцедуры
7 vlasabo
 
06.11.15
16:52
(6) суть я уловил, спасибо, но в (0) указано что задача вообще к БП отношения не имеет
8 vlasabo
 
06.11.15
16:54
(5) благодарю, пошел читать про ОбработкаПолученияФормы.
Открывать форму программно - вы имеете ввиду отключить стандартное получение формы и написать своё, я правильно понял?
9 VikingKosmo
 
06.11.15
16:54
(8) да
10 Гёдза
 
06.11.15
16:55
Сначала нужно определить по какому признаку мы должны понимать какую форму открывать
11 VikingKosmo
 
06.11.15
16:55
(6) ТС вроде написал 8.3, что подразумевает УФ. О каком тогда ПередОткрытием() может идти речь?
12 vlasabo
 
06.11.15
16:56
(10) в моём случае можно по ЗначениеЗаполнено(НужныйРеквизитКоторыйЕстьВОднойФормеНоНетВДругой)
13 vlasabo
 
06.11.15
17:49
Эх, ОбработкаПолученияФормы у нас в модуле менеджера, а оттуда заполнен реквизит или нет я никак не могу посмотреть. Буду думать дальше
14 almar
 
06.11.15
17:53
(0) Например, так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
Если ТипЗнч(Объект.Предмет)=Тип("ДокументСсылка.ЗадачиМаркетинг") Тогда
Отказ=Истина;
Пар=Новый Структура("Ключ",Объект.Предмет);
ОткрытьФорму("Документ.ЗадачиМаркетинг.Форма.ФормаДокумента",Пар);
КонецЕсли;

КонецПроцедуры
15 VikingKosmo
 
06.11.15
17:54
(14) за такое руки надо по колено отрывать...
16 vlasabo
 
06.11.15
18:27
(14) я чего-то если честно не понял как это должно работать (и в моих реалиях не работает):
Понятно было бы еслиб надо было выдать форму выбора или форму списка с отбором по параметру, но как открыть так форму элемента - я не понимаю.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший