При разработке внешних печатных форм в среде 1С:Предприятие 8.3 (Управляемые формы) программисты часто сталкиваются с ситуацией, когда код формирования документа Microsoft Word кажется логически верным, но при попытке печати система выдает сообщение «Печатная форма недоступна». Рассмотрим подробно, почему возникает эта проблема, проанализируем типичные ошибки в программном коде и разберем современные способы реализации печати в офисные форматы.
Разберем основную ошибку, представленную в коде автора темы. В управляемом приложении 1С программный код модуля объекта внешней обработки по умолчанию выполняется на сервере. Когда мы создаем COMОбъект("Word.Application") на сервере, приложение Word запускается в контексте службы сервера 1С. У этой службы нет графического интерфейса (рабочего стола), поэтому выполнение команды Visible = Истина не имеет смысла — пользователь не увидит открытое окно на своем компьютере.
Выясним причину ошибки системы «Печатная форма недоступна». В механизме БСП (Библиотеки стандартных подсистем) функция Печать должна возвращать заполненный ТабличныйДокумент. В коде автора создается пустой объект ТабличныйДокумент, а вся работа идет с Word. Если в настройках команды печати указано, что это стандартный вызов, система ожидает табличный документ для отображения в форме предпросмотра. Не получая его (так как Word «улетел» в никуда на сервере), 1С сообщает о недоступности формы.
Проанализируем ситуацию: если нам необходимо именно интерактивное открытие MS Word с заполнением данных «на лету», мы должны использовать клиентский контекст. Для этого в функции СведенияОВнешнейОбработке необходимо изменить тип использования команды.
Рассмотрим, как должна выглядеть настройка команды в функции СведенияОВнешнейОбработке:
НоваяСтрока = ТаблицаКоманд.Добавить();
НоваяСтрока.Представление = "Договор в Word";
НоваяСтрока.Идентификатор = "ДоговорWord";
НоваяСтрока.Использование = "ВызовКлиентскогоМетода"; // Важно!
НоваяСтрока.ПоказыватьОповещение = Истина;
НоваяСтрока.Модификатор = "ПечатьMXL";
При использовании режима ВызовКлиентскогоМетода управление передается в модуль формы обработки, в процедуру Печать. Поскольку код будет выполняться на клиенте, COMОбъект создастся в контексте пользователя, и команда Visible = Истина корректно откроет документ перед глазами человека.
Современный стандарт разработки в 1С предполагает отказ от прямого использования COM-объектов в пользу макетов типа «Двоичные данные» (DOCX). Посмотрим на алгоритм работы через БСП, который позволяет избежать многих проблем с правами доступа и разрядностью систем:
{НомерДокумента}.УправлениеПечатью для заполнения параметров.Проанализируем пример кода для серверного формирования документа через БСП:
Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)
// Получаем макет как двоичные данные
Макет = ПолучитьМакет("Договор");
// Описываем данные для замены
ДанныеОбъекта = Новый Структура;
ДанныеОбъекта.Вставить("Организация", "ООО Флексмар");
ДанныеОбъекта.Вставить("Номер", "123");
// Используем штатные средства БСП для формирования офисного документа
// (Методы могут отличаться в зависимости от версии БСП)
АдресХранилища = УправлениеПечатью.СформироватьДокументВФорматеWord(Макет, ДанныеОбъекта);
Возврат АдресХранилища;
КонецФункции
Если же бизнес-логика требует использования именно COM-соединения на сервере (например, для сложного форматирования, которое не поддерживает БСП), нужно проверить технические настройки системы. Часто ошибка возникает из-за того, что сервер 1С 64-битный, а MS Office — 32-битный. В этом случае попытка создания Новый COMОбъект("Word.Application") вернет ошибку «Класс не зарегистрирован».
Выясним, какие настройки требуются для корректной работы Word как COM-сервера на сервере 1С:
Desktop в профиле пользователя, под которым запущена служба сервера. Необходимо создать директории:
C:\Windows\SysWOW64\config\systemprofile\Desktop (для 64-бит систем)
C:\Windows\System32\config\systemprofile\Desktop (для 32-бит систем).
dcomcnfg.exe нужно найти компонент «Microsoft Word Document» и в свойствах на вкладке «Безопасность» предоставить права на запуск и активацию пользователю USR1CV8.Чтобы избежать ошибки «Печатная форма недоступна», придерживайтесь следующих правил:
ПолучитьФайлИзХранилища.COMОбъект, так как это обеспечит стабильную работу системы в веб-клиенте и на серверах под управлением Linux.Рассмотренные подходы позволяют сделать печать из 1С в Word надежной и предсказуемой, минимизируя зависимость от настроек окружения конкретного пользователя.