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