1с создание макета текстового документа

Обновлено: 04.07.2024

Публикация - своего р ода памятка, содержащая примеры кода для:

1. заполнение шаблона Word данными из 1С;
2. заполнение колонтитулов Word данными из 1С;
3. заполнение таблицы в Word данными из 1С;

Начало работы

В большинстве случаев перед нами ставится следующая задача:
Нужно открыть документ Word, заполненный данными из 1С.

Для этого нам нужно подготовить шаблон документа Word. Не путайте это с Word Template, специальные файлы Word, которые содержат настройки документов для многократного использования. Нам нужен обычный вордовский документ с расширениеми *.docx или *.doc. А далее поместить этот документ в макет с двоичными данными.

Читатель может справедливо заметить, что используется модальный вызов, и погрозить автору пальцем. И будет прав.

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

Углубимся немножко в принципы работы Word.

Каждый документ Word разделен на разделы, которые состоят из страниц.

Для каждого раздела есть возможность создавать свою нумерацию элементов, уникальные колонтитулы и настройки параметров страницы. Так, например, чтобы повернуть одну из страниц (вывести на печать как альбомную), нужно создать под неё отдельный раздел.


Каждая страница Word разделена на несколько областей:

  • Верхний колонтитул
  • Основной текст
  • Нижний колонтитул

Нужно заметить, что в каждом разделе может быть уникальный колонтитул для первой страницы.

Заполнение пользовательских параметров

При обращении к этим коллекциям мы можем выполнять в них поиск и получать встроенные объекты, например, таблицы.

Теперь мы более-менее поняли, как обращаться к областям Word, можем в них пошуровать и выполнить замену наших параметров:

Рассмотри подробнее метод Execute. Его параметры идентичны диалоговуму окну при замене/поиске непоседресвенно из MS Word:

А вот и основные параметры (вольный перевод справки MSDN):

  1. Искомый текст - Строка - Текст для замены. Текст может содержать специальные параметры. Например, ^p - абзац, ^t - табуляция
  2. Чувствительность к регистру - Булево - Если истина, то поиск будет осуществляться с учетом регистра
  3. Слова целиком - Булево - Если истина, то ищутся слова целиком. Вхождение слов не учитываются. Например, при поиске слова дом будет пропущено слово домашний
  4. Использовать подстановочные знаки - Булево - Если истина, то используются встроенные регулярные выражения.
  5. Искать похожие - Булево - Если истина, то результат поиска будет содержать похожие слова
  6. Искать все формы - Булево - Если истина, то результат поиска будет содержать различные формы слов.
  7. Поиск сначала - Булево - Если истина, то будет осуществляться с начала до конца документа
  8. Охват - WdFindWrap - Опредяляет направление поиска
  9. Формат - Format - Формат искомого текста
  10. Строка замены - Строка - Строка, на которую будет заменен исходный текст
  11. Количество замен - WdReplace - Определяет сколько раз выполнять замену
  12. и т.д.

WdReplace - Constant Value:
wdReplaceAll 2
wdReplaceNone 0
wdReplaceOne 1

Данный метод не позволяет получить "Строка замены" как выделенную область, но он работает где-то в 10 раз медленнее. Для получения выделенной области можно воспользоваться немножко откорректированной типовой функцией:

Уже получив выделенную область можно отредактировать стиль текста, шрифт и т.д.

Также есть второй подход, использующий такой объект Word, как поля. Мне он не очень нравится, т.к. в больших документах, порядка 100 страниц, эти поля начинают глючить (исчезать, не подставлять нужные значения) и прочая ерунда. Ну по крайней мере в Word 2007. Но я его все равно приведу:

При подготовке шаблона в тело документа необходимо навставлять полей с типом DOCVARIABLE (можно вставлять горячими клавишими Ctrl+F9).

Доступ к таким полям можно получить следующим нехитрым образом:

Заполнение таблиц по шаблону

Итак, мы заполнили параметры в основном тексте документа, заменили параметры в колонтитулах, но у нас еще есть одна неприятность - нужно заполнить таблицу.

Подход, описанный ниже, годится только для таблиц с заранее известным форматом. Т.е. мы можем как угодно отформатировать таблицу и её строки изначально. Но потом изменять довольно-таки проблематично.

К таблицам можно получить доступ через области документа.

Далее, получив таблицу, мы работаем с ней по привычной схеме - строки, столбцы.

Для задания форматирования легче в шаблоне создать таблицу с пустой первой строкой, которую мы в последующем удалим.

Вот, в принципе, и все. Основные вопросы, возникающие при работе с Word, я постарался осветить. Надеюсь, данный обзор поможет вам в работе =)

Спасибо за советы и комментарии:
v3rter, monkbest

Критика только приветствуется. Чем больше замечаний, тем лучше будет гайд =)

Текстовый документ — это общий объект встроенного языка. Он позволяет представлять различную информацию (в том числе и результаты отчетов) в виде текстов.

Текстовые документы

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

Также текстовый документ может быть создан интерактивно в режиме Конфигуратор или в режиме 1С:Предприятие.

Макеты текстовых документов

Система 1С:Предприятие 8 поддерживает создание текстовых макетов, на основании которых средствами встроенного языка могут быть сформированы текстовые документы для отображения отчетов и форм первичных документов в текстовом виде.

Такие макеты могут быть добавлены в прикладное решение с помощью объектов конфигурации Макет.

Текстовый макет описывает области, содержащие выводимый текст и поля, в которые будут выведены вычисляемые значения:

Текстовые документы

Сформированный на основании этого макета текстовый документ будет иметь следующий вид:

Текстовые документы

Текстовые макеты обладают следующими возможностями:
  • создание именованных областей макета с указанием языка для области;
  • описание размещения полей текстового макета;
  • описание формата вывода данных поля;
  • описание выравнивания для поля;
  • описание автоматического переноса представления значения поля на следующую строку при формировании отчета;
  • использование забивки, если длина текст больше отведенного размера поля;
  • формирование текстового макета в виде, максимально приближенном к формируемому на его основе отчету или форме первичного документа.

Редактор текстов

Для создания и редактирования текстовых документов разработчик может использовать специальный редактор текста и модуля.


&НаКлиенте
Процедура ЗаписьТекстовогоФайла ( Команда )

КаталогСохранения = "D:\Storage\data" ;
СоздатьКаталог ( КаталогСохранения ); // Имя каталога (путь)

Файл_ТХТ = Новый ТекстовыйДокумент ;

// Наполнение файла содержимым
Файл_ТХТ . УстановитьТекст ( "
|MS Windows
|Linux
|MacOS
|OSX" );

// Очистка содержимого файла
Файл_ТХТ . Очистить ();

// Добавление 1-й строки:
Файл_ТХТ . ДобавитьСтроку ( "Word" );
// Добавление 2-й строки:
Файл_ТХТ . ДобавитьСтроку ( "Excel" );
// Добавление 3-й строки:
Файл_ТХТ . ДобавитьСтроку ( "Powerpoint" );

// Замена первой строки на "Outlook"
Файл_ТХТ . ЗаменитьСтроку ( 1 , "Outlook" );

// Вставка новую строки сразу после 1-й (*на место 2-й)
Файл_ТХТ . ВставитьСтроку ( 2 , "Access" );

// Удаление 2-й строки: ("Access")
Файл_ТХТ . УдалитьСтроку ( 2 );

// Запись/перезапись файла (D:\Storage\data\MS.txt) на диск
// Параметры: путь, кодировка, разделитель строк
Файл_ТХТ . Записать ( КаталогСохранения + "\MS.txt" , КодировкаТекста . UTF8 , Символы . ВК + Символы . ПС );

// Открытие созданного файла в блокноте
ЗапуститьПриложение ( КаталогСохранения + "\MS.txt" );

&НаКлиенте
Процедура ЧтениеТекстовогоФайла ( Команда )

Файл_ТХТ = Новый ТекстовыйДокумент ;

Файл_ТХТ . Прочитать ( ПутьКФайлу_ТХТ , КодировкаТекста . UTF8 , Символы . ВК + Символы . ПС );

// Показать текст целиком
Сообщить ( Файл_ТХТ . ПолучитьТекст ());
//Outlook
//Excel
//Powerpoint

// Показать текст по строкам
Для Индекс = 1 По Файл_ТХТ . КоличествоСтрок () Цикл
Сообщить ( Файл_ТХТ . ПолучитьСтроку ( Индекс )); //. Outlook . Excel . Powerpoint
КонецЦикла;

Формирование печатной формы из текстового макета в 1С 8.3:

&НаКлиенте
Процедура ФормированиеПечатнойФормыИзТекстовогоМакета ( Команда )

ФормаПечати = СформироватьПечатнуюФорму ();
ФормаПечати . Показать ( "Счет №2020" );

&НаСервере
Функция СформироватьПечатнуюФорму ()

ФормаПечати = Новый ТекстовыйДокумент ;
Макет = ЭтотОбъект . ПолучитьМакет ( "Макет_Счета" );

// Получение области и макета по имени
Шапка = Макет . ПолучитьОбласть ( "Шапка" );
// Заполнение параметров
Шапка . Параметры . Дата = ТекущаяДата ();
Шапка . Параметры . Номер = 2020 ;
// Вывод шапки в документ
ФормаПечати . Вывести ( Шапка );

// Заголовок табличной части.
ЗаголовокТ = Макет . ПолучитьОбласть ( "ТЧ_Заголовок" );
ФормаПечати . Вывести ( ЗаголовокТ );

// Строки табличной части (обычно в цикле)
СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Строка" );

// Строка 1
СтрокаТ . Параметры . Номенклатура = "SSD Intel Optane DC P4800X 1.5TB" ;
СтрокаТ . Параметры . Количество = 7 ;
ФормаПечати . Вывести ( СтрокаТ );

// Строка 2
СтрокаТ . Параметры . Номенклатура = "SSD Huawei 02351SPX 1.92TB" ;
СтрокаТ . Параметры . Количество = 12 ;
ФормаПечати . Вывести ( СтрокаТ );

// Вывод подвала ТЧ
СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Подвал" );
СтрокаТ . Параметры . ИтогоКоличество = 19 ; // Всего
ФормаПечати . Вывести ( СтрокаТ );

Исходный отчет


Для формирования данного отчета необходим один справочник «Сотрудники» с реквизитами «ДатаРождения», «Должность». Пусть фамилия, имя и отчество сотрудника хранятся вместе в одном поле по умолчанию – «Наименование». Для указания должности сотрудника существует другой простой справочник «Должности» с полями по умолчанию. Структура необходимых справочников приведена на рисунке ниже.

Структура данных

Теперь создадим новый отчет и назовем его «СписокСотрудников». Перейдем на вкладку «Макеты» и создадим новый макет типа «ТабличныйДокумент».
Перед нами откроется пустой табличный документ, готовый к работе. Теперь нам нужно представить необходимый отчет в виде макета.
Для этого сначала скопируем исходный отчет в чистый табличный документ, т.е. в макет отчета. Получится что-то вроде этого:

Исходный макет

Приведем макет в порядок – сделаем выравнивание заголовков по центру, для таблицы зададим отображение границ и удалим из таблицы все данные, кроме первой записи. Она у нас будет для образца.
Разобьем готовый отчет на области следующим образом:

Области макета

Для каждой области необходимо присвоить соответствующее имя, для этого необходимо выделить нужную область (в данном случае все области представляют собой группы строк) и нажать на кнопку с пиктограммой, или комбинацию клавиш Ctrl+Shift+N. В появившемся окне нужно вписать имя данной области. Назовем области так, как они указаны на рисунке.
Теперь те ячейки таблицы, в которых должны выводиться данные из информационной базы, необходимо обозначить как содержащие шаблон. Для этого выделяется это поле, и в контекстном меню (правая клавиша мыши) выбирается «Свойства». В выпадающем списке свойства ячейки «Заполнение» необходимо выбрать «Шаблон» (пример на рисунке ниже).

Заполнение=Шаблон

После этого если в тексте ячейки встретится выражение в квадратных скобках, то оно будет восприниматься системой 1С как параметр. Например, если текст ячейки следующий:

Меня зовут [МоеИмя],

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

Итоговый макет

На этом создание макета завершено. Теперь нужно программно сформировать отчет из сформированных областей и отобразить его.

Читайте также: