|
Вызов Вопрос почему-то меняет Модифицированность формы | ☑ | ||
---|---|---|---|---|
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 Всем большое спасибо, вопрос исчерпан. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |