При работе с печатными формами в формате ActiveDocument (документы MS Word) разработчики 1С часто сталкиваются с ситуацией, когда макет содержит лишнюю вторую страницу. Попытки вручную удалить разрыв раздела или лишние символы в самом файле шаблона нередко приводят к сбою форматирования: текст первого раздела «съезжает», меняются поля или часть информации переносится на следующий лист. Разберем, почему это происходит и какими способами можно программно ограничить вывод только первой страницей.
Прежде чем переходить к коду, проанализируем структуру документа MS Word. Появление нежелательного второго листа чаще всего связано со следующими факторами:
Рассмотрим случай, когда печатная форма генерируется с помощью вызова COM-объекта Word. Если вторая страница выделена в отдельный раздел, его можно полностью удалить до отображения или печати документа.
Посмотрим на пример кода 1С:
АктивныйДокумент = ПолучитьМакет("АктПриемаПередачиСедан");
КомОбъект = АктивныйДокумент.Получить();
// Заполняем переменные макета
КомОбъект.Variables.Item("НомерДоговора").Value = Формат(Число(Шапка.Номер), "ЧГ=") + " от " + Формат(Шапка.Дата, "ДФ =""дд ММММ гггг""");
КомОбъект.Variables.Item("ПлательщикСокр").Value = СокрЛП(Шапка.Контрагент.НаименованиеПолное);
// Обновляем поля документа
КомОбъект.Fields.UpDate();
// Если в документе больше одного раздела, удаляем содержимое второго раздела
Если КомОбъект.Sections.Count > 1 Тогда
КомОбъект.Sections.Item(2).Range.Delete();
КонецЕсли;
КомОбъект.Application.Visible = Истина;
Если разрывы разделов не используются, но требуется гарантированно очистить всю вторую страницу, можно применить встроенную системную закладку MS Word \page. Разберем по шагам, как это сделать:
GoTo.\page.Delete().Реализация на языке 1С выглядит следующим образом:
// Переходим на страницу 2 (параметры: wdGoToPage = 1, wdGoToAbsolute = 1, номер страницы = 2)
КомОбъект.Application.Selection.GoTo(1, 1, 2);
// Удаляем диапазон текста, относящийся ко второй странице
КомОбъект.Bookmarks("\page").Range.Delete();
Если макет не требуется редактировать на экране, а нужно лишь отправить его на печать или сохранить в 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);
Рассмотрим варианты исправления макета без написания дополнительного кода, когда важно сохранить целостность структуры шаблона:
1 pt, а также уменьшите нижнее поле страницы в параметрах макета.Выбор конкретного решения зависит от поставленной задачи: для интерактивного показа документа пользователю подойдет программное удаление раздела или страницы через COM-объект, а для фонового формирования печатных форм — передача точного диапазона страниц при печати или экспорте.