تعمیر طرح مبلمان

نام انحرافی. انحطاط نام سرویس "نزول بر اساس موارد"

این فایل شامل رویه هایی برای 7.7 و 8.x است. یک رشته با فرمت نام خانوادگی نام نام خانوادگی به رویه ارسال می شود.

UPD 11/26/10: با تشکر - نسخه جدید عملکرد. من تستش نکردم! سوالات در مورد عملکرد این نسخه باید به او ارسال شود؛ به دلایلی او نمی خواهد آنها را پست کند :)

تابع CaseFull Name (مقدار نام کامل، Case = 1، Initials Only = False، Separator Value = ".")
If TypeValue (نام کامل)<>سپس ("String") را تایپ کنید
Report("خط نامعتبر ارسال شده به ""مورد نام کامل!"""); بازگشت نام کامل؛
endIf;

// حذف چند فاصله
در حالی که 1=1 چرخه
نام کامل=ScrLP(StrReplace(نام کامل، """));
If Find(name full," ")=0 سپس EndIf را لغو کنید.
چرخه پایان

اگر TypeValue(Case)=Type("String") سپس
pad=ScrLP(NReg(Lev(Case,1)));
If Find("irdvtp",pad)=0 سپس

endIf;
در غیر این صورتIf TypeValue(Case)=Type("Number") سپس
اگر (مورد<1) или (Падеж>6) سپس
گزارش ("مورد نادرست به ""پرونده با نام کامل"" منتقل شد!"); بازگشت نام کامل؛
endIf;
pad=case-1;
endIf;

نام کامل=ScrLP(NReg(نام کامل)); // راحت تر است

// تجزیه و تحلیل ترکیب شما
نام خانوادگی = "";
برای th=1 با چرخه StrLength (نام کامل).
symbols=Avg(نام کامل، th، 1);

نام خانوادگی=نام خانوادگی+شخصیت;
چرخه پایان
ы=й+1; // فاصله گذشت
نام = "";

symbols=Avg(نام کامل، th، 1);
If symbols=" " Then Abort EndIf;
نام=نام+شخصیت;
چرخه پایان
ы=й+1; // از فضای دوم عبور کرد
نام میانی="";
برای y=y با چرخه StrLength (نام کامل).
symbols=Avg(نام کامل، th، 1);
If symbols=" " Then Abort EndIf;
نام وسط=نام وسط+نماد;
چرخه پایان

// اکنون نام خانوادگی، نام و نام خانوادگی جداگانه داریم.
// بلوک واقعی برای تجزیه و تحلیل محتوا و موارد شروع می شود

// بازگشت اگر خودش اسمی باشد. اگر بازگشت OnlyInitials تنظیم شده است، به حروف اول تبدیل کنید
اگر (Lev(Case,1)="I") یا (Case=1) سپس
اگر NOT OnlyInitials یا Find (نام کامل، ".") سپس
بازگشت نام کامل؛ // یا رشته قبلاً تبدیل شده است یا نیازی به تبدیل نیست
endIf;
NewFull Name = TRreg(نام خانوادگی) + " " + Vreg(Lev(First Name, 1)) + pSeparator + Vreg(Lev(نام وسط، 1)) + pSeparator;
Return مخفف (New Full Name); // در صورتی که جداکننده یک فاصله باشد. ما آخری را قطع می کنیم
endIf;

// جنسیت M/F را تجزیه و تحلیل کنید
If Right(Middle name,1)="a" then Gender="F" در غیر اینصورت جنسیت="M" EndIf;

// یک ساختار جدول ایجاد کنید که انتهای کلمات را ذخیره می کند
current=NewValueTable;
RowType=NewTypeDescription("String", NewStringQualifiers(3));
NumberType=NewTypeDescription("Number", NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",RowType); // پایان قدیمی 2 کاراکتر
// ستون هایی که انتهای کلمات جدید را ذخیره می کنند
current.Columns.Add("p"); // والدین
current.Columns.Add("d"); // داتیو
current.Columns.Add("to"); // اتهامی
current.Columns.Add("t"); // وسیله
current.Columns.Add("p"); // حرف اضافه
// برای نشان دادن چند حرف از انتهای کلمه برای قطع کردن،
current.Columns.Add("NumberSlice",NumberType); // تعداد حروفی که باید قطع شوند

صدادار = "aeeouiiiyyay"; // لیستی از مصوت ها به عنوان یک رشته

// ======== پردازش نام خانوادگی ==========
// جدول را با داده های نام خانوادگی پر کنید

اگر جنسیت = "M" سپس
string=current.Add(); // ایوانف
line.StarOk="*s";

lines.NumberSlice=0;

String=current.Add(); // کرازینسکی
line.StarOk="*th";
string.r="go"; string.d="om"; string.v="go"; string.t="im"; string.p="om";
lines.NumberSlice=2;

String=current.Add(); // خداوند متعال
line.StarOk="براق";
string.r = "او"; string.d="him"; string.v="his"; string.t="im"; string.p=" خوردن";
lines.NumberSlice=2;

String=current.Add(); // سفید
line.StarOk="th";
string.r="go"; string.d="om"; string.v="go"; string.t="th"; string.p="om";
lines.NumberSlice=2;

String=current.Add(); //پالی
line.StarOk="*th";

lines.NumberSlice=1;

String=current.Add(); // رابینوویچ
line.StarOk="*h";

lines.NumberSlice=0;

String=current.Add(); // ثابت کردن، صاف کردن
line.StarOk="*k";
string.p="ka"; string.d="ku"; string.v="ka"; string.t="com"; string.p="ke";
lines.NumberSlice=2;

String=current.Add(); // شینکار
line.StarOk="*ь";
string.p="i"; line.d="yu"; string.v="i"; string.t="em"; string.p="e";
lines.NumberSlice=1;

String=current.Add(); // پرلمن، اوگانسیان
line.StarOk="*n";

lines.NumberSlice=0;

String=current.Add(); // بارانکین
line.StarOk="in";
string.p="a"; string.d="y"; string.v="a"; string.t="th"; string.p="e";
lines.NumberSlice=0;

در غیر این صورتIf Gender="F" سپس
string=current.Add(); // اسکلودوفسکایا
line.StarOk="aya";
string.p="oh"; string.d="oh"; line.v="y"; string.t="oh"; string.p="oh";
lines.NumberSlice=2;

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


اگر نه EmptyString (LastName) سپس
pb=Right(LastName,3); count="StarOk"; // آن را جستجو کنید
newLastName=نام خانوادگی; // اگر چیزی تغییر نکند، همینطور خواهد بود
str=current.Find(pb,count);
اگر<>


در غیر این صورت
// اکیداً توسط سه کاراکتر آخر یافت نشد، فقط با دو کاراکتر آخر جستجو کنید
pb=Right(LastName,2);
str=current.Find(pb,count);
اگر<>تعریف نشده سپس
Basis=Lev(LastName,StrLength(LastName)-string.QuantitySlice);
newLastName=Base+AbbrLP(string[pad]);
در غیر این صورت // اگر دو مورد را پیدا نکردیم، هر بار به دنبال یکی می گردیم
pb="*"+Right(pb,1);
str=current.Find(pb,count);
اگر<>
Basis=Lev(LastName,StrLength(LastName)-string.QuantitySlice);
newLastName=Base+AbbrLP(string[pad]);


str=current.Find(pb,count);
اگر<>تعریف نشده سپس // بر اساس نوع یافت شد
Basis=Lev(LastName,StrLength(LastName)-string.QuantitySlice);
newLastName=Base+AbbrLP(string[pad]);
endIf;
endIf;
endIf;
endIf;
در غیر این صورت
newLastName="";
endIf;

// ======== پردازش نام ==========
// جدول را با داده های مربوط به نام پر کنید
current.Clear();

اگر جنسیت = "M" سپس
// کنترل استثناها
If Name="lion" then Name="lion" EndIf;
If Name="paul" then Name="paul" EndIf;

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

String=current.Add(); // ایوان + شیر + پل
string.starok="*s";
string.p="a"; string.d="y"; string.v="a"; string.t="om"; string.p="e";
line.columncut=0;

String=current.Add(); // نیکیتا
string.starok="*a";

line.barcut=1;

String=current.Add(); // پیاز
string.starok="ka";

line.barcut=1;

String=current.Add(); // ارمیا
string.starok="iya";

line.barcut=1;

String=current.Add(); // ایلیا
string.starok="*i";

line.barcut=1;

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

در غیر این صورتIf Gender="F" سپس
// کنترل استثناها
//If Name="olga" then Name="olga" EndIf;

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

String=current.Add(); // اینگا، اولگا
string.starok="ga";
string.p="and"; line.d="e"; string.v="u"; string.t="oh"; string.p="e";
line.barcut=1;

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

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

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

// جدول پر است. 2 حرف آخر را بشمار و به دنبال آنها بگرد
اگر نه EmptyString (Name) سپس
pb=Right(Name,2); count="StarOk"; // آن را جستجو کنید
newName=نام; // اگر چیزی تغییر نکند، همینطور خواهد بود
str=current.Find(pb,count);
اگر<>تعریف نشده سپس // بلافاصله سخت یافت شد


در غیر این صورت // به شدت یافت نشد، فقط بر اساس آخرین مورد جستجو کنید
pb="*"+Right(pb,1);
str=current.Find(pb,count);
اگر<>تعریف نشده سپس // با استفاده از آخرین مورد پیدا شد
Base=Left(Name,StrLength(Name)-string.QuantitySlice);
newName=Base+ScrLP(string[pad]);
در غیر این صورت // آخرین مورد را پیدا نکردیم، دنبال نوع نامه می گردیم
pb="*"+?(Find(Vowels,Right(pb,1))=0,"s","g");
str=current.Find(pb,count);
اگر<>Undefined=1 سپس // بر اساس نوع پیدا شد
Base=Left(Name,StrLength(Name)-string.QuantitySlice);
newName=Base+ScrLP(string[pad]);
endIf;
endIf;
endIf;
در غیر این صورت
newName="";
endIf;

// ======== بیایید نام میانی را پردازش کنیم، اینجا راحت تر است ===========
current.Clear();

اگر جنسیت = "M" سپس
string=current.Add();
string.p="a"; string.d="y"; string.v="a"; string.t="em"; string.p="e";
line.columncut=0;
در غیر این صورتIf Gender="F" سپس
string=current.Add();
string.p="s"; line.d="e"; string.v="u"; string.t="oh"; string.p="e";
line.barcut=1;
endIf;
اگر نه EmptyString (نام میانی) سپس
Base=Lev(نام میانی،StrLength(نام میانی)-current.QuantitySlice);
نام پدر جدید = پایه + AbbrLP(current[pad]);
در غیر این صورت
new patronymic="";
endIf;

If Only Initals then
newName=Lev(newName,1); نام پدر جدید = لئو (پترونوم جدید، 1);
endIf;

// حروف اول را روی حروف بزرگ تنظیم کنید
newLastName=ВReg(Lev(newLastName,1))+Avd(newLastName,2);
newName=ВReg(Lev(newName,1))+Average(newName,2);
نام پدر جدید = VReg(Lev(پترونوم جدید، 1))+Avg(پترونوم جدید، 2);

// و اکنون همه چیز با هم است
If Initals Only سپس // اگر فرمت حروف اول مشخص شده باشد
نام کامل جدید = نام خانوادگی جدید + " " + نام جدید + n جداکننده + نام خانوادگی جدید + n جداکننده;
در غیر این صورت
نام کامل جدید = نام خانوادگی جدید + " " + نام جدید + " " + نام خانوادگی جدید;
endIf;

اگر Find(Full Name, ".") سپس // در صورتی که پارامتر ورودی Last Name با حروف اول باشد. به حروف اول دست نمی زنیم
نام کامل جدید = نام خانوادگی جدید + " " + Treg (نام) + Treg (نام وسط);
endIf;

Return مخفف (نام کامل جدید)؛
EndFunction

انحطاط نام کامل در 1C 8.3

در طول عملیات مجتمع نرم افزاری 1C، کاربران اغلب در مورد انحراف نام کامل 1C 8.3 سؤالاتی دارند. تابع 1C انحراف نام کامل توسط یک مؤلفه خاص انجام می شود که "NameDecl.dll" نامیده می شود. برای شروع استفاده از کامپوننت، باید آن را از دیسک اطلاعات و پشتیبانی فنی در پوشه ای که پلتفرم اصلی bin قرار دارد کپی کنید و همچنین آن را در سیستم عامل ثبت کنید. کپی کردن از طریق دستور "resvr32 NameDecl.dll" انجام می شود. برای انجام این کار، "Start" را باز کنید و دستورالعمل "Run" را همانطور که در شکل نشان داده شده است فراخوانی کنید.

پنجره ای را باز کنید و "resvr32.exe" را وارد کنید، که مسیر کتابخانه مورد نیاز را نشان می دهد. کتابخانه با استفاده از دکمه "مرور" انتخاب می شود. بعد، باید "OK" را انتخاب کنید و ثبت کتابخانه را تأیید کنید.

انحراف 1c نام کامل با توجه به 2 پارامتر انجام می شود:

  • مورد، نوع - شماره. این یک پارامتر مورد نیاز است.
  • نام کامل، نوع - رشته. این نیز یک پارامتر مورد نیاز است.

از آنجایی که در زبان روسی شش مورد وجود دارد، طبق جدول زیر به یک مورد از 1 تا 6 اختصاص داده می شود:

سومین پارامتر اختیاری نیز برای مولفه انحراف نام کامل 1C - جنسیت (نوع - شماره) شناسایی شده است. در اینجا 3 گزینه وجود دارد: 0 - خودکار، 1 - مرد، 2 - زن.

نام کامل سرویس 1C 8 نزول

برنامه های نسخه 1C 8.3 دارای یک سرویس ویژه برای انحراف نام کامل توسط موارد 1C 8.3 هستند که از طریق پیکربندی کار می کند. بنابراین، برای رد کردن نام کامل خود، پنجره پیکربندی را باز کنید و از تابع "عدم" مانند شکل زیر استفاده کنید:

ما جزئیات را از دایرکتوری وارد می کنیم، جایی که آنها در حالت اسمی نمایش داده می شوند. اسناد چاپ شده و در فرم هایی با نزول دلخواه نمایش داده می شوند. به عنوان مثال، این چیزی است که در فرم قرارداد به نظر می رسد:



به عنوان مثال، در زیر یک حکم استخدامی آمده است که در کارت های متخصص نام خانوادگی، نام و نام خانوادگی او به صورت I.P نوشته شده است، اما به صورت چاپی به صورت R.P نمایش داده می شود.

1C به طور خودکار ایجاد فرم های چاپی و اسناد را با در نظر گرفتن الزامات قانونی فعلی امکان پذیر می کند. نیاز به انحراف بر اساس موارد، جنسیت و اعداد توسط استانداردهای مدیریت اسناد تجاری دیکته می شود که بر اساس آن هر سند از نظر زیبایی شناختی، شایسته و مطابق با وضعیت شرکت تنظیم می شود.

با استفاده از تابع autodecline، احتمال خطا در هنگام تولید اسناد را به حداقل می رساند، که از پیامدهای منفی در آینده محافظت می کند. این امر به ویژه در مورد مواردی که تعداد زیادی اسناد به طور همزمان تولید می شوند صادق است. Autodeclension کار با مستندات را ساده می کند و باعث صرفه جویی در زمان می شود که تأثیر مثبتی بر بهره وری دارد.

ما 2 روش انحراف نام خانوادگی، نام نام خانوادگی را بر اساس موارد، اعداد و جنسیت - با استفاده از یک مؤلفه ویژه برای انحراف نام کامل 1C 8.3 و از طریق سرویس پیکربندی تجزیه و تحلیل کرده ایم. هر دو را امتحان کنید و ببینید کدام یک برای شما بهتر عمل می کند.

هنگام کار در 1C ، کاربر با مشکل انحراف نام خانوادگی یا موقعیت یک کارمند در اشکال چاپی اسناد روبرو می شود ، یعنی با وضعیتی که لازم است نام خانوادگی به صورت موردی انحراف یابد.

برای انحراف نام کامل در برنامه های 1C، یک جزء خارجی ارائه می شود - NameDecl.dll، که حاوی تابع انحراف است. می توانید آن را از دیسک ITS بردارید و با پلت فرم 1C نصب شده - bin آن را در پوشه کپی کنید، آن را در سیستم عامل ثبت کنید. این روش با استفاده از دستور resvr32 NameDecl.dll (تحت حساب مدیر) انجام می شود. برای انجام این کار، باید با استفاده از جستجو یا کلید ترکیبی Windows + R، دستور "Run" را از طریق دکمه "شروع" فراخوانی کنید.

شکل 1 پنجره جستجو. پیدا کردن دستور Run

در پنجره ای که ظاهر می شود، دستور resvr32.exe را وارد کرده و با استفاده از دکمه "Browse" مسیر کتابخانه ای که باید متصل شود را مشخص کنید.


شکل 2 پنجره فرمان "Run".

پس از کلیک بر روی Ok، پیامی مبنی بر اینکه کتابخانه با موفقیت ثبت شده است ظاهر می شود.


Fig.3 پنجره پیام

شرح روش انحراف در 1C

کاهش (نام کامل، مورد، جنسیت) با توجه به پارامترهای:

  • نام کامل (الزامی)، نوع – رشته
  • مورد (واجب)، نوع – شماره

موردی که نام کامل باید در آن قرار گیرد با عدد 1 تا 6 مشخص می شود.

جدول موارد: سوالات، حروف اضافه و معانی آنها در کد برنامه

این اتفاق می افتد که وقتی برنامه نیاز به تعیین جنسیت نام خانوادگی دارد، به عنوان مثال، سیگیدا، چپکو، سوشکو، اوگانزیان و غیره، وضعیت مبهم ایجاد می شود.

در این مورد، از یک پارامتر اضافی استفاده کنید:

  • جنسیت (اختیاری)، نوع - شماره

نشان می دهد که آیا نام خانوادگی را رد کنید یا نه. در موارد دیگر، این پارامتر حذف می شود یا از مقدار 0 ("خودکار") استفاده می شود، زیرا علامت جنسیت نادرست ممکن است بر انحراف صحیح تأثیر بگذارد. در اینجا مقادیر ممکن عبارتند از: 0 - خودکار، 1 - مرد، 2 - زن.

سرویس "مصرف موارد"

برنامه های 1C 8.3 قبلاً خدماتی را برای کاهش داده های کارمندان یا پیمانکاران مطابق با موارد استفاده شده در سند شامل می شود.



قطعه 1

#ProgramInterface Area // نام کامل را رد می کند // فقط روی سیستم عامل ویندوز کار می کند. // // پارامترها: // نام کامل - خط - خط حاوی نام کامل برای انحراف. // Case - Number - موردی که در آن لازم است نمایش شیء رد شود. // 1 - اسمی. // 2 - زائد. // 3 - معین. // 4 - اتهامی. // 5 - خلاق. // 6 - مضارع. . // // مقدار بازگشتی: // رشته - نتیجه انحطاط نام کامل در حروف بزرگ. // تابع DeclineFull Name(Full Name, Case, Object = Undetermined, Gender = Undefined) Export // نمایش یک شی را رد می کند. تابع DeclensionRepresentations(Representation، Case، Object = Undefined) Export // اعمالی را بر روی فرم لازم برای اتصال زیرسیستم Declension انجام می دهد.

Fig.4 پنجره پیکربندی



قطعه 2

// نمایش شی را رد می کند. تابع DeclineRepresentation(Representation, Case, Object = Undefined) Export Return Decline(Representation, Case, Object); پایان تابع // اقدامات لازم برای اتصال زیرسیستم Declension را با فرم انجام می دهد. , View, Object, ThisFullName = False , Gender = Undefined) Export // علامت در دسترس بودن سرویس انحراف را تنظیم می کند رویه SetAvailability of Declension Service (Availability) Export SetPrivilegedMode (True); CurrentParameters = New Match(SessionParameters.ClientParametersOnServer); CurrentParameters.Insert("DeclinationServiceAvailable", Availability); SessionParameters.ClientParametersOnServer = New FixedCompliance(CurrentParameters); SetPrivilegedMode (نادرست)؛ پایان رویه

شکل 5 با استفاده از تابع "شیب".

با استفاده از جزئیات در سند که از دایرکتوری که در آن به صورت اسمی ارائه شده اند انتخاب شده اند، در فرم چاپی سند با نزول مورد نیاز نمایش داده می شوند.

بیایید با استفاده از مثال قرارداد در 1C به تابع انحراف نگاه کنیم: حسابداری 3.0. (1C: Enterprise 8.3). این باعث کاهش نام و موقعیت می شود.



شکل 6 پنجره فرم قرارداد. تنظیم نام خانوادگی و انحراف سمت

برنامه به طور خودکار گزینه صحیح را در فرم چاپ شده قرار می دهد.



شکل 7 پنجره برنامه - "انحراف بر حسب مورد"

نمونه ای از رد مورد را می توان در "حکم استخدام" مشاهده کرد. در کارت کارمند، نام کامل او در مورد اسمی و به صورت چاپی - در مورد جنسی مشخص شده است.



شکل 8 نمونه ای از انحراف نام کامل در فرم چاپی "سفارش استخدام"

برنامه 1C، با در نظر گرفتن الزامات قانون و استانداردها، به شما امکان می دهد از روش تایید شده برای تهیه اسناد و تولید فرم های چاپی پیروی کنید.

انحراف موارد نیز به دلیل استانداردهای تجاری است که تصریح می کند که هر سندی باید نه تنها با صلاحیت، بلکه از نظر زیبایی شناختی نیز که نشان دهنده وضعیت سازمان است تنظیم شود.

علاوه بر این، استفاده از توابع در برنامه مانند autodeclension به طور قابل توجهی احتمال خطا در تهیه سند را کاهش می دهد.