1s 8.3 da declension fio. Declension fio

1C da ishlayotganda, foydalanuvchi hujjatlarning bosma shakllarida xodimning familiyasi yoki lavozimini bekor qilish masalasiga duch keladi, ya'ni hollarda familiyalarni bekor qilishni amalga oshirish kerak bo'lgan vaziyatga duch keladi.

1C dasturlarida to'liq ismni o'zgartirish uchun tashqi komponent - NameDecl.dll taqdim etiladi, unda rad etish funktsiyasi mavjud. Siz uni ITS diskiga olishingiz va uni o'rnatilgan 1C-bin platformasi bilan papkaga nusxalashingiz va operatsion tizimda ro'yxatdan o'tkazishingiz mumkin. Ushbu protsedura resvr32 NameDecl.dll buyrug'i yordamida amalga oshiriladi (administrator hisobi ostida). Buni amalga oshirish uchun qidiruv yoki Windows + R klaviatura yorlig'i yordamida "Ishga tushirish" tugmasi orqali "Ishga tushirish" buyrug'ini chaqirishingiz kerak.

1-rasm Qidiruv oynasi. "Ishga tushirish" buyrug'i qidirilmoqda

Ko'rsatilgan oynada resvr32.exe buyrug'ini kiriting va "Browse" tugmasi yordamida plagin kutubxonasiga yo'lni belgilang.


2-rasm “Ishga tushirish” buyruq oynasi

OK tugmasini bosgandan so'ng kutubxona muvaffaqiyatli ro'yxatdan o'tganligi haqida xabar paydo bo'ladi.


3-rasm Xabarlar oynasi

1C da og'ish usulining tavsifi

Parametrlar bo'yicha rad etish (Ism, holat, jins):

  • To'liq ism (majburiy), turi - satr
  • Case (majburiy), turi - raqam

To'liq ism qo'yilishi kerak bo'lgan holat 1 dan 6 gacha bo'lgan raqam bilan beriladi.

Case jadvali: savollar, predloglar va ularning dastur kodidagi ma'nolari

Dasturda familiyaning jinsini aniqlash kerak bo'lganda noaniq vaziyat yuzaga keladi, masalan, Sigida, Chepko, Sushko, Oganezyan va boshqalar.

Bunday holda, qo'shimcha parametr ishlatiladi:

  • Jins (ixtiyoriy), turi - raqam

Bu familiyani rad etish yoki rad etmaslikni ko'rsatadi. Boshqa hollarda, bu parametr o'tkazib yuboriladi yoki 0 ("avtomatik") qiymati ishlatiladi, chunki jinsning noto'g'ri ko'rsatilishi to'g'ri moyillikka ta'sir qilishi mumkin. Bu erda mumkin bo'lgan qiymatlar: 0 - avtomatik, 1 - erkak, 2 - ayol.

"Ishlar bo'yicha rad etish" xizmati

1C 8.3 dasturlari allaqachon hujjatda ishlatilgan holatlarga muvofiq xodimlar yoki kontragentlar ma'lumotlarini rad etish xizmatini o'z ichiga oladi.



1-qism

#Region ProgrammingInterface // Nishab nomi // Faqat Windows OS da ishlash uchun. // // Parametrlar: // To'liq ism - String - rad etish uchun to'liq ismni o'z ichiga olgan qator. // Case - Raqam - ob'ektni ko'rsatishni rad etish kerak bo'lgan holat. // 1 - Nominativ. // 2 - Genitiv. // 3 - Dative. // 4 - Akkusativ. // 5 - ijodiy. // 6 - Prepozitsiya. // Ob'ekt - DeclensionSubject - Atributi egilgan ob'ektga havola // Gender - Raqam - Raqam - jismoniy etakchining jinsi, // 1 - erkak, // 2 - ayol. // // Qaytariladigan qiymat: // String - Ishdagi to'liq ismni qisqartirish natijasi. // Funktsiya DeclineFullName(Ism, Case, Ob'ekt = Aniqlanmagan, Jins = Aniqlanmagan) Eksport // Ob'ektning namoyishini rad etadi. Funktsiya InflectRepresentation(Representation, Case, Object = Undefined) Export // Declension quyi tizimini forma bilan ulash uchun zarur amallarni bajaradi.

4-rasm Konfigurator oynasi



2-qism

// Ob'ektning namoyishini rad etish. Funktsiya DeclineView(Ko'rish, Case, Ob'ekt = Aniqlanmagan) Eksportni qaytarishni rad etish (Ko'rish, Case, Ob'ekt); Funktsiya tugashi // OnCreateAtServerProcedure (Form, View, FormMasterAttributeName = "Object") Declension quyi tizimini ulash uchun zarur bo'lgan shaklda amallarni bajaradi. ThisName = False , Gender = Undefined) Export // Declension xizmatining mavjudligi uchun bayroqni o'rnatadi. CurrentParameters = Yangi moslik (SessionParameters.ClientParametersOnServer); CurrentParameters.Insert("DeclinationService Available", Mavjudligi); SessionParameters.ClientParametersOnServer = NewFixedMatch(CurrentParameters); SetPrivilegedMode(False); EndProcedure

Fig.5 Rad etish funksiyasidan foydalanish

Hujjatdagi ma'lumotnomadan nominativ holatda ko'rsatilgan ma'lumotnomadan tanlangan ma'lumotlardan foydalanib, ular hujjatning bosma shaklida kerakli pasayish bilan ko'rsatiladi.

1C: Buxgalteriya 3.0 da shartnoma misolidan foydalanib, rad etish funktsiyasini ko'rib chiqing. (1C: Enterprise 8.3). Unda to'liq ism va lavozimni qisqartirish nazarda tutilgan.



Fig.6 Shartnoma shakli oynasi. Familiya va lavozimning qisqarishini belgilash

Dastur avtomatik ravishda to'g'ri versiyani chop etilgan shaklga qo'yadi.



7-rasm Dastur oynasi - "Ishlar bo'yicha rad etish"

Ishni bekor qilish misolini Ishga qabul qilish to'g'risidagi buyruqda ko'rish mumkin. Xodimning kartasida uning to'liq ismi Nominativ holatda, bosma shaklda esa - Genitivda ko'rsatilgan.



8-rasm "Ishga qabul qilish uchun buyurtma" bosma shaklda to'liq ismning tushirilishiga misol

1C dasturi qonun hujjatlari va standartlar talablarini hisobga olgan holda hujjatlarni qayta ishlash va bosma shakllarni yaratishning tasdiqlangan tartibiga rioya qilish imkonini beradi.

Ishlarning kamayishi, shuningdek, har qanday hujjat nafaqat malakali, balki estetik jihatdan ham tashkilotning maqomini aks ettiruvchi tarzda bajarilishi kerakligini ta'minlaydigan biznes aylanmasi standartlari bilan bog'liq.

Bundan tashqari, dasturda avtomatik cheklash kabi funktsiyalardan foydalanish hujjatlarni tayyorlashda xatolar ehtimolini sezilarli darajada kamaytiradi.

Fayl 7.7 va 8.x uchun protseduralarni o'z ichiga oladi. Protseduraga Familiya Ism Ota ismi formatidagi qator uzatiladi.

UPD 11/26/10: minnatdorchilik bilan - funktsiyaning yangi versiyasi. Men sinab ko'rmadim! Ushbu versiyaning ishi haqida savollar - unga, negadir uni tarqatishni xohlamaydi :)

Funktsiya CaseName(ValueName,Case=1,InitialsOnly=False, Value pDelimiter=".")
Agar TypeValue (to'liq ism)<>Keyin ("String") yozing
Show(""To'liq ism-sharif"ga noto'g'ri satr o'tkazildi""); To'liq ismni qaytarish;
EndIf;

// bir nechta bo'shliqlarni olib tashlang
While 1=1 Loop
To'liq ism = Qisqartirilgan LP (StrReplace(Ism, " "," "));
Agar Find(Name," ")=0 bo'lsa, EndIfni bekor qiling;
EndCycle;

Agar TypeValue(Case)=Type("String") bo'lsa
pad = AbbrLP(NReg(Lev(Case,1)));
Agar Find("irdwtp",pad)=0 bo'lsa

EndIf;
ElseIf TypeValue(Case)=Type("Raqam") Keyin
Agar (holat<1) или (Падеж>6) Keyin
Hisobot("Noto'g'ri ish ""to'liq ism"ga o'tkazildi!"); To'liq ismni qaytarish;
EndIf;
case = case-1;
EndIf;

To'liq ismi=AblP(NReg(to'liq ismi)); // bu qulayroq

// shaxsiy kompozitsion analizator
Familiya = "";
d=1 uchun StrLength(nom) sikli bo'yicha
chars=Oʻrtacha(toʻliq ism, th, 1);

Familiya=Familiya+belgi;
EndCycle;
s=d+1; // bo'shliqni kesib o'tdi
Ism = "";

chars=Oʻrtacha(toʻliq ism, th, 1);
If chars=" " Keyin EndIfni bekor qiling;
Ism=Ism+belgi;
EndCycle;
s=d+1; // ikkinchi bo'shliqni kesib o'ting
Otasining ismi="";
y=s uchun StrLength (to'liq ism) sikl bo'yicha
chars=Oʻrtacha(toʻliq ism, th, 1);
If chars=" " Keyin EndIfni bekor qiling;
O'rta ism = O'rta ism + belgi;
EndCycle;

// endi bizda Familiya, Ism va Otaning ismi alohida-alohida.
// haqiqiy tarkib va ​​vaziyatni tahlil qilish bloki boshlanadi

// agar o'zi nominativ bo'lsa, qaytaring. Agar ReturnOnlyInitials o'rnatilgan bo'lsa, bosh harflarga aylantiring
Agar (Left(Case,1)="Va") yoki (Case=1) Keyin
Faqat bosh harflar bo'lmasa yoki Top (Ism, ".") bo'lsa
To'liq ismni qaytarish; // yoki allaqachon o'zgartirilgan satr yoki o'zgartirilishi shart emas
EndIf;
NewName = TReg(Familiya) + " " + Vreg(Lev(Ism,1)) + pSeparator + Vreg(Lev(O'rta ism,1)) + pSeparator;
Qaytish SokrLP (Yangi to'liq ism); // agar ajratuvchi bo'sh joy bo'lsa. Oxirgi kesish
EndIf;

// jinsni tahlil qilish M/F
To'g'ri bo'lsa(Otasining ismi,1)="a" Keyin Jins="F" Else Jins="M" EndIf;

// so'z oxirlarini saqlaydigan jadval tuzilmasini yarating
joriy=Yangi qiymatlar jadvali;
StringType=NewTypeDescription("String", NewStringQualifiers(3));
NumberType=NewTypeDescription("Raqam",NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",StringType); // eski tugaydigan 2 ta belgi
// yangi so'z oxirlarini saqlaydigan ustunlar
joriy.Columns.Add("p"); // ota-ona
joriy.Columns.Add("d"); // dating
joriy.Columns.Add("in"); // ayblovchi
joriy.Columns.Add("t"); // ijodiy
joriy.Columns.Add("p"); // predlog
// so'z oxiridan qancha harfni kesib tashlashni belgilash uchun,
joriy.Columns.Qo'shish("NumberSlice",NumberType); // kesilgan harflar soni

Unlilar="aeeouiyyayu"; // qator sifatida unlilar ro'yxati

// ======== familiyani qayta ishlang =========
// jadvalni familiya ma'lumotlari bilan to'ldiring

Agar jins = "M" bo'lsa
string=current.Add(); // Ivanov
string.StarOk="*s";

rows.CountSlice=0;

Qator=current.Add(); // krasinskiy
string.StarOk="*th";
string.r="voy"; string.d="mu"; line.in="th"; string.t="im"; string.p="ohm";
rows.CountSlice=2;

Qator=current.Add(); // qudratli
line.Starok="sch";
string.r="uning"; string.d="Unga"; string.in="uning"; string.t="im"; string.p="eat";
rows.CountSlice=2;

Qator=current.Add(); // oq
string.StarOk="th";
string.r="voy"; string.d="mu"; line.in="th"; string.t="th"; string.p="ohm";
rows.CountSlice=2;

Qator=current.Add(); // rangpar
string.StarOk="*th";

rows.CountSlice=1;

Qator=current.Add(); // rabinovich
string.StarOk="*h";

rows.CountSlice=0;

Qator=current.Add(); // ta'mirlash, zaliznyak
string.StarOk="*k";
string.r="ka"; string.d="ku"; line.in="ka"; string.t="com"; string.p="ke";
rows.CountSlice=2;

Qator=current.Add(); // shinkar
string.StarOk="*";
string.r="i"; string.d="u"; string.in="i"; string.t="eat"; string.p="e";
rows.CountSlice=1;

Qator=current.Add(); // perelman, oganesyan
string.StarOk="*n";

rows.CountSlice=0;

Qator=current.Add(); // qo'zichoq
string.StarOk="in";
string.r="a"; string.d="y"; line.in="a"; string.t="th"; string.p="e";
rows.CountSlice=0;

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

Qator=current.Add(); // Ivanova
string.StarOk="*a";
string.r="oops"; string.d="oops"; line.in="y"; string.t="oops"; string.p="oops";
rows.CountSlice=1;
EndIf;


Agar EmptyString (Familiya) bo'lmasa
pb=O'ng(Familiya,3); count="StarOk"; // uni qidiring
newLastName=Familiya; // hech narsa o'zgarmasa, shunday bo'lsin
stro=current.Find(pb, count);
Agar qat'iy bo'lsa<>


Aks holda
// oxirgi uchta belgi tomonidan aniq topilmadi, biz faqat oxirgisi bo'yicha ikkita belgini qidirmoqdamiz
pb=O'ng(Familiya,2);
stro=current.Find(pb, count);
Agar qat'iy bo'lsa<>Keyin aniqlanmagan
Stem=Lev(Familiya, StrLength(Familiya)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
Aks holda // agar ikkita topilmasa, biz bittasini qidiramiz
pb="*"+O'ng(pb,1);
stro=current.Find(pb, count);
Agar qat'iy bo'lsa<>
Stem=Lev(Familiya, StrLength(Familiya)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);


stro=current.Find(pb, count);
Agar qat'iy bo'lsa<>Belgilanmagan Keyin // ko'rish orqali topilgan
Stem=Lev(Familiya, StrLength(Familiya)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
EndIf;
EndIf;
EndIf;
EndIf;
Aks holda
newLastname="";
EndIf;

// ======== nomini qayta ishlash =========
// jadvalni nom uchun ma'lumotlar bilan to'ldiring
joriy.Clear();

Agar jins = "M" bo'lsa
// istisnolarni qayta ishlash
If Name="sher" Keyin Name="sher" EndIf;
If Name="paul" Keyin Name="paul" EndIf;

Qator=current.Add(); // Sergey
string.starok="*th";
string.r="i"; string.d="u"; string.in="i"; string.t="eat"; string.p="e";
row.cutoff=1;

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

Qator=current.Add(); // Nikita
string.starok="*a";

row.cutoff=1;

Qator=current.Add(); // ta'zim
string.starok="ka";

row.cutoff=1;

Qator=current.Add(); // Yeremiyo
string.starok="ia";

row.cutoff=1;

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

row.cutoff=1;

Qator=current.Add(); // igor
string.starok="*";
string.r="i"; string.d="u"; string.in="i"; string.t="eat"; string.p="e";
row.cutoff=1;

ElseIf Gender="F" Keyin
// istisnolarni qayta ishlash
//If Name="olga" Keyin Name="olga" EndIf;

Qator=current.Add(); // Irina
string.starok="*a";
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;

Qator=current.Add(); // Inga, Olga
string.starok="ha";
string.r="va"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;

Qator=current.Add(); // Ester
string.starok="*";
string.r="va"; string.d="va"; line.in="b"; string.t="w"; string.p="va";
row.cutoff=1;

Qator=current.Add(); // Mariya
string.starok="ia";
string.r="va"; string.d="va"; line.in="u"; string.t="u"; string.p="va";
row.cutoff=1;

Qator=current.Add(); // sofiya
string.starok="*i";
string.r="va"; string.d="e"; line.in="u"; string.t="u"; string.p="e";
row.cutoff=1;
EndIf;

// jadval to'lgan. oxirgi 2 ta harfni hisoblang va ularni qidiring
Agar EmptyString (Ism) bo'lmasa
pb=O'ng(Ism,2); count="StarOk"; // uni qidiring
newName=Ism; // hech narsa o'zgarmasa, shunday bo'lsin
stro=current.Find(pb, count);
Agar qat'iy bo'lsa<>Undefined Keyin // darhol qat'iy topildi


Aks holda // aniq topilmadi, biz faqat oxirgisini qidiramiz
pb="*"+O'ng(pb,1);
stro=current.Find(pb, count);
Agar qat'iy bo'lsa<>Belgilanmagan Keyin // oxirgi tomonidan topilgan
Base=Lev(Ism, StrLength(Name)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
Aks holda // oxirgisi topilmadi, biz harflarni turi bo'yicha qidiramiz
pb="*"+?(Topish(Vowers,Right(pb,1))=0,"s","g");
stro=current.Find(pb, count);
Agar qat'iy bo'lsa<>Undefined=1 Keyin // turi bo'yicha topildi
Base=Lev(Ism, StrLength(Name)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
EndIf;
EndIf;
EndIf;
Aks holda
newName="";
EndIf;

// ======== Keling, otasining ismini qayta ishlaymiz, bu erda osonroq ==========
joriy.Clear();

Agar jins = "M" bo'lsa
string=current.Add();
string.r="a"; string.d="y"; line.in="a"; string.t="eat"; string.p="e";
row.cutoff=0;
ElseIf Gender="F" Keyin
string=current.Add();
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;
EndIf;
Agar EmptyString (otasining ismi) bo'lmasa
Baza \u003d Leo (otasining ismi, StrLength (otaning ismi) - joriy. Bo'laklar soni);
newPatronymic name = Baza + Qisqartirilgan LP (hozirgi [pad]);
Aks holda
yangi otasining ismi="";
EndIf;

IfOnlyInitials Keyin
newName=Lion(yangi nom,1); newPatronymic=Arslon(yangiPatronymic,1);
EndIf;

// birinchi harflarni bosh harfga qo'ying
newLastName=VReg(Lev(yangiLastName,1))+Orta(yangiLastName,2);
newName=VReg(Lev(newName,1))+O'rtacha(yangi nom,2);
newPatronymic=VReg(Lev(yangiPatronomic,1))+Orta(yangiOtasining ismi,2);

// va endi hamma narsa birga
If InitialsOnly then // agar bosh harflar formati belgilangan bo'lsa
newName=newLastName+" "+newName+pSeparator+yangiPatronymic+pSeparator;
Aks holda
newName=newSurname+" "+newName+" "+yangiOtasining ismi;
EndIf;

Agar Find(to'liq ism, ".") bo'lsa // Agar kirish parametri Familiya bosh harflari bilan bo'lsa. Bosh harflarga tegmang
newName = newFamiliya + " " + TReg(Ism) + Treg(Otasining ismi);
EndIf;

Qaytish SokrLP (yangi to'liq ism);
EndFunctions

1C 8.3 da to'liq ismning bekor qilinishi

1C dasturiy ta'minot majmuasidan foydalanish jarayonida foydalanuvchilar ko'pincha 1C 8.3 to'liq nomini rad etish bilan bog'liq savollarga ega. 1C, familiyani rad etish funktsiyasi "NameDecl.dll" deb ataladigan maxsus komponent tomonidan amalga oshiriladi. Komponentdan foydalanishni boshlash uchun siz uni ma'lumot va texnik yordam diskidan asosiy axlat platformasi joylashgan papkaga nusxalashingiz, shuningdek, uni operatsion tizimda ro'yxatdan o'tkazishingiz kerak. Nusxa olish "resvr32 NameDecl.dll" buyrug'i orqali amalga oshiriladi. Buning uchun rasmda ko'rsatilganidek, "Ishga tushirish" ni oching va "Ishga tushirish" direktivasini chaqiring.

Oynani oching va kerakli kutubxonaga yo'lni ko'rsatib, "resvr32.exe" yozing. Kutubxona "Browse" tugmasi orqali tanlanadi. Keyinchalik, siz "OK" ni tanlashingiz va kutubxonani ro'yxatdan o'tkazishni tasdiqlashingiz kerak.

To'liq ismning 1 ga tushishi 2 parametr bo'yicha amalga oshiriladi:

  • Koson, turi - raqam. Bu talab qilinadigan parametr.
  • To'liq ism, turi - string. Bu ham zarur parametrdir.

Rus tilida oltita holat bo'lganligi sababli, ishga quyidagi jadvalga muvofiq 1 dan 6 gacha raqam beriladi:

Shuningdek, FIO 1C ning declension komponentining uchinchi, ixtiyoriy parametri ajralib turadi - jins (turi - raqam). Bu erda 3 ta variant mavjud: 0 - avto, 1 - er, 2 - xotinlar.

Xizmat 1C 8 declension to'liq nomi

1C 8.3 versiyasidagi dasturlarda konfigurator orqali ishlaydigan 1C 8.3 holatlarida to'liq ismni o'chirish uchun maxsus xizmat mavjud. Shuning uchun, to'liq ismni rad etish uchun konfigurator oynasini oching va quyida ko'rsatilganidek, "Rad etish" funksiyasidan foydalaning:

Biz ma'lumotlarni katalogdan kiritamiz, ular nominativ holatda ko'rsatiladi. Hujjatlar chop etiladi va kerakli declensionda allaqachon shakllarda ko'rsatiladi. Misol tariqasida, bu shartnoma shaklida ko'rinadi:



Misol tariqasida, quyida ishga yollash to'g'risidagi buyruq berilgan, bu erda mutaxassisning kartalarida uning familiyasi, ismi va otasining ismi I.P.da ro'yxatga olingan, ammo bosma shaklda ular R.P.da ko'rsatilgan.

1C avtomatik ravishda qonunning joriy talablarini hisobga olgan holda bosma shakllar va hujjatlarni rasmiylashtirishga imkon beradi. Ishlar, jinslar va raqamlarni qisqartirish zarurati biznes hujjatlarini boshqarish standartlari bilan belgilanadi, unga ko'ra har qanday hujjat estetik, malakali tarzda tuzilgan va kompaniyaning maqomiga mos keladi.

Avtomatik rad etish funktsiyasidan foydalanish hujjatlarni shakllantirishda xatolar ehtimolini kamaytiradi, bu esa kelajakda salbiy oqibatlardan himoya qiladi. Bu, ayniqsa, bir vaqtning o'zida ko'p miqdordagi hujjatlar yaratilgan holatlar uchun to'g'ri keladi. Avtomatik rad etish hujjatlar bilan ishlashni soddalashtiradi va vaqtni tejaydi, bu esa ishlashga ijobiy ta'sir qiladi.

Biz familiyani, ota ismini holatlar, raqamlar va jinslar bo'yicha olib tashlashning 2 usulini tahlil qildik - 1C 8.3 to'liq ismning maxsus tushirish komponenti va konfigurator xizmati orqali. Ikkalasini ham sinab ko'ring va qaysi biri sizga mos kelishini hal qiling.

Ulashish