NF data to DBase 3

Hi… All Is it possible to transfer NF data to/from DBase III. Bambang Widjanarko ------------------ ako@ebsi.co.id

I do this with a dataport, and then do in Dbase a “append from” … type delimited. Works fine, only dates are a little tricky…

A dataport works— but a nonprinting report is way better. With a nonprinting report, you could probably even create the *.DBF file directly without doing a text import. (The format is mostly space-delimited text with some header and footer info, I believe.) “Why shouldn’t you use a DataPort?” you ask— well, because a nonprinting Report can write (more easily) to multiple files, it gives you more flexibility, because you can read multiple tables (more easily), and you aren’t limited to one line of text for each record in the Navision table. You can also nest dataitems in a nonprinting report— e.g., in a DataPort, you could read the Customer table in its entirety and then the Customer Ledger Entry table in its entirety, but a report could read a Customer record and THEN go a level down to the Cust. Ledger Entry table and read all the ledger entries for that Customer. Finally, I want to say that I didn’t know anyone was still using dBase III. I feel like I’m 15 years younger just hearing that name again :slight_smile: ------- Tim Horrigan horrigan@aol.com Edited by - horrigan on 1/11/01 3:41:08 AM Edited by - horrigan on 1/11/01 3:43:23 AM

I developed a number of specialized applications under Dbase, and since we just started in oktober last year with Navision, I have not had the time to migrate this applcations to another platform. Your’e right, sound from the middleages now, but it still works. I am still a novice in developping Navision but learning very fast. Could you please send me a little sample code how to use non printing reports? I would appreciate this very much. Marion

We have create an OCX for transfer data from Dbase to NF. If you are intrested please mail me and i will send you help-file.

There is a freeware dll in the web, that allows to create and edit dbf files (http://www.vbrussian.com/Files/MODBF.EXE). It works with VBA, but I failed to register it in NF.

You can connect to dBase via MsAccess. There’s one exemple to connect it. Name DataType Subtype Length Dir Record Directorio Empresas Departamento Record Departamento LinDiaGen Record Lín. diario general xLinDiaGen Record Lín. diario general Proyec Record Proyecto sql Text 250 sql_conexion_access Text 250 Engine Automation ‘Microsoft DAO 3.6 Object Library’.DBEngine BD Automation ‘Microsoft DAO 3.6 Object Library’.Database RS Automation ‘Microsoft DAO 3.6 Object Library’.Recordset Campos Automation ‘Microsoft DAO 3.6 Object Library’.Fields Tbl Automation ‘Microsoft DAO 3.6 Object Library’.TableDef Tbls Automation ‘Microsoft DAO 3.6 Object Library’.TableDefs Ventana Dialog T Text 30 Tablas Text 30 i Integer NoSigMov Integer ActualizadBase Boolean F File j Integer Conf Record Configuración cartera ImportaEjecicio() NombreBaseDatos := ‘c:\import.mdb’; sql_conexion_access := ‘“JetTable”, ";DATABASE=’+NombreBaseDatos + ‘";’; IF STRPOS(OSVERSION,‘58’) <> 0 THEN ComandoSistemaOperativo := ‘C:\COMMAND.COM’; IF STRPOS(OSVERSION,‘T’) <> 0 THEN ComandoSistemaOperativo := ‘C:\WINNT\SYSTEM32\CMD.EXE’; Ventana.OPEN(‘Procesando #1##############’+ ‘Elemento #2##############’); CREATE(Engine); IF F.OPEN(NombreBaseDatos) THEN BEGIN F.CLOSE; SHELL(ComandoSistemaOperativo, ‘/c’, ‘del’,NombreBaseDatos); SLEEP(1000); //BD := Engine.OpenDatabase(NombreBaseDatos, FALSE) END; BD := Engine.CreateDatabase(NombreBaseDatos,’;LANGID=0X040A;CP=1252;COUNTRY=0;pwd=sa’); //BorraTablas; Tablas[1] := ‘DEPART’; Tablas[2] := ‘SUBCTA’; Tablas[3] := ‘DIARIO’; sql := ‘dBASE IV;DATABASE=’ + Dir.Directorio; Tbls := BD.TableDefs; ImportaDep; ImportaCta; ImportaProy; ImportaLinDiaGen; CLEAR(Tbl); BD.Close; CLEAR(BD); CLEAR(Engine); ImportaDep() i := 1; Ventana.UPDATE(1,‘DEPARTAMENTOS’); IF Dir.“No Transferir Dptos” THEN EXIT; CreaTabla; REPEAT Campos := RS.Fields; Ventana.UPDATE(2,T); T := FORMAT(Campos.Item(‘CODIGO’).Value); DptoInsert; RS.MoveNext; UNTIL RS.EOF; //IF Departamento.GET(Qd.Fields(‘CODIGO’)) THEN; ImportaLinDiaGen() i := 3; Ventana.UPDATE(1, ‘DIARIO GENERAL’); NoSigMov := 0; IF LinDiaGen.FIND(’+’) THEN NoSigMov := LinDiaGen.“Nº línea”; CreaTabla; IF ActualizadBase THEN BEGIN EjecutaSQL(‘DEPARTA’,0); EjecutaSQL(‘ASIEN’,1); EjecutaSQL(‘FECHA’,1); EjecutaSQL(‘SUBCTA’,0); EjecutaSQL(‘CONTRA’,1); EjecutaSQL(‘PTADEBE’,1); EjecutaSQL(‘CONCEPTO’,0); EjecutaSQL(‘PTAHABER’,1); EjecutaSQL(‘eurodebe’,1); EjecutaSQL(‘eurohaber’,1); EjecutaSQL(‘factura’,1); EjecutaSQL(‘clave’,0); END; Ventana.UPDATE(1, ‘DIARIO GENERAL’); RS := BD.OpenRecordset( Tablas[i]+‘1’); //IF RS.NoMatch THEN // EXIT; REPEAT Campos := RS.Fields; T := FORMAT(Campos.Item(‘ASIEN’).Value); Ventana.UPDATE(2,T); DiaGenInsert; RS.MoveNext; UNTIL RS.EOF; ImportaProy() IF Dir.“No Transferir Proyectos” THEN EXIT; ImportaCta() i := 2; Ventana.UPDATE(1,‘CUENTAS CONTABLES’); CreaTabla; IF ActualizadBase THEN BEGIN EjecutaSQL(‘NIF’,0); EjecutaSQL(‘DOMICILIO’,0); EjecutaSQL(‘POBLACION’,0); EjecutaSQL(‘PROVINCIA’,0); EjecutaSQL(‘CODPOSTAL’,0); END; REPEAT Campos := RS.Fields; T := FORMAT(Campos.Item(‘COD’).Value); Ventana.UPDATE(2,T); CtaInsert; RS.MoveNext; UNTIL RS.EOF; DptoInsert() IF Departamento.GET(T) THEN EXIT; Departamento.INIT; Departamento.Código := T; Departamento.Nombre := COPYSTR(FORMAT(Campos.Item(‘DESCRIP’).Value),1,MAXSTRLEN(Departamento.Nombre)); Departamento.INSERT; CtaInsert() IF NOT Cta.GET(T) THEN Cta.INIT; Cta.VALIDATE(Cta.“Nº”,T); Cta.VALIDATE(Cta.Nombre,COPYSTR(FORMAT(Campos.Item(‘TITULO’).Value),1,MAXSTRLEN(Cta.Nombre))); IF STRLEN(Cta.“Nº”) < 5 THEN Cta.“Tipo mov.” := 1; IF COPYSTR( Cta.“Nº”,1,1) IN [‘6’,‘7’] THEN IF Cta.“Tipo mov.” = Cta.“Tipo mov.”::Auxiliar THEN Cta.“Cta. regularización” := ‘1290000’; IF NOT Cta.INSERT(TRUE) THEN Cta.MODIFY; EVALUATE(V,COPYSTR(Cta.“Nº”, 3,18)); CASE COPYSTR(Cta.“Nº”, 1,2) OF ‘40’,‘41’,‘46’: WITH Prov DO BEGIN INIT; CASE COPYSTR(Cta.“Nº”, 1,2) OF ‘40’: “Nº” := ‘p’+ FORMAT(V); ‘41’: “Nº” := ‘a’+ FORMAT(V); ‘46’: “Nº” := ‘e’+ FORMAT(V); END; VALIDATE(Nombre, Cta.Nombre); “CIF/NIF” := COPYSTR(FORMAT(Campos.Item( ‘NIF’ ).Value),1,MAXSTRLEN(“CIF/NIF”)); Dirección := COPYSTR(FORMAT(Campos.Item( ‘DOMICILIO’ ).Value),1,MAXSTRLEN(Dirección)); Población := COPYSTR(FORMAT(Campos.Item( ‘POBLACION’ ).Value),1,MAXSTRLEN(Población)); Provincia := COPYSTR(FORMAT(Campos.Item( ‘PROVINCIA’ ).Value),1,MAXSTRLEN(Provincia)); “C.P.” := COPYSTR(FORMAT(Campos.Item( ‘CODPOSTAL’ ).Value),1,MAXSTRLEN(“C.P.”)); IF NOT INSERT THEN ; IF GrProv.GET(“Nº”) THEN EXIT; GrProv.INIT; GrProv.Código := “Nº”; GrProv.“Cta. proveedor” := Cta.“Nº”; IF NOT GrProv.INSERT THEN ; “Grupo contable proveedor” := GrProv.Código; MODIFY; END; ‘43’,‘44’: WITH Clie DO BEGIN INIT; CASE COPYSTR(Cta.“Nº”, 1,2) OF ‘43’: “Nº” := ‘c’+ FORMAT(V); ‘44’: “Nº” := ‘d’+ FORMAT(V); END; VALIDATE(Nombre, Cta.Nombre);; “CIF/NIF” := COPYSTR(FORMAT(Campos.Item( ‘NIF’ ).Value),1,MAXSTRLEN(“CIF/NIF”)); Dirección := COPYSTR(FORMAT(Campos.Item( ‘DOMICILIO’ ).Value),1,MAXSTRLEN(Dirección)); Población := COPYSTR(FORMAT(Campos.Item( ‘POBLACION’ ).Value),1,MAXSTRLEN(Población)); Provincia := COPYSTR(FORMAT(Campos.Item( ‘PROVINCIA’ ).Value),1,MAXSTRLEN(Provincia)); “C.P.” := COPYSTR(FORMAT(Campos.Item( ‘CODPOSTAL’ ).Value),1,MAXSTRLEN(“C.P.”)); IF NOT INSERT THEN ; IF GrClie.GET(“Nº”) THEN EXIT; GrClie.INIT; GrClie.Código := “Nº”; GrClie.“Cta. clientes” := Cta.“Nº”; IF NOT GrClie.INSERT THEN ; “Grupo contable cliente” := GrClie.Código; MODIFY; END; ‘57’: WITH Ban DO BEGIN INIT; “Nº” := FORMAT(V); VALIDATE(Nombre, Cta.Nombre);; IF NOT INSERT THEN ; GrBan.INIT; GrBan.Código := “Nº”; GrBan.“Cta. banco” := Cta.“Nº”; “Grupo contable banco” := “Nº”; IF NOT GrBan.INSERT THEN ; MODIFY; END; END; DiaGenInsert() NoSigMov := NoSigMov + 10000; LinDiaGen.INIT; LinDiaGen.“Nombre libro diario” := xLinDiaGen.“Nombre libro diario”; LinDiaGen.“Nombre sección diario” := xLinDiaGen.“Nombre sección diario”; LinDiaGen.“Nº línea” := NoSigMov; LinDiaGen.INSERT; EVALUATE(LinDiaGen.“Nº asiento”,FORMAT(Campos.Item(‘ASIEN’).Value)); EVALUATE(LinDiaGen.“Fecha registro”,FORMAT(Campos.Item(‘FECHA’).Value)); EVALUATE(LinDiaGen.“Nº cuenta”,COPYSTR(FORMAT(Campos.Item(‘SUBCTA’).Value),1,MAXSTRLEN(LinDiaGen.“Nº cuenta”))); //EVALUATE(LinDiaGen.“Cta. contrapartida”,COPYSTR(FORMAT(Campos.Item(‘CONTRA’).Value),1,MAXSTRLEN(LinDiaGen.“Cta. contrapartida”))); //IF LinDiaGen.“Cta. contrapartida” = ‘0’ THEN LinDiaGen.“Cta. contrapartida” := ‘’; EVALUATE(LinDiaGen.Descripción,COPYSTR(FORMAT(Campos.Item(‘CONCEPTO’).Value),1,MAXSTRLEN(LinDiaGen.Descripción))); LinDiaGen.“Nº documento externo” := FORMAT(Campos.Item(‘FACTURA’).Value); IF LinDiaGen.“Nº documento externo” = ‘0’ THEN LinDiaGen.“Nº documento externo” := ‘’; //LinDiaGen.VALIDATE(LinDiaGen.“Cód. divisa”, ‘PTS’); Imp := 0; txt := FORMAT(Campos.Item(‘euroDEBE’).Value); EVALUATE(Imp, txt); IF Imp = 0 THEN BEGIN EVALUATE(Imp, FORMAT(Campos.Item(‘eurohaber’).Value)); Imp := - Imp; END; //GESTIÓN EN PESETAS DEL EJERCICIO. IF Dir.UtilizaPesetas THEN BEGIN LinDiaGen.VALIDATE( LinDiaGen.“Cód. divisa”, Conf.“Cod. Peseta”); txt := FORMAT(Campos.Item(‘PTADEBE’).Value); EVALUATE(Imp, txt); IF Imp = 0 THEN BEGIN EVALUATE(Imp, FORMAT(Campos.Item(‘PTAHaber’).Value)); Imp := - Imp; END; END; LinDiaGen.VALIDATE(LinDiaGen.Importe, Imp); LinDiaGen.“Nº documento” := ‘IMPORT-’ + FORMAT(LinDiaGen.“Nº asiento”); EVALUATE(V,COPYSTR(LinDiaGen.“Nº cuenta”, 3,18)); CASE COPYSTR( LinDiaGen.“Nº cuenta”, 1,2) OF ‘40’,‘41’: BEGIN CASE COPYSTR(LinDiaGen.“Nº cuenta”, 1,2) OF ‘40’: LinDiaGen.“Nº cuenta” := ‘p’+ FORMAT(V); ‘41’: LinDiaGen.“Nº cuenta” := ‘a’+ FORMAT(V); END; LinDiaGen.“Tipo mov.” := LinDiaGen.“Tipo mov.”::Proveedor; Prov.GET(LinDiaGen.“Nº cuenta”); LinDiaGen.“Grupo contable” := Prov.“Grupo contable proveedor”; END; ‘43’,‘44’: BEGIN LinDiaGen.“Tipo mov.” := LinDiaGen.“Tipo mov.”::Cliente; CASE COPYSTR(LinDiaGen.“Nº cuenta”, 1,2) OF ‘43’: LinDiaGen.“Nº cuenta” := ‘c’+ FORMAT(V); ‘44’: LinDiaGen.“Nº cuenta” := ‘d’+ FORMAT(V); END; //LinDiaGen.VALIDATE(LinDiaGen.“Nº cuenta”); Clie.GET(LinDiaGen.“Nº cuenta”); LinDiaGen.“Grupo contable” := Clie.“Grupo contable cliente”; END; ‘57’: BEGIN LinDiaGen.“Tipo mov.” := LinDiaGen.“Tipo mov.”::Banco; LinDiaGen.“Nº cuenta” := FORMAT(V); Banc.GET( LinDiaGen.“Nº cuenta”); LinDiaGen.“Grupo contable” := Banc.“Grupo contable banco”; END; END; EVALUATE(LinDiaGen.“Cód. departamento”,COPYSTR(FORMAT(Campos.Item(‘DEPARTA’).Value),1,MAXSTRLEN(LinDiaGen.“Cód. departamento”))); EVALUATE(LinDiaGen.“Nº proyecto”, LinDiaGen.“Cód. departamento” + ‘.’ + COPYSTR(FORMAT(Campos.Item(‘clave’).Value),1,MAXSTRLEN(LinDiaGen.“Nº proyecto”))); //evaluate(LinDiaGen.“Nº proyecto”,COPYSTR(FORMAT(Campos.Item(‘DEPARTA’).Value),1,MAXSTRLEN( LinDiaGen.“Nº proyecto”))); IF LinDiaGen.“Tipo mov.” <> 0 THEN LinDiaGen.“Nº proyecto” := ‘’; IF LinDiaGen.“Nº proyecto” = ‘.’ THEN LinDiaGen.“Nº proyecto” := ‘’; IF LinDiaGen.“Nº proyecto” = LinDiaGen.“Cód. departamento” + ‘.’ THEN LinDiaGen.“Nº proyecto” := ‘’; CompruebaProyecto; IF LinDiaGen.Importe <> 0 THEN LinDiaGen.MODIFY ELSE LinDiaGen.DELETE; EjecutaSQL(T : Text[100];Tipo : Integer) Ventana.UPDATE(1,T); Ventana.UPDATE(2,’’); IF Tipo = 0 THEN sql2 := 'UPDATE ’ + Tablas[i] + ‘1 SET ’ + Tablas[i] + ‘1.[’ + T + ‘] = " " WHERE ( ’ + Tablas[i] + ‘1.[’ + T +’]) Is Null’ ELSE sql2 := 'UPDATE ’ + Tablas[i] + ‘1 SET ’ + Tablas[i] + ‘1.[’ + T + ‘] = 0 WHERE ’ + Tablas[i] + ‘1.[’ + T +’] Is Null’; BD.Execute(sql2); CreaTabla() Tbl := BD.CreateTableDef(Tablas[i]); Tbl.Connect (sql); Tbl.SourceTableName := Tablas[i]; Tbls.Append(Tbl); IF CompruebaSiExisteTabla(Tablas[i] + ‘1’) THEN BEGIN sql1 := 'DROP TABLE '+ Tablas[i] + ‘1’; BD.Execute(sql1); END; sql1 := 'SELECT ’ + Tablas[i] + '.* INTO ’ + Tablas[i] + '1 FROM ’ + Tablas[i]; BD.Execute(sql1); RS := BD.OpenRecordset( Tablas[i]+‘1’ ); ActualizadBase := TRUE; CompruebaSiExisteTabla(NomTabla : Text[100]) : Boolean Tbls := BD.TableDefs; FOR j := 0 TO Tbls.Count - 1 DO BEGIN xTbl := Tbls.Item(j); IF xTbl.Name = NomTabla THEN EXIT(TRUE); END; EXIT(FALSE); CompruebaProyecto() IF LinDiaGen.“Nº proyecto” = ‘’ THEN EXIT; IF Proyec.GET( LinDiaGen.“Nº proyecto”) THEN EXIT; Proyec.INIT; Proyec.“Nº” := LinDiaGen.“Nº proyecto”; Proyec.Estado := Proyec.Estado::Pedido; Proyec.INSERT;

Whoaaa! guess everybody was so impressed by this monster example, they didnt dare to post anything else :wink: /Soren

Maybe the attach function was not working that day. _________________________ David Singleton Navision Consultant since 1991 dmks22@home.com___________ Edited by - David Singleton on 2001 Sep 26 04:34:26

quote:


Søren wrote: Whoaaa! guess everybody was so impressed by this monster example, they didnt dare to post anything else :wink:


Well… after reading Agustin’s General Ledger’s export to dbase i was tempted to copy also some code i’ve seen here for working with dbase made (i’m not totally sure by yourself or by Sven… … but as it’s not my code and as it’s too long… and i’m too lazy for copying/paste it… maybe another day…lol BTW, i’ve found where the problem was in the Automotive Performance application (the piece of code i didn’t knew why where u using it and e-mail you asking… yup… the one i’m still waiting an answer XP (don’t worry… it’s solved :wink: )) Regards, – Alfonso Pertierra apertierra@teleline.es Spain Western Computer Los Angeles, California

Interesting stuff… We will be converting parts of our business over to Navision/SQL2000. Of course, we’ll need to coexist with our other Clipper based applications for a while. We are currently using the Apollo OLE DB driver for our VB apps and it is working well–works great with our DOS based Clipper apps. We will use the Apollo driver and ADO to bridge between the two. Anyone had experience with Apollo, ADO and Navision? I’d like to hear if you had any difficulties. Thanks, Bill Reese Guardian Industries Corp. Aftermarket IS Mngr bill.reese@guardian.com DOS is still alive and kicking! Yea, I know, us old timers take a while to die off…