При решении задачи формирования договоров с контрагентами из 1 С была необходимость сохранять их в формате Microsoft Word. Так как на сервере в большинстве случаев пакет Microsoft Office отсутствует, пришлось искать разные решения данной проблемы. Случайно наткнулся на не большую утилиту REPORTF. Живет это чудо здесь.
Принцип работы подробно описан в документации. Так же автор утилиты любезно предоставил в ваше распоряжении исходные тексты RepoRTFM.cpp (для BCB и Visual C++), RepoRTFM.pas (для Delphi), RepoRTFL.cpp и RepoRTFL.pas для иллюстрации вызова функции rtf_CreateReport, исполняемые модули RepoRTF.exe и RepoRTFL.exe, модули интерфейсных функций reportfo.cpp, reportfo.pas, reportf.prg и два десятка контрольных примеров к ним, с подробными комментариями.
Данная утилита позволяет формировать отчеты в форматах rtf, htm и html даже из под DOSa.
Для формирования отчета необходимо два файла:
1. Файл шаблона в формате rtf;
2. Файл параметров в формате txt, который можно сформировать в любом ПО, в моем примере это 1С ТИС 9.2.
Далее запускаем reportf.exe с параметрами:
1. reportf.exe dat.txt pic.rtf rep.rtf - формируется отчет и открывается в WORD
2. reportf.exe dat.txt pic.rtf rep.rtf - /m - просто формируется без открытия (как раз мой случай т.к. word не установлен)
3. reportf.exe dat.txt pic.rtf rep.rtf - /m - /p - формирование отчета и отправка на печать.
Кстати для просмотра результата можно использовать бесплатный Microsoft Office Word Viewer.
В качестве примера использовал штатную обработку печати postup.ert, процедура печать:
Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
т=СоздатьОбъект("Текст");
ФайлПараметров=КаталогВременныхФайлов()+"dat.txt";
ФайлШаблона=глКаталогПечФорм+"postup.rtf";
ФайлПечФормы=КаталогВременныхФайлов()+"rep.rtf";
т.ДобавитьСтроку("|0:NumDoc:"+глНомерНаПечать(Докум));
т.ДобавитьСтроку("|0:DateDoc:"+?(ПустоеЗначение(Докум.ДатаДокВходящий) = 0, Докум.ДатаДокВходящий, Докум.ДатаДок)+" г.");
// Секция Покупатель
Покупатель = СокрЛП(Докум.Фирма.ЮрЛицо.ПолнНаименование) + " " + глПредставлениеАдреса(Докум.Фирма.ЮрЛицо.ЮрАдрес);
т.ДобавитьСтроку("|0:pokupatel:"+Покупатель);
// Секция Поставщик
Если ПустоеЗначение(Докум.Контрагент) = 0 Тогда
Поставщик = СокрЛП(Докум.Контрагент.ЮрФизЛицо.ПолнНаименование);
Иначе
Поставщик = "";
КонецЕсли;
т.ДобавитьСтроку("|0:postavchik:"+Поставщик);
N = 0;
Докум.ВыбратьСтроки();
Пока Докум.ПолучитьСтроку() = 1 Цикл
N = N + 1;
т.ДобавитьСтроку("|1:N:"+N+"|1:tovar:"+СокрЛП(Докум.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "")+"|1:kolvo:"+Докум.Количество+"|1:ed:"+Докум.Единица+"|1:price:"+глФрм(Докум.Цена)+"|1:summa:"+глФрм(Докум.Сумма)+"");
КонецЦикла;
СуммаИтог = Докум.Итог("Сумма");
т.ДобавитьСтроку("|0:itogo:"+глФРМ(СуммаИтог));
т.ДобавитьСтроку("|0:itogostr:Всего наименований "+Докум.КоличествоСтрок()+", на сумму "+глФРМ(СуммаИтог, Докум.Валюта)+"");
т.ДобавитьСтроку("|0:summastr:"+глСуммаПрописью(СуммаИтог, Докум.Валюта));
т.Записать(ФайлПараметров);
ЗапуститьПриложение(""+глКаталогПечФорм+"reportf.exe "+ФайлПараметров+" "+ФайлШаблона+" "+ФайлПечФормы+"");
КонецПроцедуры // Печать()
Мой пример использования данной утилиты для печати приходной накладной - самый примитивный и просто направлен на демонстрацию возможности ее применения в том числе и в проектах 1С. В общей сложности она поддерживается до 999 подуровней вложения включая все возможности WORD (картинки, таблицы, колонтитулы и т.д.). Таким образом применение этой утилиты поможет Вам в разработке самых сложных проектов связанных так или иначе с экспортом в WORD с минимальными затратами как по времени, так и минимальным количеством строк в программном модуле.