Как программно вывести только первую страницу макета MS Word в 1С

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

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

Выясним причину появления второй страницы

Прежде чем переходить к коду, проанализируем структуру документа MS Word. Появление нежелательного второго листа чаще всего связано со следующими факторами:

  1. Особенности разрывов разделов (Section Break): если в документе используется разрыв раздела «С новой страницы», то при его полном удалении первый раздел автоматически наследует настройки форматирования (поля, ориентацию, колонтитулы) второго раздела. Из-за этого разметка первой страницы разрушается.
  2. Служебный знак абзаца после таблицы: когда первая страница завершается таблицей Word, система автоматически добавляет за ней пустой знак абзаца. Если таблица занимает всю высоту листа, этот знак абзаца выталкивается на новую страницу, создавая пустой второй лист.
  3. Настройки абзацев и полей: опции «С новой страницы», «Не отрывать от следующего» или слишком большие значения нижнего поля макета вызывают принудительный перенос контента.

Способ 1. Программное удаление второго раздела через COM-объект

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

Посмотрим на пример кода 1С:


АктивныйДокумент = ПолучитьМакет("АктПриемаПередачиСедан");
КомОбъект = АктивныйДокумент.Получить();

// Заполняем переменные макета
КомОбъект.Variables.Item("НомерДоговора").Value = Формат(Число(Шапка.Номер), "ЧГ=") + " от " + Формат(Шапка.Дата, "ДФ =""дд ММММ гггг""");
КомОбъект.Variables.Item("ПлательщикСокр").Value = СокрЛП(Шапка.Контрагент.НаименованиеПолное);

// Обновляем поля документа
КомОбъект.Fields.UpDate();

// Если в документе больше одного раздела, удаляем содержимое второго раздела
Если КомОбъект.Sections.Count > 1 Тогда
    КомОбъект.Sections.Item(2).Range.Delete();
КонецЕсли;

КомОбъект.Application.Visible = Истина;

Способ 2. Удаление второй страницы с использованием системной закладки

Если разрывы разделов не используются, но требуется гарантированно очистить всю вторую страницу, можно применить встроенную системную закладку MS Word \page. Разберем по шагам, как это сделать:

  1. Переходим на вторую страницу с помощью метода GoTo.
  2. Выделяем область второй страницы через предопределенную закладку \page.
  3. Удаляем выделенный диапазон методом Delete().

Реализация на языке 1С выглядит следующим образом:


// Переходим на страницу 2 (параметры: wdGoToPage = 1, wdGoToAbsolute = 1, номер страницы = 2)
КомОбъект.Application.Selection.GoTo(1, 1, 2);

// Удаляем диапазон текста, относящийся ко второй странице
КомОбъект.Bookmarks("\page").Range.Delete();

Способ 3. Ограничение диапазона при печати или экспорте в PDF

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

Для отправки на печать только первой страницы используем метод PrintOut:


// Параметры: Background = Ложь, Range = 4 (wdPrintRangeOfPages), Pages = "1"
КомОбъект.PrintOut(Ложь, , 4, , , , , , "1");

Если документ сохраняется в формате PDF, ограничим диапазон страниц в методе ExportAsFixedFormat:


// Экспорт только 1-й страницы в PDF (17 = wdExportFormatPDF)
ПутьКФайлу = "C:\Temp\Act.pdf";
КомОбъект.ExportAsFixedFormat(ПутьКФайлу, 17, Ложь, 0, 0, 1, 1);

Способ 4. Настройка макета непосредственно в MS Word

Рассмотрим варианты исправления макета без написания дополнительного кода, когда важно сохранить целостность структуры шаблона:

  1. Изменение типа разрыва раздела: откройте макет в MS Word, перейдите в параметры второго раздела и смените тип разрыва с «С новой страницы» (Next Page) на «На текущей странице» (Continuous). Это предотвратит принудительный перенос на новую страницу.
  2. Уменьшение размера служебного абзаца: если за таблицей в конце первой страницы идет непереносимый знак абзаца, выделите его и установите размер шрифта 1 pt, а также уменьшите нижнее поле страницы в параметрах макета.

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

← На главную