Как преобразовать документ Word (docx) в табличный документ 1С (mxl)?

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

Перенос сложного форматирования из текстового редактора Microsoft Word в табличный документ 1С — это классическая задача, с которой сталкиваются разработчики при создании печатных форм. Проблема заключается в принципиально разной структуре документов: Word оперирует абзацами и секциями, а 1С — жесткой сеткой ячеек. Прямой перенос «копировать-вставить» часто приводит к «разъезжанию» таблиц и потере оформления. Разберем наиболее эффективные способы решения этой задачи, от программной автоматизации до выверенных ручных методик.

Метод 1: Использование Excel и специализированных конвертеров

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

  1. Откроем исходный документ в Word.
  2. Выделим весь текст (Ctrl+A).
  3. Если документ содержит сложную структуру, попробуем через меню «Вставка» преобразовать текст в таблицу (если это уместно), чтобы зафиксировать границы.
  4. Скопируем содержимое в пустой файл Excel.
  5. Сохраним файл в формате .xls.
  6. Воспользуемся утилитой или обработкой XLStoMXL (конвертер документов MS Excel в формат 1С).

Проанализируем этот метод: он хорош тем, что утилиты конвертации часто умеют сохранять шрифты и базовое объединение ячеек. Однако стоит помнить, что «идеального» преобразования не существует, и после конвертации потребуется финишная правка границ в конфигураторе 1С.

Метод 2: Программное чтение через HTML

Если нам необходимо автоматизировать процесс на стороне 1С, наиболее технологичным программным способом является использование HTML как промежуточного звена. Выясним, почему это работает: 1С умеет достаточно корректно интерпретировать теги таблиц HTML при чтении в ТабличныйДокумент.

Рассмотрим пример кода для реализации этой логики через COM-соединение:


// Создаем объект Word
Попытка
    WordПриложение = Новый COMОбъект("Word.Application");
Исключение
    Сообщить("MS Word не установлен");
    Возврат;
КонецПопытки;

// Открываем документ
Документ = WordПриложение.Documents.Open(ПутьКФайлу);

// Сохраняем во временный HTML-файл
ВременныйФайлHTML = ПолучитьИмяВременногоФайла("html");
Документ.SaveAs(ВременныйФайлHTML, 10); // 10 - формат Filtered HTML
Документ.Close();
WordПриложение.Quit();

// Читаем в табличный документ 1С
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ВременныйФайлHTML, СпособЧтенияЗначенийТабличногоДокумента.Значение);

Использование Filtered HTML позволяет избавиться от специфических XML-тегов Microsoft и оставить чистую верстку, которую 1С понимает лучше всего.

Метод 3: Техника «Миллиметровки» (узкие колонки)

Бывают случаи (например, сложные государственные бланки), когда автоматическая конвертация бессильна. Проанализируем профессиональный метод ручной отрисовки, который используют специалисты при подготовке макетов в системах типа «Консультант+».

Суть метода заключается в создании макета с очень мелкой сеткой. Разберем по шагам:

  1. В табличном документе 1С выделим все колонки и установим их ширину в значение 0.1 или 0.2.
  2. Возьмем распечатанный образец документа и визуально определим границы всех вертикальных линий.
  3. Начнем воссоздавать структуру Word-документа, объединяя мелкие ячейки 1С под нужный размер текста или ячейки таблицы.
  4. Текст вставляем в объединенные области, настраивая свойство РазмещениеТекста (Переносить или Автовысота).

Важный совет: Перед началом работы просчитайте максимальное количество необходимых колонок. Если в документе есть таблицы с разным количеством столбцов, ищите их наименьшее общее кратное или используйте максимально мелкую сетку, чтобы границы разных таблиц не «конфликтовали» друг с другом в рамках одних и тех же колонок 1С.

Метод 4: Использование режима «Только чтение» в Word

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

Посмотрим на пример кода, открывающего документ только для чтения:


// Параметры метода Open: (FileName, ConfirmConversions, ReadOnly, ...)
Word = Новый COMОбъект("Word.Application");
Word.Visible = Истина;
ИмяФайла = "C:\Templates\Contract.docx";
Word.Documents.Open(ИмяФайла, Ложь, Истина); // Третий параметр Истина включает ReadOnly

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

Метод 5: Визуальная подложка для точной отрисовки

Для достижения 100% визуального сходства макета 1С с оригиналом Word можно применить хитрость с фоновым изображением. Проанализируем этот процесс:

  1. Сохраним страницу Word как картинку.
  2. В табличном документе 1С вставим эту картинку как Рисунок и растянем её на область печати.
  3. Установим картинку «на задний план».
  4. Используя сетку ячеек (опять же, лучше сделать её мелкой), обведем границы таблиц и текста прямо поверх картинки.
  5. После того как все границы и надписи нанесены, удалим фоновую картинку.

Этот метод гарантирует, что все отступы, логотипы и линии будут находиться именно там, где они были в исходном файле docx.

Особенности работы с разрывами страниц

При программном заполнении полученного макета данными важно помнить, что 1С не умеет динамически пересчитывать высоту строк так же гибко, как Word управляет абзацами. Рассмотрим, как избежать проблем с «разрывом» текста:

Подводя итог, можно сказать: если документ простой — используйте HTML-конвертацию. Если документ сложный и должен выглядеть «один-в-один» — используйте метод узких колонок с предварительной отрисовкой. Это сэкономит время в долгосрочной перспективе, так как избавит от постоянных правок макета при изменении данных.

← На главную