Имя: Пароль:
1C
1С v8
v8: Модифицированность формы программно измененного объекта
0 Roman Go
 
09.09.11
10:30
Нахожу запросом документ, получаю его объект, изменяю табл.часть, открываю

но в форме не стоит указателя ее модифицированности и ее можно просто закрыть, не выдастся окно "записать?"

как сделать чтобы форма открывалась модифицированная?
1 forforumandspam
 
09.09.11
10:32
Заполнять тогда в форме, а не в объекте.
2 Roman Go
 
09.09.11
10:37
Форма = Док.ПолучитьФорму("ФормаДокумента",ЭтаФорма);
Форма.Модифицированность = истина;
Форма.ДокументОбъект.Комментарий = "1";
Форма.Комментарий = "2";
Форма.ОткрытьМодально();
Форма.Модифицированность = истина;


форма не модифицированная открывается
3 Roman Go
 
09.09.11
10:43
причем когда создаю документ он открывается модифицированным, а найденный и измененный открывается не модифицированным... проблема
4 Defender aka LINN
 
09.09.11
10:44
(2) Форма.ОткрытьМодально();
Форма.Модифицированность = истина;
Молодец.
5 Сергей Д
 
09.09.11
10:45
Интересные дела происходят... Вот код:
МойДокумент=Документы.ДокументыКонтрагентов.НайтиПоНомеру("000000001");
МойОбъект=МойДокумент.ПолучитьОбъект();
МойОбъект.Наименование=МойОбъект.Наименование+"1";
МояФорма=МойОбъект.ПолучитьФорму();
МояФорма.Открыть();
Форма открывается в самом деле без звездочки и закрывается без запроса. НО! Смотрю в отладчике:
МояФорма.ДокументОбъект.Модифицированность() = ИСТИНА
МояФорма.Модифицированность = ИСТИНА
6 Roman Go
 
09.09.11
10:50
(4) я эту модифицированность вставлял уже чуть ли не через каждую строчку кода, в надежде, что форма поведет себя так как будто она фодифицирована, но проблема в том, что она реально модифицирована
7 Сергей Д
 
09.09.11
10:53
Что обычная форма, что управляемая - одинаково.
8 Сергей Д
 
12.09.11
13:16
Провел еще один эксперимент. Вот код:
Процедура ПриНачалеРаботыСистемы()
   МойДокумент=Документы.ДокументыКонтрагентов.НайтиПоНомеру("000000001");
   МойОбъект=МойДокумент.ПолучитьОбъект();
   МойОбъект.Наименование=МойОбъект.Наименование+"АБВ";
   МояФорма=МойОбъект.ПолучитьФорму();
//    МояФорма.Модифицированность=истина;

   Сообщить("ПриНачалеРаботыСистемы");
   Сообщить(МойОбъект.Модифицированность());
   Сообщить(МояФорма.Модифицированность);

   МояФорма.Открыть();
КонецПроцедуры

Модуль формы:
Перем ФормаМодифицирована;

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   Сообщить("ПередОткрытием");
   Сообщить(ЭтотОбъект.Модифицированность());
   Сообщить(ЭтаФорма.Модифицированность);

   ФормаМодифицирована=ЭтаФорма.Модифицированность;
КонецПроцедуры

Процедура ПриОткрытии()
   Сообщить("ПриОткрытии");
   Сообщить(ЭтотОбъект.Модифицированность());
   Сообщить(ЭтаФорма.Модифицированность);

   ЭтаФорма.Модифицированность=ФормаМодифицирована;
КонецПроцедуры

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
   Сообщить("ПередЗакрытием");
   Сообщить(ЭтотОбъект.Модифицированность());
   Сообщить(ЭтаФорма.Модифицированность);
КонецПроцедуры

При запуске получаем следующую последовательность сообщений:
ПриНачалеРаботыСистемы
Да
Да
ПередОткрытием
Да
Да
ПриОткрытии
Да
Нет
Т.е. при открытии формы признак ее (и только ее) модифицированности сбрасывается. И все встает на место, если перед открытием его запомнить, а при открытии - переприсвоить.
9 Defender aka LINN
 
12.09.11
13:39
(8) Ну открывай не модально.
10 Сергей Д
 
12.09.11
13:44
(9) Так я и открываю не модально.
Ошибка? Это не ошибка, это системная функция.