Имя: Пароль:
1C
1С v8
Вызов Вопрос почему-то меняет Модифицированность формы
,
0 User260717
 
26.06.17
06:45
Доброе время суток!

1С 8.3, обычная (не управляемая)) форма. В обработчике ОсновныеДействияФормы уже после вызова ЗаписатьВФорме() пользователю задается Вопрос(). Если верить отладчику, после вызова этой функции почему-то меняется Модифицированность формы и, следовательно, пользовтаелю задается соответствующий вопрос: "данные были изменены. сохранить изменения". Почему так происходит? Результат вызова функции Вопрос до этого никуда не сохранялся, потом переделал в локальную переменную - ничего не изменилось.
1 PRESTIGE
 
26.06.17
07:01
А что в коде по ответу происходит? Можно код? Либо смотреть что там после записи происходит, возможно что то меняется. Подписка на события может какая висит
2 User260717
 
26.06.17
07:07
(1)
ЗаписатьВФорме();
Пока Драйвер.ПечатьКопииПоследнегоЧека() <> 0 Цикл
    Если Драйвер.Результат = -3807 Тогда
        // Здесь форма не модифицирвоана
        Ответ = Вопрос("Кончилась чековая лента. Заправьте и нажмите Ок.", РежимДиалогаВопрос.ОК);
    // Почему-то после вызова Вопрос() форма помечается модифицированной
        // Пока принудительно вызываю повторную запись
    ЗаписатьВФорме();
    Продолжить;
    КонецЕсли;
    Сообщить(СтрШаблон("При печати копии чека произошла ошибка с кодом %1 %2",
    Драйвер.Результат, Драйвер.ОписаниеРезультата));
    Прервать;
КонецЦикла;
3 Рэйв
 
26.06.17
07:10
(0)может Ответ у тебя  реквизит?
4 PRESTIGE
 
26.06.17
07:10
При вызове ЗаписатьВФорме() срабатывает функция ПослеЗаписи. Глянь что там происходит, может там что то меняется и ставится модифицированным
5 PRESTIGE
 
26.06.17
07:11
Ну и да глянь теорию Рейва, тоже очень здравая мысль
6 User260717
 
26.06.17
07:23
(3) До этого оно никуда не записывало результат и строка выглядела вот так:

Вопрос("Кончилась чековая лента. Заправьте и нажмите Ок.", РежимДиалогаВопрос.ОК);

С этого и начались мои поиски источника проблемы. Т.е. переменную Ответ я добавил в надежде, что это решит проблему.

(4) ПослеЗаписи не используется. Есть ПриЗаписи, там идет запись в регистр сведений. После первого вызова ЗаписатьВФорме(), который не подсветился как код во втором сообщении, Модифицированность() возвращает ложь. И если вход в цикл не происходит, форма закрывается без лишних вопросов.
7 Имитация работы
 
26.06.17
07:33
(6) Включи замер производительности. Он покажет тебе все выполненное.
8 User260717
 
26.06.17
07:54
(7) При использовании толстого клиента имеет смысл?
9 Рэйв
 
26.06.17
07:56
(8)Особенно при тостом и имеет.Потому как там есть ОбновлениеОтображения.
10 Имитация работы
 
26.06.17
07:57
(8) Ессно. Вдруг у тебя какой обработчик ожидания успевает сработать.
11 RomaH
 
naïve
26.06.17
08:04
(0) а в обычных формах у кнопки нет флага "Изменяет данные"?
12 RomaH
 
naïve
26.06.17
08:10
и разве можно модифицированность формы кроме как "Модифицированность = Истина"
через код установить?
13 User260717
 
26.06.17
09:43
(7) Включил. Получил список строк кода, так скажем, с временем их выполнения, отсортированных по их вкладу в общее время. Как посмотреть в хронологическом порядке, чтобы увидеть, не происходило ли чего в это же время? Или я его как-то не так готовлю?

(11) Есть такой флаг. Но это логично, как мне кажется. И вряд ли он меняет Модифицированность в процессе выполнения обработчика нажатия этой кнопки.

(12) Не вижу в коде формы аналогичных присвоений. Если шагать отладчиком, а в табло вывести результат ЭтаФорма.Модифицированность(), то до выполнения строки с Вопрос() оно равно Ложь, после - Истина.
14 RomaH
 
naïve
26.06.17
09:48
(13) молодец, а теперь включаем мозг
15 RomaH
 
naïve
26.06.17
09:49
(13) этот флаг как раз и отвечает за то, что бы "Модифицированность = Истина" в коде не писать

и только за это
16 User260717
 
26.06.17
09:55
(15) Заменил ЗаписатьВФорме() на Модифицированность = Ложь. Так как незаписанных данных быть на этом этапе уже не должно. Вопрос-то не про то был. Какого лешего этот флаг устанавливается после вызова Вопрос()? Чтобы впоследствии на такие грабли не наступать.
17 RomaH
 
naïve
26.06.17
10:48
"Есть такой флаг. Но это логично, как мне кажется. И вряд ли он меняет Модифицированность в процессе выполнения обработчика нажатия этой кнопки. "

так флаг сними
18 User260717
 
27.06.17
02:04
(9) Спасибо, добрый человек. Это было именно обработчик ОбновлениеОтображения(). Я, правда, так и не увидел, как его вызов можно было увидеть в Замере производительности (буду разбираться, как им пользоваться), но в итоге его нашел. Т.е. при вызове Вопрос() срабатывает ОбновлениеОтображения().

(17) Отличный совет=) ни на что не повлияло. Т.е. после вызова Вопрос() Модифицированность() снова возвращает Истину. Так еще и поломало обработку формой свойства ТолькоПросмотр для этой кнопки. Т.е. если раньше вне зависимости от обсуждаемого блока кода кнопка становилась недоступной, то теперь нет:

https://its.1c.ru/db/metod8dev/content/2221/hdoc

Всем большое спасибо, вопрос исчерпан.