12.07.2007, 12:35 | #1 |
Участник
|
Экспорт результатов SQL запроса в CSV
Уважаемые коллеги! с Аксаптой мое знакомство началось недели 2 назад, а с X++ и того меньше. Начальство дало задание написать обработку для выгрузки данных SQL запроса в CSV файл. Была предпринята попытка сделать это таким образом:
Но успехом она не увенчалась, если не сложно поясните в чем моя ошибка. Версия 2,5 X++: static void da_Import_ItemId_To_CSV(Args _args) { Dimensions dimensions; filepath templateFilePath; m_TransportSalesPacking excel; ComExcelDocument_RU excelDoc; IO io; FileName fileName, fileNameFrom; AsciiIO IoFrom, IoClass; IoClass = new AsciiIO(fileName, 'W'); IoFrom = new AsciiIO(fileNameFrom, "R"); if (! IoClass) throw error(strFmt("@DIS100404",fileName)); if (! IoFrom) throw error(strFmt("@DIS100404",fileNameFrom)); static str any2csvField(anyType _perem) { str csvField; ; csvField = '"' + strReplace(_perem,'"',"'") + '"'; if (typeOf(_perem) == Types::STRING) return '"' + strReplace(_perem,'"',"'") + '"'; return strFmt("%1",_perem); } static str con2csvStr(container _con) { counter i; str resu; ; for(i=1; i <= conLen(_con); i ++) { if (i > 1) resu += ";"; resu += m_proc::any2csvField(conPeek(_con,i)); } return resu; } // void csvReport() // { void Insert2CSV(anytype param1, anytype param2, anytype param3, anytype param4) { ; //??? ???? ?????????? ?????? ? CSV io.write(m_proc::con2csvStr([ param1 , param2 , param3 , param4 ])); } boolean atLeastOnePosted = false; boolean allPosted = true; ; this.Insert2CSV( "??????" "???????", "????????????", "??.???", ); // ??????? ???????? ?????? ?????? SELECT InventTable.ItemGroupId, InventTable.ItemId, InventTable.ItemName, InventTableModule.ModuleType, InventTableModuleUnitId, InventTableModule.Price FROM InventTable JOIN InventTableModule WHERE InventTable.ItemGroupId=="???" { this.Insert2CSV( InventTable.ItemGroupId, InventTable.ItemId, InventTable.ItemName, InventTableModule.ModuleType, InventTableModuleUnitId, InventTableModule.Price ); } io.finalize(); al_FileUtils::reportSaveFile(Name_File); } |
|
12.07.2007, 12:43 | #2 |
Участник
|
может сначала почитать какую-нить книжку по программированию в Х++?
обратить внимание на составление завпросов с помошью Х++ и связи между таблицами Последний раз редактировалось ice; 12.07.2007 в 12:48. |
|
12.07.2007, 12:45 | #3 |
Участник
|
База знаний ERP : Axapta / Программирование раздел "С чего начать"
|
|
12.07.2007, 13:00 | #4 |
Участник
|
Спасибо
|
|
12.07.2007, 13:11 | #5 |
Moderator
|
Цитата:
Это у вас, вроде, джоб. Тогда при чем здесь this. ? Или класс?? Сформатировали бы текст получше... P.S. Мда... попробовал запустить - пока беда... правда, почитайте сначала букварь хоть немного. Вы этот код вне Аксапты что ли создавали? Ни разу не компилировали, наверное... |
|
12.07.2007, 13:41 | #6 |
Пенсионер
|
например так:
X++: static void MyJob(Args _args) { TextBuffer tb = new TextBuffer(); MyTable myTable; ; tb.appendText(strfmt("%1;%2;%3;\n","Заголовок1","Заголовок2","Заголовок3")); while select myTable { tb.appendText(strfmt("%1;%2;%3;\n",myTable.Field1,myTable.Field2,myTable.Field3)); } tb.toFile("d:\\MyCSVfile.csv"); }
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 12.07.2007 в 13:47. |
|
12.07.2007, 13:47 | #7 |
Участник
|
|
|
12.07.2007, 13:49 | #8 |
Пенсионер
|
э-э-э не понял...
имеется ввиду кавычки и пр.?
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
12.07.2007, 13:56 | #9 |
Участник
|
да. если значение Field1 будет равно ;, например
|
|
12.07.2007, 14:04 | #11 |
Пенсионер
|
Я тсз дал направление, которым пользуюсь, причем это не чистый CSV т.к. там ";" стоят и кавычек нету, но ёксель его кушает с удовольствием.
Можно например не заморачиваться со спецсимволами а грузануть в ёксель и оттуда сохранить как CSV
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
12.07.2007, 14:12 | #12 |
Moderator
|
АХТУНГ! ЧИСТО В УЧЕБНЫХ ЦЕЛЯХ! (код не работает)
2 adandreev
Довел ваш код до состояния компилируемости (AX 3.0). Ваши ошибки оставил, закомментировав соответствующие строки. Посмотрите, что вы делали не так. Дальше посыпались ошибки рантайма - с ними уже сами разбирайтесь, если есть желание. А так рекомендую воспользоваться решением blokva и вообще еще что-нибудь поискать по форуму на эту тему. Ссылками вас уже завалили X++: /// ЛАБОРАТОРНАЯ РАБОТА static void da_Import_ItemId_To_CSV(Args _args) { Dimensions dimensions; filepath templateFilePath; //m_TransportSalesPacking excel; ComExcelDocument_RU excelDoc; IO io; FileName fileName, fileNameFrom; AsciiIO IoFrom, IoClass; InventTable InventTable; InventTableModule InventTableModule; boolean atLeastOnePosted = false; boolean allPosted = true; //static str any2csvField(anyType _perem) str any2csvField(anyType _perem) { str csvField; ; csvField = '"' + strReplace(_perem,'"',"'") + '"'; if (typeOf(_perem) == Types::STRING) return '"' + strReplace(_perem,'"',"'") + '"'; return strFmt("%1",_perem); } //static str con2csvStr(container _con) str con2csvStr(container _con) { counter i; str resu; ; for(i=1; i <= conLen(_con); i ++) { if (i > 1) resu += ";"; //resu += m_proc::any2csvField(conPeek(_con,i)); resu += any2csvField(conPeek(_con,i)); } return resu; } // void csvReport() // { void Insert2CSV(anytype param1, anytype param2, anytype param3, anytype param4) { ; //ooo eaao caiieiaiea no?iee a CSV //io.write(m_proc::con2csvStr([ io.write(con2csvStr([ param1 , param2 , param3 , param4 ])); } ; IoClass = new AsciiIO(fileName, 'W'); IoFrom = new AsciiIO(fileNameFrom, "R"); if (! IoClass) throw error(strFmt("@DIS100404",fileName)); if (! IoFrom) throw error(strFmt("@DIS100404",fileNameFrom)); //this.Insert2CSV( "A?oiia" Insert2CSV( "A?oiia", "A?oeeoe", "Iaeiaiiaaiea", "Aa.eci" ); // Auai?ea cia?aiee io?iie a?oiiu //SELECT InventTable.ItemGroupId, InventTable.ItemId, InventTable.ItemName, InventTableModule.ModuleType, //InventTableModuleUnitId, InventTableModule.Price //FROM InventTable JOIN InventTableModule WHERE InventTable.ItemGroupId=="AAO" while select ItemGroupId, ItemId, ItemName from InventTable join ModuleType, UnitId, Price from InventTableModule where InventTable.ItemGroupId == "AAO" && InventTable.ItemId == InventTableModule.ItemId { //this.Insert2CSV( InventTable.ItemGroupId, Insert2CSV( InventTable.ItemGroupId, InventTable.ItemId, InventTable.ItemName, InventTableModule.ModuleType, InventTableModule.UnitId, InventTableModule.Price ); } //io.finalize(); //al_FileUtils::reportSaveFile(Name_File); } |
|
12.07.2007, 14:18 | #13 |
Участник
|
я не очнь понимаю, почему бы просто не воспрользоваться CommaIO?
|
|
12.07.2007, 14:21 | #14 |
Участник
|
заменить
X++: io.write(con2csvStr([ param1 , param2 , param3 , param4 ])); X++: io.write( param1 , param2 , param3 , param4 ); |
|
13.07.2007, 11:59 | #15 |
Участник
|
Огромаднейшее спасибо! Я правда накачавшись инфой из ссылок его всетаки добил, но не так изящно)) А за комменты ошибок Отдельный Респект!
|
|