Deklinacija fio u 1s 8.3. Declension fio

Prilikom rada u 1C korisnik se suočava sa pitanjem deklinacije prezimena ili položaja zaposlenog u štampanim oblicima dokumenata, odnosno sa situacijom kada je potrebno izvršiti deklinaciju prezimena u padežima.

Za deklinaciju punog imena u 1C programima predviđena je vanjska komponenta - NameDecl.dll, koja sadrži funkciju deklinacije. Možete ga uzeti na ITS disk i, kopirajući ga u mapu s instaliranom 1C-bin platformom, registrirati u operativnom sistemu. Ova procedura se izvodi pomoću naredbe resvr32 NameDecl.dll (pod administratorskim nalogom). Da biste to učinili, trebate pozvati naredbu "Pokreni" putem gumba "Start", koristeći pretragu ili prečicu na tipkovnici Windows + R.

Sl.1 Prozor za pretragu. Traženje naredbe "Run".

U prozoru koji se pojavi unesite naredbu resvr32.exe i navedite putanju do biblioteke dodataka pomoću dugmeta "Pretraži".


Slika 2 “Run” komandni prozor

Nakon klika na OK, pojavit će se poruka da je biblioteka uspješno registrovana.


Sl.3 Prozor poruke

Opis metode deklinacije u 1C

Odbij (ime, slučaj, spol) prema parametrima:

  • Puno ime (obavezno), tip - string
  • Slučaj (obavezno), vrsta - broj

Slučaj u kojem se mora staviti puno ime je dat brojem od 1 do 6.

Tablica padeža: pitanja, prijedlozi i njihova značenja u programskom kodu

Dešava se da nastane dvosmislena situacija kada program treba odrediti spol prezimena, na primjer, Sigida, Chepko, Sushko, Oganezyan itd.

U ovom slučaju koristi se dodatni parametar:

  • Pol (opciono), tip - broj

Pokazuje da li treba odbiti prezime ili ne. U drugim slučajevima, ovaj parametar se izostavlja ili se koristi vrijednost 0 (“auto”), jer netačna naznaka pola može uticati na ispravnu deklinaciju. Evo mogućih vrijednosti: 0 - auto, 1 - muški, 2 - ženski.

Usluga "Deklinacija po padežima"

Programi 1C 8.3 već uključuju uslugu za odbijanje podataka o zaposlenima ili ugovornim stranama u skladu sa slučajevima koji se koriste u dokumentu.



Fragment 1

#Region ProgrammingInterface // Nagnuto ime // Samo za rad na Windows OS. // // Parametri: // Puno ime - String - Niz koji sadrži puno ime za deklinaciju. // Slučaj - Broj - slučaj u kojem treba odbiti reprezentaciju objekta. // 1 - Nominativ. // 2 - Genitiv. // 3 - Dativ. // 4 - Akuzativ. // 5 - Kreativno. // 6 - Prijedlozi. // Object - DeclensionSubject - Veza sa objektom čiji je atribut preinačen // Spol - Broj - Broj - spol fizičkog kontakta, // 1 - muški, // 2 - ženski. // // Povratna vrijednost: // String - rezultat deklinacije punog imena u slučaju. // Funkcija DeclineFullName(Name, Case, Object = Undefined, Gender = Undefined) Izvoz // Odbija reprezentaciju objekta. Funkcija InflectRepresentation(Representation, Case, Object = Undefined) Izvoz // Izvodi radnje potrebne za povezivanje podsistema deklinacije sa formom.

Sl.4 Prozor konfiguratora



Fragment 2

// Odbij reprezentaciju objekta. Funkcija DeclineView(View, Case, Object = Undefined) Izvoz Povratak Decline(View, Case, Object); Function end // Izvodi radnje na obrascu koje su potrebne za povezivanje podsistema Declension OnCreateAtServerProcedure(Form, View, FormMasterAttributeName = "Object") Izvoz // OnWriteAtServer obrađivač događaja obrasca upravljanog objekta za deklinaciju OnWriteAtServerProcedure, Object, View ThisName = False , Gender = Undefined) Izvoz // Postavlja oznaku za dostupnost usluge deklinacije Procedura SetInclinationServiceAccessibility(Availability) Izvoz SetPrivilegedMode(True); CurrentParameters = New Match(SessionParameters.ClientParametersOnServer); CurrentParameters.Insert("DeclinationService Available", Availability); SessionParameters.ClientParametersOnServer = NewFixedMatch(CurrentParameters); SetPrivilegedMode(False); EndProcedure

Slika 5 Upotreba funkcije Odbij

Koristeći detalje u dokumentu, koji su odabrani iz referentne knjige u kojoj su predstavljeni u nominativu, oni će biti prikazani u štampanom obliku dokumenta sa željenom deklinacijom.

Razmotrite funkciju deklinacije koristeći primjer ugovora u 1C: Računovodstvo 3.0. (1C:Preduzeće 8.3). On predviđa deklinaciju punog imena i položaja.



Sl.6 Prozor obrasca ugovora. Postavljanje deklinacije prezimena i položaja

Program će automatski staviti ispravnu verziju u štampanu formu.



Sl.7 Prozor programa - "Deklinacija po padežima"

Primjer deklinacije padeža može se vidjeti u Nalogu za zapošljavanje. U kartonu zaposlenog njegovo puno ime je naznačeno u nominativu, au štampanom obliku - u genitivu.



Slika 8 Primjer deklinacije punog imena u štampanom obliku "Nalog za zapošljavanje"

Program 1C, uzimajući u obzir zahtjeve zakonodavstva i standarda, omogućava vam da se pridržavate odobrene procedure za obradu dokumentacije i generiranje štampanih obrazaca.

Odbijanje u padežima je i zbog standarda poslovnog prometa koji predviđaju da svaki dokument mora biti izveden ne samo kompetentno, već i estetski kompetentan, što odražava status organizacije.

Osim toga, korištenje takvih funkcija u programu kao što je auto-deklinacija značajno smanjuje vjerojatnost grešaka u pripremi dokumenata.

Datoteka sadrži procedure za 7.7 i 8.x. Proceduri se prosljeđuje niz u formatu Prezime Ime Patronim.

UPD 11/26/10: sa zahvalnošću - nova verzija funkcije. Nisam testirao! Pitanja o radu ove verzije - njemu, iz nekog razloga ne želi da je širi :)

Funkcija CaseName(ValueName,Case=1,InitialsOnly=False, Value pDelimiter=".")
Ako TypeValue (puno ime)<>Ukucajte("String") Zatim
Show("Nevažeći string proslijeđen na ""Puno ime i velika slova!"""); Povrat punog imena;
EndIf;

// ukloniti više razmaka
Dok je 1=1 Petlja
Puni naziv = Skraćeni LP (StrReplace(Name, " "," "));
Ako Find(Name," ")=0 Onda Prekini EndIf;
EndCycle;

Ako TypeValue(Case)=Type("String") Onda
pad = AbbrLP(NReg(Lev(Slučaj,1)));
Ako je Find("irdwtp",pad)=0 Onda

EndIf;
ElseIf TypeZnch(Case)=Tip("Broj") Zatim
Ako (slučaj<1) или (Падеж>6) Onda
Izvještaj("Netačan slučaj proslijeđen na ""slučaj punog imena""!"); Povrat punog imena;
EndIf;
slučaj=slučaj-1;
EndIf;

Puno ime=AblP(NReg(puno ime)); // udobnije je

// vlastiti analizator kompozicije
Prezime="";
Za d=1 By StrLength(Name) Cycle
chars=Prosjek(puno ime, th, 1);

Prezime=Prezime+lik;
EndCycle;
s=d+1; // prešao razmak
Name="";

chars=Prosjek(puno ime, th, 1);
If chars=" " Onda Prekini EndIf;
Ime=Ime+lik;
EndCycle;
s=d+1; // prelazimo drugi razmak
Srednje ime="";
Za y=s Po StrLength(puno ime) Ciklus
chars=Prosjek(puno ime, th, 1);
If chars=" " Onda Prekini EndIf;
Srednje ime = Srednje ime + simbol;
EndCycle;

// sada imamo odvojeno prezime, ime i patronim.
// počinje stvarni blok analize sadržaja i slučaja

// vrati ako je samo nominativ. Ako je ReturnOnlyInitials postavljen, onda pretvorite u inicijale
Ako (Left(Case,1)="I") ili (Case=1) Onda
Ako NE Samo inicijali ili Nađi (ime, ".") Onda
Povrat punog imena; // ili već konvertovani niz, ili ga ne treba konvertovati
EndIf;
NovoName = TReg(Prezime) + " " + Vreg(Lev(Ime,1)) + pSeparator + Vreg(Lev(Posrednje ime,1)) + pSeparator;
Povratak SokrLP (Novi puni naziv); // u slučaju da je separator razmak. Poslednji rez
EndIf;

// analizirati rod M/Ž
Ako je desno(patronim,1)="a" Onda je rod="F" Ostalo Rod="M" EndIf;

// kreiramo strukturu tabele koja pohranjuje završetke riječi
current=Nova tabela vrijednosti;
StringType=NewTypeDescription("String",NewStringQualifiers(3));
NumberType=NewTypeDescription("Broj",NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",StringType); // stari završetak 2 znaka
// kolone koje pohranjuju nove završetke riječi
current.Columns.Add("p"); // roditelj
current.Columns.Add("d"); // dativ
current.Columns.Add("in"); // akuzativ
current.Columns.Add("t"); // kreativno
current.Columns.Add("n"); // prepositional
// da odredimo koliko slova s ​​kraja riječi treba odsjeći,
current.Columns.Add("NumberSlice",NumberType); // broj izrezanih slova

Vowels="aeeouiyyayu"; // lista samoglasnika kao niz

// ======== obradi prezime ==========
// popuniti tabelu podacima za prezime

Ako je rod="M" Onda
string=current.Add(); // Ivanov
string.StarOk="*s";

rows.CountSlice=0;

Red=trenutni.Dodaj(); // krasinsky
string.StarOk="*th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="im"; string.p="ohm";
rows.CountSlice=2;

Red=trenutni.Dodaj(); // svemogući
line.Starok="sch";
string.r="njegov"; string.d="njemu"; string.in="njegov"; string.t="im"; string.p="jede";
rows.CountSlice=2;

Red=trenutni.Dodaj(); // bijela
string.StarOk="th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="th"; string.p="ohm";
rows.CountSlice=2;

Red=trenutni.Dodaj(); // pale
string.StarOk="*th";

rows.CountSlice=1;

Red=trenutni.Dodaj(); // rabinovich
string.StarOk="*h";

rows.CountSlice=0;

Red=trenutni.Dodaj(); // popravke, zaliznyak
string.StarOk="*k";
string.r="ka"; string.d="ku"; line.in="ka"; string.t="com"; string.p="ke";
rows.CountSlice=2;

Red=trenutni.Dodaj(); // shinkar
string.StarOk="*b";
string.r="i"; string.d="u"; string.in="i"; string.t="jesti"; string.p="e";
rows.CountSlice=1;

Red=trenutni.Dodaj(); // perelman, oganesyan
string.StarOk="*n";

rows.CountSlice=0;

Red=trenutni.Dodaj(); // janje
string.StarOk="u";
string.r="a"; string.d="y"; line.in="a"; string.t="th"; string.p="e";
rows.CountSlice=0;

ElseIf Gender="F" Zatim
string=current.Add(); // Sklodovskaya
line.StarOk="th";
string.r="ups"; string.d="ups"; line.in="th"; string.t="ups"; string.p="ups";
rows.CountSlice=2;

Red=trenutni.Dodaj(); // Ivanova
string.StarOk="*a";
string.r="ups"; string.d="ups"; line.in="y"; string.t="ups"; string.p="ups";
rows.CountSlice=1;
EndIf;


Ako nije EmptyString(Prezime) Onda
pb=Desno(Prezime,3); count="StarOk"; // potražite
newLastName=Prezime; // ako se ništa ne promijeni, neka bude
stro=current.Find(pb, count);
Ako strogo<>


Inače
// striktno nije pronađen za posljednja tri znaka, tražimo dva znaka samo po posljednjem
pb=Desno(Prezime,2);
stro=current.Find(pb, count);
Ako strogo<>Nedefinirano Onda
Stem=Lev(Prezime, StrLength(Prezime)-stro.CountSlice);
newLastName=Baza+Abb(stro[pad]);
Inače // ako dva nisu pronađena, tražimo jednog
pb="*"+Desno(pb,1);
stro=current.Find(pb, count);
Ako strogo<>
Stem=Lev(Prezime, StrLength(Prezime)-stro.CountSlice);
newLastName=Baza+Abb(stro[pad]);


stro=current.Find(pb, count);
Ako strogo<>Nedefinirano Zatim // pronađeno po viđenju
Stem=Lev(Prezime, StrLength(Prezime)-stro.CountSlice);
newLastName=Baza+Abb(stro[pad]);
EndIf;
EndIf;
EndIf;
EndIf;
Inače
newLastname="";
EndIf;

// ======== obraditi ime ==========
// popuniti tabelu podacima za ime
current.Clear();

Ako je Spol="M" Onda
// obrađuje izuzetke
Ako Name="lav" Onda Name="lav" EndIf;
Ako Name="paul" Onda Name="paul" EndIf;

Red=trenutni.Dodaj(); // Sergey
string.starok="*th";
string.r="i"; string.d="u"; string.in="i"; string.t="jesti"; string.p="e";
row.cutoff=1;

Red=trenutni.Dodaj(); // Ivan + Lev + Pavel
string.starok="*s";
string.r="a"; string.d="y"; line.in="a"; string.t="ohm"; string.p="e";
row.cutoff=0;

Red=trenutni.Dodaj(); // nikita
string.starok="*a";

row.cutoff=1;

Red=trenutni.Dodaj(); // luk
string.starok="ka";

row.cutoff=1;

Red=trenutni.Dodaj(); // Jeremiah
string.starok="ia";

row.cutoff=1;

Red=trenutni.Dodaj(); // ilya
string.starok="*i";

row.cutoff=1;

Red=trenutni.Dodaj(); // igor
string.starok="*ʹ";
string.r="i"; string.d="u"; string.in="i"; string.t="jesti"; string.p="e";
row.cutoff=1;

ElseIf Gender="F" Zatim
// obrađuje izuzetke
//If Name="olga" Onda Name="olga" EndIf;

Red=trenutni.Dodaj(); // Irina
string.starok="*a";
string.r="s"; string.d="e"; line.in="y"; string.t="ups"; string.p="e";
row.cutoff=1;

Red=trenutni.Dodaj(); // Inga, Olga
string.starok="ha";
string.r="i"; string.d="e"; line.in="y"; string.t="ups"; string.p="e";
row.cutoff=1;

Red=trenutni.Dodaj(); // esther
string.starok="*ʹ";
string.r="i"; string.d="i"; line.in="b"; string.t="w"; string.p="i";
row.cutoff=1;

Red=trenutni.Dodaj(); // maria
string.starok="ia";
string.r="i"; string.d="i"; line.in="u"; string.t="njena"; string.p="i";
row.cutoff=1;

Red=trenutni.Dodaj(); // sophia
string.starok="*i";
string.r="i"; string.d="e"; line.in="u"; string.t="njena"; string.p="e";
row.cutoff=1;
EndIf;

// stol je pun. prebroj posljednja 2 slova i potraži ih
Ako nije EmptyString(Name) Onda
pb=Desno(ime,2); count="StarOk"; // potražite
newName=Ime; // ako se ništa ne promijeni, neka bude
stro=current.Find(pb, count);
Ako strogo<>Nedefinirano Tada // odmah pronađeno strict


Inače // nije striktno pronađeno, tražimo samo posljednju
pb="*"+Desno(pb,1);
stro=current.Find(pb, count);
Ako strogo<>Nedefinirano Onda // pronađeno od last
Base=Lev(ime, StrLength(ime)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
Inače // zadnje nije pronađeno, tražimo slova po vrsti
pb="*"+?(Pronađi(Vowers,Desno(pb,1))=0,"s","g");
stro=current.Find(pb, count);
Ako strogo<>Undefined=1 Zatim // pronađeno po tipu
Base=Lev(ime, StrLength(ime)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
EndIf;
EndIf;
EndIf;
Inače
newName="";
EndIf;

// ======== Obradimo patronim, ovdje je lakše ==========
current.Clear();

Ako je Spol="M" Onda
string=current.Add();
string.r="a"; string.d="y"; line.in="a"; string.t="jesti"; string.p="e";
row.cutoff=0;
ElseIf Gender="F" Zatim
string=current.Add();
string.r="s"; string.d="e"; line.in="y"; string.t="ups"; string.p="e";
row.cutoff=1;
EndIf;
Ako nije EmptyString(patronim) Onda
Baza \u003d Lav (patronim, StrLength (patronim) - trenutno. Broj rezova);
novoPatronimsko ime = Baza + Skraćeni LP (trenutni [pad]);
Inače
novi patronim="";
EndIf;

IfOnlyInitials Then
novoIme=Lav(novoIme,1); newPatronymic=Lav(newPatronymic,1);
EndIf;

// postavlja prva slova na velika
novoPrezime=VReg(Lev(novoPrezime,1))+Mid(novoPrezime,2);
novoIme=VReg(Lev(novoIme,1))+Prosjek(novoIme,2);
newPatronymic=VReg(Lev(newPatronymic,1))+Mid(newPatronymic,2);

// i sada je sve zajedno
If InitialsOnly Then // ako je naveden format inicijala
newName=novoPrezime+" "+novoIme+pSeparator+newPatronymic+pSeparator;
Inače
novoIme=novoPrezime+" "+novoIme+" "+novoPatronim;
EndIf;

Ako Find(puno ime, ".") Onda // U slučaju da je ulazni parametar Prezime sa inicijalima. Ne dirajte inicijale
novoIme = novoPrezime + " " + TReg(Ime) + Treg(Patronim);
EndIf;

Povratak SokrLP (novi puni naziv);
EndFunctions

Deklinacija punog imena u 1C 8.3

Tokom rada softverskog kompleksa 1C, korisnici često imaju pitanja u vezi s deklinacijom punog imena 1C 8.3. 1C, funkciju deklinacije prezimena vrši posebna komponenta, koja se naziva "NameDecl.dll". Da biste počeli da koristite komponentu, potrebno je da je kopirate sa diska za informacije i tehničku podršku u fasciklu u kojoj se nalazi glavna platforma za smeće, a takođe je registrujete u operativnom sistemu. Kopiranje se vrši preko komande "resvr32 NameDecl.dll". U tu svrhu otvorite "Start" i pozovite "Run" direktivu, kao što je prikazano na slici.

Otvorite prozor i upišite "resvr32.exe", ukazujući na putanju do željene biblioteke. Biblioteka se bira putem dugmeta "Pretraži". Zatim morate odabrati "OK" i potvrditi registraciju biblioteke.

1s deklinacija punog imena vrši se prema 2 parametra:

  • Kućište, tip - broj. Ovo je obavezan parametar.
  • Puno ime, tip - string. To je također obavezan parametar.

S obzirom na to da na ruskom jeziku postoji šest padeža, padežu je dodijeljen broj od 1 do 6 u skladu sa donjom tablicom:

Također, izdvaja se treći, opcioni parametar komponente deklinacije FIO 1C - rod (tip - broj). Ovdje postoje 3 opcije: 0 - auto, 1 - muž, 2 - žene.

Servis 1C 8 deklinacija punog imena

Programi verzije 1C 8.3 imaju posebnu uslugu za deklinaciju punog imena u slučajevima 1C 8.3, koja radi preko konfiguratora. Stoga, da biste odbili puno ime, otvorite prozor konfiguratora i koristite funkciju "Odbij", kao što je prikazano u nastavku:

Detalje unosimo iz imenika, gdje se prikazuju u nominativu. Dokumenti se ispisuju i prikazuju u obrascima već u željenoj deklinaciji. Na primjer, ovako to izgleda u formi ugovora:



Kao primjer, ispod je naredba za zapošljavanje, gdje su u kartonima specijaliste njegovo prezime, ime i patronim upisani u I.P., ali su u štampanom obliku prikazani u R.P.

1C automatski omogućava izradu štampanih obrazaca i dokumentacije, uzimajući u obzir trenutne zahtjeve zakona. Potrebu za deklinacijom za padeže, rodove i brojeve diktiraju standardi upravljanja poslovnim dokumentima, prema kojima je svaki dokument sastavljen estetski, kompetentno i odgovara statusu kompanije.

Upotreba funkcije autodeklinacije minimizira vjerojatnost grešaka u formiranju dokumenata, što štiti od negativnih posljedica u budućnosti. Ovo posebno vrijedi za one slučajeve kada se odjednom generira veliki broj dokumenata. Automatsko odbijanje pojednostavljuje rad s dokumentacijom i štedi vrijeme, što ima pozitivan učinak na performanse.

Analizirali smo 2 načina deklinacije prezimena, patronimskog imena po padežima, brojevima i rodu - koristeći posebnu komponentu deklinacije punog imena 1C 8.3 i putem usluge konfiguratora. Isprobajte oba i odlučite koji je najbolji za vas.

Dijeli