22.11.2013, 14:07 | #1 |
Участник
|
Добрый день, есть вопрос.
как осуществить экспорт с екселя в нав?где можно глянуть примеры выполнения?? а именно в table81 |
|
22.11.2013, 14:26 | #2 |
Участник
|
Вы хотите сделать именно экспорт из Excel средствами VBA? Или речь все таки об импорте из книги, средствами NAV?
|
|
22.11.2013, 14:34 | #3 |
Участник
|
|
|
22.11.2013, 14:45 | #4 |
Участник
|
Честно говоря, сам ни разу не сталкивался с такой задачей, но первой что приходит в голову - открывать эту книгу и циклом бегать по строкам и столбцам и читать данные. Но не уверен, что это хорошая идея, ведь пользователь добавит столбец какой-нибудь и потом вся загрузка накроется. Можно еще, например, сохранить Excel как *.CSV и грузить датапортом.
|
|
22.11.2013, 14:46 | #5 |
Участник
|
Цитата:
Сообщение от Constantine
Честно говоря, сам ни разу не сталкивался с такой задачей, но первой что приходит в голову - открывать эту книгу и циклом бегать по строкам и столбцам и читать данные. Но не уверен, что это хорошая идея, ведь пользователь добавит столбец какой-нибудь и потом вся загрузка накроется. Можно еще, например, сохранить Excel как *.CSV и грузить датапортом.
|
|
22.11.2013, 14:50 | #6 |
Участник
|
Датапортом вы не Excel загружать будете, а по сути текстовый файл, с расширением *.txt или *.csv. Я имел ввиду, что из Экселя руками сформировать CSV и скормить НАВу.
|
|
22.11.2013, 16:21 | #7 |
Участник
|
НАВ умеет кое-что делать с xls-файлами. В зависимости от версии.
Проше всего посмотреть как сделан импорт, например, бюджетов в стандартном функционале |
|
25.11.2013, 11:29 | #8 |
Участник
|
Возможно присутствует Codeunit "Excel Management" - в нем есть импорт/экспорт из/в Excel. Посмотрите...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
25.11.2013, 11:55 | #9 |
Участник
|
Кто то вообще делал выгрузку с екселя в Навижн?
если такие есть, то помогите, прошу вас, очень. |
|
25.11.2013, 12:43 | #10 |
Участник
|
искать надо лучше: экспорт импорт данных Navision
или смотреть как работает объект Table 370 - "Excel Buffer"
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
25.11.2013, 13:08 | #11 |
Участник
|
Нашел готовый отчет такого плана, взялся его переделывать..
Код: 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 |
Участник
|
сделал вот так вот.. но инсерт почему то не производит(
Код: 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 |
Участник
|
Ошибок никаких, просто не инсёртит?
Во-первых, зачем вы используете конструкцию вида: Код: XlWorkSheet.Range('A'+FORMAT(Var1)+':'+'A'+FORMAT(Var1) Код: XlWorkSheet.Range('A'+FORMAT(Var1)) В-третьих, попробуйте сначала вставить строку только с ключевыми полями и потом отмодифить все остальные поля. И что говорит дебаггер? У вас переменная Rows заполняется, до кода вставки вообще дело доходит? Вот этот цикл вообще начинается? Код: FOR Var1:=j TO Rows DO |
|
26.11.2013, 12:30 | #14 |
Участник
|
|
|
29.11.2013, 13:45 | #15 |
Участник
|
|
|