AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.07.2007, 12:35   #1  
adandreev is offline
adandreev
Участник
 
3 / 10 (1) +
Регистрация: 11.07.2007
? Экспорт результатов 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 is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
может сначала почитать какую-нить книжку по программированию в Х++?
обратить внимание на составление завпросов с помошью Х++ и связи между таблицами

Последний раз редактировалось ice; 12.07.2007 в 12:48.
Старый 12.07.2007, 12:45   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
База знаний ERP : Axapta / Программирование раздел "С чего начать"
Старый 12.07.2007, 13:00   #4  
adandreev is offline
adandreev
Участник
 
3 / 10 (1) +
Регистрация: 11.07.2007
Спасибо
Старый 12.07.2007, 13:11   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от adandreev Посмотреть сообщение
Была предпринята попытка сделать это таким образом:
Но успехом она не увенчалась
А в чём именно "неувенчаемость" состоит? Какая ошибка возникает?

Это у вас, вроде, джоб. Тогда при чем здесь this. ? Или класс?? Сформатировали бы текст получше...

P.S. Мда... попробовал запустить - пока беда... правда, почитайте сначала букварь хоть немного. Вы этот код вне Аксапты что ли создавали? Ни разу не компилировали, наверное...
Старый 12.07.2007, 13:41   #6  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
например так:

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  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от blokva Посмотреть сообщение
например так:

X++:
 tb.appendText(strfmt("%1;%2;%3;\n",myTable.Field1,myTable.Field2,myTable.Field3));
А искейпить спецсимволы кто будет?
Старый 12.07.2007, 13:49   #8  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от belugin Посмотреть сообщение
А искейпить спецсимволы кто будет?
э-э-э не понял...
имеется ввиду кавычки и пр.?
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 12.07.2007, 13:56   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
да. если значение Field1 будет равно ;, например
Старый 12.07.2007, 13:59   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от adandreev Посмотреть сообщение
Начальство дало задание написать обработку для выгрузки данных SQL запроса в CSV файл.
http://axapta.mazzy.ru/lib/textfile/
http://axapta.mazzy.ru/lib/import/
а также http://axapta.mazzy.ru/lib/xmlpublish/
и http://axapta.mazzy.ru/lib/easyimport/
__________________
полезное на axForum, github, vk, coub.
Старый 12.07.2007, 14:04   #11  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от belugin Посмотреть сообщение
да. если значение Field1 будет равно ;, например
Я тсз дал направление, которым пользуюсь, причем это не чистый CSV т.к. там ";" стоят и кавычек нету, но ёксель его кушает с удовольствием.
Можно например не заморачиваться со спецсимволами а грузануть в ёксель и оттуда сохранить как CSV
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 12.07.2007, 14:12   #12  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
! АХТУНГ! ЧИСТО В УЧЕБНЫХ ЦЕЛЯХ! (код не работает)
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  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
я не очнь понимаю, почему бы просто не воспрользоваться CommaIO?
Старый 12.07.2007, 14:21   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
заменить

X++:
io.write(con2csvStr([
                  param1
                , param2
                , param3
                , param4
                ]));
на

X++:
io.write(
                  param1
                , param2
                , param3
                , param4
 );
Старый 13.07.2007, 11:59   #15  
adandreev is offline
adandreev
Участник
 
3 / 10 (1) +
Регистрация: 11.07.2007
Огромаднейшее спасибо! Я правда накачавшись инфой из ссылок его всетаки добил, но не так изящно)) А за комменты ошибок Отдельный Респект!
Теги
документация, ax2.5

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поиск места вызова SQL запроса eLLoco DAX: Программирование 17 25.09.2007 08:49
Управление опциями SQL запроса Ю-ю DAX: База знаний и проекты 9 20.02.2007 19:52
Вставка значения container в план запроса SQL mit DAX: Программирование 4 24.11.2005 18:42
Формирование sql запроса по Ctrl + F if_maks DAX: Программирование 2 08.10.2003 20:04
Не работает экспорт CSV mad_pilot DAX: Функционал 5 01.04.2003 11:31

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:05.