Имя: Пароль:
1C
1С v8
Открыть новый экземпляр формы
0 KuJIT
 
23.01.14
17:09
Вечер добрый. Подскажите пожалуйста, как открыть новый экземпляр формы? Код такой:

Процедура ПереходНаФорму(ИмяНовойФормы, ПараметрыНовойФормы = 1)    
        Ответ =  Вопрос("Сохранить изменения?", РежимДиалогаВопрос.ДаНетОтмена);
        Если Ответ = КодВозвратаДиалога.Да Тогда
            // сохранить изменения
        ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
            //соответственно, не сохранять изменения
        КонецЕсли;
        Если Ответ <> КодВозвратаДиалога.Отмена Тогда
            ФФ = ПолучитьФорму(ИмяНовойФормы);
            ЭтаФорма.Закрыть();
            ФФ.НомерСтраницы = ПараметрыНовойФормы;
            ФФ.Открыть();
        КонецЕсли;
        

        
    //и по отмене ничего не делать
КонецПроцедуры


Если открываю другую форму (не ту, в которой процедура), то все ОК. Иначе "открывается" Этот же экземпляр формы и тут же закрывается. Т.е. результат не достигается.
Есть мысл, что ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>) с <Уникальность> не по умолчанию может помочь, но с ОткрытьФорму (с передачей параметров) как-то не сладил я. Если есть вариант модифицировать вариант открытия из моей процедуры для нужного эффекта, то подскажите, пожалуйста.
1 Euguln
 
23.01.14
17:17
Придется таки сладить с передачей параметров, ибо <Уникальность> - твое все.
А что с параметрами не так?
2 KuJIT
 
23.01.14
17:20
УправляемаяФорма (ManagedForm)
Открыть (Open)
Синтаксис:

Открыть()
Описание:

Открывает форму и делает ее окно активным.

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

Тонкий клиент, веб-клиент, толстый клиент.
Примечание:

В управляемом приложении не следует выполнять программное открытие и закрытие одной и той же формы в одном вызове встроенного языка.

А с парамтрами чего-то неробит. Создал параметр, в модуле в подсказке после точки он высвечивается, а при работе пишет что-то в роде "Нет такого параметра"
3 KuJIT
 
23.01.14
17:20
(1) Какое конкретно значение для <Уникальность нужно устанавливать?>
4 Euguln
 
23.01.14
17:33
(3) Например Новый УникальныйИдентификатор
(2) Как создал? В управляемой параметры только на сервере доступны.
5 KuJIT
 
23.01.14
17:39
http://hostingkartinok.com/show-image.php?id=b0af8141bec398206fdebe0775be4311

&НаКлиенте
Процедура ИнкДек(Команда)
    //дляостанов = 1;
    ПараметрыДляФормы = Новый Структура("НомерСтраницы",?(Команда.Действие = "ПредСтр",НомерСтраницы - 1, НомерСтраницы + 1));
    
    ПереходНаФорму("ВнешняяОбработка.МедкнижкаПечать.Форма.Форма1", ПараметрыДляФормы);
    
КонецПроцедуры



&НаКлиенте
Процедура ПереходНаФорму(ИмяНовойФормы, ПараметрыНовойФормы = Неопределено)    
        Ответ =  Вопрос("Сохранить изменения?", РежимДиалогаВопрос.ДаНетОтмена);
        Если Ответ = КодВозвратаДиалога.Да Тогда
            // сохранить изменения
        ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
            //соответственно, не сохранять изменения
        КонецЕсли;
        Если Ответ <> КодВозвратаДиалога.Отмена Тогда
            //ФФ = ПолучитьФорму(ИмяНовойФормы);
            //ФФ.НомерСтраницы = ПараметрыНовойФормы;
            //ФФ.Открыть();
            //ЭтаФорма.Закрыть();
            ОткрытьФорму(ИмяНовойФормы, ПараметрыНовойФормы, ЭтаФорма, Истина);
            
        КонецЕсли;
        

        
    //и по отмене ничего не делать
КонецПроцедуры
6 KuJIT
 
23.01.14
17:42
Собственно ошибка

{Форма.Форма1.Форма(13)}: Поле объекта не обнаружено (НомерСтраницы)
    Макет = Объект1.ПолучитьМакет("Страница"+Параметры.НомерСтраницы);

На функцию

&НаСервере
Функция ПолучитьМакетНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    Объект1 = РеквизитФормыВЗначение("Объект");

    Макет = Объект1.ПолучитьМакет("Страница"+Параметры.НомерСтраницы);
    ТабДок.Вывести(Макет);
    //ТабДок.
    Возврат ТабДок;
КонецФункции

Может я к параметру неправильно обращаюсь? Или галочку какую надо?
7 KuJIT
 
23.01.14
17:46
Хотя, как вариант, нафиг мне форму перезапускать? Табличный документ менять и все. Сразу как-то не подумал. Но для общего развития хотелось бы узнать, в чем косяк зарыт.
Программист всегда исправляет последнюю ошибку.