Как избавиться от диалоговых окон Excel при автоматической обработке файлов в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При пакетной обработке файлов Excel через COM-объект программисты часто сталкиваются с тем, что на экране периодически возникают системные окна подтверждения сохранения или запросы на пересчет данных. Это блокирует выполнение фоновых заданий и делает автоматизацию невозможной. Рассмотрим, как эффективно решить эту проблему.

Решение №1: Отключение уведомлений и корректное закрытие Excel

Если специфика задачи требует использования COM-объекта (например, для работы с макросами), необходимо принудительно отключить все всплывающие предупреждения. Основная причина появления окон — попытка Excel сохранить изменения в файле при закрытии.

Для корректного управления процессом воспользуемся следующими настройками:

  1. Отключим свойство DisplayAlerts. Оно подавляет системные запросы.
  2. При закрытии книги используем метод Close с параметром 0 (или False), что эквивалентно отказу от сохранения изменений.

Разберем пример правильного кода для завершения работы с файлом:


Процедура ЗакрытьExcel(Книга, Excel)
    // Отключаем уведомления
    Excel.DisplayAlerts = False;
    
    // Закрываем книгу без сохранения изменений (0)
    Книга.Close(0);
    
    // Завершаем процесс приложения
    Excel.Quit();
    
    // Возвращаем уведомления (хорошая практика)
    Excel.DisplayAlerts = True;
    
    // Очищаем объект
    Excel = Неопределено;
КонецПроцедуры

Решение №2: Использование метода ТабличныйДокумент.Прочитать

Современные версии платформы 1С позволяют обходиться без COM-соединения с Excel. Это гораздо быстрее, стабильнее и не требует наличия установленного офисного пакета на сервере. Для загрузки данных используем объект ТабличныйДокумент.

Рассмотрим, как реализовать этот метод:


Функция ПрочитатьФайлExcel(АдресФайла)
    имяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
    ПолучитьИзВременногоХранилища(АдресФайла).Записать(имяВременногоФайла);
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    Попытка
        // Используем СпособЧтенияЗначенийТабличногоДокумента
        ТабличныйДокумент.Прочитать(имяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
        УдалитьФайлы(имяВременногоФайла);
        Возврат ТабличныйДокумент;
    Исключение
        Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
КонецФункции

Что делать с файлами форматов xlsm?

Метод Прочитать() может не распознать файлы с макросами (расширение xlsm). В таких случаях рекомендуем использовать вспомогательный подход: автоматическое копирование файла во временный каталог с переименованием расширения в xlsx. После того как 1С прочитает данные, временный файл нужно обязательно удалить. Это позволит избежать блокировок и конфликтов с правами доступа.

Важные рекомендации для пакетной обработки

Если вы обрабатываете большое количество документов, следуйте этим советам для предотвращения сбоев:

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

← На главную