Declinazione del nome in 1s 8.3. Nome della declinazione

Quando si lavora in 1C, l'utente si trova ad affrontare il problema della declinazione del cognome o della posizione di un dipendente in documenti stampati, cioè con una situazione in cui è necessaria la declinazione dei cognomi caso per caso.

Per la declinazione del nome completo nei programmi 1C, viene fornito un componente esterno: NameDecl.dll, che contiene la funzione di declinazione. Puoi prenderlo dal disco ITS e copiarlo nella cartella con la piattaforma 1C installata - bin, registrarlo nel sistema operativo. Questa procedura viene eseguita utilizzando il comando resvr32 NameDecl.dll (con un account amministratore). Per fare ciò, è necessario chiamare il comando "Esegui" tramite il pulsante "Start", utilizzando la ricerca o la combinazione di tasti Windows + R.

Fig.1 Finestra di ricerca. Trovare il comando Esegui

Nella finestra che appare, inserisci il comando resvr32.exe e specifica il percorso della libreria a cui connetterti utilizzando il pulsante “Sfoglia”.


Fig.2 Finestra di comando “Esegui”.

Dopo aver fatto clic su "Ok", verrà visualizzato un messaggio che informa che la libreria è stata registrata con successo.


Fig.3 Finestra dei messaggi

Descrizione del metodo di declinazione in 1C

Rifiuta (nome completo, maiuscolo, sesso) in base ai parametri:

  • Nome completo (obbligatorio), tipo – stringa
  • Maiuscole/minuscole (obbligatorio), tipo – numero

Il caso in cui deve essere inserito il nome completo è specificato da un numero da 1 a 6.

Tabella dei casi: domande, preposizioni e loro significato nel codice del programma

Succede che si verifica una situazione ambigua quando il programma deve determinare il sesso di un cognome, ad esempio Sigida, Chepko, Sushko, Oganezyan, ecc.

In questo caso, utilizzare un parametro aggiuntivo:

  • Sesso (facoltativo), tipo - numero

Indica se rifiutare o meno il cognome. Negli altri casi questo parametro viene omesso oppure viene utilizzato il valore 0 (“auto”), perché L'indicazione errata del genere può influenzare la corretta declinazione. Qui i valori possibili sono: 0 – auto, 1 – maschio, 2 – femmina.

Servizio "Declinazione per casi"

I programmi 1C 8.3 prevedono già un servizio di declinazione dei dati dei dipendenti o collaboratori secondo le casistiche utilizzate nel documento.



Frammento 1

Area #ProgramInterface // Rifiuta il nome completo // Funziona solo su sistema operativo Windows. // // Parametri: // Nome completo - Linea - Linea contenente il nome completo della declinazione. // Case - Number - il caso in cui è necessario rifiutare la rappresentazione dell'oggetto. // 1 - Nominativo. // 2 - Genitivo. // 3 - Dativo. // 4 - Accusativo. // 5 - Creativo. // 6 - Preposizionale. // Oggetto - Declinazioni - Link all'oggetto, i cui dettagli sono rifiutati // Genere - Numero - Numero - sesso del protagonista fisico, // 1 - maschio, // 2 - femmina. // // Valore restituito: // String - Il risultato della declinazione del nome completo in maiuscole e minuscole. // Funzione DeclineFull Name(Nome completo, Case, Object = Undetermined, Gender = Unfined) Export // Declina la rappresentazione di un oggetto. Funzione DeclinazioneRappresentazioni(Rappresentazione, Caso, Oggetto = Non definito) Esporta // Esegue le azioni sul modulo necessarie per connettere il sottosistema Declinazione.

Fig.4 Finestra Configuratore



Frammento 2

// Rifiuta la rappresentazione dell'oggetto. Funzione DeclinoRappresentazione(Rappresentazione, Caso, Oggetto = Non definito) Esporta Ritorno Declino(Rappresentazione, Caso, Oggetto); Fine della funzione // Esegue con il form le azioni necessarie per connettere il sottosistema Declinazione Procedure When CreatedOnServer(Form, View, MainFormAttributeName = "Object") Export // Gestore eventi When RecordedOnServer di un oggetto gestito modulo per la declinazione Procedure When RecordedOnServer(Form , View, Object, ThisFullName = False , Gender = Unfined) Export // Imposta il segno di disponibilità del servizio di declinazione Procedura SetAvailability del servizio di declinazione (Availability) Export SetPrivilegedMode (True); CurrentParameters = Nuova corrispondenza (SessionParameters.ClientParametersOnServer); CurrentParameters.Insert("DeclinationServiceAvailable", Availability); SessionParameters.ClientParametersOnServer = Nuova conformità fissa (CurrentParameters); Imposta modalità privilegiata (False); Fine della procedura

Fig.5 Utilizzo della funzione “Pendenza”.

Utilizzando i dettagli del documento selezionati dalla directory in cui sono presentati al caso nominativo, verranno visualizzati nella forma stampata del documento con la declinazione richiesta.

Diamo un'occhiata alla funzione di declinazione usando l'esempio di un contratto in 1C: Contabilità 3.0. (1C:Azienda 8.3). Ciò prevede la declinazione del nome e della posizione.



Fig.6 Finestra del modulo di contratto. Impostazione cognome e declinazione della posizione

Il programma inserirà automaticamente l'opzione corretta nel modulo stampato.



Fig.7 Finestra del programma – “Declinazione per caso”

Un esempio di declinazione del caso può essere visto nell'”Ordine di assunzione”. Sulla carta del dipendente, il suo nome completo è indicato nel caso nominativo e in forma stampata nel caso genitivo.



Fig. 8 Esempio di declinazione del nome completo nel modulo stampato “Ordine di assunzione”

Il programma 1C, tenendo conto dei requisiti della legislazione e degli standard, consente di rispettare la procedura approvata per la preparazione della documentazione e la generazione di moduli stampati.

La diminuzione per caso è dovuta anche agli standard aziendali, che stabiliscono che qualsiasi documento deve essere redatto non solo con competenza, ma anche esteticamente competente, che riflette lo status dell'organizzazione.

Inoltre, l'uso di funzioni nel programma come la declinazione automatica riduce significativamente la probabilità di errori nella preparazione del documento.

Il file contiene le procedure per 7.7 e 8.x. Alla procedura viene passata una stringa nel formato Cognome Nome Patronimico.

UPD 26/11/10: con gratitudine - nuova versione della funzione. Non l'ho testato! Le domande sul funzionamento di questa versione dovrebbero essere rivolte a lui; per qualche motivo non vuole pubblicarle :)

Funzione CaseFull Name (valore nome completo, maiuscole e minuscole = 1, solo iniziali = false, valore separatore = ".")
Se TypeValue(nome completo)<>Digita ("Stringa") Quindi
Report("Riga non valida inviata a ""case of full name!"""); Restituisci nome completo;
finisci se;

// rimuove più spazi
Mentre 1=1 Ciclo
Nome completo=ScrLP(StrReplace(nome completo," "," "));
Se Trova(nome completo," ")=0 Allora Interrompi EndIf;
FineCiclo;

Se TypeValue(Case)=Type("String") Then
pad=ScrLP(NReg(Lev(Caso,1)));
Se Trova("irdvtp",pad)=0 Allora

finisci se;
AltrimentiSe TypeValue(Case)=Type("Numero") Then
Se (Caso<1) или (Падеж>6) Allora
Report("Caso errato trasferito al ""caso con nome completo""!"); Restituisci nome completo;
finisci se;
rilievo=caso-1;
finisci se;

Nome completo=ScrLP(NReg(nome completo)); // è più comodo

// il tuo analizzatore di composizione
Cognome="";
Per th=1 Per StrLength(nome completo) Ciclo
simboli=Avg(nome completo, th, 1);

Cognome=Cognome+carattere;
FineCiclo;
ы=й+1; // spazio passato
Nome="";

simboli=Avg(nome completo, th, 1);
Se simboli=" " Allora Aborti EndIf;
Nome=Nome+carattere;
FineCiclo;
ы=й+1; // ha superato il secondo spazio
Secondo nome="";
Per y=y Per StrLength(nome completo) Ciclo
simboli=Avg(nome completo, th, 1);
Se simboli=" " Allora Aborti EndIf;
Secondo nome=Secondo nome+simbolo;
FineCiclo;

// ora abbiamo cognome, nome e patronimico separati.
// inizia il blocco vero e proprio per l'analisi dei contenuti e dei casi

// restituisce se esso stesso è nominativo. Se è impostato il valore Return OnlyInitials, convertirlo in iniziali
Se (Lev(Case,1)="I") o (Case=1) Allora
Se NON Solo Iniziali o Trova(Nome completo, ".") Allora
Restituisci nome completo; // la stringa è già convertita oppure non è necessario convertirla
finisci se;
Nuovo nome completo = TRreg(Cognome) + " " + Vreg(Lev(Nome, 1)) + pSeparator + Vreg(Lev(Secondo nome, 1)) + pSeparator;
Abbreviazione di ritorno(Nuovo nome completo); // nel caso in cui il delimitatore sia uno spazio. Tagliamo l'ultimo
finisci se;

// analizza il genere M/F
If Right(Secondo nome,1)="a" Then Gender="F" Altrimenti Gender="M" EndIf;

// crea una struttura di tabella che memorizza le terminazioni delle parole
corrente=NuovaTabellaValori;
RowType=NewTypeDescription("String", NewStringQualifiers(3));
NumberType=NewTypeDescription("Numero", NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",RowType); // vecchio finale di 2 caratteri
// colonne che memorizzano nuove terminazioni di parola
corrente.Colonne.Add("p"); // genitore
corrente.Colonne.Add("d"); // dativo
current.Columns.Add("a"); // accusativo
corrente.Colonne.Add("t"); // strumentale
corrente.Colonne.Add("p"); // preposizionale
// per indicare quante lettere dalla fine della parola tagliare,
current.Columns.Add("NumberSlice",NumberType); // numero di lettere da tagliare

Vocali="aeeouiiiyyay"; // elenco di vocali come stringa

// ======== elabora il cognome ==========
// riempie la tabella con i dati per il cognome

Se genere="M" Allora
stringa=corrente.Add(); // Ivanov
linea.StarOk="*s";

righe.NumberSlice=0;

String=corrente.Add(); // Krasinski
line.StarOk="*esimo";
string.r="vai"; stringa.d="om"; string.v="vai"; string.t="im"; stringa.p="om";
righe.NumberSlice=2;

String=corrente.Add(); // onnipotente
line.StarOk="lucido";
string.r="lui"; string.d="lui"; string.v="suo"; string.t="im"; string.p="mangia";
righe.NumberSlice=2;

String=corrente.Add(); // bianco
line.StarOk="th";
string.r="vai"; stringa.d="om"; string.v="vai"; stringa.t="esimo"; stringa.p="om";
righe.NumberSlice=2;

String=corrente.Add(); //pallido
line.StarOk="*esimo";

righe.NumberSlice=1;

String=corrente.Add(); // rabinovich
linea.StarOk="*h";

righe.NumberSlice=0;

String=corrente.Add(); // aggiusta, va bene
linea.StarOk="*k";
stringa.p="ka"; stringa.d="ku"; stringa.v="ka"; string.t="com"; stringa.p="ke";
righe.NumberSlice=2;

String=corrente.Add(); // Shinkar
line.StarOk="*ь";
stringa.p="i"; linea.d="yu"; stringa.v="i"; stringa.t="em"; stringa.p="e";
righe.NumberSlice=1;

String=corrente.Add(); // perelman, oganesyan
linea.StarOk="*n";

righe.NumberSlice=0;

String=corrente.Add(); // barankin
line.StarOk="in";
stringa.p="a"; stringa.d="y"; stringa.v="a"; stringa.t="esimo"; stringa.p="e";
righe.NumberSlice=0;

AltrimentiSe Sesso="F" Allora
stringa=corrente.Add(); // Sklodovskaya
line.StarOk="aya";
stringa.p="oh"; stringa.d="oh"; linea.v="y"; stringa.t="oh"; stringa.p="oh";
righe.NumberSlice=2;

String=corrente.Add(); // Ivanova
linea.StarOk="*a";
stringa.p="oh"; stringa.d="oh"; stringa.v="u"; stringa.t="oh"; stringa.p="oh";
righe.NumberSlice=1;
finisci se;


Se non è VuotoString(Cognome) Allora
pb=Diritto(Cognome,3); conteggio="StellaOk"; // cercalo
nuovoCognome=Cognome; // se non cambia nulla, sarà così
str=corrente.Trova(pb,conteggio);
Se<>


Altrimenti
// rigorosamente non trovato dagli ultimi tre caratteri, cerca per due caratteri solo dall'ultimo
pb=Diritto(Cognome,2);
str=corrente.Trova(pb,conteggio);
Se<>Indefinito Allora
Base=Lev(Cognome,StrLunghezza(Cognome)-string.QuantitySlice);
nuovoCognome=Base+AbbrLP(string[pad]);
Altrimenti // se non ne troviamo due, ne cerchiamo uno alla volta
pb="*"+Destra(pb,1);
str=corrente.Trova(pb,conteggio);
Se<>
Base=Lev(Cognome,StrLunghezza(Cognome)-string.QuantitySlice);
nuovoCognome=Base+AbbrLP(string[pad]);


str=corrente.Trova(pb,conteggio);
Se<>Non definito Quindi // trovato per tipo
Base=Lev(Cognome,StrLunghezza(Cognome)-string.QuantitySlice);
nuovoCognome=Base+AbbrLP(string[pad]);
finisci se;
finisci se;
finisci se;
finisci se;
Altrimenti
nuovoCognome="";
finisci se;

// ======== elabora il nome ==========
// riempie la tabella con i dati per il nome
corrente.Cancella();

Se Sesso="M" Allora
// gestisce le eccezioni
If Nome="leone" Then Nome="leone" EndIf;
Se Nome="Paolo" Then Nome="Paolo" EndIf;

String=corrente.Add(); // Sergej
string.starok="*esimo";
stringa.p="i"; linea.d="yu"; stringa.v="i"; stringa.t="em"; stringa.p="e";
linea.barcut=1;

String=corrente.Add(); // ivan + leone + paolo
string.starok="*s";
stringa.p="a"; stringa.d="y"; stringa.v="a"; stringa.t="om"; stringa.p="e";
riga.tagliocolonna=0;

String=corrente.Add(); // Nikita
string.starok="*a";

linea.barcut=1;

String=corrente.Add(); // cipolla
string.starok="ka";

linea.barcut=1;

String=corrente.Add(); // Geremia
string.starok="iya";

linea.barcut=1;

String=corrente.Add(); // ilya
string.starok="*ya";

linea.barcut=1;

String=corrente.Add(); // igor
string.starok="*ь";
stringa.p="i"; linea.d="yu"; stringa.v="i"; stringa.t="em"; stringa.p="e";
linea.barcut=1;

AltrimentiSe Sesso="F" Allora
// gestisce le eccezioni
//If Nome="olga" Then Nome="olg" EndIf;

String=corrente.Add(); //Irina
string.starok="*a";
stringa.p="s"; linea.d="e"; stringa.v="u"; stringa.t="oh"; stringa.p="e";
linea.barcut=1;

String=corrente.Add(); // Inga, Olga
string.starok="ah";
string.p="e"; linea.d="e"; stringa.v="u"; stringa.t="oh"; stringa.p="e";
linea.barcut=1;

String=corrente.Add(); // ester
string.starok="*ь";
string.p="e"; string.d="e"; linea.v="b"; string.t="ju"; string.p="e";
linea.barcut=1;

String=corrente.Add(); //Maria
string.starok="iya";
string.p="e"; string.d="e"; linea.v="yu"; string.t="ey"; string.p="e";
linea.barcut=1;

String=corrente.Add(); // Sofia
string.starok="*ya";
string.p="e"; linea.d="e"; linea.v="yu"; string.t="ey"; stringa.p="e";
linea.barcut=1;
finisci se;

// la tabella è piena. conta le ultime 2 lettere e cercale
Se non è VuotoString(Nome) Allora
pb=Destra(Nome,2); conteggio="StellaOk"; // cercalo
nuovoNome=Nome; // se non cambia nulla, sarà così
str=corrente.Trova(pb,conteggio);
Se<>Indefinito Quindi // trovato immediatamente rigoroso


Altrimenti // rigorosamente non trovato, cerca solo l'ultimo
pb="*"+Destra(pb,1);
str=corrente.Trova(pb,conteggio);
Se<>Non definito Quindi // trovato utilizzando l'ultimo
Base=Sinistra(Nome,StrLength(Nome)-string.QuantitySlice);
nuovoNome=Base+ScrLP(string[pad]);
Altrimenti // non abbiamo trovato l’ultima, cerchiamo il tipo di lettera
pb="*"+?(Trova(Vocali,Destra(pb,1))=0,"s","g");
str=corrente.Trova(pb,conteggio);
Se<>Non definito=1 Quindi // trovato per tipo
Base=Sinistra(Nome,StrLength(Nome)-string.QuantitySlice);
nuovoNome=Base+ScrLP(string[pad]);
finisci se;
finisci se;
finisci se;
Altrimenti
nuovoNome="";
finisci se;

// ======== elaboriamo il secondo nome, qui è più semplice ==========
corrente.Cancella();

Se Sesso="M" Allora
stringa=corrente.Add();
stringa.p="a"; stringa.d="y"; stringa.v="a"; stringa.t="em"; stringa.p="e";
riga.tagliocolonna=0;
AltrimentiSe Sesso="F" Allora
stringa=corrente.Add();
stringa.p="s"; linea.d="e"; stringa.v="u"; stringa.t="oh"; stringa.p="e";
linea.barcut=1;
finisci se;
Se non è VuotoString(secondo nome) Allora
Base=Lev(Secondo nome,StrLength(Secondo nome)-current.QuantitySlice);
nuovo Patronimico = Base + AbbrLP(current[pad]);
Altrimenti
nuovo Patronimico="";
finisci se;

Se solo le iniziali allora
nuovoNome=Lev(nuovoNome,1); nuovo Patronimico = Leone (nuovo Patronimico, 1);
finisci se;

// imposta le prime lettere in maiuscolo
nuovoCognome=ÂReg(Lev(nuovoCognome,1))+Avd(nuovoCognome,2);
nuovoNome=ÂReg(Lev(nuovoNome,1))+Media(nuovoNome,2);
nuovo Patronimico = VReg(Lev(nuovo Patronimico, 1))+Avg(nuovo Patronimico, 2);

// e ora è tutto insieme
Se solo iniziali Allora // se è specificato il formato delle iniziali
nuovo nome completo = nuovo cognome + " " + nuovo nome + n separatore + nuovo patronimico + n separatore;
Altrimenti
nuovo Nome Completo = nuovo Cognome + " " + nuovo Nome + " " + nuovo Patronimico;
finisci se;

If Find(Nome completo, ".") Then // Nel caso in cui il parametro di input sia Cognome con le iniziali. Non tocchiamo le iniziali
nuovo nome completo = nuovo cognome + " " + Treg(Nome) + Treg(Secondo nome);
finisci se;

Ritorno Abbreviazione(nuovo nome completo);
EndFunction

Declinazione del nome completo in 1C 8.3

Durante il funzionamento del complesso software 1C, gli utenti hanno spesso domande sulla declinazione del nome completo 1C 8.3. La funzione 1C di declinazione del nome completo è svolta da un componente speciale, chiamato “NameDecl.dll”. Per iniziare a utilizzare il componente, è necessario copiarlo dal disco informativo e di supporto tecnico nella cartella in cui si trova la piattaforma bin principale e registrarlo anche nel sistema operativo. La copia viene effettuata tramite il comando “resvr32 NameDecl.dll”. Per fare ciò, aprire “Start” e chiamare la direttiva “Esegui”, come mostrato in figura.

Aprire una finestra e inserire “resvr32.exe”, indicando il percorso della libreria richiesta. La libreria viene selezionata utilizzando il pulsante “Sfoglia”. Successivamente, è necessario selezionare "OK" e confermare la registrazione della libreria.

La declinazione 1c del nome completo viene eseguita secondo 2 parametri:

  • Caso, tipo - numero. Questo è un parametro obbligatorio.
  • Nome completo, tipo - stringa. Anche questo è un parametro obbligatorio.

Poiché nella lingua russa ci sono sei casi, a ogni caso viene assegnato un numero da 1 a 6 secondo la tabella seguente:

Un terzo parametro facoltativo viene individuato anche per la componente di declinazione del Nome Completo 1C - genere (tipo - numero). Ci sono 3 opzioni qui: 0 - automatico, 1 - maschio, 2 - femmina.

Nome completo della declinazione 1C 8 del servizio

I programmi della versione 1C 8.3 hanno un servizio speciale per la declinazione del nome completo mediante i casi 1C 8.3, che funziona tramite il configuratore. Pertanto, per rifiutare il tuo nome completo, apri la finestra del configuratore e utilizza la funzione “Rifiuta”, come mostrato di seguito:

Inseriamo i dettagli dalla directory, dove vengono visualizzati nel caso nominativo. I documenti vengono stampati e visualizzati nei moduli nella declinazione desiderata. Ad esempio, questo è ciò che appare nel modulo di contratto:



Ad esempio, di seguito è riportato un ordine di assunzione, dove nelle carte dello specialista il suo cognome, nome e patronimico sono scritti in I.P., ma in forma stampata sono visualizzati in R.P.

1C consente di creare automaticamente moduli e documentazione stampati tenendo conto dei requisiti legali attuali. La necessità di declinazione per casi, generi e numeri è dettata dagli standard di gestione dei documenti aziendali, secondo i quali qualsiasi documento è redatto esteticamente, con competenza e corrisponde allo status dell'azienda.

L'utilizzo della funzione di rifiuto automatico riduce al minimo la probabilità di errori durante la generazione di documenti, proteggendo da conseguenze negative future. Ciò è particolarmente vero nei casi in cui vengono generati un gran numero di documenti contemporaneamente. La declinazione automatica semplifica il lavoro con la documentazione e fa risparmiare tempo, il che ha un effetto positivo sulla produttività.

Abbiamo analizzato 2 metodi di declinazione del cognome, del nome patronimico per casi, numeri e generi - utilizzando un componente speciale per la declinazione del nome completo 1C 8.3 e attraverso il servizio di configurazione. Provali entrambi e vedi quale funziona meglio per te.



Condividere