1с закрыть форму без вопроса о сохранении
При закрытии формы обработки требуется задавать пользователю вопрос, действительно ли нужно закрыть форму. Сейчас это реализовано через обработчик события ПередЗакрытием() и реквизит формы типа Булево – пользователь пробует закрыть форму, обработчик смотрит в переменную, и если она Ложь – отменяет закрытие и задает пользователю вопрос. Если пользователь дает положительный ответ, реквизит формы устанавливается в Истина и форма принудительно закрывается через Закрыть(); в этот раз ПередЗакрытием() видит, что реквизит – Истина, и не блокирует закрытие.
Проблема в том, что эта схема мешает закрытию приложения, если пользователь закрывает не форму обработки отдельно, а все приложение целиком. При этом вызывается то же самое событие ПередЗакрытием(), которое, фактически, всегда отказывается закрывать форму. В итоге форма будет, конечно, закрыта, если пользователь положительно ответит на вопрос, но приложение уже не закроется, т.к. при первом прохождении через ПередЗакрытием() форма отказалась закрываться.
Стандартное поведение форм (например, при изменении данных справочника) более правильное – в них положительный ответ на вопрос о сохранении измененных данных приводит к закрытию приложения. Как добиться такого эффекта самостоятельно?
(1) bytecoded, поставить таймаут на вопрос,
если юзверь на вопрос не ответил, значит форму закрывать.
(2) Boneman, не очень понял. Чем тут поможет таймаут? Пользователь не медлит, он открыл проблемную форму, потом тыкает закрыть приложение – форма спрашивает о закрытии – он подтверждает. Форма закрывается, а приложение – нет.
Если по крестику захочет закрыть, то что-то типа этого: создаем переменную и присваиваем ей Неопределено. Переводим ее в истину, если нажали "Да" и в ложь, если "Нет". Перед закрытием проверяем
(5) RocKeR_13, к сожалению, в этой задаче модальные варианты неприемлемы.
(6) dj_serega, оно действительно не критично, но глаз цепляется :)
(4) SerLeon, (7) herfis – понял. Спасибо!
(1) bytecoded, Без использования модальности - не представляю как. И я подозреваю, что системные окошки тоже модальные.
По поводу модуля управляемого приложения нужно сделать ещё одно замечание. Возможно, вы захотите организовать немодальный диалог с пользователем в обработчике ПередНачаломРаботыСистемы. Так, чтобы до момента ответа пользователя не открывалось главное окно приложения. К сожалению, на момент написания статьи, такой возможности нет. И в этом случае вам придётся выбрать другую логику работы прикладного решения.
Например, в конфигурации есть форма, перед закрытием которой также задаётся вопрос пользователю в немодальном диалоге. Допустим, пользователь модифицировал данные в этой форме и, не сохраняя их, пытается закрыть всё приложение. В результате он ответит что-то в диалоге перед закрытием формы, форма закроется, но приложение останется открытым. Так происходит потому, что в немодальном диалоге перед закрытием формы сначала отменяется стандартная последовательность действий системы (см. пример). А это, в том числе, отменяет и закрытие самого приложения.
Получается, что пока никак не сделать. Хотя может я не в курсе.
Ошибка в ващем сообщеении:
ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект);
// Инициализируется "ОписаниеОповещения "
ПоказатьВопрос(ОписаниеОповещенияОЗавершении, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
// Потом используется"ОписаниеОповещенияОЗавершении"
Сейчас добавили параметр:
Тип: Булево.
В данный параметр передается признак того, что форма закрывается в процессе завершения работы приложения:
Истина - если в процессе завершения приложения; Ложь - если закрывается только форма.
Модифицированность (Modified)
Использование: Чтение и запись.
Описание: Тип: Булево. Признак изменения (модифицированности) данных в форме.
Модифицированность отображается символом (*) в заголовке окна формы.
Истина - изменена.
Похожие FAQ
1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое База 1С при запуске уходит в дамп и вылетает 1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C 3
При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки :( Путем тестов было вяснено, что проблема Загрузка картинок в базу 1С (сохранение в хранилище значений) 8
В теме форма: v8: Получение данных из ХралищаЗначений Bell в управляемом интерфейсе пробует сохранить выбранные картинки в базу 1С, но возникли сложности с сохранением в хранилище значений. как пример Bell приложил CF файл с мини конфигурацией, Запись во внешний источник данных из 1С 8.2 3
Начиная с платформы 8.2.14 в 1С появилась коллекция " Внешние источники данных ". Использование объектов этой коллекции позволяет работать с внешними данными через ODBC. Стандартные механизмы платформы позволяют просматривать данные и использовать и Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Модифицированность (Modified)
Использование: Чтение и запись.
Описание: Тип: Булево. Признак изменения (модифицированности) данных в форме.
Модифицированность отображается символом (*) в заголовке окна формы.
Истина - изменена.
Похожие FAQ
1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Автоматическая установка ширины колонки табличного документа. 0
Процедура, которая " примерно" делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего: Процедура РасчетШириныКолонок(Табличный Активация открытой книги Excel для корректировки 0
Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять. Ниже код, который данную задачу решает. Попытка Эксель = Неопределено; Книга = Неопределено; Лист = Неопределено; Состояние(" Выполняется База 1С при запуске уходит в дамп и вылетает 1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window База для Разработки или Рабочая? Как быстро определить? 4
Когда-то я работал консультантом SAP . В SAPe есть настройка изменения цвета главного окна программы и у нас было негласное правило: Рабочая программа - Красный фон , Тестовая - Зеленый , Разработка - Синий . Работая в 1С, всегда открыто по 5-6 Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
В управляемых формах 1С v8.3 не всё так просто, как было в обычных формах и, зачастую, требуются более сложные действия, чтобы выполнить «простейшее» для «старого» интерфейса действие.
Как это было в обычных формах:
Меню «Окна\Закрыть всё» …. и всё — все окна моментально закрыты! (кроме случаев когда есть модифицированность формы, либо есть обработчик запрещающий закрытие либо закрытие без подтверждения)
Теперь же у нас передовая технология «Такси» — «потому что быстрая»).
Цепочка действий
Выходим в меню/Окна/Все окна (уже 3 нажатия, но это еще не всё)
Часть вторая «Сдвинуть мышь вправо, найти кнопку «Закрыть окна» и нажать, …… и нет не всЁ. Потому что закроется только одно выделенное — текущее окно.
Нажимаем «Выделить все» — это если горячими клавишами «Ctrl+A», либо встать на верхний и через Shift и движением стрелкой вниз выделить все (все строки должны стать желтыми), а любителям мышкой, никак…. только по одному
Затем уже нажимаем «Закрыть окна» и ….. интерфейс поворочался 2-3 секунды, но закрыл окна.
Остались в списке два окна и окно диалога не закрылось — еще одно лишнее действие по его закрытию.
Программное закрытие всех форм
Окна = ПолучитьОкна();
Для Каждого Окно Из Окна Цикл
Если Не Окно.Основное Тогда
Для каждого Форма из Окно.Содержимое Цикл
Форма.Закрыть();
КонецЦикла;
КонецЕсли;
КонецЦикла;
Этот код закроет все окна кроме файлов созданных средствами 1С: текстовых,табличных документов, открытых через Показать() .
С версии 8.3.8 при закрытии нельзя вызывать серверные процедуры, данный вариант закрытия всех ПередЗавершениемРаботыСистемы в приложении не позволяет обойти ошибку.
Резюме:
Посчитайте сами: сколько лишних действий по банальному закрытию всех окон.
В некоторых случаях будет достаточно несколько раз нажать «Esc» и окна последовательно закроются, но это тоже не 3 клика.
Я не удивлюсь, что есть «волшебная» команда, которая позволяет, это сделать быстрее, но даже если она и существует, то не «интуитивно» понятна — и не на поверхности, как должна быть в «совершенном» интерфейсе.
Как описываются машины в рекламных проспектах? Волнующие, эффектные, изящные, грациозные, обтекаемой формы. Прямо не знаешь, куда их вести — в гараж или в номер мотеля.
— Роберт Орбен
В этом небольшом приложении к онлайн курсам 1С:Бухгалтерия я обращу ваше внимание на один маленький момент, почему-то вводящий в заблуждение и смущающий большинство начинающих пользователей программы 1С Бухгалтерия.
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
Предложение сохранить уже записанный / проведённый документ
Если в строке заголовка документа или редактируемой в отдельном окне записи появилась звёздочка "*", то это стандартный указатель на то, что запись была изменена. Пример показан на рисунке выше (см. в строку заголовка окна).
Если попытаться закрыть окно при помощи Esc, крестика или кнопки Отмена, то в таком случае программа спросит, сохранять ли внесённые изменения, и предложит три варианта ответа:
- Да — сохранить и закрыть;
- Нет — закрыть без сохранения;
- Отмена или крестик — ничего не делать и не закрывать окно.
Предложение сохранить изменённый документ совершенно нормально. И если вы его действительно меняли и хотите это сохранить, то следует нажать Да. Однако в некоторых случаях вы не планировали изменять документ и вроде бы и ничего в нём не меняли, но документ всё равно считается изменённым (звёздочка в заголовке) и при закрыть окно всё равно появляется предупреждение.
Связано это с тем, что именно 1С считает за изменение документа. Если изменить значение какого-либо поля, а потом вернуть его обратно, то документ всё равно будет считаться изменённым; если не вернуть, то тем более. Не буду вдаваться в подробности, почему так происходит — пользователю это ни к чему. Просто запомните это.
Указанное выше правило применяется не только к изменению обычных текстовых полей вроде цены номенклатуры или комментария, но и к полям с кнопкой выбора! Таким образом, готов ответ на ранее поставленный вопрос: "Что в таком случае нажимать?"
Запомните
Если значения всех полей в документе не изменились и при этом вы и не планировали ничего менять в документе, а просто его смотрели, то сохранять его нет необходимости.
Кнопку сохранения имеет смысл нажимать только в том случае, если вы намеренно что-либо изменяли.
В последнем случае, чтобы вообще избежать всяких вопросов со стороны 1С, просто в явном виде сохраняйте документ кнопкой "Записать" во всех случаях, когда вам это нужно.
Повторю ещё раз, но более кратко: Если вы меняли документ, то следует нажать "Да" в запросе на сохранение; не хотели менять — "Нет". Кнопку "Отмена" или, что то же самое, крестик, стоит нажимать только если вы вообще передумали закрывать окно!
Изучить все особенности конфигурации 1С:Бухгалтерия 8.3 Вы можете при помощи нашего спецкурса, содержащего 240 практических уроков продолжительностью 42 часа! Примеры видео-уроков и учебный план курса Вы можете посмотреть на странице его описания.
Предложение сохранить новый пустой документ
В 1С Бухгалтерии 8.2 есть одна особенность закрытия окон новых документов. Если вы создали новый документ и ещё не записали его, а также не заполнили вообще ни одного реквизита, то при попытке его закрыть программа всё равно спросит, сохранять его или нет. Почему-то это многих смущает и они на всякий случай нажимают кнопку "Да" в запросе на сохранение. Это приводит к записи в информационную базу 1С пустого и абсолютно ненужного документа, который будет потом только мешаться.
Если в Бухгалтерии 8.2 вы нажали кнопку создания нового документа или элемента справочника, но потом передумали его заполнять, то при закрытии окна на вопрос о сохранении новой записи следует ответить "Нет".
Подведём итоги
Будьте внимательны при выходе из документов и элементов справочников. Если программа просит что-то там сохранить, то подумайте, зачем вы вообще это окно открывали и меняли ли что-нибудь там. В большинстве случаев это позволяет определиться с ответом на вопрос программы о сохранении.
Если вы вообще не уверены:
лучше нажмите "Отмена" и не закрывайте окно — хуже не будет (НЕ касается случаев, когда вы действительно изменяли документ!).
На онлайн курсах 1С вы можете научиться грамотно обращаться с программой и не совершать ошибок. С особенностями online занятий вы можете ознакомиться здесь.
Уникальная метка публикации: C4FDF6C1-F96F-A189-44ED-EB8F97D470A8
Источник: //artemvm.info/information/uchebnye-stati/1s-predpriyatie/1s-prosit-sohranit-dokument/
Читайте также: