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