Технические вопросы
Разработка

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

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

Нравится

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

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

[javascript]
function ImportDataByImportObject(...) {
...
WriteMessageToFile(...);
ImportObject.Imported = true;
} finally {
...
}
[/javascript]

scr_DataflowExcelUtils

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

Спасибо. С созданием и показом содержимого файла разобралась. Код :
[javascript]
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);
[/javascript]

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…)

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

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

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


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

Еще вопрос. А как здесь можно указать конкретное место для сохранения файла? Например на диске С?
[javascript]
function GetCustomLogFileName(LogName) {
CreateFolder(Connector.LogsDirectory);
return Connector.LogsDirectory + LogName+ '_' +
DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '') + '.log';
}
[/javascript]
При попытке изменить эту функцию на
[javascript]
function GetLogFileName(LogName) {
return 'C:\\' + LogName+ '_' +
DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '') + '.log';
}
[/javascript]
вылетаю с ошибкой Invalid procedure call or argument

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

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

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

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

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

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

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