|  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 | 
| Участник | 
			
			Огромаднейшее спасибо! Я правда накачавшись инфой из ссылок его всетаки добил, но не так изящно)) А за комменты ошибок Отдельный Респект!
		 | 
|  |