Вывести отчет о проделанной работе - как?

Есть функциональность - берутся данные из одного модуля и импортируются в другой, с учетом определенных условий + небольшие преобразования. Какие-то данные не попадают в импорт. Задача - вывести после импорта информацию о данных, которые не импортировавились - при этом определены 3 условия, при котором данные не будут испортироваться. Т.е. "достать" эти данные - не проблема. Но в каком виде и как их можно подать пользователю? В MessageBox информацию о 200 (например) контрактах (даже если выводить только Title) не запихнуть...

Нравится

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

функции OpenFileWithFullAccess и WriteMessageToFile Вам помогут
можете посмотреть как это реализовано, например, в контексте интеграции из экселя:
scr_DataflowUtils

function ImportDataByImportObject(...) {
...
		WriteMessageToFile(...);
		ImportObject.Imported = true;
	} finally {
...
}

scr_DataflowExcelUtils

function ExecuteImportFromExcel(...) {
                if (Assigned(DataflowUtils.ImportLogFile)){
			if (ShowConfirmationDialog(msgDoYouWantLookImportLog) == wmrYes){
				OpenFileWithFullAccess(LogFileName, true);
			}
			DataflowUtils.ImportLogFile.Close();                                                                                                             
			DataflowUtils.ImportLogFile = null;
		}
...
}

Спасибо. С созданием и показом содержимого файла разобралась. Код :

DatasetPrice.Open();		
if (IsDatasetEmpty(DatasetPrice)) {
    DatasetPrice.Close();
    return;
}		
DatasetPrice.GotoFirst();
 
var Message = '';
var LogFileName = GetCustomLogFileName('BillingInfo');  
var FileSystemObject = GetFileSystemObject();
var InfoLogFile = FileSystemObject.CreateTextFile(LogFileName, true, true);
 
while (!DatasetPrice.IsEOF)
{
	Message = DatasetPrice.Values('ContractTitle');
	InfoLogFile.WriteLine(Message);
	DatasetPrice.GotoNext();
}
OpenFileWithFullAccess(LogFileName);

SaveToFile - вроде бы метод для объектов террасофт, а не для текста, и он (в вариациях) не позволяет дозаписывать

Надо еще определиться, что пользователь будет делать с этой информацией. Например, если он ее просто скопирует - возможно лучше не создавать файл. а вывести окно с MemoControl.
Если вам удобно сначала собрать инфо, а потом записывать - ваш вариант то, что нужно. Если удобнее дописывать в файл - используйте .WriteLine (http://msdn.microsoft.com/en-us/library/t5399c99(v=vs.84).aspx) и в конце закрывайте файл.
Опять-таки, пользователь не увидит закрытый файл - его надо открыть System.OpenFile(FileName, fatReadWrite) (http://terrasoft.ru/sdk/IScriptUtils__OpenFile@[in]_BSTR@[in]_FileAcces…)

а ну вы и сами уже)

"Андросов Дмитрий" написал:

а ну вы и сами уже)


Да, спасибо. Я потому и удалила предыдущий вопрос

Еще вопрос. А как здесь можно указать конкретное место для сохранения файла? Например на диске С?

function GetCustomLogFileName(LogName) {
	CreateFolder(Connector.LogsDirectory);
	return Connector.LogsDirectory + LogName+ '_' + 
	DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '')  + '.log';     
}

При попытке изменить эту функцию на

function GetLogFileName(LogName) {	
	return 'C:\\' + LogName+ '_' + 
			DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '')  + '.log';     
}

вылетаю с ошибкой Invalid procedure call or argument

корневая папка диска С считается системной - мб у вас не хватает прав или включен UAC. Так-то вроде все норм

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

А у меня, визуально, выглядит это так :

Такое ощущение, что апострофом "не закрываются" кавычки... Из-за символа "\".

это старый баг подсветки и больше ничего - работает как должно

Ну вот и тем не менее - не работало. Хотя и не ругалось. Я тестировала выводом на экран через MessageBox - выдало пустоту.

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