Reparera Design möbel

Deklinationsnamn. Namnförstöring Tjänst "Beggning av fall"

Filen innehåller procedurer för 7.7 och 8.x. En sträng i formatet Efternamn Förnamn Patronymic skickas till proceduren.

UPD 11/26/10: med tacksamhet - ny version av funktionen. Jag har inte testat det! Frågor om hur denna version fungerar bör riktas till honom; av någon anledning vill han inte lägga upp dem :)

Funktion CaseFull Name (Fullständigt namn Värde, Case = 1, Initialer endast = False, Separator Value = ".")
If TypeValue (fullständigt namn)<>Skriv("String") Sedan
Report("Ogiltig rad skickad till ""fall av fullt namn!"""); Returnera fullständigt namn;
endIf;

// ta bort flera mellanslag
Medan 1=1 cykel
Fullständigt namn=ScrLP(StrReplace(fullständigt namn," "," "));
If Find(fullständigt namn," ")=0 Sedan Avbryt EndIf;
EndCycle;

Om TypeValue(Case)=Typ("String") Då
pad=ScrLP(NReg(Lev(Case,1)));
Om Find("irdvtp",pad)=0 Då

endIf;
OtherwiseIf TypeValue(Case)=Type("Number") Då
Om (Fall<1) или (Падеж>6) Sedan
Report("Felaktigt skiftläge överfört till ""fullständigt namnfall""!"); Returnera fullständigt namn;
endIf;
pad=fall-1;
endIf;

Fullständigt namn=ScrLP(NReg(fullständigt namn)); // det är bekvämare

// din kompositionsanalysator
Efternamn="";
För th=1 By StrLength(fullständigt namn) cykel
symbols=Avg(fullständigt namn, th, 1);

Efternamn=Efternamn+tecken;
EndCycle;
ы=й+1; // passerade mellanslag
Namn="";

symbols=Avg(fullständigt namn, th, 1);
If symbols=" " Then Abort EndIf;
Namn=Namn+tecken;
EndCycle;
ы=й+1; // passerade det andra utrymmet
Mellannamn="";
För y=y By StrLength(fullständigt namn) Cykel
symbols=Avg(fullständigt namn, th, 1);
If symbols=" " Then Abort EndIf;
Mellannamn=Mellannamn+symbol;
EndCycle;

// nu har vi separata Efternamn, Förnamn och Patronym.
// själva blocket för att analysera innehåll och fall börjar

// returnera om sig själv är nominativ. Om returen OnlyInitials är inställd, konvertera sedan till initialer
If (Lev(Case,1)="I") eller (Case=1) Then
Om INTE bara initialer eller Sök (fullständigt namn, ".") Då
Returnera fullständigt namn; // antingen är strängen redan konverterad eller så finns det inget behov av att konvertera
endIf;
NewFull Name = TRreg(Efternamn) + " " + Vreg(Lev(Förnamn, 1)) + pSeparator + Vreg(Lev(Mellannamn, 1)) + pSeparator;
Returnera förkortning (nytt fullständigt namn); // om avgränsaren är ett mellanslag. Vi skär av den sista
endIf;

// analysera könet M/K
If Right(Mellannamn,1)="a" Then Gender="F" Annars Gender="M" EndIf;

// skapa en tabellstruktur som lagrar ändelserna på ord
current=NewValueTable;
RowType=NewTypeDescription("String", NewStringQualifiers(3));
NumberType=NewTypeDescription("Number", NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",RowType); // gammalt slut 2 tecken
// kolumner som lagrar nya ordändelser
current.Columns.Add("p"); // förälder
current.Columns.Add("d"); // dativ
current.Columns.Add("to"); // ackusativ
current.Columns.Add("t"); // instrumental
current.Columns.Add("p"); // prepositional
// för att ange hur många bokstäver från slutet av ordet som ska skäras av,
current.Columns.Add("NumberSlice",NumberType); // antal bokstäver som ska skäras av

Vokaler="aeeouiiiyyay"; // lista över vokaler som en sträng

// ======== bearbeta efternamnet ===========
// fyll tabellen med data för efternamnet

Om kön="M" Då
string=current.Add(); // Ivanov
line.StarOk="*s";

lines.NumberSlice=0;

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

String=current.Add(); // allsmäktig
line.StarOk="blank";
string.r="honom"; string.d="honom"; string.v="hans"; string.t="im"; string.p="äta";
lines.NumberSlice=2;

String=current.Add(); // vit
line.StarOk="th";
string.r="gå"; string.d="om"; string.v="gå"; string.t="th"; string.p="om";
lines.NumberSlice=2;

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

lines.NumberSlice=1;

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

lines.NumberSlice=0;

String=current.Add(); // fixa, 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;

AnnarsOm Gender="F" Då
string=current.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;


Om inte EmptyString(LastName) Då
pb=Höger(Efternamn,3); count="StarOk"; // sök efter det
newLastName=Efternamn; // om inget förändras så blir det så
str=current.Find(pb,count);
Om<>


Annat
// hittas absolut inte av de tre sista tecknen, sök med två tecken endast med de sista
pb=Höger(Efternamn,2);
str=current.Find(pb,count);
Om<>Odefinierat då
Basis=Lev(Efternamn,StrLength(Efternamn)-sträng.QuantitySlice);
newLastName=Bas+AbbrLP(sträng[pad]);
Annars // om vi inte hittar två, letar vi efter en åt gången
pb="*"+Höger(pb,1);
str=current.Find(pb,count);
Om<>
Basis=Lev(Efternamn,StrLength(Efternamn)-sträng.QuantitySlice);
newLastName=Bas+AbbrLP(sträng[pad]);


str=current.Find(pb,count);
Om<>Odefinierad Sedan // hittas efter typ
Basis=Lev(Efternamn,StrLength(Efternamn)-sträng.QuantitySlice);
newLastName=Bas+AbbrLP(sträng[pad]);
endIf;
endIf;
endIf;
endIf;
Annat
newLastName="";
endIf;

// ======== bearbeta namnet ===========
// fyll tabellen med data för namnet
aktuell.Clear();

Om Gender="M" Då
// hantera undantag
If Name="lion" Then Name="lion" EndIf;
If Name="paul" Then Name="paul" EndIf;

String=current.Add(); // Sergey
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 + lejon + 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(); // lök
string.starok="ka";

line.barcut=1;

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

line.barcut=1;

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

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;

AnnarsOm Gender="F" Då
// hantera undantag
//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="ga";
string.p="and"; line.d="e"; string.v="u"; string.t="oh"; string.p="e";
line.barcut=1;

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

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

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

// bordet är fullt. räkna de två sista bokstäverna och leta efter dem
Om inte EmptyString(Name) Då
pb=Höger(Namn,2); count="StarOk"; // sök efter det
newName=Namn; // om inget förändras så blir det så
str=current.Find(pb,count);
Om<>Odefinierat Då // hittas strikt omedelbart


Annars // hittas absolut inte, sök endast efter den sista
pb="*"+Höger(pb,1);
str=current.Find(pb,count);
Om<>Odefinierad Sedan // hittades med den sista
Base=Left(Name,StrLength(Name)-string.QuantitySlice);
newName=Bas+ScrLP(sträng[pad]);
Annars // hittade vi inte den sista, vi letar efter typen av bokstav
pb="*"+?(Find(Vokaler,Höger(pb,1))=0,"s","g");
str=current.Find(pb,count);
Om<>Undefined=1 Sedan // hittas efter typ
Base=Left(Name,StrLength(Name)-string.QuantitySlice);
newName=Bas+ScrLP(sträng[pad]);
endIf;
endIf;
endIf;
Annat
newName="";
endIf;

// ======== låt oss bearbeta mellannamnet, det är lättare här ===========
aktuell.Clear();

Om Gender="M" Då
string=current.Add();
string.p="a"; string.d="y"; string.v="a"; string.t="em"; string.p="e";
line.columncut=0;
AnnarsOm Gender="F" Då
string=current.Add();
string.p="s"; line.d="e"; string.v="u"; string.t="oh"; string.p="e";
line.barcut=1;
endIf;
Om inte EmptyString(mellannamn) Då
Base=Lev(Mellannamn,StrLength(Mellannamn)-current.QuantitySlice);
new Patronymic = Base + AbbrLP(current[pad]);
Annat
new Patronymic="";
endIf;

Om bara initialer då
newName=Lev(nyttnamn,1); ny Patronymic = Leo (ny Patronymic, 1);
endIf;

// ställ in de första bokstäverna till versaler
newLastName=ВReg(Lev(newLastName,1))+Avd(newLastName,2);
newName=ВReg(Lev(nyttnamn,1))+Avg(nyttnamn,2);
new patonymic = VReg(Lev(new patonymic, 1))+Avg(new patonymic, 2);

// och nu är allt tillsammans
If Initials Only Then // om initialformatet är specificerat
nytt Fullständigt Namn = nytt Efternamn + " " + nytt Förnamn + n Separator + ny Patronym + n Separator;
Annat
nytt fullständigt namn = nytt efternamn + " " + nytt förnamn + " " + nytt patonym;
endIf;

Om Find(Fullständigt namn, ".") Då // Om indataparametern är Efternamn med initialer. Vi rör inte initialerna
nytt fullständigt namn = nytt efternamn + " " + Treg(Förnamn) + Treg(Mellannamn);
endIf;

Returnera Förkortning (nytt fullständigt namn);
EndFunction

Deklination av fullständigt namn i 1C 8.3

Under driften av 1C-mjukvarukomplexet har användare ofta frågor angående 1C 8.3-avvisningen av det fullständiga namnet. 1C-funktionen för deklination av fullständigt namn utförs av en speciell komponent, som kallas "NameDecl.dll". För att börja använda komponenten måste du kopiera den från informations- och teknisk supportdisken till mappen där den huvudsakliga bin-plattformen finns, och även registrera den i operativsystemet. Kopiering utförs genom kommandot "resvr32 NameDecl.dll". För att göra detta, öppna "Start" och anropa "Kör"-direktivet, som visas i bilden.

Öppna ett fönster och skriv in "resvr32.exe" och anger sökvägen till det önskade biblioteket. Biblioteket väljs med knappen "Bläddra". Därefter måste du välja "OK" och bekräfta biblioteksregistreringen.

1c deklination av fullständigt namn utförs enligt 2 parametrar:

  • Fall, typ - nummer. Detta är en obligatorisk parameter.
  • Fullständigt namn, typ - sträng. Detta är också en obligatorisk parameter.

Eftersom det finns sex fall på ryska språket tilldelas ett fall ett nummer från 1 till 6 enligt tabellen nedan:

En tredje, valfri parameter identifieras också för deklinationskomponenten för Fullständigt namn 1C - kön (typ - nummer). Det finns 3 alternativ här: 0 - auto, 1 - hane, 2 - hona.

Service 1C 8 deklination fullständigt namn

Program version 1C 8.3 har en speciell tjänst för deklination av fullständigt namn med fall 1C 8.3, som fungerar via konfiguratorn. Därför, för att avböja ditt fullständiga namn, öppna konfiguratorfönstret och använd funktionen "Avvisa", som visas nedan:

Vi anger detaljerna från katalogen, där de visas i nominativa fall. Dokument skrivs ut och visas i formulär i önskad deklination. Som ett exempel, så här ser det ut i kontraktsformuläret:



Som ett exempel, nedan är en anställningsorder, där i specialistens kort hans efternamn, förnamn och patronym är skrivna i I.P., men i tryckt form visas de i R.P.

1C gör det automatiskt möjligt att skapa tryckta formulär och dokumentation med hänsyn till gällande lagkrav. Behovet av deklination av fall, kön och siffror dikteras av standarderna för hantering av affärsdokument, enligt vilka alla dokument upprättas estetiskt, kompetent och motsvarar företagets status.

Genom att använda funktionen autodecline minimerar du sannolikheten för fel vid generering av dokument, vilket skyddar mot negativa konsekvenser i framtiden. Detta gäller särskilt för fall där ett stort antal dokument genereras på en gång. Autodeclension effektiviserar arbetet med dokumentation och sparar tid, vilket har en positiv effekt på produktiviteten.

Vi har analyserat två sätt att deklinera ett efternamn, ett patronymiskt namn efter fall, siffror och kön - med hjälp av en speciell komponent för deklination av Full Name 1C 8.3 och genom konfiguratortjänsten. Prova båda och se vilken som fungerar bäst för dig.

När användaren arbetar i 1C står användaren inför frågan om deklination av efternamnet eller positionen för en anställd i tryckta former av dokument, det vill säga med en situation när det är nödvändigt att deklinera efternamn från fall.

För avvisning av ett fullständigt namn i 1C-program tillhandahålls en extern komponent - NameDecl.dll, som innehåller deklinationsfunktionen. Du kan ta den från ITS-disken och kopiera den till mappen med den installerade 1C-plattformen - bin, registrera den i operativsystemet. Denna procedur utförs med kommandot resvr32 NameDecl.dll (under ett administratörskonto). För att göra detta måste du anropa kommandot "Kör" genom "Start" -knappen, med hjälp av sökningen eller tangentkombinationen Windows + R.

Fig.1 Sökfönster. Hitta kommandot Kör

I fönstret som visas, skriv in kommandot resvr32.exe och ange sökvägen till biblioteket som ska anslutas med knappen "Bläddra".


Fig.2 “Kör” kommandofönster

Efter att ha klickat på "Ok" visas ett meddelande om att biblioteket har registrerats.


Fig.3 Meddelandefönster

Beskrivning av deklinationsmetoden i 1C

Avvisa (fullständigt namn, kasus, kön) enligt parametrarna:

  • Fullständigt namn (obligatoriskt), typ – sträng
  • Fall (obligatoriskt), typ – nummer

I vilket fall det fullständiga namnet ska anges anges med en siffra från 1 till 6.

Tabell över fall: frågor, prepositioner och deras betydelser i programkod

Det händer att en tvetydig situation uppstår när programmet behöver bestämma könet på ett efternamn, till exempel Sigida, Chepko, Sushko, Oganezyan, etc.

Använd i det här fallet ytterligare en parameter:

  • Kön (valfritt), typ - nummer

Den visar om man ska avböja eller inte avböja efternamnet. I andra fall utelämnas denna parameter eller så används värdet 0 ("auto"), eftersom felaktig könsindikation kan påverka den korrekta deklinationen. Här är de möjliga värdena: 0 – auto, 1 – hane, 2 – hona.

Tjänst "Avvisning per fall"

1C 8.3-programmen inkluderar redan en tjänst för förkastning av uppgifter från anställda eller entreprenörer i enlighet med de fall som används i dokumentet.



Fragment 1

#ProgramInterface Area // Avvisar hela namnet // Fungerar endast på Windows OS. // // Parametrar: // Fullständigt namn - Rad - Rad som innehåller det fullständiga namnet för deklination. // Case - Number - fallet där det är nödvändigt att avböja representationen av objektet. // 1 - Nominativ. // 2 - Genitiv. // 3 - Dativ. // 4 - Akkusativ. // 5 - Kreativt. // 6 - Prepositionell. // Objekt - Deklinationer - Länk till objektet vars detaljer avvisas // Kön - Antal - Antal - kön på den fysiska huvudrollen, // 1 - man, // 2 - kvinna. // // Returvärde: // String - Resultatet av deklinationen av det fullständiga namnet i skiftläge. // Funktion DeclineFull Name(Fullständigt namn, Case, Objekt = Obestämt, Kön = Odefinierat) Exportera // Avvisar representationen av ett objekt. Funktion DeclensionRepresentations(Representation, Case, Object = Undefined) Export // Utför åtgärder på det formulär som krävs för att ansluta subsystemet Declension.

Fig.4 Konfiguratorfönster



Fragment 2

// Avvisar objektets representation. Funktion DeclineRepresentation(Representation, Case, Object = Odefinierad) Export Return Decline(Representation, Case, Object); Slut på funktion // Utför med formuläret de åtgärder som är nödvändiga för att ansluta deklinationsundersystemet Procedur When CreatedOnServer(Form, View, MainFormAttributeName = "Object") Export // Händelsehanterare When RecordedOnServer av ett hanterat objektformulär för deklination Procedur When RecordedOnServer(Form , View, Object, ThisFullName = False , Gender = Undefined) Export // Ställer in tecknet på tillgänglighet för avvisningstjänsten Procedur SetAvailability of Declension Service (Availability) Export SetPrivilegedMode (True); CurrentParameters = New Match(SessionParameters.ClientParametersOnServer); CurrentParameters.Insert("DeclinationServiceAvailable", Tillgänglighet); SessionParameters.ClientParametersOnServer = New FixedCompliance(CurrentParameters); SetPrivilegedMode(False); Slutprocedur

Fig.5 Användning av funktionen "Lutning".

Med hjälp av detaljer i dokumentet som är valda från katalogen där de presenteras i nominativa fall, kommer de att visas i den tryckta formen av dokumentet med den erforderliga deklinationen.

Låt oss titta på deklinationsfunktionen med exemplet på ett kontrakt i 1C: Accounting 3.0. (1C:Enterprise 8.3). Detta ger möjlighet till avvisning av namn och position.



Fig.6 Kontraktsformulärfönster. Ställa in efternamn och positionsavvisning

Programmet lägger automatiskt in rätt alternativ i det utskrivna formuläret.



Fig.7 Programfönster – "Avvisning per fall"

Ett exempel på ärendeavvisning kan ses i "Order för uthyrning". På den anställdes kort anges hans fullständiga namn i det nominativa fallet och i tryckt form - i det genitiva fallet.



Fig. 8 Exempel på delinering av fullständigt namn i den tryckta blanketten "Beställning för anställning"

Med 1C-programmet, med hänsyn till kraven i lagstiftning och standarder, kan du följa det godkända förfarandet för att förbereda dokumentation och generera tryckta formulär.

Deklination av fall beror också på affärsstandarder, som föreskriver att alla dokument måste upprättas inte bara kompetent utan också estetiskt kompetent, vilket återspeglar organisationens status.

Dessutom minskar användningen av funktioner i programmet såsom autodeklination avsevärt sannolikheten för fel i dokumentförberedelsen.