0
Голосовать

Отчет в MS Word

Создано:
Метки записи:

Как организовать вывод отчетов в MS WORD?
Допустим у меня есть типовой договор. И только в нужние места я вставляю текст из Terrasoft.

Комментарии

Агутин Алексей

Если у Вас версия начиная с 3.2.0 используйте пользовательские отчеты

Клименко Николай

Данная функциональность на уровне пользовательских отчетов реализована в версиях 3.3.0 и выше.
В версии 2.8 реализованы выводы отчетов исключительно с помощью FastReport.

Глова Сергей

Лично я увидел как это делается на одном из вебинаров. И Вам рекомендую. Описание процедуры есть в документации.

Писанка Игорь Сергеевич

У меня версия 2.8. и вывод надо сделать в Word. )))

Александр Кудряшов

Ага, вот и версия TS))
Тогда делаем простой отчет и экспортим его в Word.
Путь второй - пишем плагин для вывода в Word.

ООО "Лайнсервис"
www.ls-crm.ru

Писанка Игорь Сергеевич

Экспортим его в Word и все колонки плывут влево/вправо. Пишем плагин - это заманчиво. Но главный вопрос КАК?

Александр Кудряшов
Писанка Игорь Сергеевич пишет:
колонки плывут влево/вправо

можно попробовать вылечить ОЧЕНЬ четкой структурой, разметкой отчета в FastReport

ООО "Лайнсервис"
www.ls-crm.ru

Александр Кудряшов
Писанка Игорь Сергеевич пишет:
Пишем плагин - это заманчиво. Но главный вопрос КАК?

пишем свой плагин (Delphi, VS...) для Terrasoft (поднимаем Руководство по Адаптации для версии 2.8), который реализует вывод данных в Word. Потом обращаемся к нему, когда надо, из скрипта.

Насколько я помню, в 2.8 нельзя создать просто экземпляр Word и воспользоваться его методами для создания документа...

ООО "Лайнсервис"
www.ls-crm.ru

Клименко Николай

Для создания плагина Вам необходимо написать его в Delphi, сохранить с расширением .dll, затем вызвать в Terrasoft данный плагин на выполнение, передав ему параметры.
Ниже - примеры библиотеки и вызова ее из Terrasoft.

Клименко Николай

Реализация библиотеки:

library ScriptLibrary;
uses
SysUtils,
Classes,
Dialogs,
Forms,
Controls,
StdCtrls;

{$R *.res}

procedure InputText(var Param: Variant); export;
var
Form: TForm;
Button: TButton;
Edit: TEdit;
Result: Integer;
begin
Form := TForm.Create(nil);
Button := TButton.Create(nil);
Edit := TEdit.Create(nil);
try
Form.Caption := Param[0];
Form.Position := poMainFormCenter;
Button.Top := 50;
Button.Parent := Form;
Button.ModalResult := mrOk;
Button.Caption := 'OK';
Edit.Parent := Form;
Edit.Text := Param[2];
Result := Form.ShowModal;
Param[1] := Result;
if (Result = mrOk) then
Param[2] := Edit.Text;
finally
Edit.Free;
Button.Free;
Form.Free;
end;
end;

exports
InputText name 'InputText';

begin
end.

Клименко Николай

Пример вызова из скрипта:

var
Param: Variant;
ModuleHandle: Integer;
LibraryFileName: string;
ProcName: string;
begin
LibraryFileName := Format('%sScriptLibrary\%s', [ExtractFilePath(ParamStr(0)), 'ScriptLibrary.dll']);
ProcName := 'InputText';
ModuleHandle := LoadLibrary(LibraryFileName);
if (ModuleHandle <= 0) then
begin
ShowMessage(Format('Ошибка загрузки библиотеки "%s"', [LibraryFileName]));
Exit;
end;
try
Param := VarArrayOf(['Введите текст', 0, 'Текст']);
if (not CallLibraryProc(ModuleHandle, ProcName, Param)) then
begin
ShowMessage(Format('Ошибка вызова процедуры "%s" из библиотеки "%s"',
[ProcName ,LibraryFileName]));
Exit;
end;
if (Param[1] = mrOk) then
ShowMessage(Param[2]);
finally
FreeLibrary(ModuleHandle);
end;

Писанка Игорь Сергеевич

to Клименко Николай
Спасибо. Как раз то что нужно.