Nombre de la declinación. Declinación nombre completo Declinación 1c

Declinación del nombre completo en 1C 8.3

Durante el funcionamiento del complejo de software 1C, los usuarios a menudo surgen preguntas sobre la declinación del nombre completo de 1C 8.3. La función 1C de declinación del nombre completo se lleva a cabo mediante un componente especial llamado "NameDecl.dll". Para comenzar a utilizar el componente, debe copiarlo del disco de información y soporte técnico a la carpeta donde se encuentra la plataforma bin principal y también registrarlo en el sistema operativo. La copia se realiza mediante el comando “resvr32 NameDecl.dll”. Para hacer esto, abra "Inicio" y llame a la directiva "Ejecutar", como se muestra en la figura.

Abra una ventana e ingrese "resvr32.exe", indicando la ruta a la biblioteca requerida. La biblioteca se selecciona usando el botón "Examinar". A continuación, debe seleccionar "Aceptar" y confirmar el registro de la biblioteca.

La declinación 1c del nombre completo se realiza según 2 parámetros:

  • Caso, tipo - número. Este es un parámetro requerido.
  • Nombre completo, tipo - cadena. Este también es un parámetro obligatorio.

Dado que hay seis casos en el idioma ruso, a cada caso se le asigna un número del 1 al 6 según la siguiente tabla:

También se identifica un tercer parámetro opcional para el componente de declinación del Nombre completo 1C: género (tipo - número). Aquí hay 3 opciones: 0 - automático, 1 - masculino, 2 - femenino.

Servicio 1C 8 declinación nombre completo

Los programas de la versión 1C 8.3 tienen un servicio especial para la declinación del nombre completo en los casos 1C 8.3, que funciona a través del configurador. Por lo tanto, para rechazar su nombre completo, abra la ventana del configurador y utilice la función “Rechazar”, como se muestra a continuación:

Ingresamos los detalles del directorio, donde se muestran en caso nominativo. Los documentos se imprimen y muestran en formularios en la declinación deseada. A modo de ejemplo, así es como se ve en el formulario de contrato:



A modo de ejemplo, a continuación se muestra una orden de contratación, donde en las tarjetas del especialista su apellido, nombre y patronímico están escritos en I.P., pero en forma impresa se muestran en R.P.

1C permite automáticamente crear formularios y documentación impresos teniendo en cuenta los requisitos legales vigentes. La necesidad de declinación por casos, géneros y números viene dictada por los estándares de gestión de documentos comerciales, según los cuales cualquier documento está redactado de manera estética, competente y corresponde al estado de la empresa.

El uso de la función de rechazo automático minimiza la probabilidad de errores al generar documentos, lo que protege contra consecuencias negativas en el futuro. Esto es especialmente cierto en los casos en los que se genera una gran cantidad de documentos a la vez. La autodeclinación agiliza el trabajo con la documentación y ahorra tiempo, lo que tiene un efecto positivo en la productividad.

Hemos analizado 2 métodos de declinación de un apellido, un nombre patronímico por casos, números y géneros, utilizando un componente especial para la declinación del nombre completo 1C 8.3 y a través del servicio de configuración. Pruebe ambos y vea cuál funciona mejor para usted.

Cuando trabaja en 1C, el usuario se enfrenta a la cuestión de la declinación del apellido o el puesto de un empleado en documentos impresos, es decir, a una situación en la que es necesario declinar los apellidos por caso.

Para la declinación de un nombre completo en los programas 1C, se proporciona un componente externo: NameDecl.dll, que contiene la función de declinación. Puede tomarlo del disco ITS y copiarlo a la carpeta con la plataforma 1C instalada - bin, registrarlo en el sistema operativo. Este procedimiento se realiza utilizando el comando resvr32 NameDecl.dll (bajo una cuenta de administrador). Para hacer esto, debe llamar al comando "Ejecutar" a través del botón "Inicio", usando la búsqueda o la combinación de teclas Windows + R.

Fig.1 Ventana de búsqueda. Encontrar el comando Ejecutar

En la ventana que aparece, ingrese el comando resvr32.exe y especifique la ruta a la biblioteca que se conectará usando el botón "Examinar".


Fig.2 Ventana de comando "Ejecutar"

Después de hacer clic en "Aceptar", aparecerá un mensaje indicando que la biblioteca se ha registrado correctamente.


Fig.3 Ventana de mensaje

Descripción del método de declinación en 1C.

Declinar (nombre completo, caso, género) según los parámetros:

  • Nombre completo (obligatorio), tipo – cadena
  • Caso (obligatorio), tipo – número

El caso en el que se debe colocar el nombre completo se especifica mediante un número del 1 al 6.

Tabla de casos: preguntas, preposiciones y sus significados en el código del programa.

Sucede que surge una situación ambigua cuando el programa necesita determinar el género de un apellido, por ejemplo, Sigida, Chepko, Sushko, Oganezyan, etc.

En este caso, utilice un parámetro adicional:

  • Género (opcional), tipo - número

Muestra si rechazar o no el apellido. En otros casos, este parámetro se omite o se utiliza el valor 0 (“auto”), porque La indicación incorrecta del género puede afectar la declinación correcta. Aquí los valores posibles son: 0 – auto, 1 – masculino, 2 – femenino.

Servicio "Rechazo por casos"

Los programas 1C 8.3 ya incluyen un servicio de declinación de datos de empleados o contratistas de acuerdo con los casos utilizados en el documento.



Fragmento 1

#Área de interfaz de programa // Rechaza el nombre completo // Solo funciona en el sistema operativo Windows. // // Parámetros: // Nombre completo - Línea - Línea que contiene el nombre completo para la declinación. // Caso - Número - el caso en el que es necesario rechazar la representación del objeto. // 1 - Nominativo. // 2 - Genitivo. // 3 - Dativo. // 4 - Acusativo. // 5 - Creativo. // 6 - Preposicional. // Objeto - Declinaciones - Enlace al objeto cuyos detalles se rechazan // Género - Número - Número - género del protagonista físico, // 1 - hombre, // 2 - mujer. // // Valor de retorno: // Cadena: el resultado de la declinación del nombre completo en caso. // Función DeclineFull Name(Nombre completo, Caso, Objeto = Indeterminado, Género = Indefinido) Exportar // Rechaza la representación de un objeto. Función DeclensionRepresentations(Representación, Caso, Objeto = Indefinido) Exportar // Realiza las acciones en el formulario necesarias para conectar el subsistema Declinación.

Fig.4 Ventana del configurador



Fragmento 2

// Rechaza la representación del objeto. Función DeclineRepresentation(Representación, Caso, Objeto = Indefinido) Exportar Retorno Decline(Representación, Caso, Objeto); Fin de la función // Realiza con el formulario las acciones necesarias para conectar el subsistema de declinación Procedimiento Cuando CreateOnServer(Form, View, MainFormAttributeName = "Object") Exportar // Manejador de eventos Cuando RecordedOnServer de un formulario de objeto administrado para declinación Procedimiento Cuando RecordedOnServer(Form , Ver, Objeto, ThisFullName = False , Género = Indefinido) Exportar // Establece el signo de disponibilidad del servicio de declinación Procedimiento SetAvailability del Servicio de declinación (Disponibilidad) Exportar SetPrivilegedMode (True); CurrentParameters = Nueva coincidencia (SessionParameters.ClientParametersOnServer); CurrentParameters.Insert("DeclinationServiceAvailable", Disponibilidad); SessionParameters.ClientParametersOnServer = Nuevo cumplimiento fijo (CurrentParameters); Establecer modo privilegiado (falso); Fin del Procedimiento

Fig.5 Uso de la función “Pendiente”

Utilizando detalles en el documento que se seleccionan del directorio en el que se presentan en el caso nominativo, se mostrarán en la forma impresa del documento con la declinación requerida.

Consideremos la función de declinación usando el ejemplo de un contrato en 1C: Contabilidad 3.0. (1C: Empresa 8.3). Esto prevé la declinación de nombre y cargo.



Fig.6 Ventana del formulario de contrato. Configuración de apellido y declinación de posición

El programa colocará automáticamente la opción correcta en el formulario impreso.



Fig.7 Ventana del programa – “Rechazo por caso”

Un ejemplo de declinación de casos se puede ver en la “Orden de Contratación”. En la tarjeta del empleado, su nombre completo se indica en el caso Nominativo y en forma impresa, en el caso Genitivo.



Fig. 8 Ejemplo de declinación del nombre completo en el formulario impreso "Orden de empleo"

El programa 1C, teniendo en cuenta los requisitos de la legislación y las normas, le permite cumplir con el procedimiento aprobado para la preparación de documentación y generación de formularios impresos.

La disminución en los casos también se debe a los estándares comerciales, que estipulan que cualquier documento debe redactarse no solo de manera competente, sino también estéticamente competente, lo que refleja el estado de la organización.

Además, el uso en el programa de funciones como la autodeclinación reduce significativamente la probabilidad de errores en la preparación del documento.

El archivo contiene procedimientos para 7.7 y 8.x. Se pasa al procedimiento una cadena con el formato Apellido Nombre Patronímico.

UPD 26/11/10: con gratitud - nueva versión de la función. ¡No lo he probado! Las preguntas sobre el funcionamiento de esta versión deben dirigirse a él; por alguna razón no quiere publicarlas :)

Función Nombre completo del caso (valor del nombre completo, caso = 1, solo iniciales = falso, valor del separador = ".")
Si TypeValue (nombre completo)<>Escriba ("Cadena") Luego
Report("Línea no válida enviada a ""caso de nombre completo!"""); Devolver nombre completo;
terminara si;

// eliminar múltiples espacios
Mientras 1=1 ciclo
Nombre completo=ScrLP(StrReplace(nombre completo," "," "));
Si Buscar(nombre completo," ")=0 Entonces Abortar EndIf;
Fin del ciclo;

Si TypeValue(Case)=Type("String") Entonces
pad=ScrLP(NReg(Lev(Caso,1)));
Si Buscar("irdvtp",pad)=0 Entonces

terminara si;
De lo contrario, si TypeValue(Case)=Type("Number") Entonces
Si (Caso<1) или (Падеж>6) Entonces
Report("Caso incorrecto transferido a ""caso de nombre completo""!"); Devolver nombre completo;
terminara si;
pad=caso-1;
terminara si;

Nombre completo=ScrLP(NReg(nombre completo)); // es más cómodo

// tu analizador de composición
Apellido="";
Para th=1 Por StrLength(nombre completo) Ciclo
símbolos=Promedio(nombre completo, th, 1);

Apellido=Apellido+carácter;
Fin del ciclo;
ы=й+1; // espacio pasado
Nombre="";

símbolos=Promedio(nombre completo, th, 1);
Si símbolos=" " Entonces abortar EndIf;
Nombre=Nombre+carácter;
Fin del ciclo;
ы=й+1; // pasó el segundo espacio
Segundo nombre="";
Para y=y Por StrLength(nombre completo) Ciclo
símbolos=Promedio(nombre completo, th, 1);
Si símbolos=" " Entonces abortar EndIf;
Segundo nombre=Segundo nombre+símbolo;
Fin del ciclo;

// ahora tenemos apellido, nombre y patronímico separados.
// comienza el bloque propiamente dicho para analizar contenidos y casos

// regresa si él mismo es nominativo. Si se establece la devolución OnlyInitials, entonces convierta a iniciales
Si (Lev(Case,1)="I") o (Case=1) Entonces
Si NO son solo iniciales o buscar (nombre completo, ".") Entonces
Devolver nombre completo; // o la cadena ya está convertida o no es necesario convertirla
terminara si;
NuevoNombre completo = TRreg(Apellido) + " " + Vreg(Lev(Nombre, 1)) + pSeparator + Vreg(Lev(Segundo nombre, 1)) + pSeparator;
Abreviatura de devolución (nuevo nombre completo); // en caso de que el delimitador sea un espacio. Cortaremos el último
terminara si;

// analiza el género M/F
Si es correcto(Segundo nombre,1)="a" Entonces Género="F" De lo contrario Género="M" EndIf;

// crea una estructura de tabla que almacena las terminaciones de las palabras
actual=NuevaTablaValor;
RowType=NewTypeDescription("String", NewStringQualifiers(3));
NumberType=NewTypeDescription("Number", NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",RowType); // final antiguo 2 caracteres
// columnas que almacenan nuevas terminaciones de palabras
current.Columns.Add("p"); // padre
current.Columns.Add("d"); // dativo
current.Columns.Add("a"); // acusativo
current.Columns.Add("t"); // instrumental
current.Columns.Add("p"); // preposicional
// para indicar cuántas letras del final de la palabra cortar,
current.Columns.Add("NumberSlice",NumberType); // número de letras a cortar

Vocales="aeeouiiiyyay"; // lista de vocales como una cadena

// ======== procesar el apellido ==========
//llenar la tabla con datos del apellido

Si género = "M" Entonces
cadena=actual.Agregar(); // ivanov
línea.StarOk="*s";

líneas.NumberSlice=0;

Cadena=actual.Add(); // Krasinski
line.StarOk="*th";
cadena.r="ir"; cadena.d="om"; cadena.v="ir"; string.t="estoy"; cadena.p="om";
líneas.NumberSlice=2;

Cadena=actual.Add(); // todopoderoso
line.StarOk="brillante";
string.r="él"; string.d="él"; string.v="su"; string.t="estoy"; string.p="comer";
líneas.NumberSlice=2;

Cadena=actual.Add(); // blanco
line.StarOk="th";
cadena.r="ir"; cadena.d="om"; cadena.v="ir"; cadena.t="th"; cadena.p="om";
líneas.NumberSlice=2;

Cadena=actual.Add(); //paley
line.StarOk="*th";

líneas.NumberSlice=1;

Cadena=actual.Add(); // rabinovich
línea.StarOk="*h";

líneas.NumberSlice=0;

Cadena=actual.Add(); // arreglar, resbaladizo
línea.StarOk="*k";
cadena.p="ka"; cadena.d="ku"; cadena.v="ka"; cadena.t="com"; cadena.p="ke";
líneas.NumberSlice=2;

Cadena=actual.Add(); // shinkar
line.StarOk="*ь";
cadena.p="i"; línea.d="yu"; cadena.v="i"; cadena.t="em"; cadena.p="e";
líneas.NumberSlice=1;

Cadena=actual.Add(); // perelman, oganesyan
línea.StarOk="*n";

líneas.NumberSlice=0;

Cadena=actual.Add(); // barankin
line.StarOk="en";
cadena.p="a"; cadena.d="y"; cadena.v="a"; cadena.t="th"; cadena.p="e";
líneas.NumberSlice=0;

De lo contrario, si Género="F" entonces
cadena=actual.Agregar(); // Sklodovskaya
line.StarOk="aya";
cadena.p="oh"; cadena.d="oh"; línea.v="y"; cadena.t="oh"; cadena.p="oh";
líneas.NumberSlice=2;

Cadena=actual.Add(); // ivanova
línea.StarOk="*a";
cadena.p="oh"; cadena.d="oh"; cadena.v="u"; cadena.t="oh"; cadena.p="oh";
líneas.NumberSlice=1;
terminara si;


Si no es cadena vacía (apellido), entonces
pb=Derecha(Apellido,3); contar="EstrellaOK"; // buscalo
nuevoApellido=Apellido; // si nada cambia, así será
str=current.Find(pb,count);
Si<>


De lo contrario
// estrictamente no encontrado por los últimos tres caracteres, busca por dos caracteres solo por el último
pb=Derecha(Apellido,2);
str=current.Find(pb,count);
Si<>Indefinido entonces
Base=Lev(Apellido,StrLength(Apellido)-string.QuantitySlice);
nuevoApellido=Base+AbbrLP(cadena[pad]);
En caso contrario // si no encontramos dos, buscamos uno a la vez
pb="*"+Derecha(pb,1);
str=current.Find(pb,count);
Si<>
Base=Lev(Apellido,StrLength(Apellido)-string.QuantitySlice);
nuevoApellido=Base+AbbrLP(cadena[pad]);


str=current.Find(pb,count);
Si<>Indefinido Entonces // encontrado por tipo
Base=Lev(Apellido,StrLength(Apellido)-string.QuantitySlice);
nuevoApellido=Base+AbbrLP(cadena[pad]);
terminara si;
terminara si;
terminara si;
terminara si;
De lo contrario
nuevoApellido="";
terminara si;

// ======== procesar el nombre ==========
// llena la tabla con datos para el nombre
actual.Clear();

Si género = "M" entonces
// manejar excepciones
Si Nombre="león" Entonces Nombre="león" EndIf;
Si Nombre="pablo" Entonces Nombre="pablo" EndIf;

Cadena=actual.Add(); // sergei
string.starok="*th";
cadena.p="i"; línea.d="yu"; cadena.v="i"; cadena.t="em"; cadena.p="e";
línea.barcut=1;

Cadena=actual.Add(); // ivan + león + pablo
cadena.starok="*s";
cadena.p="a"; cadena.d="y"; cadena.v="a"; cadena.t="om"; cadena.p="e";
línea.columncut=0;

Cadena=actual.Add(); // nikita
cadena.starok="*a";

línea.barcut=1;

Cadena=actual.Add(); // cebolla
string.starok="ka";

línea.barcut=1;

Cadena=actual.Add(); // Jeremías
cadena.starok="iya";

línea.barcut=1;

Cadena=actual.Add(); // ilya
cadena.starok="*i";

línea.barcut=1;

Cadena=actual.Add(); // igor
string.starok="*ь";
cadena.p="i"; línea.d="yu"; cadena.v="i"; cadena.t="em"; cadena.p="e";
línea.barcut=1;

De lo contrario, si Género="F" entonces
// manejar excepciones
//Si Nombre="olga" Then Nombre="olg" EndIf;

Cadena=actual.Add(); // irina
cadena.starok="*a";
cadena.p="s"; línea.d="e"; cadena.v="u"; cadena.t="oh"; cadena.p="e";
línea.barcut=1;

Cadena=actual.Add(); // Inga, Olga
string.starok="ga";
cadena.p="y"; línea.d="e"; cadena.v="u"; cadena.t="oh"; cadena.p="e";
línea.barcut=1;

Cadena=actual.Add(); // ester
string.starok="*ь";
cadena.p="y"; cadena.d="y"; línea.v="b"; cadena.t="ju"; cadena.p="y";
línea.barcut=1;

Cadena=actual.Add(); // María
cadena.starok="iya";
cadena.p="y"; cadena.d="y"; línea.v="yu"; string.t="ey"; cadena.p="y";
línea.barcut=1;

Cadena=actual.Add(); // Sofía
cadena.starok="*i";
cadena.p="y"; línea.d="e"; línea.v="yu"; string.t="ey"; cadena.p="e";
línea.barcut=1;
terminara si;

// la mesa está llena. cuenta las últimas 2 letras y búscalas
Si no es cadena vacía (nombre), entonces
pb=Derecha(Nombre,2); contar="EstrellaOK"; // buscalo
nuevoNombre=Nombre; // si nada cambia, así será
str=current.Find(pb,count);
Si<>Indefinido Entonces // encontrado estricto inmediatamente


De lo contrario // estrictamente no encontrado, busque solo por el último
pb="*"+Derecha(pb,1);
str=current.Find(pb,count);
Si<>Indefinido Entonces // encontrado usando el último
Base=Izquierda(Nombre,StrLength(Nombre)-cadena.CantidadSlice);
nuevoNombre=Base+ScrLP(cadena[pad]);
En caso contrario // no encontramos la última, buscamos el tipo de letra
pb="*"+?(Find(Vocales,Derecha(pb,1))=0,"s","g");
str=current.Find(pb,count);
Si<>Indefinido=1 Entonces // encontrado por tipo
Base=Izquierda(Nombre,StrLength(Nombre)-cadena.CantidadSlice);
nuevoNombre=Base+ScrLP(cadena[pad]);
terminara si;
terminara si;
terminara si;
De lo contrario
nuevoNombre="";
terminara si;

// ======== procesemos el segundo nombre, aquí es más fácil ==========
actual.Clear();

Si género = "M" entonces
cadena=actual.Agregar();
cadena.p="a"; cadena.d="y"; cadena.v="a"; cadena.t="em"; cadena.p="e";
línea.columncut=0;
De lo contrario, si Género="F" entonces
cadena=actual.Agregar();
cadena.p="s"; línea.d="e"; cadena.v="u"; cadena.t="oh"; cadena.p="e";
línea.barcut=1;
terminara si;
Si no es cadena vacía (segundo nombre), entonces
Base=Lev(Segundo nombre,StrLength(Segundo nombre)-current.QuantitySlice);
nuevo Patronímico = Base + AbbrLP(actual[pad]);
De lo contrario
nuevo patronímico="";
terminara si;

Si solo son iniciales entonces
nuevoNombre=Lev(nuevoNombre,1); nuevo Patronímico = Leo (nuevo Patronímico, 1);
terminara si;

// ponemos las primeras letras en mayúsculas
nuevoApellido=ВReg(Lev(nuevoApellido,1))+Avd(nuevoApellido,2);
nuevoNombre=ВReg(Lev(nuevoNombre,1))+Promedio(nuevoNombre,2);
nuevo patronímico = VReg(Lev(nuevo patronímico, 1))+Avg(nuevo patronímico, 2);

// y ahora todo está junto
Si solo hay iniciales, entonces // si se especifica el formato de las iniciales
nuevo Nombre Completo = nuevo Apellido + " " + nuevo Nombre + n Separador + nuevo Patronímico + n Separador;
De lo contrario
nuevo Nombre completo = nuevo Apellido + " " + nuevo Nombre + " " + nuevo Patronímico;
terminara si;

Si Buscar (Nombre completo, ".") Entonces // En caso de que el parámetro de entrada sea Apellido con iniciales. No tocamos las iniciales.
nuevo nombre completo = nuevo apellido + " " + Treg(nombre) + Treg(segundo nombre);
terminara si;

Abreviatura de devolución (nuevo nombre completo);
Función final

Compartir: