Здравствуйте! Я в террасофте совсем новичок, только начинаю изучать. Версия ТС - 3.4.0.38. По форуму искала, вроде подходящего решения не нашла, либо не поняла что это "оно". Подскажите пожалуйста!
Была поставлена задача - по расписанию формировать файл с отчетом для Excel (есть аналог для работы пользователя в FR), выкладывать его в сеть и отправлять группе лиц.
Вроде как все решила через SQL, правда экселевский файл сформировала через spread xls на xml.
Несущественная проблема - при открытии на некоторых компьютерах ругается на несоответствие формата, с этим можно жить, но вот на телефонах этот файл не открывается в приложениях, но очень нужно.
В итоге встал вопрос о другом формате.. Возможно ли как то через sql или сам террасофт выполнить по расписанию формирование файла в формате xlsx или pdf (редактируемый)? Либо конвертацию сделать, может что-то вроде - открыть файл в sql через sp_OACreate 'Excel.Application', и сохранить его в xlsx..

Нравится

4 комментария

С помощью Terrasoft, также можно выполнить такую задачу, для этого необходимо на сервер создать задачу (Task Scheduler), которая будет запускаться по времени и вызывать Terrasoft командой TSClient.exe /wnd=wnd_ExportRep.

Где в окне wnd_ExportRep будет прописана логика экспорта.
Обратите внимание на сервисы scr_MSExcelLibrary, scr_MSExcelLibraryConsts, а также на сервис scr_UserReportCommon, в особенности на функцию GetExcelObject - которая возвращает Com объект на Excel.

Также можно изучить работу сервиса scr_ImportExcelWizardUtils, который автоматически создает отчеты в Excel, на основании его работы можете создать свой экспорт.

Хороший вариант! Спасибо! Правда мне очень много стоит изучить для реализации подобного..
А клиент терры будет открыватся на сервере или только процесс висеть? Если есть возможность подсказать подобные примеры решения буду очень признательна.

Пробовала запускать excel на террасофте через var ExcelApp = new ActiveXObject("Excel.Application");
но система выругалась на меня и клиент вылетел..

Можете взять мой пример запуска коннектора и создание Excel файла.
Алгоритм следующий:
1. Создайте файле с расширением js
2. Пропишите в нем следующий код:

function WSLog(LogText) {
	WScript.stdout.WriteLine(LogText);
}
 
function GetExcelObject() {
	var Excel = new ActiveXObject('Excel.Application');
	var Excel_wb = Excel.Workbooks.Add();
	Excel.Sheets(1).Name = "Данные";
	var SheetsCount = Excel.Sheets.Count;
	for (var i = 2; i <= SheetsCount; i++) {
		Excel.Sheets(2).Delete();
	}
	Excel.Visible = false;
	return Excel;
}
 
function Main() {
	var args = WScript.arguments;
	var ConfigurationName = "TS_3.4.1.113_XRM_SD_SoftKey_ENU_Tereshchuk";
	var AuthenticationMode = 1; //1 - DatabaseServer, 0 - Windows
	var UserName = "Supervisor";
	var UserPassword = "";
	var ExcelFileName = 'C:\\Temp\\TestExcel.xlsx';
	WSLog("Start!");
	var Connector =  new ActiveXObject('TSObjectLibrary.Connector');
	var Config;
	if (AuthenticationMode) {
		Config = Connector.OpenConfigurationByName(ConfigurationName, AuthenticationMode, UserName, UserPassword);
	} else {
		Config = Connector.OpenConfigurationByName(ConfigurationName, AuthenticationMode);
	}
	var Excel = GetExcelObject();
	Excel.Sheets(1).SaveAs(ExcelFileName);
	Excel.Visible = true;
	Connector.Logoff();
	WSLog("Finish!");
}
 
Main();

3. Создайте файл с расширением bat и пропишите в нем код:
%WinDir%/SysWOW64/cscript.exe /d D:\Projects\JS\RunTS.js

4. Запустите bat файл

Исходники: js.zip

Спасибо!
Так как задача была горящей, а 'Excel.Application' наотрез отказывается работать, временно решила через excelcnv.exe. Там правда очень много нюансов, за счет чего код получился совсем извращенным, но главное рабочим.. позже вернусь к приведению в нормальный вид ) попробую все-таки решить через террасофт по #1 предложенному ответу.

Показать все комментарии

Здравствуйте. Столкнулся с след. проблемой. Стоит задача печатать большое кол-во документов(одного типа). У документа есть деталь "Мат. ценности". Если там пусто, нужно печатать 3 пустые строки. С этим все понятно. Создал отчет для выделенных записей. При построении отчета имеется проблема: Если в середину отчета попадает документ с пустой деталью, то для этой записи не печатается header и footer
1

Чтобы стало яснее, вот скриншот того, как печатает для документа с непустой деталью:
2

Ниже скрин печати, если id записи документа с пустой деталью попадает в конец отчета либо в начало.Это то, что мне нужно получать всегда, независимо от того, на каком месте(странице) в формируемом отчете она нах-ся. Правильность отображения должна сохраняться!
3

Вот картина отчета в общем:
Общий вид

Проблема в том, что для такого варианта(рис.1, первый скрин) не печатает хедер и футер.
Парадокс, когда документ с пустой деталью выпадает на начало отчета или конец, печатает ВСЕГДА нормально.... Также нормально печатает записи, где деталь не пустая.

Как мне бороться с такой проблемой?

TS XRM 3.4

Нравится

10 комментариев

Антон, сложно сказать в чем может быть причина.

Предлагаю:

а) предоставить резервную копию БД;
б) удаленное подключение для анализа проблемы;

Ответ можно направить в личном сообщении.

Ок, написал в личку

Уважаемые сотрудники компании "Terrasoft"!Ну что там с отчетом? жду 3 недели, надеюсь дождусь

Антон, добрый вечер!
Извините, нужен бекап Вашей БД.

Хорошо, я же уже давал)ссылка на скачку у вас в скайпе!

Антон, ок, спасибо! Занимаемся. В понедельник будет информация.

Антон, изменили отчет, протестируйте, пожалуйста (вместо MastrData1 добавлен Child2, который подчинен Child1).
Сервисы отчета во вложении.

Ок, спасибо, попробую!

Да, все получилось. Спасибо!

Показать все комментарии

Здравствуйте! Стоит задача распечатывать большое кол-во документов без показа стандартного окна параметров печати. Печатные формы в FR. По нажатию кнопки печать в фоновом режиме должны формироваться отчеты, и отправляться на печать. Для одного док-та делал такое(с окном параметров печати), но для пачки не представляю, возможно ли такое реализовать?

Нравится

3 комментария

Добрый день.

Окно параметров печати системное, Вы его средствами конфигурирования ТС не пропустите. Разве что напишете ком, который будет нажимать ОК на верхнем\активном окне.

может быть, стоит подумать, чтобы слить все отчеты в один? особенно, если речь идет о нескольких экземплярах одного и того же

Да, именно так и решил поступить... но, возникла проблема, которую описал в теме форума http://www.community.terrasoft.ru/forum/topic/9434.
Эту тему закрываю.

Показать все комментарии

Доброе утро всем. Мне нужно вывести любое число в отчете FR в след. формате: к примеру число 2033,33, вывести 2 033 руб. 33 коп. (с разделителями тысяч). И чтобы находилось это в одном Memo. Вопрос следующий: нужно функцию писать по разделению целой части числа на тысячи, миллионы, или есть другие варианты? просто удобно использовать форматирование числа в самом Memo на вкладке Format, но в моем варианте так не сделаешь, потому что в выражении Memo присутствует строка 'руб','коп.' и компилятор ругается. Подскажите, пож-ста, как лучше реализовать.

Нравится

9 комментариев

Здравствуйте, Антон!
А Вы не пробовали с помощью вычисляемых полей? то есть, создать поле, например AmountStr, в котором (на событии датасета OnDatasetCalcFields(Dataset)) с помощью функции AmountToStr "перевести" сумму числом в сумму прописью. кстати, про сумму прописью на комюнити есть много похожих тем. (например, здесь или здесь).
код примерно такой:

//amount to string
	var Sum =  Dataset.ValAsFloat('Amount');
	var StringSum = Sum.toString()
	var Result = AmountToStr(StringSum, 'ua', 'UAH');	//в рублях -- AmountToStr(StringSum, 'ru', 'RUR');
	Dataset.Values('AmountStr') = Result;

дополнительные параметры функции можно посмотреть в самой функции (кажется, она в скрипте scr_WindowUtils. кстати, этот скрипт нужно подключить при написании кода).

"Ольга Прилипко" написал: с помощью функции AmountToStr "перевести" сумму числом в сумму прописью

Ему не нужно прописью, нужно цифрами с пробелами.

Добрый день!

Воспользуйтесь стандартной функцией FR - формат отображения:

http://www.community.terrasoft.ua/system/files/08-08-2012_11-32-21.png

Разделитель тысяч ставим следющим образом:
[MySum #n%2,2n]
т.е к полю которое уже ([MySum]) есть дописываем #n%2,2n, тоже самое делает FastReport когда устанавливает DisplayFormat
Подробнее тут

P.S. В DisplayFormat FastReport'a такого отображения нет.

Спасибо. Мне еще нужно чтобы 0 коп. отображало как 00 коп. Вот с этим проблемно уже справиться...

Написал функцию разбиения числа на тысячи, в Memo в событии OnBeforePrint присваиваю эту строку, но пишет ошибку:
1

В Memo выставил свойство Format = Text(no formating). Почему оно пытается строку (данные в Memo)в Double перевести?

Антон, попробуйте вариант решения, который я описал.

"Зверев Александр" написал:Ему не нужно прописью, нужно цифрами с пробелами.

да, я вчера затупила, прошу прощения. я просто больше обратила внимания на то, что нужны рубли и копейки...
"Каневский Антон Владимирович" написал:нужно функцию писать по разделению целой части числа на тысячи, миллионы, или есть другие варианты

Судя по всему, Вы были правы с самого начала -- нужно писать функцию. потому что по совету Гакало Игоря Вы можете только подправить разделение на тысячи, по моих ссылках -- перевести все в буквенный вариант.
Если бы я делала -- я бы бы взяла эту функцию AmountToStr и сделала бы по аналогии, только цифры не трогала бы. Правда, можно еще проще обойтись -- если валюта "постоянная" (например, только рубли) -- то прописать все для рублей и не рассматривать варианты для других валют.
В этом случае Вы также сможете предусмотреть вариант с двумя нолями.
Если нужна помощь в написании функции -- обращайтесь, буду рада помочь.

Пример функции, решающей проблему.

Показать все комментарии

Необходимо выводить текст заранее неизвестной длины так, чтобы при переходе на новую строку был отступ заданной ширины. Как это сделать?

Нравится

4 комментария

Здравствуйте, Антон.

Используйте свойство ParagraphGap:

procedure edtOwnerValueOnBeforePrint(Sender: TfrxComponent);
begin
edtOwnerValue.ParagraphGap := 10;             
end;

Дмитрий, я так пробовал, не получается.

как я заметил, это свойство отступа только первой строки абзаца. А мне нужно после каждой новой строки отступ...

Разобрался! свойство GapX

Показать все комментарии

Кто нибудь знает, почему конструкция IIF не работает???
Делаю [IIF(1=1,'1','0')]

Выдает ошибку...

Нравится

19 комментариев

В отчете вставил в поле текстовое приведенный текст, выдало при просмотре честную "1"...
Текст ошибки то какой?

Ругается на скобку

а в самом Memo17 кроме ниженаписанного ничего больше нет?

[IIF(1=1,'1','0')]

Попробуйте двойные кавычки поставить, что скажет? Я пробовала поставить двойные, тогда такая же ошибка, а с одинарными нормально.

Только это [IIF(1=1,'1','0')]

С двойными кавычками точно такая же ошибка

может сервис отчета в студию?

"Александр Кудряшов" написал:может сервис отчета в студию?

С радостью бы выгрузил только не знаю как

Правой кнопкой по сервису - Сохранить в файл))
Версия Terrasoft какая кстати?

Вот результат правой кнопкой - НИЧЕГО....
Террасофт 3.3.0.61 Press

сервис в дереве сервисов справа в администраторе:smile:

Вот пожалуйста :)

поставил вместо двойных одинарные кавычки - работает [IIF(1=1,'1','0')]
в отчете стер датасет, естественно, так как нет такого у меня

Аналогично.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Я понял в чем тут дело.... Действительно, на чистом отчете это работает. НО. Достаточно в коде отчета написать хотя бы что то вроде

{
float c = 12;
}

тогда уже эта конструкция перестает быть работоспособной.... А код необходим. Как быть????

Евгений, а Вы можете перевести свой код с JScript на PascalScript?

Только что проверил, действительно, не работает с кодом

{
float c = 12;
}

Зато работает с кодом

var c: extended;
 
begin
  c := 12;
end.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Олег, получается, желательно работать на паскале? Потому что на Си++ не работает, а на паскале заработал, спасибо :)

Насколько я знаю, большинство из наших разработчиков пишут в коде сервиса FastReport именно на PascalScript. Думаю, лучше работать именно так.

Что касается проблемы с кодом на C++ или JScript, это нужно уточнять у разработчиков FastReport. В истории по доработкам версии FastReport Studio 4 упоминается, что "fixed IIF bug" (см. http://www.bestsoftware4download.com/software/k-search-script-t-free-fa…), но в таком случае либо у нас используется версия ниже, либо её исправили только для PascalScript, либо же имеется в виду другая проблема.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Спасибо, Олег. Буду пользоваться теперь Паскалем :)

Показать все комментарии