При разработке внешних печатных форм в 1С 7.7 программисты часто используют механизм OLE-автоматизации для вывода данных в шаблоны Microsoft Word. Типичный сценарий: создание объекта Word.Application и добавление документа на основе шаблона. Однако нередко выполнение кода прерывается ошибкой «Microsoft Word: Ошибка файла». Давайте разберем причины этой проблемы и способы ее решения, опираясь на практический опыт и технические особенности взаимодействия систем.
Рассмотрим стандартный фрагмент кода, который вызывает ошибку:
// заявление о приеме в члены кооператива печатаем из word
Документы = СоздатьОбъект("Word.Application");
КаталогФайлов = КаталогИБ() + "ExtForms\PrnForms\Blanki\";
Документы.Documents.Add(КаталогФайлов + "НОВЫЙ договор займа 2018.doc");
Ошибка на строке с методом Add чаще всего сигнализирует о том, что Microsoft Word не может получить доступ к файлу по указанному пути. Выясним, почему это происходит, даже если файл физически существует на диске.
Первое, на что стоит обратить внимание — это формат строки пути. Система 1С 7.7 и старые версии COM-объектов Word чувствительны к определенным символам. Проанализируем следующие рекомендации:
НОВЫЙ договор займа 2018.doc) могут некорректно интерпретироваться OLE-сервером. Попробуйте переименовать файл, убрав пробелы или заменив их нижним подчеркиванием (например, Dogovor_Zayma.doc).КаталогИБ() не слишком глубоко вложен в файловую структуру.Для диагностики полезно вывести полный путь в окно сообщений перед выполнением метода Add:
ПолныйПуть = КаталогФайлов + "НОВЫЙ договор займа 2018.doc";
Сообщить("Открываю файл: " + ПолныйПуть);
// Проверяем существование файла средствами 1С
Если ФС.СуществуетФайл(ПолныйПуть) = 0 Тогда
Предупреждение("Файл не найден по указанному пути!");
КонецЕсли;
Если файл был перенесен с другого компьютера, скачан из почты или интернета, Windows может наложить на него атрибут «Заблокировано» в целях безопасности. В этом случае файл открывается вручную в Word (с предупреждением), но блокируется при попытке программного открытия через 1С.
Рассмотрим шаги по разблокировке:
Иногда причина кроется в специфических атрибутах файла (например, файл помечен как «Только для чтения» или «Системный»), что мешает методу Add создать новый документ на его основе. Разберем пример кода для детальной проверки состояния файла перед печатью:
ИмяФайлБланка = КаталогФайлов + "НОВЫЙ договор займа 2018.doc";
Если ФС.СуществуетФайл(ИмяФайлБланка) = 1 Тогда
АтрибутыФайла = "";
ФС.АтрибутыФайла(ИмяФайлБланка,, АтрибутыФайла);
// Анализируем строку атрибутов
Если Сред(АтрибутыФайла, 6, 1) = "0" Тогда
Сообщить("Ошибка: К файлу нет доступа!", "!");
ИначеЕсли Сред(АтрибутыФайла, 1, 1) = "1" Тогда
Сообщить("Предупреждение: Файл только для чтения, возможны проблемы при Add", "i");
КонецЕсли;
// Продолжаем работу...
Иначе
Сообщить("Не найден файл бланка: " + ИмяФайлБланка, "!");
Возврат;
КонецЕсли;
Современные версии MS Word (2010 и выше) имеют встроенные механизмы защиты, которые могут блокировать работу OLE-автоматизации. Проанализируем необходимые настройки в самом Word:
...ExtForms\PrnForms\Blanki\). Поставьте галочку «Также доверять всем вложенным папкам»..doc.Метод Documents.Add() предназначен для создания нового документа на основании шаблона. Если файл является обычным документом (.doc), а не шаблоном (.dot), Word может вести себя нестабильно при вызове через OLE.
Попробуем выяснить причину, временно заменив Add на Open. Метод Open просто открывает файл для редактирования. Если Open сработает успешно, значит проблема именно в правах на создание нового документа на базе данного файла или в его структуре.
// Вместо Документы.Documents.Add(Путь) попробуйте:
Попытка
Документы.Documents.Open(ИмяФайлБланка);
Исключение
Сообщить("Даже Open не помог: " + ОписаниеОшибки());
КонецПопытки;
При сбоях в 1С 7.7 процессы WINWORD.EXE часто остаются в памяти в фоновом режиме. Если такой «зависший» процесс держит файл шаблона открытым (даже невидимо), повторная попытка печати вызовет ошибку доступа.
Рекомендация: Откройте Диспетчер задач (Ctrl+Shift+Esc), перейдите на вкладку «Подробности» (или «Процессы») и завершите все задачи с именем WINWORD.EXE. После этого повторите печать из 1С.
Для устранения ошибки «Microsoft Word: Ошибка файла» в 1С 7.7 примените комплексный подход:
Документы.Visible = 1; перед открытием файла, чтобы увидеть модальные окна Word, которые могут блокировать выполнение скрипта (например, запросы на конвертацию или восстановление файла).