Have any one translated Spanish NF-260 to English Codes. I want to translate the Spanish NF-260 and then Upgrade it to 4.00 SP2, but I am not able to get the translation database that is required for Navision Localization Workbench.
I'm sorry. Could you explain your steps on how you are going to upgrade the db?
The process for upgrade is this.
1.Identify the customizations in 2.6.
2. Deceide whether to move or not to move the customizations.
3. Move the customization to 4.0 objects.
4. Run upgrade toolkit to upgrade the data
5. load during the upgrade the new 4.0 objects.
Spanish 4.0 allready has EST language pack.
Ahmed Rashed Amini
Independent Consultant/Developer
I work for the same certified partner company here in Spain and the problem is that the 2.60 version has everything in Spanish, function names, variables, field names, table names, form names, everything, as versions prior to 3.6 (I think) had their code bases in local languages.
For example, an export of table 15 looks like this:
OBJECT Table 15 Cuenta
{
OBJECT-PROPERTIES
{
Fecha=06/08/00;
Hora=10:53:23;
Modificado=S¡;
Lista versiones=ES2.01.01,Sils,Alberto;
}
PROPERTIES
{
DataCaptionFields=N§,Nombre;
OnModify=BEGIN
"Fecha £lt. modificaci¢n" := TODAY;
END;
OnDelete=VAR
CGCta : Record 15;
BEGIN
IF ("Tipo mov." = "Tipo mov."::Mayor) THEN BEGIN
CGCta := Rec;
IF CGCta.NEXT <> 0 THEN
IF COPYSTR(CGCta."N§",1,STRLEN("N§")) = "N§" THEN
ERROR('No se puede eliminar una cuenta de mayor que tiene cuentas auxiliares asociadas.');
END;
MoverMovs.MoverMovsCG(Rec);
CGMovPpto.SETCURRENTKEY("Nombre ppto.","N§ cuenta");
CGMovPpto.SETRANGE("N§ cuenta","N§");
CGMovPpto.DELETEALL;
LinComentar.SETRANGE("Nombre tabla",LinComentar."Nombre tabla"::Cuenta);
LinComentar.SETRANGE("N§","N§");
LinComentar.DELETEALL;
CabTextoAdic.SETRANGE("Nombre tabla",CabTextoAdic."Nombre tabla"::Cuenta);
CabTextoAdic.SETRANGE("N§","N§");
CabTextoAdic.DELETEALL(TRUE);
END;
OnRename=BEGIN
"Fecha £lt. modificaci¢n" := TODAY;
END;
LookupFormID=Form18;
DrillDownFormID=Form16;
}
FIELDS
{
{ 1 ; ;N§ ;Text20 ;AltSearchField=Alias;
OnValidate=VAR
NoTest : Integer;
BEGIN
IF (xRec."N§" <> '') THEN
IF (STRLEN("N§") > 4) <> (STRLEN(xRec."N§") > 4) THEN
ERROR(
'La nueva longitud no es correcta ya que implica un cambio en %1.',
FIELDNAME("Tipo mov."));
EVALUATE(NoTest, COPYSTR("N§",1,1));
IF NoTest IN [6..7] THEN
"Comercial/Balance" := "Comercial/Balance"::Comercial
ELSE
"Comercial/Balance" := "Comercial/Balance"::Balance;
CASE NoTest OF
6: "Tipo IVA" := "Tipo IVA"::Compras;
7: "Tipo IVA" := "Tipo IVA"::Ventas;
ELSE
"Tipo IVA" := 0;
END;
END;
NotBlank=S¡;
Numeric=S¡ }
{ 2 ; ;Nombre ;Text30 ;OnValidate=BEGIN
IF (Alias = UPPERCASE(xRec.Nombre)) OR (Alias = '') THEN
Alias := Nombre;
END;
}
{ 3 ; ;Alias ;Code30 }
{ 4 ; ;Tipo mov. ;Option ;OnValidate=BEGIN
IF ("Tipo mov." <> "Tipo mov."::Auxiliar) AND
(xRec."Tipo mov." = xRec."Tipo mov."::Auxiliar)
THEN BEGIN
CGMov.SETCURRENTKEY("N§ cuenta");
CGMov.SETRANGE("N§ cuenta","N§");
IF CGMov.FIND('-') THEN
ERROR(
'No se puede cambiar la cuenta %1 porque tiene movimientos asociados.',
FIELDNAME("Tipo mov."));
CGMovPpto.SETCURRENTKEY("Nombre ppto.","N§ cuenta");
CGMovPpto.SETRANGE("N§ cuenta","N§");
IF CGMovPpto.FIND('-') THEN
ERROR(
'No se puede cambiar la cuenta %1 porque est incluida en presupuestos.',
FIELDNAME("Tipo mov."));
END;
Sumatorio := '';
IF "Tipo mov." = "Tipo mov."::Auxiliar THEN BEGIN
IF "Tipo mov." <> xRec."Tipo mov." THEN
"Entrada directa" := TRUE;
END ELSE
"Entrada directa" := FALSE;
END;
OptionString=Auxiliar,Mayor }
{ 6 ; ;C¢d. departamento ;Code10 ;TableRelation=Departamento }
{ 7 ; ;C¢d. programa ;Code10 ;TableRelation=Programa }
{ 9 ; ;Comercial/Balance ;Option ;OptionString=Comercial,Balance }
{ 10 ; ;Debe/Haber ;Option ;OptionString=Ambos,Debe,Haber }
{ 11 ; ;N§ 2 ;Code20 }
{ 12 ; ;Comentario ;Boolean ;FieldClass=FlowField;
CalcFormula=Exist("L¡n. comentario" WHERE (Nombre tabla=CONST(Cuenta),
N§=FIELD(N§)));
Editable=No }
{ 13 ; ;Bloqueado ;Boolean }
{ 14 ; ;Entrada directa ;Boolean ;InitValue=S¡ }
{ 16 ; ;Saldo controlable en diarios;Boolean }
{ 17 ; ;Cambiar p gina ;Boolean }
{ 18 ; ;N§ l¡neas en blanco ;Integer ;MinValue=0 }
{ 19 ; ;Indentar ;Integer ;MinValue=0 }
{ 26 ; ;Fecha £lt. modificaci¢n;Date ;Editable=No }
{ 28 ; ;Filtro fecha ;Date ;FieldClass=FlowFilter }
{ 29 ; ;Filtro departamento ;Code10 ;FieldClass=FlowFilter;
TableRelation=Departamento }
{ 30 ; ;Filtro programa ;Code10 ;FieldClass=FlowFilter;
TableRelation=Programa }
{ 31 ; ;Saldo a la fecha ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad".Importe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(UPPERLIMIT(Filtro fecha))));
Editable=No;
AutoFormatType=1 }
{ 32 ; ;Saldo periodo ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad".Importe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(Filtro fecha)));
Editable=No;
AutoFormatType=1 }
{ 33 ; ;Importe pptdo. ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. presupuesto".Importe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha=FIELD(Filtro fecha),
Nombre ppto.=FIELD(Filtro presupuesto)));
AutoFormatType=1 }
{ 34 ; ;Sumatorio ;Text30 ;TableRelation=Cuenta;
OnValidate=BEGIN
CALCFIELDS(Saldo);
END;
ValidateTableRelation=No;
TestTableRelation=No }
{ 35 ; ;Filtro presupuesto ;Code10 ;FieldClass=FlowFilter;
TableRelation="Nombre ppto. contable" }
{ 36 ; ;Saldo ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad".Importe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa)));
Editable=No;
AutoFormatType=1 }
{ 37 ; ;Presupuesto a la fecha;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. presupuesto".Importe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha=FIELD(UPPERLIMIT(Filtro fecha)),
Nombre ppto.=FIELD(Filtro presupuesto)));
Editable=No;
AutoFormatType=1 }
{ 40 ; ;Cta. consol. debe ;Code20 }
{ 41 ; ;Cta. consol. haber ;Code20 }
{ 42 ; ;Filtro empresa ;Code10 ;FieldClass=FlowFilter;
TableRelation="C¢digo empresa" }
{ 43 ; ;Tipo IVA ;Option ;OptionString=[ ,Compras,Ventas] }
{ 44 ; ;Grupo contable negocio;Code10 ;TableRelation="Gr. contable negocio";
OnValidate=BEGIN
IF xRec."Grupo contable negocio" <> "Grupo contable negocio" THEN
IF GrupoRegisNegocio.ValidaGrRegisIVANeg(GrupoRegisNegocio,"Grupo contable negocio") THEN
VALIDATE("Grupo registro IVA neg.",GrupoRegisNegocio."Grupo reg. IVA neg. gen‚rico");
END;
}
{ 45 ; ;Grupo contable producto;Code10 ;TableRelation="Gr. contable producto";
OnValidate=BEGIN
IF xRec."Grupo contable producto" <> "Grupo contable producto" THEN
IF GrupoRegisProducto.ValidaGrRegisIVAProd(GrupoRegisProducto,"Grupo contable producto") THEN
VALIDATE("Grupo registro IVA prod.",GrupoRegisProducto."Grupo reg. IVA prod. gen‚rico");
END;
}
{ 46 ; ;Imagen ;BLOB ;SubType=Bitmap }
{ 47 ; ;Debe ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad".Debe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(Filtro fecha)));
BlankZero=S¡;
Editable=No;
AutoFormatType=1 }
{ 48 ; ;Haber ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad".Haber WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(Filtro fecha)));
BlankZero=S¡;
Editable=No;
AutoFormatType=1 }
{ 49 ; ;Texto adicional autom tico;Boolean }
{ 50 ; ;Registro por departamentos;Option ;OptionString=[ ,Obligatorio,Igual c¢digo,Sin c¢digo] }
{ 51 ; ;Registro por programas;Option ;OptionString=[ ,Obligatorio,Igual c¢digo,Sin c¢digo] }
{ 52 ; ;Debe presupuestado ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. presupuesto".Importe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha=FIELD(Filtro fecha),
Nombre ppto.=FIELD(Filtro presupuesto)));
BlankNumbers=BlankNegAndZero;
AutoFormatType=1 }
{ 53 ; ;Haber presupuestado ;Decimal ;FieldClass=FlowField;
CalcFormula=-Sum("Mov. presupuesto".Importe WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha=FIELD(Filtro fecha),
Nombre ppto.=FIELD(Filtro presupuesto)));
BlankNumbers=BlankNegAndZero;
AutoFormatType=1 }
{ 54 ; ;C¢d. rea impuesto ;Code20 ;TableRelation="Area impuesto" }
{ 55 ; ;Sujeto a impuesto ;Boolean }
{ 56 ; ;C¢d. grupo impuesto ;Code10 ;TableRelation="Grupo impuesto" }
{ 57 ; ;Grupo registro IVA neg.;Code10 ;TableRelation="Grupo registro IVA negocio" }
{ 58 ; ;Grupo registro IVA prod.;Code10 ;TableRelation="Grupo registro IVA producto" }
{ 60 ; ;Saldo periodo divisa-adicional;Decimal;
FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad"."Importe divisa-adicional" WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(Filtro fecha)));
Editable=No;
AutoFormatType=1;
AutoFormatExpr=TraeCodDivisa }
{ 61 ; ;Saldo a la fecha divisa-adic.;Decimal;
FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad"."Importe divisa-adicional" WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(UPPERLIMIT(Filtro fecha))));
Editable=No;
AutoFormatType=1;
AutoFormatExpr=TraeCodDivisa }
{ 62 ; ;Saldo divisa-adicional;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad"."Importe divisa-adicional" WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa)));
Editable=No;
AutoFormatType=1;
AutoFormatExpr=TraeCodDivisa }
{ 63 ; ;Ajuste tipo cambio ;Option ;OptionString=No ajustar,Ajustar importe,Ajustar importe divisa-adicional;
AutoFormatExpr=TraeCodDivisa }
{ 64 ; ;Debe div.-adic. ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad"."Debe div.-adic." WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(Filtro fecha)));
Editable=No;
AutoFormatType=1;
AutoFormatExpr=TraeCodDivisa }
{ 65 ; ;Haber div.-adic. ;Decimal ;FieldClass=FlowField;
CalcFormula=Sum("Mov. contabilidad"."Haber div.-adic." WHERE (N§ cuenta=FIELD(N§),
N§ cuenta=FIELD(FILTER(Sumatorio)),
C¢d. empresa=FIELD(Filtro empresa),
C¢d. departamento=FIELD(Filtro departamento),
C¢d. programa=FIELD(Filtro programa),
Fecha registro=FIELD(Filtro fecha)));
Editable=No;
AutoFormatType=1;
AutoFormatExpr=TraeCodDivisa }
{ 10700; ;Cta. regularizaci¢n ;Code20 ;TableRelation=Cuenta }
{ 10701; ;Omite en informe 347;Boolean ;OnValidate=VAR
CGMov : Record 17;
BEGIN
CGMov.SETRANGE(CGMov."N§ cuenta","N§");
IF (CGMov.FIND('-')) AND (Saldo <> 0) THEN
IF xRec."Omite en informe 347" <> "Omite en informe 347" THEN
MESSAGE ('La cuenta tiene movs. y/o %1. Cambiar el valor del campo puede causar ' +
'inconsistencias en el informe 347',FIELDNAME(Saldo));
END;
}
{ 10702; ;Omite descuentos ;Boolean }
{ 50001; ;Filtro Documento ;Code20 ;FieldClass=FlowFilter;
Description=Sils,Alberto }
}
KEYS
{
{ ;N§ }
{ ;Alias }
{ ;Saldo controlable en diarios }
{ ;Grupo contable negocio }
{ ;Grupo contable producto }
}
CODE
{
VAR
CGMov : Record 17;
CGMovPpto : Record 96;
LinComentar : Record 97;
CabTextoAdic : Record 279;
GrupoRegisNegocio : Record 250;
GrupoRegisProducto : Record 251;
ConfCG : Record 98;
MoverMovs : Codeunit 361;
LeeConfCG : Boolean;
PROCEDURE ConfNueCtaCG@1(AntCtaCG : Record 15;PostAntCtaCG : Boolean);
VAR
AntCtaCG2 : Record 15;
BEGIN
IF NOT PostAntCtaCG THEN BEGIN
AntCtaCG2 := AntCtaCG;
AntCtaCG.COPY(Rec);
AntCtaCG := AntCtaCG2;
IF NOT AntCtaCG.FIND('<') THEN
AntCtaCG.INIT;
END;
"Comercial/Balance" := AntCtaCG."Comercial/Balance";
END;
PROCEDURE TestCtaCG@2();
BEGIN
TESTFIELD("Tipo mov.","Tipo mov."::Auxiliar);
TESTFIELD(Bloqueado,FALSE);
END;
PROCEDURE TraeCodDivisa@3() : Code[10];
BEGIN
IF NOT LeeConfCG THEN BEGIN
ConfCG.GET;
LeeConfCG := TRUE;
END;
EXIT(ConfCG."Informaci¢n divisa adicional");
END;
PROCEDURE PermiteDtos@24(NoCtaCG : Code[20]) : Boolean;
VAR
CuentaCG : Record 15;
BEGIN
IF CuentaCG.GET(NoCtaCG) THEN
EXIT(CuentaCG."Omite descuentos");
END;
BEGIN
END.
}
}
What this does is cause the NDK to show a vast number of conflicts when compared to a codebase in 4.0 where every standard object is named in English. The Upgrade Toolkit documentation suggests the best option to deal with this is to use the Navision Localization Workbench with a localized Country Base Versions.mdb database which in this case I would guess is Spanish Base Version 260.mdb. I have posted a support question in regards to this file on the partner managed forums of the Microsoft support site and the reply I got was that it would be passed on to an Upgrade Engineer. Searching for .mdb files on Mibuso shows several people in the past have posted the question as to where to find these files, but without response. It's as if nobody knows where to get them from.
A translation export of the objects provides almost 70,000 lines when viewed in the Navision Localization Workbench.
There is a workaround as documented in the Upgrade Toolkit documentation, and that is to use a translation import and export process via getfld.bat and getfld2.exe supplied in the upgrade toolkit. This does most things, but not all, ie. field option values, variables, etc. The documentation suggests not to use this if the codebase has been heavily modified which what we are working on has. NDK is reporting 44% conflicts across versions. As I said, a significant chunk of this is language conflicts with the 4.0 base version having basically the same function, variable, etc. but in English rather than Spanish. Any merge here would cause a serious replication in functionality and significantly increase the size of the codebase.
Obviously, we want all of the report and form captions, etc. to remain in Spanish, but in the ML way of doing things Navision currently has, such that it could be viewed in English also by changing the current language using the menu.
If you don't the file you are looking for, your best option is to compare
base spanish 2.6 db to modified 2.6 db. Identify the code and manually move them into 4.0 object. In this process you should translate the modifications into English variable and text constants as well.
Ahmed Rashed Amini
Independent Consultant/Developer
hi, the best you can do is what they're talking 'bout... if you can't find international version (W1) you must compare the database with a standar and then use copy - paste to upgrade the modifications
hint: forgive to use NDT for upgrading, it gives a lot of problems and final result has nothing in common with previous version (before upgrading)
Comments
The process for upgrade is this.
1.Identify the customizations in 2.6.
2. Deceide whether to move or not to move the customizations.
3. Move the customization to 4.0 objects.
4. Run upgrade toolkit to upgrade the data
5. load during the upgrade the new 4.0 objects.
Spanish 4.0 allready has EST language pack.
Independent Consultant/Developer
blog: https://dynamicsuser.net/nav/b/ara3n
For example, an export of table 15 looks like this:
What this does is cause the NDK to show a vast number of conflicts when compared to a codebase in 4.0 where every standard object is named in English. The Upgrade Toolkit documentation suggests the best option to deal with this is to use the Navision Localization Workbench with a localized Country Base Versions.mdb database which in this case I would guess is Spanish Base Version 260.mdb. I have posted a support question in regards to this file on the partner managed forums of the Microsoft support site and the reply I got was that it would be passed on to an Upgrade Engineer. Searching for .mdb files on Mibuso shows several people in the past have posted the question as to where to find these files, but without response. It's as if nobody knows where to get them from.
A translation export of the objects provides almost 70,000 lines when viewed in the Navision Localization Workbench.
There is a workaround as documented in the Upgrade Toolkit documentation, and that is to use a translation import and export process via getfld.bat and getfld2.exe supplied in the upgrade toolkit. This does most things, but not all, ie. field option values, variables, etc. The documentation suggests not to use this if the codebase has been heavily modified which what we are working on has. NDK is reporting 44% conflicts across versions. As I said, a significant chunk of this is language conflicts with the 4.0 base version having basically the same function, variable, etc. but in English rather than Spanish. Any merge here would cause a serious replication in functionality and significantly increase the size of the codebase.
Obviously, we want all of the report and form captions, etc. to remain in Spanish, but in the ML way of doing things Navision currently has, such that it could be viewed in English also by changing the current language using the menu.
base spanish 2.6 db to modified 2.6 db. Identify the code and manually move them into 4.0 object. In this process you should translate the modifications into English variable and text constants as well.
Independent Consultant/Developer
blog: https://dynamicsuser.net/nav/b/ara3n
hint: forgive to use NDT for upgrading, it gives a lot of problems and final result has nothing in common with previous version (before upgrading)
regards from valencia
so far, so good