Declinarea numelui în 1s 8.3. Numele declinării

Atunci când lucrează în 1C, utilizatorul se confruntă cu problema declinării prenumelui sau a funcției unui angajat în forme tipărite de documente, adică cu o situație în care este necesară declinarea numelor de familie după caz.

Pentru declinarea unui nume complet în programele 1C, este furnizată o componentă externă - NameDecl.dll, care conține funcția de declinare. Îl puteți lua de pe discul ITS și îl puteți copia în folderul cu platforma 1C instalată - bin, înregistrați-l în sistemul de operare. Această procedură este efectuată folosind comanda resvr32 NameDecl.dll (sub un cont de administrator). Pentru a face acest lucru, trebuie să apelați comanda „Run” prin butonul „Start”, folosind căutarea sau combinația de taste Windows + R.

Fig.1 Fereastra de căutare. Găsirea comenzii Run

În fereastra care apare, introduceți comanda resvr32.exe și specificați calea către biblioteca de conectat folosind butonul „Răsfoiește”.


Fig.2 Fereastra de comandă „Run”.

După ce faceți clic pe „Ok”, va apărea un mesaj care spune că biblioteca a fost înregistrată cu succes.


Fig.3 Fereastra de mesaje

Descrierea metodei declinației în 1C

Refuzați (nume complet, caz, sex) conform parametrilor:

  • Nume complet (obligatoriu), tip – șir
  • Caz (obligatoriu), tip – număr

Cazul în care trebuie plasat numele complet este specificat printr-un număr de la 1 la 6.

Tabel de cazuri: întrebări, prepoziții și semnificațiile acestora în codul programului

Se întâmplă că apare o situație ambiguă atunci când programul trebuie să determine sexul unui nume de familie, de exemplu, Sigida, Chepko, Sushko, Oganezyan etc.

În acest caz, utilizați un parametru suplimentar:

  • Gen (opțional), tip - număr

Arată dacă să refuzi sau nu numele de familie. În alte cazuri, acest parametru este omis sau se utilizează valoarea 0 („auto”), deoarece indicarea incorectă a sexului poate afecta declinația corectă. Aici valorile posibile sunt: ​​0 – auto, 1 – masculin, 2 – feminin.

Serviciul „Declinare după cazuri”

Programele 1C 8.3 includ deja un serviciu de declinare a datelor angajaților sau contractorilor în conformitate cu cazurile utilizate în document.



Fragmentul 1

#ProgramInterface Area // Refuză numele complet // Funcționează numai pe sistemul de operare Windows. // // Parametri: // Nume complet - Linie - Linie care conține numele complet pentru declinare. // Caz - Număr - cazul în care este necesar să se decline reprezentarea obiectului. // 1 - Nominativ. // 2 - Genitiv. // 3 - Dativ. // 4 - Acuzativ. // 5 - Creativ. // 6 - Prepozițional. // Obiect - Declinări - Legătură cu obiectul, ale cărui detalii sunt refuzate // Gen - Număr - Număr - genul conducătorului fizic, // 1 - masculin, // 2 - feminin. // // Valoare returnată: // String - Rezultatul declinării numelui complet în caz că. // Funcție DeclineFull Name(Nume complet, caz, obiect = nedeterminat, gen = nedefinit) Export // Refuză reprezentarea unui obiect. Funcția DeclinareReprezentări(Reprezentare, caz, obiect = nedefinit) Export // Efectuează acțiuni pe formularul necesar pentru a conecta subsistemul Declinare.

Fig.4 Fereastra Configurator



Fragmentul 2

// Refuza reprezentarea obiectului. Funcția DeclineRepresentation(Reprezentare, Case, Object = Nedefinit) Export Return Decline(Reprezentare, Case, Object); Sfârșitul funcției // Efectuează cu formularul acțiunile necesare pentru conectarea subsistemului Declinare Procedură Când CreatedOnServer(Form, View, MainFormAttributeName = "Obiect") Export // Event handler When RecordedOnServer al unui obiect gestionat formular pentru declinare Procedură Când RecordedOnServer(Form , View, Object, ThisFullName = False , Gender = Undefined) Export // Setează semnul disponibilității serviciului de declinare Procedură SetAvailability of Declination Service (Disponibilitate) Export SetPrivilegedMode (True); CurrentParameters = Potrivire nouă (SessionParameters.ClientParametersOnServer); CurrentParameters.Insert("DeclinationServiceAvailable", Disponibilitate); SessionParameters.ClientParametersOnServer = New FixedCompliance(CurrentParameters); SetPrivilegedMode(False); Sfârșitul procedurii

Fig.5 Utilizarea funcției „Slope”.

Folosind detalii din document care sunt selectate din directorul în care sunt prezentate în cazul nominativ, acestea vor fi afișate în forma tipărită a documentului cu declinarea cerută.

Să ne uităm la funcția de declinare folosind exemplul unui contract din 1C: Contabilitate 3.0. (1C: Enterprise 8.3). Aceasta prevede declinarea numelui și a poziției.



Fig.6 Fereastra formular contract. Stabilirea declinării numelui și a funcției

Programul va pune automat opțiunea corectă în formularul tipărit.



Fig.7 Fereastra program – „Declinare după caz”

Un exemplu de declinare a cazului poate fi văzut în „Comanda de angajare”. Pe cardul angajatului, numele complet este indicat în cazul Nominativ, iar în formă tipărită - în cazul Genitiv.



Fig. 8 Exemplu de declinare a numelui complet în forma tipărită „Ordin de angajare”

Programul 1C, ținând cont de cerințele legislației și standardelor, vă permite să respectați procedura aprobată pentru pregătirea documentației și generarea formularelor tipărite.

Declinarea pe cazuri se datorează și standardelor de afaceri, care prevăd că orice document trebuie întocmit nu numai cu competență, ci și competent din punct de vedere estetic, ceea ce reflectă statutul organizației.

În plus, utilizarea funcțiilor din program, cum ar fi autodeclinarea, reduce semnificativ probabilitatea erorilor în pregătirea documentului.

Fișierul conține proceduri pentru 7.7 și 8.x. Un șir în format Nume Prenume Patronimic este transmis procedurii.

UPD 26/11/10: cu recunoștință - versiune nouă a funcției. Nu l-am testat! Întrebările despre funcționarea acestei versiuni ar trebui să fie adresate lui; din anumite motive, nu dorește să le posteze :)

Funcție CaseFull Name (Valoarea numelui complet, majusculul = 1, Numai inițialele = Fals, Valoarea separatorului = ".")
If TypeValue (nume complet)<>Tastați ("Șir") Apoi
Raport ("Rând nevalid trimis la ""cazul numelui complet!"""); Returnează numele complet;
endIf;

// elimină mai multe spații
În timp ce 1=1 ciclu
Nume complet=ScrLP(StrReplace(nume complet," "," "));
If Find(full name," ")=0 Then Abort EndIf;
EndCycle;

Dacă TypeValue(Case)=Type(„String”), atunci
pad=ScrLP(NReg(Lev(Case,1)));
Dacă Find("irdvtp",pad)=0, atunci

endIf;
OtherwiseIf TypeValue(Case)=Type(„Number”) Atunci
Dacă (Caz<1) или (Падеж>6) Atunci
Report("Majuscule incorecte transferate la ""case cu nume complet""!"); Returnează numele complet;
endIf;
pad=carcasa-1;
endIf;

Nume complet=ScrLP(NReg(nume complet)); // este mai confortabil

// analizatorul dumneavoastră de compoziție
Nume="";
Pentru th=1 Prin StrLength(nume complet) Ciclu
simboluri=Avg(nume complet, th, 1);

Nume=Nume+caracter;
EndCycle;
ы=й+1; // a trecut spațiul
Nume="";

simboluri=Avg(nume complet, th, 1);
If symbols=" " Then Abort EndIf;
Nume=Nume+caracter;
EndCycle;
ы=й+1; // a trecut de al doilea spațiu
Nume de mijloc="";
Pentru y=y Prin StrLength(nume complet) Ciclu
simboluri=Avg(nume complet, th, 1);
If symbols=" " Then Abort EndIf;
Nume de mijloc=Nume de mijloc+simbol;
EndCycle;

// acum avem Nume, Prenume și Patronimic separate.
// începe blocul propriu-zis pentru analiza conținutului și cazurilor

// returnează dacă el însuși este nominativ. Dacă returnarea OnlyInitials este setată, atunci convertiți la inițiale
Dacă (Lev(Case,1)="I") sau (Case=1) Atunci
Dacă NU NumaiInițiale sau Găsiți (Nume complet, „.”), atunci
Returnează numele complet; // fie șirul este deja convertit, fie nu este nevoie de conversie
endIf;
NewFull Name = TRreg(Last Name) + " " + Vreg(Lev(First Name, 1)) + pSeparator + Vreg(Lev(Middle Name, 1)) + pSeparator;
Returnează abrevierea (Nume complet nou); // în cazul în care delimitatorul este un spațiu. Îl tăiem pe ultimul
endIf;

// analizează genul M/F
If Right(Middle name,1)="a" Then Gender="F" Altfel Gender="M" EndIf;

// creează o structură de tabel care stochează terminațiile cuvintelor
curent=NewValueTable;
RowType=NewTypeDescription(„String”, NewStringQualifiers(3));
NumberType=NewTypeDescription(„Număr”, NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",RowType); // sfârșitul vechi 2 caractere
// coloane care stochează noi terminații ale cuvintelor
current.Columns.Add("p"); // părinte
current.Columns.Add("d"); // dativ
current.Columns.Add("la"); // acuzativ
current.Columns.Add("t"); // instrumental
current.Columns.Add("p"); // prepoziţional
// pentru a indica câte litere de la sfârșitul cuvântului trebuie tăiate,
current.Columns.Add("NumberSlice",NumberType); // numărul de litere de tăiat

Vocale="aeeouiiiyyay"; // listă de vocale sub formă de șir

// ======== procesează numele de familie ==========
// umple tabelul cu date pentru numele de familie

Dacă gen = "M" Atunci
șir=curent.Add(); // Ivanov
line.StarOk="*s";

lines.NumberSlice=0;

String=current.Add(); // Krasinski
line.StarOk="*th";
string.r="du-te"; string.d="om"; string.v="du-te"; string.t="im"; string.p="om";
lines.NumberSlice=2;

String=current.Add(); // atotputernic
line.StarOk="strălucitor";
string.r="el"; string.d="el"; string.v="al lui"; string.t="im"; string.p="eat";
lines.NumberSlice=2;

String=current.Add(); // alb
line.StarOk="th";
string.r="du-te"; string.d="om"; string.v="du-te"; string.t="th"; string.p="om";
lines.NumberSlice=2;

String=current.Add(); //paley
line.StarOk="*th";

lines.NumberSlice=1;

String=current.Add(); // rabinovici
line.StarOk="*h";

lines.NumberSlice=0;

String=current.Add(); // repara, slick
line.StarOk="*k";
string.p="ka"; string.d="ku"; string.v="ka"; string.t="com"; string.p="ke";
lines.NumberSlice=2;

String=current.Add(); // shinkar
line.StarOk="*ь";
string.p="i"; line.d="yu"; string.v="i"; string.t="em"; string.p="e";
lines.NumberSlice=1;

String=current.Add(); // perelman, oganesyan
line.StarOk="*n";

lines.NumberSlice=0;

String=current.Add(); // barankin
line.StarOk="in";
string.p="a"; string.d="y"; string.v="a"; string.t="th"; string.p="e";
lines.NumberSlice=0;

OtherwiseIf Gender="F" Atunci
șir=curent.Add(); // Sklodovskaya
line.StarOk="aya";
string.p="oh"; string.d="oh"; line.v="y"; string.t="oh"; string.p="oh";
lines.NumberSlice=2;

String=current.Add(); // Ivanova
line.StarOk="*a";
string.p="oh"; string.d="oh"; string.v="u"; string.t="oh"; string.p="oh";
lines.NumberSlice=1;
endIf;


Dacă nu EmptyString(LastName), atunci
pb=Dreapta(Nume,3); count="StarOk"; // caută-l
newLastName=Nume; // dacă nimic nu se schimbă, așa va fi
str=current.Find(pb,count);
Dacă<>


In caz contrar
// strict negăsit de ultimele trei caractere, căutați după două caractere numai după ultimul
pb=Dreapta(Nume,2);
str=current.Find(pb,count);
Dacă<>Nedefinit Atunci
Baza=Lev(LastName,StrLength(LastName)-string.QuantitySlice);
newLastName=Base+AbbrLP(șir[pad]);
Altfel // dacă nu am găsit două, căutăm pe rând
pb="*"+Dreapta(pb,1);
str=current.Find(pb,count);
Dacă<>
Baza=Lev(LastName,StrLength(LastName)-string.QuantitySlice);
newLastName=Base+AbbrLP(șir[pad]);


str=current.Find(pb,count);
Dacă<>Nedefinit Apoi // găsit după tip
Baza=Lev(LastName,StrLength(LastName)-string.QuantitySlice);
newLastName=Base+AbbrLP(șir[pad]);
endIf;
endIf;
endIf;
endIf;
In caz contrar
newLastName="";
endIf;

// ======== procesează numele ==========
// umple tabelul cu date pentru nume
curent.Clear();

Dacă Gen = "M" Atunci
// gestionează excepțiile
If Name="lion" Then Name="leu" EndIf;
If Name="paul" Then Name="paul" EndIf;

String=current.Add(); // Serghei
string.starok="*th";
string.p="i"; line.d="yu"; string.v="i"; string.t="em"; string.p="e";
line.barcut=1;

String=current.Add(); // ivan + leu + paul
string.starok="*s";
string.p="a"; string.d="y"; string.v="a"; string.t="om"; string.p="e";
line.columncut=0;

String=current.Add(); // nikita
string.starok="*a";

line.barcut=1;

String=current.Add(); // ceapa
string.starok="ka";

line.barcut=1;

String=current.Add(); // Ieremia
string.starok="iya";

line.barcut=1;

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

line.barcut=1;

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

OtherwiseIf Gender="F" Atunci
// gestionează excepțiile
//If Name="olga" Then Name="olg" EndIf;

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

String=current.Add(); // Inga, Olga
string.starok="ha";
string.p="și"; line.d="e"; string.v="u"; string.t="oh"; string.p="e";
line.barcut=1;

String=current.Add(); // ester
string.starok="*ь";
string.p="și"; string.d="și"; line.v="b"; string.t="ju"; string.p="și";
line.barcut=1;

String=current.Add(); // Maria
string.starok="iya";
string.p="și"; string.d="și"; line.v="yu"; string.t="ey"; string.p="și";
line.barcut=1;

String=current.Add(); // sophia
string.starok="*ya";
string.p="și"; line.d="e"; line.v="yu"; string.t="ey"; string.p="e";
line.barcut=1;
endIf;

// masa este plină. numără ultimele 2 litere și caută-le
Dacă nu EmptyString(Nume), atunci
pb=Dreapta(Nume,2); count="StarOk"; // caută-l
newName=Nume; // dacă nimic nu se schimbă, așa va fi
str=current.Find(pb,count);
Dacă<>Nedefinit Apoi // găsit strict imediat


Altfel // strict negăsit, căutați numai după ultimul
pb="*"+Dreapta(pb,1);
str=current.Find(pb,count);
Dacă<>Nedefinit Apoi // găsit folosind ultimul
Base=Left(Nume,StrLength(Nume)-string.QuantitySlice);
newName=Base+ScrLP(șir[pad]);
Altfel // nu am găsit-o pe ultima, căutăm tipul de scrisoare
pb="*"+?(Găsiți(Vocale,Dreapta(pb,1))=0,"s","g");
str=current.Find(pb,count);
Dacă<>Nedefinit=1 Apoi // găsit după tip
Base=Left(Nume,StrLength(Nume)-string.QuantitySlice);
newName=Base+ScrLP(șir[pad]);
endIf;
endIf;
endIf;
In caz contrar
newName="";
endIf;

// ======== hai sa procesam al doilea nume, aici este mai usor ===========
curent.Clear();

Dacă Gen = "M" Atunci
șir=curent.Add();
string.p="a"; string.d="y"; string.v="a"; string.t="em"; string.p="e";
line.columncut=0;
OtherwiseIf Gender="F" Atunci
șir=curent.Add();
string.p="s"; line.d="e"; string.v="u"; string.t="oh"; string.p="e";
line.barcut=1;
endIf;
Dacă nu EmptyString (Nume mijloc) atunci
Base=Lev(Nume mijloc,StrLength(Nume mijloc)-current.QuantitySlice);
nou Patronimic = Baza + AbbrLP(current[pad]);
In caz contrar
nou patronymic="";
endIf;

Dacă numai inițiale, atunci
newName=Lev(newName,1); patronimic nou = Leu (patronimic nou, 1);
endIf;

// setează primele litere la majuscule
newLastName=ВReg(Lev(newLastName,1))+Avd(newLastName,2);
newName=ВReg(Lev(newName,1))+Average(newName,2);
patronimic nou = VReg(Lev(patronimic nou, 1))+Media (patronimic nou, 2);

// și acum totul este împreună
Dacă numai inițialele atunci // dacă este specificat formatul inițialelor
Nume complet nou = Nume nou + " " + Prenume nou + n Separator + nou Patronimic + n Separator;
In caz contrar
nou Nume complet = nou Nume + " " + nou Prenume + " " + nou Patronimic;
endIf;

If Find(Full Name, ".") Then // În cazul în care parametrul de intrare este Nume cu inițiale. Nu atingem inițialele
nou Nume complet = nou Nume + " " + Treg(Prenumele) + Treg(Numele de mijloc);
endIf;

Returnare abreviere (nume complet nou);
EndFunction

Declinarea numelui complet în 1C 8.3

În timpul funcționării complexului software 1C, utilizatorii au adesea întrebări cu privire la declinarea numelui complet 1C 8.3. Funcția 1C de declinare a numelui complet este realizată de o componentă specială, care se numește „NameDecl.dll”. Pentru a începe să utilizați componenta, trebuie să o copiați de pe discul de informații și asistență tehnică în folderul în care se află platforma principală a coșului și, de asemenea, să o înregistrați în sistemul de operare. Copierea se realizează prin comanda „resvr32 NameDecl.dll”. Pentru a face acest lucru, deschideți „Start” și apelați directiva „Run”, așa cum se arată în figură.

Deschideți o fereastră și introduceți „resvr32.exe”, indicând calea către biblioteca necesară. Biblioteca este selectată folosind butonul „Răsfoiește”. Apoi, trebuie să selectați „OK” și să confirmați înregistrarea bibliotecii.

1c declinarea numelui complet se efectuează în funcție de 2 parametri:

  • Caz, tip - număr. Acesta este un parametru obligatoriu.
  • Nume complet, tip - șir. Acesta este, de asemenea, un parametru obligatoriu.

Deoarece există șase cazuri în limba rusă, unui caz i se atribuie un număr de la 1 la 6 conform tabelului de mai jos:

Un al treilea parametru opțional este, de asemenea, identificat pentru componenta de declinare a numelui complet 1C - gen (tip - număr). Există 3 opțiuni aici: 0 - auto, 1 - masculin, 2 - feminin.

Serviciul 1C 8 declinare nume complet

Programele versiunea 1C 8.3 au un serviciu special de declinare a numelui complet după cazurile 1C 8.3, care funcționează prin configurator. Prin urmare, pentru a refuza numele dvs. complet, deschideți fereastra configuratorului și utilizați funcția „Refuzare”, după cum se arată mai jos:

Introducem detaliile din director, unde sunt afisate la cazul nominativ. Documentele sunt tipărite și afișate în formulare în declinarea dorită. De exemplu, așa arată în formularul de contract:



De exemplu, mai jos este un ordin de angajare, unde în fișele specialistului numele de familie, prenumele și patronimul acestuia sunt trecute în I.P., dar în formă tipărită sunt afișate în R.P.

1C face automat posibilă crearea de formulare și documentație tipărită ținând cont de cerințele legale actuale. Necesitatea declinării pe cazuri, genuri și numere este dictată de standardele de gestionare a documentelor de afaceri, conform cărora orice document este întocmit estetic, competent și corespunde statutului companiei.

Utilizarea funcției de autodeclinare minimizează probabilitatea erorilor la generarea documentelor, ceea ce protejează împotriva consecințelor negative în viitor. Acest lucru este valabil mai ales pentru cazurile în care un număr mare de documente sunt generate simultan. Autodeclinarea eficientizează munca cu documentație și economisește timp, ceea ce are un efect pozitiv asupra productivității.

Am analizat 2 metode de declinare a unui nume de familie, a unui nume patronimic pe cazuri, numere și genuri - folosind o componentă specială pentru declinarea Numelui Complet 1C 8.3 și prin serviciul configurator. Încercați pe ambele și vedeți care dintre ele funcționează cel mai bine pentru dvs.



Acțiune