Category: компьютеры

Category was added automatically. Read all entries about "компьютеры".

Создаём собственные отчёты в Excel

Мы будем подключаться к Экселю как к COM-серверу. Следовательно он должен быть установлен на компьютере. Мы можем запускать эксель (читать файлы, писать файлы, показывать на экран) как на сервере (если это винда), так и на компьютере клиента. В первом случае нам надо использовать серверный скрипт, во втором браузерный.

Пример серверного скрипта для работы с экселем (только если сибель установлен под виндой)

var ExcelIns = COMCreateObject("Excel.Application");
ExcelIns.Visible = true;
ExcelIns.WorkBooks.Add();
var masRows:Array=this.BusComp().GetFieldValue("Identificator").split("\n");
var masColls:Array;
for(var i=0;i<masRows.length;i++){
masColls=masRows[i].split(";");
for(var j=0;j<masColls.length;j++)
ExcelIns.ActiveSheet.Cells(i+1,j+1).Value = masColls[j];
masColls=null;
}

masRows=null;
//ExcelIns.Application.Quit();
ExcelIns=null;

Пример браузерного скрипта для работы с экселем.

При использовании браузерного скрпита аплета следует помнить, что в нём доступны только те поля БК, которые вынесены на сам аплет (плюс пять обязательных полей).

Также следует помнить, что из браузерного скрипта аплета можно вызывать сначала браузерный, а потом одноимённый серверный скрипты БС (а из серверного скрипта аплета только серверный скрипт БС)

Итак, у нас на бк есть длинное поле типа DTYPE_NOTE и размером 16 383 (в базе оно имеет тип long). Мы заполняем это поле в серверном скрипте (или где-то ещё). В этом поле хранится отчёт, который должен быть показан в экселе.

в бразуерном скрипте аплета по нажатию кнопки мы показываем отчёт путём вызова метода из БС и передачи ему значения из нашего длинного поля

var svc = TheApplication().GetService("CommonUtilsBS");
var inputPropSet = TheApplication().NewPropertySet();
inputPropSet.SetProperty("ReportString", this.BusComp().GetFieldValue("Identificator"));
svc.InvokeMethod("ShowReport", inputPropSet);
inputPropSet=null; svc=null

вот код этого БС


if (methodName=="ShowReport"){
//TheApplication().SWEAlert("la-la-la1");
var txt=inputPropSet.GetProperty("ReportString");
var ExcelIns = new ActiveXObject("Excel.Application");
ExcelIns.Visible = true;
ExcelIns.WorkBooks.Add();
var masRows=txt.split("\n");
//var masColls;
var i;
for(i=0;i<masRows.length;i++){
masColls=masRows[i].split(";");
for(var j=0;j<masColls.length;j++)
ExcelIns.ActiveSheet.Cells(i+1,j+1).Value = masColls[j];
masColls=null;
}
masRows=null;
//ExcelIns.Application.Quit();
ExcelIns=null;
txt=null;
return ("CancelOperation");
}