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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.06.2017, 14:22   #1  
palich is offline
palich
Участник
 
7 / 10 (1) +
Регистрация: 12.12.2006
Передача большой таблицы в excel
Нужно передать большую таблицу из NAV2015 в excel. Стандартные средства не подойдут т.к. очень долго будет отрабатывать. Поэтому написал следующий код:

Добавил новую функцию в CU 12416 Excel Management

CopyFromRecordset(CellName : Text;ADORecordSet : DotNet "ADODB.RecordsetClass")
XlRange := XlWrkSht.Range(CellName);
XlRange.CopyFromRecordset(ADORecordSet,100,100);

определил локальные переменные:
ADORecordSet DotNet ADODB.RecordsetClass.'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'


Создал новый отчет или кодеюнит, определил в нем глобальные переменные:
ExcelManagement Codeunit Excel Management
SQLText Text
var_ra Variant
ADOConnectionClass DotNet ADODB.ConnectionClass.'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
ADORecordSetClass DotNet ADODB.RecordsetClass.'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'


написал код:

ExcelManagement.OpenBook('C:\TEMP\book1.xlsx');
ExcelManagement.OpenSheet('Sheet1');
SQLText := 'SELECT [G_L Account No_],[Amount] FROM [dbo].[MY COMPANY$G_L Entry]';

ADOConnectionClass := ADOConnectionClass.ConnectionClass();
ADOConnectionClass.Open('Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MY_DB;Data Source=MY_SERVER', '', '', -1);
ADORecordSetClass := ADORecordSetClass.RecordsetClass();
ADORecordSetClass := ADOConnectionClass.Execute(SQLText, var_ra, -1);

ExcelManagement.CopyFromRecordset('A1',ADORecordSetClass);

ExcelManagement.GiveUserControl();
ExcelManagement.CloseBook();

Возникает ошибка на команде XlRange.CopyFromRecordset(ADORecordSet,100,100):
Cannot serialize an instance of the following .NET Framework object: assembly ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, type ADODB.RecordsetClass.

Заранее спасибо за помощь.
Старый 30.06.2017, 16:11   #2  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
 
131 / 24 (1) +++
Регистрация: 05.08.2002
Адрес: Королев
Попробуйте так
CopyFromRecordset(CellName : Text;VAR ADORecordSet : DotNet "ADODB.RecordsetClass")
__________________
Want to believe...
Старый 03.07.2017, 13:07   #3  
palich is offline
palich
Участник
 
7 / 10 (1) +
Регистрация: 12.12.2006
Так не помогло, та-же ошибка.
Старый 03.07.2017, 17:23   #4  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
 
131 / 24 (1) +++
Регистрация: 05.08.2002
Адрес: Королев
У переменных dot net, мне кажется, нужно поставить RunOnClient = Yes, так как OpenBook открывает книгу через XlHelper который также RunOnClient = Yes. Если свойства разные получается что Excel открыт на клиенте, а рекордсет отрабатывает на сервере приложений.
__________________
Want to believe...
За это сообщение автора поблагодарили: Sancho (2).
Старый 04.07.2017, 14:57   #5  
palich is offline
palich
Участник
 
7 / 10 (1) +
Регистрация: 12.12.2006
Спасибо, заработало. Поставил RunOnClient = Yes + по вару передаю в CopyFromRecordset.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
german_nav_developer: Export nach Excel : Spalte(n) vermisst? Blog bot NAV: Blogs 0 17.08.2016 22:13
Сводные таблицы в Excel lwg22 NAV: Программирование 6 29.09.2006 01:20
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:43.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.