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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2005, 12:27   #1  
Dimonishe is offline
Dimonishe
Участник
 
33 / 10 (1) +
Регистрация: 24.05.2005
Адрес: Донецк/Москва
Цитата:
Изначально опубликовано Владимир Максимов

Альтернатива - это обычное открытие текстового файла (Файл - Открыть). Это метод Workbooks.OpenText() или Workbooks.Open()
Нет. Это не альтернатива. Это совсем другой способ. Я говорил о связывании предварительно отформатированных ячеек листа Excel с данными хранящимися в CSV файле.

О каких двумерных массивах может идти речь? (к слову, можно сформировать массив любой мерности из одномерного, просто указав смещение)


Цитата:
Изначально опубликовано Владимир Максимов

Т.е. пользователь вынужден вручную осуществлять открытие или импорт внешнего текстового файла. Нет возможности автоматизировать этот процесс.
Так вот. Указанная в самом первом посте задача была решена и автоматизирована следующим образом (Для обработки прайс-листа):

Пользователь имеет в своем распоряжении три кнопки:

1) В аксапте - кнопка "Выгрузить в Excel". По ее нажатию запускается следующий код :

Данный код запускает Excel, и при открытии книги, связанные ячейки автоматически обновляются данными из CSV.

PHP код:
static void ExcelStart(Args _args)
{
   
sysDataExport   ex  =  new sysDataExport();
   
ComExcelDocument_RU doc;
   ;

   
//Экспортируем группу определений в текстовый файл
   
ex.parmGroupId("PrLst");
   
ex.initParmFilename("C:\\PriceList.dat");
   
ex.parmFiletype(FileType::Comma);
   
ex.run();

   
// Открываем существующий шаблон
   
doc = new ComExcelDocument_RU();
   
doc.Open("C:\\PriceList.xls");
   
doc.finalize();

Отмечу, что экселевский шаблон должен быть предварительно сформирован разработчиком как было описано мною выше.

2) В Excel - кнопка "Импорт Из Аксапты".

Данная кнопка через COM инициирует экспорт данных Аксаптой в текстовый файл. И обновляет связи.

На кнопке макрос:

Код:
Sub ImportFromAxapta()

'Вызов аксаптовского Joba который производит экспорт
Dim Axapta As Object
Dim Args As Object
Set Axapta = CreateObject("AxaptaCOMConnector.Axapta")

Axapta.Logon "COM+", "", "", ""

Set Args = Axapta.CreateObject("args")
Args.Call "parm", "PrLst"
Axapta.CallJob "COMExport", Args
Axapta.Logoff
Set Axapta = Nothing

'Обновление данных для связанных ячеек
ActiveWorkbook.RefreshAll
  
End Sub
Аксаптовский JOB:
PHP код:
static void COMExport(Args _args)
{
      
sysDataExport   ex  =  new sysDataExport();
      ;

      if(
_args)
         
ex.parmGroupId(_args.parm());
      
ex.initParmFilename("C:\\PriceList.dat");
      
ex.parmFiletype(FileType::Comma);
      
ex.run();

3) Excel: Кнопка - "Экспорт в Аксапту". Макрос очищает лист от форматирования и заголовков столбцов и экспортирует данные в текстовый файл. Далее, через COM запускается JOB который в аксапте инициирует операцию импорта

На кнопке макрос:

Код:
Sub ExportToAxapta()
 
'Предварительно удаляем CSV хранилище
 Dim fs
 Set fs = CreateObject("Scripting.FileSystemObject")
 fs.DeleteFile "C:\PriceList.dat"
    
'Сохраняем книгу и удаляем заголовки столбцов
 ActiveWorkbook.Save
 Rows("1:1").Select
 Range("F1").Activate
 Selection.Delete Shift:=xlUp
 
'Формируем CSV файл
 ActiveWorkbook.SaveAs Filename:= _
   "C:\PriceList.dat", _
    FileFormat:=xlCSV, CreateBackup:=False

'Возвращаемся к главному документу
 ActiveWorkbook.Close SaveChanges:=True
    Workbooks.Open Filename:= _
        "C:\\PriceList.xls"

'Вызов аксаптовского Joba который производит импорт
Dim Axapta As Object
Dim Args As Object

Set Axapta = CreateObject("AxaptaCOMConnector.Axapta")

Axapta.Logon "COM+", "", "", ""
Set Args = Axapta.CreateObject("args")
Args.Call "parm", "PrLst"

Axapta.CallJob "COMImport", Args
Axapta.Logoff
Set Axapta = Nothing

End Sub
Аксаптовский JOB

PHP код:
static void COMImport(Args _args)
{
        
sysDataImport   ex  =  new sysDataImport();
        ;
       if(
_args)
       
ex.parmGroupId(_args.parm());
       
ex.initParmFilename("C:\\PriceList.dat");
       
ex.run_modified();

В jobe использован модифицированый метод Run, класса SysDataImport для того, чтобы при вызове через СОМ не происходил вызов диалоговых окон для взаимодействия с пользователем при импорте.

Итого: корректный, прозрачный двусторонний обмен Axapta-Excel с минимальными задержками для практически любых шаблонов.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Экспорт/импорт платежных поручений _scorp_ DAX: Функционал 96 04.05.2017 17:52
Стандартный импорт данных. Обновление sparur DAX: Функционал 0 24.03.2008 19:07
Программный импорт xpo SolNik DAX: Программирование 13 02.10.2006 14:53
Импорт данных 3.0 SP4. Аксапта валится Кирен DAX: Администрирование 1 28.07.2005 12:57
Экспорт/импорт таблиц IT-specialist DAX: Администрирование 15 26.02.2005 20:46

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

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

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