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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.11.2013, 14:07   #1  
524td is offline
524td
Участник
 
19 / 10 (1) +
Регистрация: 18.11.2013
Добрый день, есть вопрос.

как осуществить экспорт с екселя в нав?где можно глянуть примеры выполнения??
а именно в table81
Старый 22.11.2013, 14:26   #2  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
Вы хотите сделать именно экспорт из Excel средствами VBA? Или речь все таки об импорте из книги, средствами NAV?
Старый 22.11.2013, 14:34   #3  
524td is offline
524td
Участник
 
19 / 10 (1) +
Регистрация: 18.11.2013
Цитата:
Сообщение от Constantine Посмотреть сообщение
Вы хотите сделать именно экспорт из Excel средствами VBA? Или речь все таки об импорте из книги, средствами NAV?
средствами NAV
Старый 22.11.2013, 14:45   #4  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
Честно говоря, сам ни разу не сталкивался с такой задачей, но первой что приходит в голову - открывать эту книгу и циклом бегать по строкам и столбцам и читать данные. Но не уверен, что это хорошая идея, ведь пользователь добавит столбец какой-нибудь и потом вся загрузка накроется. Можно еще, например, сохранить Excel как *.CSV и грузить датапортом.
Старый 22.11.2013, 14:46   #5  
524td is offline
524td
Участник
 
19 / 10 (1) +
Регистрация: 18.11.2013
Цитата:
Сообщение от Constantine Посмотреть сообщение
Честно говоря, сам ни разу не сталкивался с такой задачей, но первой что приходит в голову - открывать эту книгу и циклом бегать по строкам и столбцам и читать данные. Но не уверен, что это хорошая идея, ведь пользователь добавит столбец какой-нибудь и потом вся загрузка накроется. Можно еще, например, сохранить Excel как *.CSV и грузить датапортом.
можно подробней? вообще ни одного раза не стыкался, с датапортами и загрузкой с Excel
Старый 22.11.2013, 14:50   #6  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
Датапортом вы не Excel загружать будете, а по сути текстовый файл, с расширением *.txt или *.csv. Я имел ввиду, что из Экселя руками сформировать CSV и скормить НАВу.
Старый 22.11.2013, 16:21   #7  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
НАВ умеет кое-что делать с xls-файлами. В зависимости от версии.
Проше всего посмотреть как сделан импорт, например, бюджетов в стандартном функционале
Старый 25.11.2013, 11:29   #8  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Возможно присутствует Codeunit "Excel Management" - в нем есть импорт/экспорт из/в Excel. Посмотрите...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 25.11.2013, 11:55   #9  
524td is offline
524td
Участник
 
19 / 10 (1) +
Регистрация: 18.11.2013
Кто то вообще делал выгрузку с екселя в Навижн?
если такие есть, то помогите, прошу вас, очень.
Старый 25.11.2013, 12:43   #10  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
искать надо лучше: экспорт импорт данных Navision

или смотреть как работает объект Table 370 - "Excel Buffer"
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 25.11.2013, 13:08   #11  
524td is offline
524td
Участник
 
19 / 10 (1) +
Регистрация: 18.11.2013
Нашел готовый отчет такого плана, взялся его переделывать..

Код:
IF genjournalcode = '' THEN
BEGIN
  MESSAGE('Íåîáõîäèìî ââåñòè íîìåð äîêóìåíòà');
  EXIT;
END;
IF paypurchasecode <> 0 THEN
BEGIN
  MESSAGE('Íåîáõîäèìî îïðåäåëèòü íîìåð ïëàòåæà');
  EXIT;
END;
IF XLSDataFile = '' THEN
BEGIN
  MESSAGE('Íåîáõîäèìî âûáðàòü ôàéë èìïîðòà.');
  EXIT;
END;

CREATE(XlAppl);
XlWorkBook := XlAppl.Workbooks.Open(XLSDataFile);
XlWorkSheet:=XlWorkBook.Worksheets.Item(1);
Window.OPEN('Èìïîðò äàííûõ ...\' +
                   '@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');

IF FirstLine THEN
  j:=2
ELSE
  j:=1;

Var1:=1;
WHILE FORMAT(XlWorkSheet.Range('A'+FORMAT(Var1)+':A'+FORMAT(Var1)).Value)<>'' DO
BEGIN
  Rows:=Rows+1;
  Var1:=Var1+1;
END;
i:=Rows;


  // ñòðîêà âðåìåíè ïî âûãðóçêå

FOR Var1:=j TO Rows DO
BEGIN
  dd:=dd+1;

  EmplCode:=FORMAT(XlWorkSheet.Range('A'+FORMAT(Var1)+':'+'A'+FORMAT(Var1)).Text);
  EVALUATE(EmplTime,FORMAT(XlWorkSheet.Range('B'+FORMAT(Var1)+':'+'B'+FORMAT(Var1)).Value));
  genjournalLINES.SETRANGE("Document No.",genjournalcode);//
  genjournalLINES.SETRANGE("Payment Method",paypurchasecode);

  IF  genjournalLINES.FINDFIRST THEN
  BEGIN
    ImportTimeSheet.Hour:=EmplTime;
    IF EmployeeCategory."Contract Terms"=EmployeeCategory."Contract Terms"::Piecework THEN
      ImportTimeSheet."User Type":=0;
    IF EmployeeCategory."Contract Terms"=EmployeeCategory."Contract Terms"::Contract THEN
      ImportTimeSheet."User Type":=1;
    ImportTimeSheet.PrePayment:=PrePayment;
    genjournalLINES.MODIFY;
  END
  ELSE
  BEGIN
    genjournalLINES.INIT;
    genjournalLINES."Document No.":=genjournalcode;
    genjournalLINES."Payment Method":=paypurchasecode;
    //genjournalLINES.Hour:=EmplTime;
    //genjournalLINES."Approval Date":=CREATEDATETIME(TODAY,TIME);
    //genjournalLINES."Import User":=USERID;
    IF EmployeeCategory."Contract Terms"=EmployeeCategory."Contract Terms"::Piecework THEN
      ImportTimeSheet."User Type":=0;
    IF EmployeeCategory."Contract Terms"=EmployeeCategory."Contract Terms"::Contract THEN
      ImportTimeSheet."User Type":=1;

    genjournalLINES.Prepayment:=PrePayment;
    genjournalLINES.INSERT;

//code
    END;
  END;
  Window.UPDATE(1, ROUND(dd / i * 10000, 1));


CLEAR(XlAppl);
Window.CLOSE;
Старый 25.11.2013, 16:42   #12  
524td is offline
524td
Участник
 
19 / 10 (1) +
Регистрация: 18.11.2013
сделал вот так вот.. но инсерт почему то не производит(

Код:
LineNo:=0;
IF genjournalcode = '' THEN
BEGIN
  MESSAGE('Íåîáõîäèìî ââåñòè íîìåð äîêóìåíòà');
  EXIT;
END;
IF paypurchasecode = 0 THEN
BEGIN
  MESSAGE('Íåîáõîäèìî îïðåäåëèòü òèï ïëàòåæà');
  EXIT;
END;
IF XLSDataFile = '' THEN
BEGIN
  MESSAGE('Íåîáõîäèìî âûáðàòü ôàéë èìïîðòà.');
  EXIT;
END;

CREATE(XlAppl);
XlWorkBook := XlAppl.Workbooks.Open(XLSDataFile);
XlWorkSheet:=XlWorkBook.Worksheets.Item(1);
Window.OPEN('Èìïîðò äàííûõ ...\' +
                   '@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');

genjournalLINES.RESET;

genjournalLINES.SETRANGE("Journal Template Name",GLS."Bank Journal Template");
genjournalLINES.SETRANGE("Journal Batch Name",GLS."Group Journal Batch");
IF genjournalLINES.FINDLAST THEN

LineNo:=genjournalLINES."Line No."+10000;

IF FirstLine THEN
  j:=2
ELSE
  j:=1;

Var1:=1;
WHILE FORMAT(XlWorkSheet.Range('A'+FORMAT(Var1)+':A'+FORMAT(Var1)).Value)<>'' DO
BEGIN
  Rows:=Rows+1;
  Var1:=Var1+1;
END;
i:=Rows;

FOR Var1:=j TO Rows DO
BEGIN
  dd:=dd+1;

  EVALUATE(date,FORMAT(XlWorkSheet.Range('A'+FORMAT(Var1)+':'+'A'+FORMAT(Var1)).Value));
  description:=FORMAT(XlWorkSheet.Range('B'+FORMAT(Var1)+':'+'B'+FORMAT(Var1)).Text);
  value:=FORMAT(XlWorkSheet.Range('C'+FORMAT(Var1)+':'+'C'+FORMAT(Var1)).Text);
  EVALUATE(amount,FORMAT(XlWorkSheet.Range('D'+FORMAT(Var1)+':'+'D'+FORMAT(Var1)).Value));

    BEGIN
    genjournalLINES.INIT;
    genjournalLINES."Journal Template Name":=GLS."Bank Journal Template";
    genjournalLINES."Journal Batch Name":=GLS."Group Journal Batch";
    genjournalLINES."Line No.":=LineNo;
    genjournalLINES."Document No.":=genjournalcode;
    genjournalLINES."Payment Method":=paypurchasecode;
    genjournalLINES."Parent Line No.":=nogroup;
    genjournalLINES."Account No.":=accountno;
    genjournalLINES."Account Type":=accountype;
    genjournalLINES."Posting Date":=date;
    genjournalLINES."Bal. Account Type":=balactype;
    genjournalLINES.INSERT;

LineNo+=10000;
    END;
  END;
  Window.UPDATE(1, ROUND(dd / i * 10000, 1));


CLEAR(XlAppl);
Window.CLOSE;
Старый 26.11.2013, 09:59   #13  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
Цитата:
Сообщение от 524td Посмотреть сообщение
сделал вот так вот.. но инсерт почему то не производит(
Ошибок никаких, просто не инсёртит?

Во-первых, зачем вы используете конструкцию вида:
Код:
XlWorkSheet.Range('A'+FORMAT(Var1)+':'+'A'+FORMAT(Var1)
для обращения к одной ячейке достаточно писать:
Код:
XlWorkSheet.Range('A'+FORMAT(Var1))
Во-вторых, переменную LineNo вы заполняете вначале 0, те есть если у вас нет строк в журнале, то первую строчку НАВ будет вставлять с нулевым номером.

В-третьих, попробуйте сначала вставить строку только с ключевыми полями и потом отмодифить все остальные поля.

И что говорит дебаггер? У вас переменная Rows заполняется, до кода вставки вообще дело доходит? Вот этот цикл вообще начинается?
Код:
FOR Var1:=j TO Rows DO
Старый 29.11.2013, 13:45   #15  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от Васыо Посмотреть сообщение
на mibuso много полезных вещей)
 


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

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

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