1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
using Word = Microsoft.Office.Interop.Word;//добавить в ссылки public partial class Form1 : Form { Button button; RichTextBox richTextBox; public Form1() { InitializeComponent(); richTextBox = new RichTextBox(); richTextBox.Size = new Size(400, 400); button = new Button(); button.Text = "Открыть"; button.Location = new Point(10, 10); this.Size = new Size(500, 500); richTextBox.Location = new Point(10, button.Bottom + 10); richTextBox.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; this.Controls.AddRange(new Control[] { button, richTextBox }); button.Click += new EventHandler(button_Click); } void button_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "MS Word dosuments (*.docx)|*.docx|Rich text format (*.rtf)|*.rtf"; if (openFileDialog.ShowDialog() == DialogResult.OK) { if (openFileDialog.FilterIndex == 1)//если формат документа Word 2007 { Word.Application app = new Microsoft.Office.Interop.Word.Application();//процесс ворда Object docxFileName = openFileDialog.FileName;//имя файла Object missing = Type.Missing; //открыли дркумент app.Documents.Open(ref docxFileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); //путь к папке с временными файлами string temp = System.IO.Path.GetTempPath(); //для передачи параметров при пересохранении Object lookComments = false; Object password = String.Empty; Object AddToRecentFiles = true; Object WritePassword = String.Empty; Object ReadOnlyRecommended = false; Object EmbedTrueTypeFonts = false; Object SaveFormsData = false; Object SaveAsAOCELetter = false; //имя файла без расширения Object rtfFileName = openFileDialog.SafeFileName.Substring(0, openFileDialog.SafeFileName.Length - ".docx".Length); //создали рандом Random random = new Random(); //проверяем есть ли файл с таким именем while (System.IO.File.Exists(rtfFileName + ".rtf")) //генерируем случайное имя файла rtfFileName += random.Next(0, 9).ToString(); //формат RTF Object wdFormatRTF = Word.WdSaveFormat.wdFormatRTF; //приписали расширение rtfFileName += ".rtf"; //приписали путь к временным файлам rtfFileName = temp + rtfFileName; //пересохранили app.ActiveDocument.SaveAs(ref rtfFileName, ref wdFormatRTF, ref lookComments, ref password, ref AddToRecentFiles, ref WritePassword, ref ReadOnlyRecommended, ref EmbedTrueTypeFonts, ref missing, ref SaveFormsData, ref SaveAsAOCELetter, ref missing, ref missing, ref missing, ref missing, ref missing); //переменная Object @false = false; //закрыли текущий документ app.ActiveDocument.Close(ref @false, ref missing, ref missing); //вышли из ворда app.Quit(ref @false, ref missing, ref missing); //прочли файл richTextBox.LoadFile((String)rtfFileName); } if (openFileDialog.FilterIndex == 2) richTextBox.LoadFile(openFileDialog.FileName); } } } |
Вообще ребята просмотр файлов можено сделать и без таких заморочек:
1-создаем реквизит типа «Строка»;
2-создаем на форме элемент «Поле»;
3-Связываем элемент Поле с реквизитом Строка;
4-в свойствах поля выставляем вид = Поле HTML документа).
Теперь если в реквизит записать конструкцию типа
Строка= «<html><body style=»»margin:0;padding:0;»»><iframe width=100% height=100% src=»»file:///»+Файл+»»»>Нет фреймам!</iframe></body></html>»;
То появляется проблема — файл открывается в отдельном окне приложения MS Office.
Эта проблема решается правкой системного реестра:
1.Запустите программу «Блокнот».
2.Скопируйте и вставьте следующий текст в Блокнот:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREClassesWord.Document.8]
«BrowserFlags»=dword:80000024
[HKEY_LOCAL_MACHINESOFTWAREClassesWord.RTF.8]
«BrowserFlags»=dword:80000024
[HKEY_LOCAL_MACHINESOFTWAREClassesWord.Document.12]
«BrowserFlags»=dword:80000024
[HKEY_LOCAL_MACHINESOFTWAREClassesWord.DocumentMacroEnabled.12]
«BrowserFlags»=dword:80000024
[HKEY_LOCAL_MACHINESOFTWAREClassesExcel.Sheet.8]
«BrowserFlags»=dword:80000A00
[HKEY_LOCAL_MACHINESOFTWAREClassesExcel.Sheet.12]
«BrowserFlags»=dword:80000A00
[HKEY_LOCAL_MACHINESOFTWAREClassesExcel.SheetMacroEnabled.12]
«BrowserFlags»=dword:80000A00
[HKEY_LOCAL_MACHINESOFTWAREClassesExcel.SheetBinaryMacroEnabled.12]
«BrowserFlags»=dword:80000A00
[HKEY_LOCAL_MACHINESOFTWAREClassesPowerPoint.Show.8]
«BrowserFlags»=dword:800000A0
[HKEY_LOCAL_MACHINESOFTWAREClassesPowerPoint.Show.12]
«BrowserFlags»=dword:800000A0
[HKEY_LOCAL_MACHINESOFTWAREClassesPowerPoint.ShowMacroEnabled.12]
«BrowserFlags»=dword:800000A0
[HKEY_LOCAL_MACHINESOFTWAREClassesPowerPoint.SlideShow.8]
«BrowserFlags»=dword:800000A0
[HKEY_LOCAL_MACHINESOFTWAREClassesPowerPoint.SlideShow.12]
«BrowserFlags»=dword:800000A0
[HKEY_LOCAL_MACHINESOFTWAREClassesPowerPoint.SlideShowMacroEnabled.12]
«BrowserFlags»=dword:800000A0
[HKEY_CLASSES_ROOTExcel.Sheet.8]
«EditFlags»=dword:00010000
[HKEY_CLASSES_ROOTExcel.Sheet.12]
«EditFlags»=dword:00010000
[HKEY_CLASSES_ROOTWord.Document.8]
«EditFlags»=dword:00010000
[HKEY_CLASSES_ROOTWord.Document.12]
«EditFlags»=dword:00010000
3.Сохраните файл с именем Имя файла. reg.
4.Дважды щелкните Имя файла.reg для запуска данного сценария реестра.
После чего как говорится — БУДЕТ ВАМ СЧАСТЬЕ=)
Нынешние тенденции разработок решений на базе платформы 1С стремительно переходят в область интернет-технологий, часто требуется обеспечить вывод на управляемую форму содержимое того или иного файла. В В большинстве браузеров по умолчанию есть возможность просмотра PDF файлов и на большинстве компьютеров стоит MS Office. Как правило, используются файлы следующих форматов: gif, tif, jpeg, jpg, png, bmp, xls, xlsx, xml, pdf, doc, docx, rtf. Их можно разделить на картинки и документы Office. Напомню, что цель всех функций — преобразовать файл в формат PDF и отобразить его на форме HTML. Итак, пусть на форме есть элемент управления с именем fHtml и есть файл с именем C:MyFile.pdf, код HTML для вывода файла на страницу будет таким:
<html>
<body>
<object data=»file:///C:/MyFile.pdf» type=»application/pdf» width=»90%» height=»90%»>
</object>
</body>
</html>
Далее нам надо из файла любого формата получить файл pdf.
Текстовый файл, формат txt
_word = New COMОбъект («Word.Application»);// запускаем word
_word.DisplayAlerts = 0; // запрещаем сообщения, они блокируют word
doc = _word.Documents.Add(); // добавляем документ
doc.Activate(); // активируем текущий документ
ЧТ = новый ЧтениеТекста(ИмяФайла_txt); // чтение нашего txt файла
_word.Selection.TypeText(ЧТ.Прочитать()); // вставляем текст в ткеущий документ
wdExportFormatPDF = 17; // код экспорт а в PDF
ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
// преобразуем текстовый формат в PDF при сохранении документа
doc.ExportAsFixedFormat (ИмяФайлаPDF, wdExportFormatPDF, 0, false, 0, 1, 1, 0, True, True, 0, True, True, False);
doc.Close( False ); // закрываем документ
_word.Quit(); // закрывам word
Документ MS Word, форматы doc, docx, rtf
doc = _word.Documents.Open(ИмяФайла); // просто открываем файл
wdExportFormatPDF = 17; // код экспорт а в PDF
ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
// преобразуем в формат PDF при сохранении документа
doc.ExportAsFixedFormat (ИмяФайлаPDF, wdExportFormatPDF, 0, false, 0, 1, 1, 0, True, True, 0, True, True, False);
Картинки, форматы gif, tif, jpeg, jpg, png, bmp
doc = _word.Documents.Add();// добавляем документ
s = doc.InlineShapes.AddPicture(ИмяФайла, False, True); // добавляем картинку в документ
wdExportFormatPDF = 17; // код экспорта в PDF
ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
// преобразуем в формат PDF при сохранении документа
doc.ExportAsFixedFormat (ИмяФайлаPDF , wdExportFormatPDF, 0, false, 0, 1, 1, 0, True, True, 0, True, True, False);
Документ Excel, форматы xls, xlsx, xml
_Excel = New COMОбъект («Excel.Application»); // запускаем Excel
doc = _Excel.Workbooks.Open(ИмяФайла); // открываем файл
ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
doc.ExportAsFixedFormat (0, ИмяФайлаPDF , 0);// сохраняем файл в формате PDF
doc.Close( False ); // закрываем документ
_Excel.Quit(); // закрываем Excel
В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:
Использование шаблонов Word в 1С
Использование шаблонов Word в 1С
Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:
Установка закладки, шаблон Word для 1С
Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗаполнитьШаблонВорд();
КонецПроцедуры
&НаКлиенте
Функция ЗаполнитьШаблонВорд()
//Попытка создать COM объект
Попытка
ОбъектВорд = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
//Путь к шаблону
ОбъектВорд.Documents.Add("C:UsersКонстантинDesktopШаблон.docx");
ШаблонВорд = ОбъектВорд.ActiveDocument;
//Получаем все закладки из шаблона
Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл
Сообщить(ЗакладкаВорд.Name);
КонецЦикла;
//Заменяем закладку1 на текст
ШаблонВорд.Bookmarks("Закладка1").Select();
ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1.");
//Заменяем закладку2 на текст
ШаблонВорд.Bookmarks("Закладка2").Select();
ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2.");
//Заменяем закладку3 на текущую дату
ШаблонВорд.Bookmarks("Закладка3").Select();
ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();
//Закрытие документа
//ОбъектВорд.Application.Quit();
КонецФункции
В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:
Результат использования шаблонов Word в 1С
Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.
Скачать файл обработки 1С и шаблона Word.
Дополнение к заметке Использование шаблонов Word в 1С
Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.
1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:
//Заменяем закладку3 на текущую дату
ШаблонВорд.Bookmarks("Закладка3").Select();
ШаблонВорд.Application.Selection.Font.Bold = 1;
ШаблонВорд.Application.Selection.Font.Size = 20;
ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:
// Вставка изображения
ШаблонВорд.Bookmarks("Закладка3").Select();
ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:UsersКонстантинDesktoplogo_1c.png");
3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:Шаблон.docx».
4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Макет = ОбработкаОбъект.ПолучитьМакет("ШаблонПисьмаПросрочка");
ИмяФайла = КаталогВременныхФайлов() + ""файл.doc";
Макет.Записать(ИмяФайла);
Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать(< ИмяФайла>, < ТипФайлаТаблицы>) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».
5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
"C:UsersКонстантинDesktopТест.txt", SubAddress:="", ScreenTip:="", _
TextToDisplay:="ТестоваяСсылка"
End Sub
Описание метода добавления в MSDN: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word
Соответственно код для 1С следующий:
Функция ЗаполнитьШаблонВорд()
//Попытка создать COM объект
Попытка
ОбъектВорд = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
//Путь к шаблону
ОбъектВорд.Documents.Add("C:Usersk.blaginDesktopШаблон.docx");
ШаблонВорд = ОбъектВорд.ActiveDocument;
//Получаем все ссылки из шаблона
Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл
Сообщить(ЗакладкаВорд.Name);
КонецЦикла;
//Меняем адрес уже существующей ссылки
ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:Usersk.blaginDesktopMemory.zip";
//Заменяем закладку на ссылку
ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3");
ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:Usersk.blaginDesktopШаблон.docx", "", "Шаблон.docx", "C:Usersk.blaginDesktopШаблон.docx");
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();
//Закрытие документа
//ОбъектВорд.Application.Quit();
КонецФункции
Демонстрация процесса формирования внешней печатной формы документа из макета Word средствами БСП, колонтитулы, коллекции, и обычные параметры
Функция СведенияОВнешнейОбработке() Экспорт
// Стандартное описание сведений о внешней печатной форме
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.БезопасныйРежим = Ложь;
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Наименование = "Название печатной формы";
ПараметрыРегистрации.Назначение.Добавить("Справочник.ФизическиеЛица");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Название команды"; //Синоним
НоваяКоманда.Идентификатор = "НазваниеКоманды"; //ПолноеИмя
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Просто передаем управление дальше если удовлетворяет условию
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НазваниеКоманды") Тогда
ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати);
КонецЕсли;
КонецПроцедуры
Процедура ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати) Экспорт
// Сначала получим данные а потом передадим их для заполнения макета
МассивДанныхЗаполнения = ПолучитьДанныеДляПечатиДокумента(МассивОбъектов);
ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати);
КонецПроцедуры
Функция ПолучитьДанныеДляПечатиДокумента(МассивОбъектов)
// здесь происходит заполнение данными для ПФ
Данные = Новый Структура;
Данные.Вставить("Организация", "ООО ""Рога и копыта""");
Данные.Вставить("Контрагент", "ИП Иванов");
Данные.Вставить("СуммаОплаты", 10523);
Данные.Вставить("Дата", '202110102158');
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("Номенклатура");
ТаблицаДанных.Колонки.Добавить("Количество");
ТаблицаДанных.Колонки.Добавить("Сумма");
Строка = ТаблицаДанных.Добавить();
Строка.Номенклатура = "тест";
Строка.Количество = 2;
Строка.Сумма = 50;
Строка = ТаблицаДанных.Добавить();
Строка.Номенклатура = "тест1";
Строка.Количество = 3;
Строка.Сумма = 55;
Строка = ТаблицаДанных.Добавить();
Строка.Номенклатура = "тест2";
Строка.Количество = 4;
Строка.Сумма = 51;
ТаблицаДанныхВМассиве = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаДанных);
Данные.Вставить("ТаблицаДанных", ТаблицаДанныхВМассиве);
Возврат Данные;
КонецФункции
Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати)
ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_НазваниеМакета");
Если ДвоичныеДанныеМакета <> Неопределено Тогда
// Инициализируем печатную форму
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "НазваниеКоманды");
// Наличие пустого табличного документа в коллекции обязательно
ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета,Неопределено);
ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);
// Определим какие области в документе Word хотим заполнить
// Для этого у нас документ должен быть размечен конструкциями
// {v8 Область.НазваниеОбласти}
// {/v8 Область.НазваниеОбласти}
// наличие областей обязательно
// Область для заполнения обычных параметров в тексте
ОбластьЗаголовок = Новый Структура;
ОбластьЗаголовок.Вставить("ИмяОбласти", "Заголовок");
ОбластьЗаголовок.Вставить("ТипОбласти", "Общая");
// Пример определения областей коллекций (таблица и нумерованный или обычный списки)
ОбластьШапкаТаблицы = Новый Структура;
ОбластьШапкаТаблицы.Вставить("ИмяОбласти", "ШапкаТаблицы");
ОбластьШапкаТаблицы.Вставить("ТипОбласти", "Общая");
ОбластьСтрокаТаблицы = Новый Структура;
ОбластьСтрокаТаблицы.Вставить("ИмяОбласти", "СтрокаТаблицы");
ОбластьСтрокаТаблицы.Вставить("ТипОбласти", "СтрокаТаблицы");
// Область должна быть определена первым элементом списка
// {v8 Область.НумерованныйСписок}
// 1.{v8 Номенклатура}
// {/v8 Область.НумерованныйСписок}
ОбластьНумерованныйСписка = Новый Структура;
ОбластьНумерованныйСписка.Вставить("ИмяОбласти", "НумерованныйСписок");
ОбластьНумерованныйСписка.Вставить("ТипОбласти", "Список");
// Область должна быть определена первым элементом списка
// {v8 Область.МаркированныйСписок}
// • {v8 Номенклатура}
// {/v8 Область.МаркированныйСписок}
ОбластьМаркированногоСписка = Новый Структура;
ОбластьМаркированногоСписка.Вставить("ИмяОбласти", "МаркированныйСписок");
ОбластьМаркированногоСписка.Вставить("ТипОбласти", "Список");
// Пример определения областей колонтитулов, эти области в документе есть по умолчанию,
// если колонтитулы определены в самом документе
ОбластьВерхнийКолонтитул = Новый Структура;
ОбластьВерхнийКолонтитул.Вставить("ИмяОбласти", "ВерхнийКолонтитул");
ОбластьВерхнийКолонтитул.Вставить("ТипОбласти", "ВерхнийКолонтитул");
ОбластьНижнийКолонтитул = Новый Структура;
ОбластьНижнийКолонтитул.Вставить("ИмяОбласти", "НижнийКолонтитул");
ОбластьНижнийКолонтитул.Вставить("ТипОбласти", "НижнийКолонтитул");
// Передаем данные заполнения для заполнения печатной формы
// Имена параметров данных заполнения должны совпадать с размеченными параметрами в документе в виде
// {v8 НазваниеПараметра}
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаголовок);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения, Ложь);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьВерхнийКолонтитул);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьНижнийКолонтитул);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьШапкаТаблицы);
УправлениеПечатью.ПрисоединитьОбласть(ПечатнаяФормаДокумента, Область, Ложь);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьСтрокаТаблицы);
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьНумерованныйСписка);
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьМаркированногоСписка);
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
// Поместим получившийся документ в коллекцию печатных форм, в раздел ОфисныеДокументы
// так БСП поймет что нужно открывать Word при формировании печатной формы
АдресХранилищаОфисныйДокумент = УправлениеПечатью.СформироватьДокумент(ПечатнаяФормаДокумента);
УправлениеПечатью.ОчиститьСсылки(ПечатнаяФормаДокумента, Ложь);
УправлениеПечатью.ОчиститьСсылки(Макет);
ОфисныеДокументы = Новый Соответствие;
ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, НСтр("ru = 'Название документа'"));
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Название документа (документ Microsoft Word)'");
ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
КонецЕсли;
КонецПроцедуры
Комментарии
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
2017-12-19T18:36:38+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент



Оглавление (нажмите, чтобы раскрыть)
/// Как создать документ Word на основе шаблона из 1с 8.3, 8.2 &НаКлиенте Функция КакСоздатьДокументWordНаОсновеШаблона(ПутьКШаблону) // В шаблоне уже расставлены поля с определенными // именами, например, org_name, inn, kpp и т.д. // Наша задача - заполнить эти поля и сохранить // этот шаблон в виде вордовкского файла с // расширением docx; // Сам шаблон мы создали по инструкции отсюда: // helpme1s.ru/kak-sozdavat-shablony-word-dlya-ispolzovaniya-v-1s // Или взяли готовым отсюда: // helpme1s.ru/files/ref/bill.dotx ПриложениеВорд = Новый COMОбъект("Word.Application"); ОбъектШаблон = ПриложениеВорд.Documents.Add(ПутьКШаблону); Для Каждого Поле Из ОбъектШаблон.Fields Цикл ПолноеИмяПоля = Поле.Code.Text; // Наши предопределенные поля имеют такой // вид: " MERGEFIELD org_name * MERGEFORMAT". // Наша задача - вытащить из этой конструкции org_name // (ну или другое имя, которое мы задали в ворде). Если (Найти(ПолноеИмяПоля, " MERGEFIELD") = 1) Тогда ПозицияСлеша = Найти(ПолноеИмяПоля, "*"); КороткоеИмяПоля = СокрЛП(Сред(ПолноеИмяПоля, 12, ПозицияСлеша - 12)); ЗначениеПоля = ""; Если КороткоеИмяПоля = "id" Тогда ЗначениеПоля = "1"; ИначеЕсли КороткоеИмяПоля = "bill_date" Тогда ЗначениеПоля = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy"); ИначеЕсли КороткоеИмяПоля = "org_name" Тогда ЗначениеПоля = "ООО ""Ромашка"""; ИначеЕсли КороткоеИмяПоля = "inn" Тогда ЗначениеПоля = "1234567890"; ИначеЕсли КороткоеИмяПоля = "kpp" Тогда ЗначениеПоля = "123456789"; Иначе // ... и так все нужные поля КонецЕсли; Если ЗначениеПоля <> "" Тогда Поле.Select(); ОбъектШаблон.Application.Selection.TypeText(ЗначениеПоля); КонецЕсли; КонецЕсли; КонецЦикла; // Запишем файл в папку "Мои документы" пользователя ФайлДляЗаписи = КаталогДокументов() + "helpme1c_ru_word_test.docx"; // Если такой файл уже существует - удалим его. УдалитьФайлы(ФайлДляЗаписи); // Сохраняем шаблон как документ Word с расширением docx. ОбъектШаблон.SaveAs(ФайлДляЗаписи); // Не забываем закрыть приложение Word. ОбъектШаблон.Application.Quit(); Возврат ФайлДляЗаписи; КонецФункции /// Скачать и выполнить эти примеры на компьютере



Работа с Word в языке 1С 8.3, 8.2 (в примерах)
<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:





