Имя: Пароль:
1C
1С v8
Как открыть не типовую форму (УФ)
0 said52
 
29.10.13
13:41
Добрый день, есть некий бизнес-процесс (конфа самописная) в нем задача, в зависимости от этапа выполнения БП нужно создавать необходимые задачи, для каждой задачи я прорисовал свою форму, пока их 3. Вот собственно и проблема в том что никак не могу добиться того что бы открывать нужную форму для нужной задачи.
Использую метод
ПолучитьФорму("Задача.Задача.Форма.ФормаТестированияПАТ")
но он возвращает мне пустую форму, думал в пустую форму присвоить основной реквизит из Основной формы (которая задана по умолчанию), но выдает ошибку. Пытался и крутил разные комбинации в событиях ПриСозданииНаСервере и ПриОткрытии. Пока без результатно.
Подскажите, как правильно реализовать ?
Заранее большое спасибо!
1 said52
 
29.10.13
13:44
Пробовал писать так.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.ТестироватьВПАТ Тогда
        ОбъектЗадача = Объект.Ссылка.ПолучитьОбъект();
        Форма = ОбъектЗадача.ПолучитьФорму("Задача.Задача.Форма.ФормаЗадачи");
    ИначеЕсли Объект.ВернутьНаДоработку Тогда
        //Форма = Задачи.Задача.ПолучитьФорму("ФормаЗадачи");
        //Форма.Открыть();
    Иначе
        //Форма = Задачи.Задача.ПолучитьФорму("ФормаРелиз");
        //Форма.Открыть();
    КонецЕсли
КонецПроцедуры
Если пишу через получение объекта то переменная Фомра = Неопределенно.
Если писать так:
&НаСервере
Если Объект.ТестироватьВПАТ Тогда
        Форма = ПолучитьФорму("Задача.Задача.Форма.ФормаЗадачи");
    ИначеЕсли Объект.ВернутьНаДоработку Тогда
Ошибка "Процедура или функция с указанным именем не определена"
2 Euguln
 
29.10.13
13:45
(0) Обычное приложение?
3 banco
 
29.10.13
13:46
(0) посмотри обработчик ОбработкаПолученияФормы
4 Euguln
 
29.10.13
13:48
Что в СП непонятного написано?

ПолучитьФорму (GetForm)
Синтаксис:

ПолучитьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>)

<Параметры> (необязательный)

Тип: Структура.
Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра структуры.
П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);
Форма.Открыть();


Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
5 said52
 
29.10.13
15:01
Еще пробую писать уже на клиенте.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Если Объект.ТестироватьВПАТ Тогда
        Форма = ПолучитьФорму("Задача.Задача.Форма.ФормаТестированияПАТ");
        Форма.Объект = ЭтаФорма.Объект;
        Форма.Открыть();
    ИначеЕсли Объект.ВернутьНаДоработку Тогда
        //Форма = Задачи.Задача.ПолучитьФорму("ФормаЗадачи");
        //Форма.Открыть();
    Иначе
        //Форма = Задачи.Задача.ПолучитьФорму("ФормаРелиз");
        //Форма.Открыть();
    КонецЕсли
КонецПроцедуры
Идея присвоить основной реквизит другой форме, пишет ошибку: "Нельзя изменять поле, содержащее объект данных формы"
Еще были мысли получить нужную пустую форму, и потом обойти реквизиты формы и заполнить их, На сервере пишу стандартная обработка = Ложь, но всеравно открывает мне 2 формы одну основную и ту которую получил и заполнил реквизиты.
6 Dethmont
 
29.10.13
15:04
Ключевое слово - <Параметры>
7 said52
 
29.10.13
15:09
Приложение управляемое.

СП читал, но не могу понять что имеется в виду под параметрами, что там должно быть, можешь написать?
8 Euguln
 
29.10.13
15:20
(7) Что непонятного в этой конструкции:

П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);
Форма.Открыть();

А?
9 said52
 
29.10.13
16:34
Если параметр необязательный, для чего он используется, имя ключа должно равнятся какому реквизиту формы, или чеу оно должно быть равно? Какое значение должно быть в "Поставщик" ?
10 Euguln
 
29.10.13
16:35
(9) OMG
ОбъектЗадача.ПолучитьФорму("Задача.Задача.Форма.ФормаЗадачи", Новый Структура("Ключ", Объект.Ссылка));
11 said52
 
29.10.13
16:37
За подсказку спасибо а ответ на вопрос для чего структура я так и не увидел.
12 Euguln
 
29.10.13
16:39
(11) OMG
Чтобы параметры в форму передавать ... ть.
13 said52
 
29.10.13
22:59
Проверил, не работает, ФормаЗадачи = Неопределено
        Если Объект.ТестироватьВПАТ Тогда
        ОбъектЗадача = Объект.Ссылка.ПолучитьОбъект();
        ФормаЗадачи = ОбъектЗадача.ПолучитьФорму("Задача.Задача.Форма.ФормаЗадачи", Новый Структура("Ключ", Объект.Ссылка));
    ИначеЕсли Объект.ВернутьНаДоработку Тогда

    Иначе

    КонецЕсли
что еще можно попробовать?
14 olegves
 
29.10.13
23:31
(13) посмотри, как в документообороте реализовано у 1С
15 olegves
 
29.10.13
23:33
+ (14) а вообще идея такая:
1. передаешь нужные параметры в команду открытия формы
2. в самой форме в процедуре ПриСозданииНаСервере обрабатываешь эти параметры и заполняешь форму, как тебе надо
16 said52
 
29.10.13
23:34
Попробую ответить, может еще кому будет полезно. Если надо открыть не основную форму с уже заполненными данными пишите:  
        ОткрытьФорму("Задача.Задача.Форма.ФормаТестированияПАТ", Новый Структура("Ключ", Объект.Ссылка));
где ФормаТестированияПАТ - имя не основной формы, В структуре мы передаем ссылку на тот элемент который хотим открыть, еще хотел обратить внимание что это конструкция для существующей формы.
Теперь возникла проблема, открываются сразу 2 формы. Основная и дополнительная.
Пробовал писать:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
КонецПроцедуры
но ничего не помогло. Как избавиться от открытия основной формы?
17 olegves
 
29.10.13
23:36
(0) получить форму не используй - вместо этого - Открыть форму.
Когда ты получаешь форму, у тебя еще до получения выполняется процедура ПриСозданииНаСервере, поэтому в полученной форме трудно что-то менять
18 grayshadow
 
29.10.13
23:41
ОбъектЗадача = Объект.Ссылка.ПолучитьОбъект();
йоптель, так же и убить можно:)))
19 grayshadow
 
29.10.13
23:45
а по теме - имеет место глобальное непонимание: у бизнес-процесса в конфигураторе указывается ОДНА задача, каким образом ТС собрался вязать 3?
20 said52
 
29.10.13
23:56
Задача то одна, но в определенных местах выполнения БП нужно показывать форму только с определенными реквизитами.
А что не так с: ОбъектЗадача = Объект.Ссылка.ПолучитьОбъект(); ?? )))))))
21 said52
 
29.10.13
23:59
кажись дошло чего открывается 2 формы сразу, надо писать проверку в событии "Выбор" формы списка задач, там анализировать какой реквизит заполнен и какую форму надо открывать, а не в событии при открытии основной формы.
Как проверю - отпишусь.
22 grayshadow
 
30.10.13
00:04
ОбъектЗадача = Объект.Ссылка.ПолучитьОбъект() - получает НОВЫЙ объект, ни фига не тождественный ОбъектЗадача
23 grayshadow
 
30.10.13
00:04
* то есть не тождественный Объекту
24 grayshadow
 
30.10.13
00:06
(21) так да, если вы из ПрисозданииНасервере звали другую форму, то откроется и вызванная, и основная
Отказ = Истина спасет:)
Основная теорема систематики: Новые системы плодят новые проблемы.