Выкладываю очень простенький и очень нужный для аксапчан скриптик для парсинга SQL запросов, буду рад дальнейшим модификациям и дополнениям
Достаточно будет в откладчике нажать скопировать в буфер куерик и запустить джобик, он это приведет человеко-читабельный текст.
Код:
//khfa
static void KHFA_SQL_PARSER(Args _args)
{
void prompt(FreeTxt sqlQuery,
NoYes toXppFormat = NoYes::No)
{
Dialog dlg;
DialogField dfSqlQuery;
DialogField dfSetXppFormat;
FormStringControl strCtrl;
int selectStrNum;
;
selectStrNum = strscan(sqlQuery, 'SELECT ', 1, strLen(sqlQuery));
sqlQuery = substr(sqlQuery, selectStrNum, strLen(sqlQuery));
sqlQuery = strReplace(sqlQuery, 'SELECT ', 'SELECT\n\t');
sqlQuery = strReplace(sqlQuery, ' NOTEXISTS JOIN ', '\n\nNOTEXISTSJOIN\n\t');
sqlQuery = strReplace(sqlQuery, ' EXISTS JOIN ', '\n\nEXISTSJOIN\n\t');
sqlQuery = strReplace(sqlQuery, ' JOIN ', '\n\nJOIN\n\t');
sqlQuery = strReplace(sqlQuery, 'NOTEXISTSJOIN', 'NOTEXISTS JOIN');
sqlQuery = strReplace(sqlQuery, 'EXISTSJOIN', 'EXISTS JOIN');
sqlQuery = strReplace(sqlQuery, ' FROM ', '\n\n\tFROM ');
sqlQuery = strReplace(sqlQuery, ' ORDER BY ', '\n\tORDER BY ');
sqlQuery = strReplace(sqlQuery, ' GROUP BY ', '\n\tGROUP BY ');
sqlQuery = strReplace(sqlQuery, ' WHERE ', '\n\n\tWHERE ');
sqlQuery = strReplace(sqlQuery, ' ON ', '\n\n\tON ');
sqlQuery = strReplace(sqlQuery, ' AND ', '\n\tAND ');
sqlQuery = strReplace(sqlQuery, ' OR ', '\n\tOR ');
if (toXppFormat)
{
sqlQuery = strReplace(sqlQuery, ' ON ', '\n\n\tWHERE ');
sqlQuery = strReplace(sqlQuery, '\tAND ', '\t&& ');
sqlQuery = strReplace(sqlQuery, '\tOR ', '\t|| ');
}
else
{
sqlQuery = strReplace(sqlQuery, '\t&& ', '\tAND ');
sqlQuery = strReplace(sqlQuery, '\t|| ', '\tOR ');
}
dlg = new Dialog('Set query and click OK');
dfSetXppFormat = dlg.addFieldValue(enumstr(NoYes), toXppFormat, 'X++ Format', 'Parse To X++ Format');
dfSqlQuery = dlg.addFieldValue(extendedTypeStr(FreeTxt), sqlQuery, 'Query', 'Query');
strCtrl = dfSqlQuery.control();
strCtrl .widthValue(1300);
strCtrl .heightValue(600);
System.Windows.Forms.Clipboard::SetText(sqlQuery);
if (! dlg.run())
return;
prompt(dfSqlQuery.value(), dfSetXppFormat.value());
}
prompt(System.Windows.Forms.Clipboard::GetText(), NoYes::Yes);
}