Вот такой job посмотрите. Я форматированием не занимался.
Но думаю суть будет ясна и привести к божескому виду сможете.
X++:
static void tutorial_ShowDataBaseLogAsString(Args _args)
{
TextBuffer textBuffer = new TextBuffer();
SysDataBaseLog dataBaseLog;
List dataList;
ListEnumerator dataListEnumerator;
str data;
container tmpCon;
FieldId fieldId;
;
while select dataBaseLog
where dataBaseLog.table == tableNum(CustTable) &&
dataBaseLog.LogType == DataBaseLogType::Insert &&
dataBaseLog.createdDate == 06\08\2007
{
textBuffer.appendText(strFmt("\nОписание: %1, Тип записи: %2, Таблица: %3\n\n", dataBaseLog.Description, dataBaseLog.LogType, tableId2Name(dataBaseLog.table)));
dataList = dataBaseLog.getDataAslist();
dataListEnumerator = dataList.getEnumerator();
while (dataListEnumerator.moveNext())
{
tmpCon = dataListEnumerator.current();
fieldId = conpeek(tmpCon, 1);
textBuffer.appendText(strFmt("Поле: %1\n", fieldId2name(dataBaseLog.table, fieldId)));
textBuffer.appendText(strFmt("Новое значение: %1\n", dataBaseLog.contents2Str(conpeek(tmpCon, 2), fieldId)));
textBuffer.appendText(strFmt("Старое значение: %1\n", dataBaseLog.contents2Str(conpeek(tmpCon, 3), fieldId)));
}
}
textBuffer.toFile("C:\\test.txt");
}