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
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 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
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
У переменных dot net, мне кажется, нужно поставить RunOnClient = Yes, так как OpenBook открывает книгу через XlHelper который также RunOnClient = Yes. Если свойства разные получается что Excel открыт на клиенте, а рекордсет отрабатывает на сервере приложений.
__________________
Want to believe...
За это сообщение автора поблагодарили: Sancho (2), mira (1).
Старый 04.07.2017, 14:57   #5  
palich is offline
palich
Участник
 
7 / 10 (1) +
Регистрация: 12.12.2006
Спасибо, заработало. Поставил RunOnClient = Yes + по вару передаю в CopyFromRecordset.
Старый 02.08.2017, 03:45   #6  
jopagames is offline
jopagames
Участник
 
45 / 24 (1) +++
Регистрация: 22.11.2011
Цитата:
Сообщение от palich Посмотреть сообщение
Нужно передать большую таблицу из NAV2015 в excel. Стандартные средства не подойдут...
...
SELECT [G_L Account No_],[Amount] FROM [dbo].[MY COMPANY$G_L Entry]'
А чо вот запрос "SELECT [G_L Account No_],[Amount] FROM [dbo].[MY COMPANY$G_L Entry]' напрямую из Excel не работает разве? Через Power Pivot типа или как-то ещё?
Зачем вот это всё "программирование" нужно было?
Вот РЕАЛЬНО быстрее бы отработало напрямую... Чесслово!

ЗЫ: А так интересно, конечно. Как метод.
ДотНет типа + всякие галочки в параметрах необходимо включать. Круто же!!

ЗЗЫ: Я просто онанизм уже (в силу возраста) не очень люблю, поэтому и спрашиваю...

Последний раз редактировалось jopagames; 02.08.2017 в 04:10.
Старый 02.08.2017, 09:55   #7  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Например, бывает иногда желание сгенерить текст запроса динамически в Наве и дальше результат запихнуть в Эксель. Для тебя, возможно, это онанизм, для кого-то - нормальная такая рабочая ситуация.
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
За это сообщение автора поблагодарили: palich (1).
Старый 23.08.2017, 23:55   #8  
jopagames is offline
jopagames
Участник
 
45 / 24 (1) +++
Регистрация: 22.11.2011
Цитата:
Сообщение от Yoil Посмотреть сообщение
Например, бывает иногда...
нормальная такая рабочая ситуация.
Яш, вот "Например, бывает иногда..." и "нормальная такая рабочая ситуация" - это взаимоисключающие параграфы.

Измыслить, разумеется, в принципе можно что угодно.
Про всякие "динамические запросы" (от человека с 7 сообщениями) я тоже готов порассуждать и попредполагать. Спросить например:

1. А вот "необходимо передать большую таблицу" - это сколько точно записей?
2. А зачем вообще это всё надо: тянуть всю таблицу в Эксель? не проще ли её агрегировать средствами SQL, а в Эксель выплюнуть результат?

Ну, то есть выяснить, целерон и 3000 записей у человека или фермы, рейды, блейды и действительно большая Фин.Книга?
Имеет ли он представление о файловых группах, планах запросов и филлфакторе... или в глаза не видел стандартного (и быстрого!) средства переноса SQL->Excel через .DTSx пакет?

И там уже рассуждать про тонкую настройку OLAP, либо давать советы по апргейду процессора и сетевой карты ))
Старый 24.08.2017, 15:58   #9  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Серёжа, порассуждать, спросить, выяснить и вот это все никто не запрещает!
А еще никто не запрещает просто ответить на вопрос, который человек задал.
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 25.08.2017, 01:05   #10  
jopagames is offline
jopagames
Участник
 
45 / 24 (1) +++
Регистрация: 22.11.2011
Цитата:
Сообщение от Yoil Посмотреть сообщение
Серёжа, порассуждать, спросить, выяснить и вот это все никто не запрещает!
А еще никто не запрещает просто ответить на вопрос, который человек задал.
Да я же только "ЗА!", Яш.
Ответили человеку просто - он доволен (лайк вон тебе поставил)
И ему хорошо. И всем хорошо! Да и мне тож неплохо.
Аминь!!

ЗЫ: А начнёшь умничать и отвечать "сложно" - останешься без лайка, или вообще забанят.
Это я уже в курсе, поэтому ничего и не выясняю.
Даже специально уточнил, что только мог бы например спросить "А нахера это всё надо?", но не спрашивал.

Последний раз редактировалось jopagames; 25.08.2017 в 01:08.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 07:32.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.