23.07.2014, 12:31 | #1 |
Участник
|
Добрый день, имею NAV V.5 sp1.
Сразу предупреждаю, что вопрос может показаться глупым, т.к. опыта у меня в этой сфере не очень много. Сделал отчет, который выгружает информацию из таблицы. Сейчас мне требуется отправить полученные данные из отчета в эксель. Для этого у нас используется соответсующий CU, но мне не понятно как из выгруженного отчета отправить данные в него... Заранее спасибо за подсказку. |
|
23.07.2014, 12:47 | #2 |
Участник
|
ExcelMgt.OpenBook(FileName);
ExcelMgt.OpenSheetByNumber(1); RowID := '8'; .... ExcelMgt.FillCell('G2',FORMAT(UPPERCASE(Driver.Name) + ' ' + "Licence Plate")); ExcelMgt.FillCell('K2',FORMAT(TODAY)); SetFontSizeBold('K2', 11, FALSE); ... ExcelMgt.Save(PathForSave, FileName); где ExcelMgt - кодеюнит содержащий функции работы с Excell FileName - имя файла (у нас тянется из шаблонов) RowID - номер строки (отлично инкрементится для перехода на сл строку при помощи INCSTR(RowID)) FillCell - функция вставки значения в ячейку Save - сохранение файла по пути PathForSave с именем FileName остальное можно дописать самому) (новые функции легко создаются при помощи самого Excell - записываете в макрос действия и глядя на его код пишете свои функции)...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
23.07.2014, 14:39 | #3 |
Участник
|
Цитата:
Сообщение от zuzka
ExcelMgt.OpenBook(FileName);
ExcelMgt.OpenSheetByNumber(1); RowID := '8'; .... ExcelMgt.FillCell('G2',FORMAT(UPPERCASE(Driver.Name) + ' ' + "Licence Plate")); ExcelMgt.FillCell('K2',FORMAT(TODAY)); SetFontSizeBold('K2', 11, FALSE); ... ExcelMgt.Save(PathForSave, FileName); где ExcelMgt - кодеюнит содержащий функции работы с Excell FileName - имя файла (у нас тянется из шаблонов) RowID - номер строки (отлично инкрементится для перехода на сл строку при помощи INCSTR(RowID)) FillCell - функция вставки значения в ячейку Save - сохранение файла по пути PathForSave с именем FileName остальное можно дописать самому) (новые функции легко создаются при помощи самого Excell - записываете в макрос действия и глядя на его код пишете свои функции)... |
|
23.07.2014, 14:46 | #4 |
Участник
|
Цитата:
Разработка отчета для классического клиента NAV 2009 - с этого начинать и читать обязательно! для понимания работы отчетов. Про выгрузку отчетов в MS Excel Экспорт в Excel: простой и в шаблон ну и google.ru никто не отменял) у меня нет простых отчетов... нечего прикрутить ради примера...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
23.07.2014, 15:37 | #5 |
Участник
|
Процитирую кого-то с этого же форума: "при работе репорта с Excell перед глазами встают километры кода" ))
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
05.08.2014, 08:38 | #6 |
Участник
|
Мне кажется топикастер спрашивал не об этом.
Из ВЫГРУЖЕННОГО отчета данные в ексель отправить можно только если вы в процессе формирования заполняли временную таблицу. Но это лишнее действие, обычно данные в ексель отправляются в процессе формирования отчета, т.е. во время его работы примерно так, как написал zuzka (способов много). |
|
12.08.2015, 18:19 | #7 |
Участник
|
http://www.archerpoint.com/blog/Posts/beloved-report
codeunit от всех болезней роликом засмотрелся |
|
13.08.2015, 13:51 | #8 |
Участник
|
Бредовый кодеюнит. Повторение объектной модели Экселя под свои узкоспециализированные задачи. Нужно что-то новое полез опять править этот кодеюнит. А разнообразие параметров и их кол-во в зависимости от ф-ции еще больше удручают.
|
|
18.08.2015, 09:59 | #9 |
Участник
|
Выводить отчеты нужно в готовые размеченные шаблоны, а не рисовать через объектную модель. Извращения вроде использования приснопамятного кодеюнит Excel от одной известной компании напоминают попытку использования команд PLOT(X1,Y1, X2,Y2), CIRCLE... Draw вместо хотя бы Paint
|
|
13.11.2015, 16:48 | #10 |
Участник
|
У меня на (200К+ записей * 84 поля) при использовании РекордРеф, запись в текст в формате csv уходит минут 30. Выполняется на серваке.
Если рекорд реф убрать,то думаю минут 10 можно скинуть. Это если не нужно фоматирование. средствами SQL тоже быстро получается, но этим кунгфу я не владею. |
|
17.11.2015, 09:54 | #11 |
Участник
|
Цитата:
роликом засмотрелся
|
|
17.11.2015, 10:07 | #12 |
Участник
|
Идиотский кодеюнит, все равно что Нав для рисования в Паинте использовать
У пользую размеченные мной или ключевыми пользователями шаблоны (можно брать хоть регламентные формы из Консультанта) и спец. кодеюнит. Соглашение с пользователями только о названиях меток для макроподстановок и названиях секций отчета. Дизайн отчета целиком на их совести Код для вывода листов просчета для инвентаризации: Header - OnAfterGetRecord() TemplateMgt.CreateNewSheet("Document No."); TemplateMgt.CopyPageSetupFromTemplate(); TemplateMgt.CopyNamedRange('HEADER'); TemplateMgt.xlReplaceRange1('#=DocumentNo', "Document No."); TemplateMgt.xlReplaceRange1('#=DT', FORMAT(CURRENTDATETIME)); TemplateMgt.xlReplaceRange1('#=USERID', USERID); window.UPDATE(1, "Document No."); Line - OnPreDataItem() TemplateMgt.CopyNamedRange('LINE_HEADER'); Line - OnAfterGetRecord() CALCFIELDS(Barcode, Article); TemplateMgt.CopyNamedRange('LINE'); TemplateMgt.xlReplaceRange1('#=LineNumber', FORMAT("Line Number")); TemplateMgt.xlReplaceRange1('#=BinCode', "Bin Code"); TemplateMgt.xlReplaceRange1('#=PSN', "Parent Serial No."); TemplateMgt.xlReplaceRange1('#=Barcode', Barcode); TemplateMgt.xlReplaceRange1('#=Description', Description); TemplateMgt.xlReplaceRange1('#=Article', Article); TemplateMgt.xlReplaceRange1('#=LotNo', "Lot No."); TemplateMgt.xlReplaceRange1('#=Project', Project); TemplateMgt.xlReplaceRange1('#=UOM', UOM); IF "Qty Per UOM"<>0 THEN TemplateMgt.xlReplaceRange1('#=QtyPerUOM', FORMAT("Qty Per UOM")) ELSE TemplateMgt.xlReplaceRange1('#=QtyPerUOM', ''); Header - OnPostDataItem() SheetsForDelete.INIT; SheetsForDelete.Key := 1; SheetsForDelete.tFld03 := 'ШАБЛОН'; SheetsForDelete.INSERT; TemplateMgt.DeleteTemplateSheets(SheetsForDelete); TemplateMgt.FinishBook; |
|