1с создание макета текстового документа
Публикация - своего р ода памятка, содержащая примеры кода для:
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):
- Искомый текст - Строка - Текст для замены. Текст может содержать специальные параметры. Например, ^p - абзац, ^t - табуляция
- Чувствительность к регистру - Булево - Если истина, то поиск будет осуществляться с учетом регистра
- Слова целиком - Булево - Если истина, то ищутся слова целиком. Вхождение слов не учитываются. Например, при поиске слова дом будет пропущено слово домашний
- Использовать подстановочные знаки - Булево - Если истина, то используются встроенные регулярные выражения.
- Искать похожие - Булево - Если истина, то результат поиска будет содержать похожие слова
- Искать все формы - Булево - Если истина, то результат поиска будет содержать различные формы слов.
- Поиск сначала - Булево - Если истина, то будет осуществляться с начала до конца документа
- Охват - WdFindWrap - Опредяляет направление поиска
- Формат - Format - Формат искомого текста
- Строка замены - Строка - Строка, на которую будет заменен исходный текст
- Количество замен - WdReplace - Определяет сколько раз выполнять замену
- и т.д.
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
КонецЦикла;
&НаКлиенте
Процедура ФормированиеПечатнойФормыИзТекстовогоМакета ( Команда )
ФормаПечати = СформироватьПечатнуюФорму ();
ФормаПечати . Показать ( "Счет №2020" );
&НаСервере
Функция СформироватьПечатнуюФорму ()
ФормаПечати = Новый ТекстовыйДокумент ;
Макет = ЭтотОбъект . ПолучитьМакет ( "Макет_Счета" );
// Получение области и макета по имени
Шапка = Макет . ПолучитьОбласть ( "Шапка" );
// Заполнение параметров
Шапка . Параметры . Дата = ТекущаяДата ();
Шапка . Параметры . Номер = 2020 ;
// Вывод шапки в документ
ФормаПечати . Вывести ( Шапка );
// Заголовок табличной части.
ЗаголовокТ = Макет . ПолучитьОбласть ( "ТЧ_Заголовок" );
ФормаПечати . Вывести ( ЗаголовокТ );
// Строки табличной части (обычно в цикле)
СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Строка" );
// Строка 1
СтрокаТ . Параметры . Номенклатура = "SSD Intel Optane DC P4800X 1.5TB" ;
СтрокаТ . Параметры . Количество = 7 ;
ФормаПечати . Вывести ( СтрокаТ );
// Строка 2
СтрокаТ . Параметры . Номенклатура = "SSD Huawei 02351SPX 1.92TB" ;
СтрокаТ . Параметры . Количество = 12 ;
ФормаПечати . Вывести ( СтрокаТ );
// Вывод подвала ТЧ
СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Подвал" );
СтрокаТ . Параметры . ИтогоКоличество = 19 ; // Всего
ФормаПечати . Вывести ( СтрокаТ );
Для формирования данного отчета необходим один справочник «Сотрудники» с реквизитами «ДатаРождения», «Должность». Пусть фамилия, имя и отчество сотрудника хранятся вместе в одном поле по умолчанию – «Наименование». Для указания должности сотрудника существует другой простой справочник «Должности» с полями по умолчанию. Структура необходимых справочников приведена на рисунке ниже.
Теперь создадим новый отчет и назовем его «СписокСотрудников». Перейдем на вкладку «Макеты» и создадим новый макет типа «ТабличныйДокумент».
Перед нами откроется пустой табличный документ, готовый к работе. Теперь нам нужно представить необходимый отчет в виде макета.
Для этого сначала скопируем исходный отчет в чистый табличный документ, т.е. в макет отчета. Получится что-то вроде этого:
Приведем макет в порядок – сделаем выравнивание заголовков по центру, для таблицы зададим отображение границ и удалим из таблицы все данные, кроме первой записи. Она у нас будет для образца.
Разобьем готовый отчет на области следующим образом:
Для каждой области необходимо присвоить соответствующее имя, для этого необходимо выделить нужную область (в данном случае все области представляют собой группы строк) и нажать на кнопку с пиктограммой, или комбинацию клавиш Ctrl+Shift+N. В появившемся окне нужно вписать имя данной области. Назовем области так, как они указаны на рисунке.
Теперь те ячейки таблицы, в которых должны выводиться данные из информационной базы, необходимо обозначить как содержащие шаблон. Для этого выделяется это поле, и в контекстном меню (правая клавиша мыши) выбирается «Свойства». В выпадающем списке свойства ячейки «Заполнение» необходимо выбрать «Шаблон» (пример на рисунке ниже).
После этого если в тексте ячейки встретится выражение в квадратных скобках, то оно будет восприниматься системой 1С как параметр. Например, если текст ячейки следующий:
Меня зовут [МоеИмя],
то для вывода текста «Меня зовут Иван» достаточно параметру «МоеИмя» присвоить значение «Иван».
В нашем случае шаблоном будет дата вывода отчета, а также все столбцы из строки, содержащей данные сотрудника. В итоге после всех манипуляций макет отчета будет выглядеть следующим образом:
На этом создание макета завершено. Теперь нужно программно сформировать отчет из сформированных областей и отобразить его.
Читайте также: