زنگ

کسانی هستند که قبل از شما این خبر را می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه دوست دارید زنگ را بخوانید
بدون هرزنامه

در مقاله قبلی، یک ویژگی مشترک به همه فهرست‌های پیکربندی خود اضافه کردیم تا بدانیم چه کسی این شی دایرکتوری را ایجاد کرده است. اکنون یک اشتراک رویداد ایجاد می کنیم و مشخص می کنیم که چه اطلاعاتی را در این ویژگی پر کنیم.

در این رتبه، هر بار قبل از ضبط یک شی، با نویسنده شی مکاتبه می کنیم، البته توصیه می شود که مشخص شود و زمانی که این اتفاق افتاد، تاریخ ضبط را نیز به نویسنده اضافه می کنیم.

AutoSaveAuthorBeforeWrite (منبع، رد) رویه صادرات // در سمپلر قرار دهید.منبع. AuthorObject = نام کاربری() + " ; " + string (currentdate() ); EndProcedure

فوق العاده است. حالا بیایید به این فکر کنیم که کجا می توانید از جزئیات عمومی استفاده کنید؟

در ابتدا، با کمک جزئیات کلی، می توانید ویژگی "Comment"، ویژگی "author" و سایر ویژگی های مورد نیاز خود را به تمام اسناد موجود در پیکربندی اضافه کنید.

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

پس از آن، فقط باید پارامترهای جلسه را در ماژول جلسه تنظیم کنیم:

بیایید مثالی از نحوه ظاهر دایرکتوری طرف مقابل بدون استفاده از "تفکیک داده" و همراه با آن بیاوریم:

بدون جدایی

شکاف

لطفاً توجه داشته باشید که ویژگی "مسئول" در طرف مقابل اول یافت نشد، زیرا نویسنده این ویژگی شخص دیگری بود.

یک مثال کلاسیک از تفکیک حسابداری توسط سازمان است که فقط اسنادی را به کاربران نشان می دهد که مربوط به سازمان مربوطه است.

ما از مکانیزم Session Parameters استفاده کرده ایم، اجازه دهید به طور خلاصه بفهمیم که چیست. در اصل، پارامترهای جلسه، متغیرهای سراسری هستند که هنگام راه اندازی سیستم تنظیم می شوند. معمولاً این اتفاق در "Session Module" می‌افتد، توجه داشته باشید که پارامترهای جلسه صرفاً به صورت برنامه‌نویسی ایجاد می‌شوند.

هنگامی که "گزینه های جلسه" را تنظیم کردیم، می توانیم به آن مراجعه کنیم پارامتر داده شدهاز هر ماژول سیستم با یک ساده

بر این اساس، برای تغییر پارامترهای جلسه، کاربر باید از برنامه خارج شده و دوباره وارد برنامه شود.

زمانی که مکانیسم های محدود کردن دسترسی کاربر در 1C و به طور خاص را مورد بحث قرار دادیم.

این به شما امکان می دهد تا به کاربر اجازه دهید نه با همه اسناد، بلکه فقط با اسنادی که در آنها یک سازمان یا انبار خاص مشخص شده است کار کند. انتخاب ها به صورت پویا انجام می شوند، بنابراین بار خاصی را بر پایگاه داده تحمیل می کنند.

ویژگی مشخصه جداکننده مشترک - جداسازی کاربران 1C - به شما امکان می دهد بسته به استفاده از جداکننده ها، لیست کاربران را در دسترس قرار دهید.

اگر جداکننده برای کاربر فعال باشد، در لیست کاربران در حالت 1C Enterprise قابل مشاهده خواهد بود - در غیر این صورت قابل مشاهده نیست.

به این ترتیب می توانید لیست های مختلف کاربران را برای قسمت های مختلف پایگاه داده سازماندهی کنید.

ویژگی جداکننده مشخصه مشترک - جداسازی احراز هویت 1C - به شما امکان می دهد کاربرانی با نام کاربری مشابه برای بخش های مختلف پایگاه داده ایجاد کنید.

تقسیم مشروط 1C

جداسازی شرطی 1C به شما امکان می دهد جداکننده را بر اساس داده های پایگاه داده فعال و غیرفعال کنید. بنابراین، می توان زنجیره ای از جداکننده ها را ایجاد کرد که به یکدیگر وابسته هستند و در یک مورد به صورت پویا عمل می کنند.

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

می توان از یک ثابت با نوع بولی یا یک ویژگی مرجع با نوع بولی استفاده کرد.

مهم - شما باید استفاده از این ثابت / این کتاب مرجع (انتخاب نکنید) را به عنوان بخشی از جداکننده ها غیرفعال کنید، فقط در این صورت می توان آن را انتخاب کرد.

1. مقدمه.

نیاز به سازماندهی حسابداری برای دو سازمان در یک IS وجود داشت. وضعیت منحصر به فرد نیست، اما این اتفاق افتاد که UPP 250 گیگابایتی بسیار غیرمعمول ما به کندی کار می کرد، بنابراین به جای RLS تصمیم گرفتیم جداسازی داده ها را امتحان کنیم. آنچه که در آن است، برای مثال، یا. به طور خلاصه، اگر RLS شرایط را تکمیل کند پرس و جوهای SQL، سپس جداکننده داده یک ستون اضافی در جداول در سطح DBMS است که به دلیل آن مکانیسم جداسازی باید سریعتر از RLS کار کند.

بنابراین، در پایگاه داده ای که سوابق برای LLC شماره 1 نگهداری می شد، لازم است اطلاعات را از پایگاه داده جداگانه LLC شماره 2 منتقل و سازماندهی کنید. کار مشترک. درست مثل تصویر:

فانی های صرف فقط با LLC خود کار می کنند و حسابدار ارشد گاهی اوقات به داده های دو شخص حقوقی نگاه می کند. در حالت دسترسی به هر دو LLC، شما فقط می توانید داده ها را بخوانید، بنابراین حسابدار ارشد باید بتواند به طور تعاملی بین حالت های "خواندن همه" / "نوشتن فقط برای یک سازمان" جابجا شود و LLC را انتخاب کند (یعنی مقدار ویژگی مشترک) برای انجام، به عنوان مثال، محاسبه هزینه.

2. اجرا

پلتفرم 8.2.19.90، بدون حالت سازگاری. DBMS - MSSQL Server 2008 R2 Standard.

ما یک ویژگی مشترک سازمان جداکننده از نوع "تعداد" ایجاد کردیم، با پیشنهاد ایجاد پارامترهای جلسه موافقت کردیم، ترکیب ویژگی را پر کردیم (شامل چندین فهرست، همه اسناد، انباشت، حسابداری و ثبت محاسبات). جداسازی داده ها - "به طور مستقل و مشترک". مقدار پارامتر جلسه از تنظیم شده است تنظیمات پیش فرضکاربر در روش SetSessionParameters در ماژول جلسه:

سازمان = UserManagement.GetDefaultValue(glCurrentUser,"MainOrganization");
SessionParameters.OrgDelimiterValue = Organization.DelimiterValue;

در رابط حسابدار ارشد، آنها فرمی با قابلیت جابجایی بین سازمان ها و فعال / غیرفعال کردن حالت جداسازی ایجاد کردند:

با غیرفعال شدن تقسیم، وقتی SessionParameters.OrganizationSeparatorUsage = False، پلتفرم از نوشتن اسناد خودداری می کند و خطاهایی مانند "خطای SDBL: عبارت مورد انتظار (pos=12)" را حذف می کند، بنابراین نمی توانید به کاربر اجازه دهید اسناد را در این گزینه بنویسد. برای اطمینان، اشتراک‌هایی در رویداد «قبل از ضبط» برای اشیایی که بخشی از ویژگی مشترک هستند ایجاد کردیم:

اگر SessionParameters.OrgDelimiterUse = False سپس
#اگر مشتری پس
هشدار ("نمی توان نوشت زیرا اشتراک گذاری داده غیرفعال است!");
#EndIf
رد = درست
EndIf

برنامه عملیاتی ما به شرح زیر بود: پیکربندی گیرنده IB شماره 1 را آماده می کنیم، مقادیر مشخصه مشترک = 1 را قرار می دهیم، داده ها را از IB شماره 2 بارگذاری می کنیم، پس از بارگذاری برای همه اشیا با یک خالی (برابر با 0) مقدار جداکننده، سازمان Separator = 2 را تنظیم کنید.

پیکربندی آماده شد، این سوال مطرح شد که چگونه می توان مقدار مشخصه مشترک را برای اسناد و جابجایی آنها در دوره های بسته تنظیم کرد و به سرعت و بدون خطر پرواز اعداد موجود در تعادل؟ از طریق مدل شی 1C، نوشتن جداکننده جدا از شی غیرممکن است، بنابراین مجبور شدم شکستم توافقنامه مجوزبیرون بروید و یک پرس و جو برای MS SQL بنویسید. از آنجایی که اشیاء زیادی در ویژگی مشترک وجود دارد، و حتی جداول بیشتری در استخوان گونه برای این اشیاء وجود دارد، ما پردازشی نوشتیم که یک پرس و جو برای SQL ایجاد می کند (برای هر شی ابرداده که بخشی از جداکننده است، "به روز رسانی" نوشتیم. + DB_name + ".dbo._" + TableName + "set _" + فیلد GeneralAttribute + " = 1"؛)

مقدار تنظیم شد، برخی از داده ها از IB شماره 2 منتقل شد و آزمایش شروع شد.

نتیجه ناامید کننده بود. اول، مشکلات با ثبت حسابداری. هنگامی که جداسازی فعال است، تجزیه و تحلیل قابل مشاهده نیست:

این به دلیل این واقعیت است که ثبت حسابداری در سطح DBMS به عنوان چندین جدول ذخیره می شود و همه جداول ارزش ویژگی مشترک را نداشتند (پردازش برای مشاهده ساختار استفاده شد).


خوب، ما مقدار جداکننده را از طریق MS SQL پایین می آوریم، تجزیه و تحلیل را می بینیم. حالا گزارش ها کار نمی کند. به نظر می رسد که در جستجوهای جداول مجازی ثبت حسابداری "Turnovers" و "TurnoversDtKt" مشکلاتی وجود دارد:

(Fld27033 فقط یک ویژگی رایج در جدول ثبت حسابداری است)

جداکننده در همه جداول تنظیم شده است، در سطح DBMS قابل مشاهده است، چه چیزی می تواند یک خطا باشد، مشخص نیست. ما یک SCP خالی معمولی را مستقر می کنیم، تغییرات پیکربندی که در بالا توضیح داده شد را ایجاد می کنیم، چند سند را وارد می کنیم (در این گزینه، خود پلت فرم مقدار جداکننده را در همه جداول ثبت حسابداری قرار می دهد)، اما خطاها تکرار می شوند. بد است، اما ما ثبت های حسابداری را از شرایط عمومی حذف می کنیم، آزمایش را ادامه می دهیم.

علاوه بر این، معلوم می شود که مکانیسم جابجایی برای رجیسترهای محاسباتی از کار افتاده است. ما برنامه هایی را برای انواع محاسبات جدا نکردیم، سعی می کنیم مشکل را در جداول ثبت محاسبات و در محاسبات مجدد جستجو کنیم. بررسی می کنیم، مقدار مشخصه اصلی را می گذاریم، T&I را انجام می دهیم - فایده ای نداشت.

در طول مسیر، ما هنگام نوشتن اطلاعات به ثبت‌های مستقل از فرم فهرست، مشکل را تشخیص می‌دهیم. در این مورد، داده ها ثبت می شوند، پس از راه اندازی مجدد قابل مشاهده هستند. مشکل در پایه آزمایشی بازتولید شده است:


ثبات های اطلاعاتی را نمی توان با دستکاری SQL "تعمیر" کرد (مقدار جداکننده در همه جداول تنظیم شده است)، بنابراین آنها به سادگی از ویژگی کلی حذف شدند. پس از چندین روز آزمایش، تلاش برای بازگرداندن ظرفیت کاری جابجایی نیز ناموفق است.

در این مرحله، تصمیم می گیریم اشتراک گذاری داده را خاموش کنیم و همچنان از RLS استفاده کنیم. هنگام تنظیم تقسیم بر روی "do not use"، با خطاهای "Microsoft OLE DB Provider forSQL Server: CREATE UNIQUE INDEX پایان یافت زیرا یک کلید تکراری برای ایندکس پیدا شد..." مواجه می شویم. یعنی بازگشت به حالت قبل از جدایی چندان آسان نیست. مشکل با نمایه های جداول محاسبه مجدد، تنظیمات ذخیره کل و موارد دیگر. واقعیت این است که جداول ردیف‌های یکسانی را ذخیره می‌کنند که فقط در مقدار ویژگی مشترک متفاوت هستند. هنگام حذف یک ویژگی مشترک، ورودی های غیر منحصر به فرد ظاهر می شوند. شما باید رکوردهای غیر ضروری را مستقیماً در MS SQL حذف کنید، چیزی شبیه به این (برای جدول محاسبه مجدد):

پایگاه استفاده؛
ALTER TABLE_CRgRecalc1399
ADD ID INT IDENTITY(1,1);
برو
DELETE FROM_CRgRecalc1399
شناسه WHERE< (SELECT MAX(id)
از _CRgRecalc1399 AS T1
WHERE _CRgRecalc1399._RecorderTRef = T1._RecorderTRef و
_CRgRecalc1399.[_RecorderRRef] = T1.[_RecorderRRef] و
_CRgRecalc1399.[_CalcKindRRef] = T1.[_CalcKindRRef] و
_CRgRecalc1399.[_Fld1400RRef] = T1.[_Fld1400RRef] و
_CRgRecalc1399.[_Fld1401RRef] = T1.[_Fld1401RRef] و
_CRgRecalc1399.[_Fld1402RRef] = T1.[_Fld1402RRef]
);
برو
ALTER TABLE_CRgRecalc1399
DROP COLUMN ID;

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

3. نتیجه گیری.

این امید وجود داشت که 8.3 مشکل حل شود. ما خیلی تنبل نبودیم، در 8.3.4.482 (با حالت سازگاری غیر فعال) بررسی کردیم. ما به یک SCP-shke تقریبا معمولی نگاه کردیم، با تغییراتی در پیکربندی فقط برای لوازم عمومی. در این پایه آزمایشی، تقسیم قبل از وارد کردن اطلاعات فعال شد، یعنی. پلتفرم باید مقدار جداکننده را به درستی در همه جداول بنویسد، آنها به تنهایی چیزی را مستقیماً در MS SQL ننوشتند.

نتیجه:

    مشکل پرس و جوهای جداول مجازی "Turnovers" و "TurnoversDtKt" بازتولید شده است.

    مشکل پیشگیرانه قابل تکرار است.

    مشکل نوشتن در ثبت اطلاعات مستقل تکرار می شود.

    مشکل خاموش کردن جداسازی - خلاص شدن از شر آن با یک کلیک دکمه کار نخواهد کرد!

بنابراین، ما نتوانستیم RLS را با مکانیزم جدیدی جایگزین کنیم. این مکانیسم، ظاهرا، برای خدمات ابری، و در مورد استفاده از داده های مشترک "بدون توجه"، شاید تقسیم کار کند، اما ما به یک NSI مشترک نیاز داریم. باید منتظر ماند تا 1C خطاها را تصحیح کند، و حتی بهتر، یک مکانیسم معمولی برای تقسیم بندی توسط سازمان ها در پیکربندی های استاندارد را اجرا کند.

لوازم عمومی در 1C 8.3 یک شیء فراداده پلت فرم است که به شما امکان می دهد از یک ویژگی برای بسیاری از اشیاء پیکربندی (دایرکتوری ها، اسناد، نمودارهای حساب ها و غیره) استفاده کنید. شی عمدتاً برای تسهیل کار توسعه دهنده و جداسازی داده ها ایجاد شده است.

جزئیات عمومی در ابتدا در نسخه 1C 7.7 پیاده سازی شد، اما توسعه دهندگان بلافاصله آن را در پلت فرم 8 نسخه قرار ندادند. مکانیسم جزئیات رایج توسط توسعه دهندگان 1C تنها در نسخه 8.2.14 معرفی شد.

برای اینکه اشیاء استاندارد در پیکربندی را تغییر ندهید، افزودن ویژگی های عمومی بسیار راحت است، من اغلب آنها را همراه با استفاده می کنم.

پس از افزودن یک ویژگی مشترک، می توان از آن در کوئری ها استفاده کرد و در فرم اشیاء - نمایش داد از نظر ظاهری، تفاوتی با وسایل معمولی ندارد.

تنها محدودیت ویژگی های رایج این است که نمی توان آنها را در استفاده کرد.

بیایید تنظیمات و ویژگی های اصلی ویژگی های رایج را که با سایر اشیاء پیکربندی متفاوت هستند در نظر بگیریم:

ترکیب بندی- فهرستی از اشیایی که مشخصه مشترک برای آنها استفاده خواهد شد، این تنظیمات شبیه به تنظیمات طرح تبادل است.

267 درس ویدیویی 1C را به صورت رایگان دریافت کنید:

استفاده خودکار- این تنظیم تعیین می کند که آیا یک ویژگی مشترک برای آن دسته از اشیایی که حالت استفاده «خودکار» مشخص شده در ترکیب را دارند یا نه، استفاده می شود یا خیر.

جداسازی داده هاما این تنظیم را جداگانه در نظر خواهیم گرفت.

جداسازی داده ها در 1C با استفاده از یک ویژگی مشترک

جداسازی داده ها- مکانیزمی شبیه به مکانیسم. با این حال، عملکرد این مکانیسم کارآمدتر است و پیکربندی آن آسان تر است.

این مکانیسم به شما امکان می دهد نمایش تنها عناصری را که کاربر می تواند ببیند پیکربندی کنید. به عنوان مثال، می توانید بین تمام اشیاء (اسناد، دایرکتوری ها و غیره) که در آن یک سازمان خاص نصب شده است، تمایز قائل شوید.

راه اندازی جداسازی داده ها با استفاده از جزئیات رایج 1C

برای تنظیم در ویژگی کلی، باید جداسازی داده ها - را مشخص کنید تقسیم کنید. بلافاصله پس از کلیک کردن، سیستم از شما می خواهد که پارامترهای حسابداری پیش فرض را ایجاد کنید:

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

این تنظیمات را تکمیل می کند - کاربر فقط به اطلاعاتی که در پارامترهای جلسه انتخاب شده مشخص شده است دسترسی خواهد داشت.

نمونه ای از استفاده از یک ویژگی مشترک

بیایید با استفاده از مثالی از پیکربندی و پایه‌های فریم فریم، تنظیمات کلی در 1C 8.3 را تجزیه و تحلیل کنیم. سازمان:

3 سند در سیستم وجود دارد که لازم است سازمان مورد نیاز را مشخص کنید: اینها فاکتور فاکتور، فاکتور هزینه، حقوق و دستمزد.

راه اندازی ساده است:

  1. یک ویژگی عمومی جدید ایجاد کنید، نوع را مشخص کنید - DirectoryLink.Organization.
  2. در ترکیب ما اسناد خود را ترتیب می دهیم - استفاده کنید.

همه چیز، تنظیمات تمام شده است!

نتیجه را ببینیم:

سیستم ویژگی مشترک "به عنوان خود" را نمایش می دهد: هم در درخواست ها، هم در ویژگی های فرم و هم در مکان های دیگر. این چنین جادویی است! 🙂

لوازم عمومی 1C 8.3 اضافه نشده است

زنگ

کسانی هستند که قبل از شما این خبر را می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه دوست دارید زنگ را بخوانید
بدون هرزنامه