Как убрать вопрос "Вы хотите завершить работу с программой?" при закрытии 1С 7.7?

Программист 1С v7.7
← На главную

При работе с программой 1С 7.7 многие пользователи сталкиваются с системным запросом "Вы хотите завершить работу с программой?" при попытке ее закрыть. Этот диалог, требующий подтверждения, может быть неудобен, особенно когда речь идет об автоматическом завершении работы пользователей (например, с помощью регламентных обработок для обновления или обслуживания базы данных) или при работе через терминальный сервер, где принудительное завершение сеанса без сохранения данных может быть критичным.

В этой статье мы подробно рассмотрим различные способы, как можно отключить этот запрос в 1С 7.7. Мы изучим как программные методы, требующие изменений в конфигурации, так и пользовательские настройки, а также обсудим риски, связанные с принудительным закрытием программы.

Метод 1: Программное завершение работы без запроса на сохранение данных

Одним из наиболее эффективных и часто используемых способов избежать запроса "Вы хотите завершить работу с программой?" является использование функции ЗавершитьРаботуСистемы() с определенным параметром. Эта функция позволяет управлять поведением программы при выходе.

Разберем подробнее синтаксис функции ЗавершитьРаботуСистемы():

ЗавершитьРаботуСистемы([ФлагЗапросаСохранения])

Здесь ФлагЗапросаСохранения является необязательным параметром. Его значение определяет, будет ли система запрашивать сохранение незаписанных документов, элементов справочников и других объектов перед завершением работы:

  1. Если ФлагЗапросаСохранения равен 1 (или Истина, это значение по умолчанию), то сохранение будет запрошено.
  2. Если ФлагЗапросаСохранения равен 0 (или Ложь), то сохранение незаписанных объектов запрашиваться не будет, и программа завершит работу без лишних вопросов.

Таким образом, для того чтобы завершить работу программы 1С 7.7 без запроса на сохранение и без диалога "Вы хотите завершить работу с программой?", вы можете использовать следующий код:

ЗавершитьРаботуСистемы(0);

или эквивалентный вариант:

ЗавершитьРаботуСистемы(Ложь);

Важный момент: Мы должны понимать, что использование этого метода с параметром 0 (или Ложь) приведет к потере всех несохраненных данных. Если пользователь работал с документами, справочниками или отчетами и не сохранил изменения, они будут безвозвратно утеряны при таком завершении работы. Поэтому мы рекомендуем применять этот подход с особой осторожностью, убедившись, что пользователи либо не имеют незавершенных операций, либо осведомлены о таком поведении программы.

Обычно этот код помещают в обработчики событий, которые инициируют автоматическое закрытие программы, например, в регламентные задания или внешние обработки, предназначенные для "выгона" пользователей перед обновлением.

Метод 2: Отключение запроса через персональные настройки пользователя (графический интерфейс)

В некоторых конфигурациях 1С 7.7, а также в более поздних версиях, предусмотрена возможность отключения запроса подтверждения при выходе через настройки пользовательского интерфейса. Это наиболее безопасный и рекомендованный способ для конечных пользователей, поскольку он не требует изменения кода конфигурации.

Разберем по шагам, как найти и изменить эту настройку:

  1. Запустите 1С 7.7 под учетной записью пользователя, для которого вы хотите отключить запрос.
  2. Перейдите в меню программы. Точное расположение опции может варьироваться в зависимости от конкретной конфигурации (например, Бухгалтерия, Торговля и Склад и т.д.), но чаще всего ее можно найти в следующих разделах:
    • "Сервис" -> "Параметры" -> "Общие"
    • "Органайзер" -> "Персональные настройки" -> "Общие"
    • "Главное" -> "Настройки" -> "Персональные настройки"
  3. В открывшемся окне настроек мы ищем флажок или опцию с названием, подобным "Запрашивать подтверждение при выходе из программы" или "Запрашивать подтверждение при завершении программы".
  4. Снимите этот флажок.
  5. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

После выполнения этих действий, при следующем закрытии программы 1С 7.7 для данного пользователя вопрос "Вы хотите завершить работу с программой?" появляться не будет. Этот метод удобен тем, что он затрагивает только конкретного пользователя и не требует навыков программирования.

Метод 3: Модификация глобального модуля конфигурации

Если предыдущие методы по каким-либо причинам не подходят или не дают желаемого результата, мы можем рассмотреть более глубокий способ – модификацию кода в глобальном модуле конфигурации 1С 7.7. Этот метод требует прав администратора или разработчика и определенного понимания структуры конфигурации.

Анализируем ситуацию: запрос на завершение работы обычно генерируется в момент, когда программа готовится к закрытию. В 1С 7.7 за это часто отвечает процедура ПриЗавершенииРаботыСистемы(), расположенная в глобальном модуле.

Разберем шаги по модификации глобального модуля:

  1. Откройте конфигурацию 1С 7.7 в режиме Конфигуратора.
  2. Найдите в дереве конфигурации объект "Глобальный модуль" и откройте его.
  3. В тексте глобального модуля мы ищем процедуру с названием ПриЗавершенииРаботыСистемы(). Эта процедура выполняется при каждом закрытии программы.
  4. Внутри этой процедуры внимательно просмотрите код на предмет наличия функций, отвечающих за вывод диалоговых окон с вопросами. Чаще всего это функция Вопрос(). Мы можем найти что-то вроде:
    
    Если Вопрос("Вы хотите завершить работу с программой?", 4) = 7 Тогда // 7 - это код для кнопки "Да"
        // Далее идет код завершения работы
    Иначе
        Возврат; // Пользователь отказался от завершения
    КонецЕсли;
    
  5. Чтобы отключить вопрос, мы можем закомментировать или удалить строки, связанные с вызовом функции Вопрос() и обработкой ее результата. Например, мы можем изменить код так:
    
    // Если Вопрос("Вы хотите завершить работу с программой?", 4) = 7 Тогда
    // Далее идет код завершения работы
    // Иначе
    // Возврат;
    // КонецЕсли;
    // Или просто убираем условие, если оно есть и сразу выполняем завершение
    
  6. После внесения изменений обязательно сохраните конфигурацию и обновите базу данных, если это требуется.

Критически важно: Прежде чем вносить любые изменения в глобальный модуль, мы настоятельно рекомендуем сделать резервную копию информационной базы. Неправильные изменения в глобальном модуле могут привести к неработоспособности всей конфигурации. Мы должны быть уверены в своих действиях или обратиться за помощью к опытному специалисту.

Метод 4: Программное сохранение настройки пользователя для отключения запроса

В некоторых случаях мы можем захотеть не только завершить работу без запроса, но и установить пользовательскую настройку программно, чтобы она действовала и при последующих ручных закрытиях программы. Это дополняет Метод 2, позволяя автоматизировать установку этой настройки.

В 1С 7.7 для сохранения различных значений, связанных с текущим пользователем или сеансом, часто используется функция СохранитьЗначение(). Если конфигурация предусматривает параметр "НеЗапрашиватьПодтверждениеПриВыходе" (как это было упомянуто в одном из сообщений), мы можем программно установить его значение.

Пример кода:


СохранитьЗначение("НеЗапрашиватьПодтверждениеПриВыходе", 1);
ЗавершитьРаботуСистемы(); // Можно использовать ЗавершитьРаботуСистемы(0) для немедленного выхода без текущего запроса

Здесь:

  1. СохранитьЗначение("НеЗапрашиватьПодтверждениеПриВыходе", 1); - Мы сохраняем для текущего пользователя значение "1" для параметра "НеЗапрашиватьПодтверждениеПриВыходе". Если такой параметр предусмотрен конфигурацией, это аналогично установке соответствующего флажка в персональных настройках. Обратите внимание, что имя параметра может отличаться в вашей конфигурации, но принцип остается тем же.
  2. ЗавершитьРаботуСистемы(); - После сохранения настройки мы вызываем завершение работы системы. Если настройка вступила в силу, последующие вызовы или ручное закрытие программы не будут выводить запрос. Если мы хотим быть абсолютно уверены, что текущий сеанс завершится без запроса, мы можем использовать ЗавершитьРаботуСистемы(0);.

Мы должны проверить в вашей конкретной конфигурации, существует ли такой параметр и как он называется. Для этого мы можем попытаться найти его в глобальном модуле или других стандартных модулях, где происходит сохранение и загрузка пользовательских настроек.

Альтернативные и принудительные методы завершения (с осторожностью)

В некоторых случаях, когда требуется гарантированно "выбить" пользователей из 1С, особенно если они оставили программу открытой без присмотра, применяются более радикальные методы. Однако мы должны понимать, что эти методы сопряжены с высоким риском потери данных и потенциального повреждения информационной базы.

1. Завершение сеанса через терминал-сервер

Если пользователи работают с 1С через терминальный сервер (например, RDP), системный администратор имеет возможность принудительно завершать сеансы пользователей. Это гарантированно закроет все запущенные программы, включая 1С, без каких-либо вопросов.

  1. Мы подключаемся к терминальному серверу с правами администратора.
  2. Открываем "Диспетчер служб удаленных рабочих столов" или "Диспетчер сервера" -> "Службы удаленных рабочих столов" -> "Сеансы".
  3. Находим нужный сеанс пользователя.
  4. Щелкаем правой кнопкой мыши по сеансу и выбираем "Завершить" или "Сбросить".

Предупреждение: Этот метод аналогичен выдергиванию шнура питания из компьютера. Все несохраненные данные в программах, запущенных в этом сеансе, будут потеряны. Пользователи, которые были в процессе ввода большого документа или другой важной операции, могут потерять результаты своей работы.

2. Использование системных утилит (например, taskkill)

Для принудительного завершения процессов 1С с уровня операционной системы мы можем использовать командную строку и утилиту taskkill.

taskkill /IM 1cv7.exe /F

Где:

Мы можем также завершить процесс по его идентификатору (PID):

taskkill /PID [PID процесса 1cv7.exe] /F

Критическое предупреждение: Использование taskkill является "убийством" процесса. Это самый жесткий способ завершения работы. Он НЕ ГАРАНТИРУЕТ корректного сохранения данных и может привести к повреждению информационной базы, особенно если она в файловом формате DBF. В этом случае после такого завершения работы потребуется обязательная переиндексация базы данных. Для SQL-версий риск повреждения базы меньше, но потеря несохраненных пользовательских данных все равно вероятна.

Важные аспекты и потенциальные риски, о которых мы должны помнить

  1. Потеря данных: Самый главный риск при автоматическом или принудительном закрытии программы без запроса на сохранение – это потеря всех незаписанных документов, изменений в справочниках и прочих данных, над которыми работал пользователь. Мы должны всегда учитывать этот фактор.
  2. Повреждение базы данных: Некорректное завершение работы, особенно при "убийстве" процессов (как с taskkill или сбросом терминальных сеансов), может привести к повреждению файлов информационной базы. В случае файловых баз (DBF) это может потребовать переиндексации или, в худшем случае, восстановления из резервной копии. Для SQL-версий риск повреждения ниже, но все же существует, если закрытие происходит во время активной транзакции.
  3. Ошибки в глобальном модуле: Изменения в глобальном модуле конфигурации требуют высокой квалификации. Любая ошибка в коде может привести к неработоспособности программы, невозможности ее запуска или другим непредсказуемым проблемам. Мы всегда должны делать резервные копии перед такими изменениями и тестировать их в нерабочей среде.
  4. Зависимость от конфигурации и релиза: Конкретные методы и пути к настройкам могут незначительно отличаться в зависимости от используемой конфигурации 1С 7.7 (Бухгалтерия, Торговля и Склад, Зарплата и Кадры и т.д.) и ее релиза. Всегда рекомендуется сначала изучить документацию или провести тестирование на тестовой базе.

Заключение

Мы рассмотрели несколько способов, как можно убрать вопрос "Вы хотите завершить работу с программой?" при закрытии 1С 7.7. Наиболее безопасными и рекомендованными методами являются отключение запроса через персональные настройки пользователя (если такая опция доступна) или программное использование функции ЗавершитьРаботуСистемы(0), но только при условии, что мы уверены в отсутствии несохраненных данных.

Модификация глобального модуля требует внимательности и обязательного создания резервных копий. Альтернативные принудительные методы, такие как завершение сеансов терминал-сервера или использование taskkill, следует применять лишь в крайних случаях и только с полным осознанием всех возможных рисков, включая потерю данных и потенциальное повреждение базы.

Выбирая метод, мы всегда должны исходить из конкретных задач, уровня подготовки пользователя и системного администратора, а также допустимого уровня риска для информационной базы.

← На главную