وظائف لغة التعبير لنظام تكوين البيانات. SKD

أريد في هذه المذكرة القصيرة أن أوضح كيف يمكنك تلخيص القيم على مستويات مختلفة من التجميع في تقرير باستخدام نظام تكوين البيانات.
كما هو موضح في الصورة، فقط على مستوى التجميع "مجموعات العناصر"، يتم حساب مورد "الطلب"، ويعرض مقدار الاحتياجات التي يجب طلبها لمجموعة العناصر الحالية بناءً على شروط معينة:


لا يمكن حساب هذه القيمة إلا على مستوى التجميع هذا، حيث لا توجد قيم أعلى أو أقل لحسابها. على سبيل المثال، على مستوى السجلات التفصيلية، لا توجد بيانات عن الحد الأقصى للكمية في المجموعة، لأن هذه البيانات صالحة فقط للمجموعة ككل، وليس لمكوناتها الفردية.

وبناء على ذلك، من الضروري الآن حساب المجاميع للمجموعات المذكورة أعلاه ("المستودعات"، "أنواع المستودعات") والإجمالي الإجمالي.
للقيام بذلك، استخدم الوظيفة حساب ExpressionWithGroupArray:
تقييم التعبير باستخدامGROUPARRAY (EVALEXPRESSIONWITHGROUPARRAY)
بناء الجملة:
تقييم ExpressionWithGroupArray (،)
وصف:
تقوم الدالة بإرجاع مصفوفة، يحتوي كل عنصر منها على نتيجة تقييم تعبير للتجميع حسب الحقل المحدد.
يقوم مؤلف التخطيط، عند إنشاء تخطيط، بتحويل معلمات الوظيفة إلى مصطلحات حقول تخطيط تكوين البيانات. على سبيل المثال، سيتم تحويل حقل الحساب إلى DataSet.Account.
يقوم منشئ التخطيط، عند إنشاء تعبيرات لمخرجات حقل مخصص يحتوي تعبيره على الدالة CalculateArrayWithGroupArray() فقط، بإنشاء تعبير الإخراج بحيث يتم ترتيب معلومات الإخراج. على سبيل المثال، بالنسبة لحقل مخصص يحتوي على التعبير:

CalculateExpressionWithGroupArray("المبلغ(AmountTurnover)"، "الطرف المقابل")
سيقوم منشئ التخطيط بإنشاء التعبير التالي للإخراج:

ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)),Sum(DataSet.AmountTurnover)",,"DataSet.Account"),"2")))

خيارات:

النوع: سلسلة. التعبير المراد تقييمه. الخط، على سبيل المثال، المبلغ(AmountTurnover).

النوع: سلسلة. تجميع تعبيرات الحقول - تعبيرات حقول التجميع، مفصولة بفواصل. على سبيل المثال، المقاول، الطرف.

النوع: سلسلة. تعبير يصف التحديد المطبق على سجلات التفاصيل. لا يدعم التعبير استخدام الوظائف التجميعية. على سبيل المثال، DeletionFlag = False.

النوع: سلسلة. تعبير يصف التحديد المطبق على سجلات المجموعة. على سبيل المثال، المبلغ(AmountTurnover) > &المعلمة1.
مثال:

الحد الأقصى(CalculateExpressionWithGroupArray("Amount(AmountTurnover)", "Counterparty"));

يمكن العثور على وصف تفصيلي لبناء جملة الوظيفة على http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
الآن، بالنسبة للحساب، نقوم بتكرار حقل "الطلب"، بقيم مختلفة "الحساب حسب..."، وذلك باستخدام التعبيرات التالية، لاحظ أنه في كل مستوى أعلى يتم استخدام قيم المستويات الموجودة أسفل المجموعات .

ونتيجة لذلك، نحصل على البناء التالي:

في ضوء الإصدار القادم من 8.2.14، سأحاول وصف بعض الوظائف الجديدة لنظام تكوين البيانات.

افتح الرسم التخطيطي لتخطيط البيانات، ويفضل أن يكون ذلك في تقرير خارجي، لتسهيل عملية التحرير.

نضيف مجموعة بيانات من نوع الاستعلام ونكتب، إما يدويًا أو باستخدام مصمم الاستعلام، استعلامًا بسيطًا:

1. قم بإعداد طلب في نظام التحكم في الوصول.

2. قم بإعداد الحقول المحسوبة في نظام التحكم في الوصول

3. قم بتكوين تخطيط البيانات في علامة تبويب الإعدادات

4. إطلاق 1C إنتربرايز 8.2.14. افتح التقرير. نحن نشكل، نتلقى.

وصف الوظائف الجديدة نفسها:

1. التاريخ الحالي ()

إرجاع تاريخ النظام. عند إنشاء تخطيط تخطيط، في جميع التعبيرات الموجودة في التخطيط، يتم استبدال وظيفة CurrentDate() بقيمة التاريخ الحالي.

2. حساب التعبير ()

بناء الجملة:

حساب التعبير (،)

وصف:

تم تصميم الوظيفة لتقييم تعبير في سياق بعض المجموعات.

تأخذ الوظيفة في الاعتبار اختيار المجموعات، ولكنها لا تأخذ في الاعتبار التحديدات الهرمية.

لا يمكن تطبيق الوظيفة على مجموعة في تحديد المجموعة لتلك المجموعة. على سبيل المثال، عند تحديد مجموعة Nomenclature، لا يمكنك استخدام التعبير CalculateExpression("Sum(SumTurnover)"، "TotalTotal") > 1000. ولكن يمكن استخدام مثل هذا التعبير في الاختيار الهرمي.

إذا كان سجل النهاية يسبق سجل البداية، فيعتبر أنه لا توجد سجلات لحساب البيانات التفصيلية وحساب الوظائف المجمعة.

عند حساب تعبيرات الفاصل الزمني للإجمالي الكلي (يتم تعيين معلمة التجميع على GrandTotal)، فمن المفترض أنه لا توجد سجلات لحساب البيانات التفصيلية وحساب الوظائف التجميعية.

رابط التخطيط عند إنشاء تعبير دالة حساب التعبير، إذا كان تعبير الترتيب يحتوي على حقول لا يمكن استخدامها في التجميع، فسيتم استبدال الوظيفة حساب التعبيرعلى باطل.

خيارات

يكتب: خط. التعبير المراد تقييمه.

يكتب: خط. يحتوي على اسم المجموعة التي سيتم تقييم التعبير في سياقها. إذا تم استخدام سلسلة فارغة كاسم للتجميع، فسيتم إجراء الحساب في سياق التجميع الحالي. إذا تم استخدام سلسلة GeneralTotal كاسم للمجموعة، فسيتم إجراء الحساب في سياق الإجمالي الكلي. وبخلاف ذلك، سيتم إجراء الحساب في سياق المجموعة الأصلية التي تحمل الاسم نفسه.

على سبيل المثال:

Sum(Sales.SumTurnover)/حساب("Sum(Sales.SumTurnover)"، "الإجمالي")

في هذا المثال، ستكون النتيجة نسبة المجموع حسب الحقل المبيعات.المبلغ الدورانيتجميع السجلات لمجموع نفس الحقل في التخطيط بأكمله؛

يكتب: خط. يمكن أن تأخذ المعلمة القيم التالية:

· المجموع الإجمالي- سيتم حساب التعبير لجميع سجلات التجميع.

· تَسَلسُل— سيتم تقييم التعبير للسجل الهرمي الأصلي، إذا كان هناك واحد، وللمجموعة بأكملها، إذا لم يكن هناك سجل هرمي أصل.

· التجميع— سيتم تقييم التعبير لسجل تجميع المجموعة الحالي.

· GroupingNonResource— عند حساب دالة لسجل مجموعة حسب الموارد، سيتم حساب التعبير لسجل المجموعة الأول من المجموعة الأصلية.

عند حساب دالة حساب التعبير() مع معنى GroupingNonResourceبالنسبة لسجلات المجموعة التي لم يتم تجميعها حسب الموارد، يتم حساب الدالة بنفس الطريقة التي سيتم حسابها بها إذا كانت قيمة المعلمة مساوية للقيمة التجميع.

يقوم منشئ تخطيط تكوين البيانات، عند إنشاء تخطيط تكوين البيانات عند إخراج حقل مورد يتم من خلاله إجراء التجميع للتخطيط، بوضع تعبير في التخطيط الذي يتم حسابه باستخدام الوظيفة حساب التعبير() ، تشير إلى المعلمة GroupingNonResource. بالنسبة للموارد الأخرى، يتم وضع تعبيرات الموارد المعتادة في مجموعة الموارد.

يكتب: خط. يشير إلى السجل الذي يجب أن يبدأ الجزء منه، والذي يجب أن يتم حساب وظائف التعبير التجميعية منه، ومن أي سجل يمكن الحصول على قيم الحقول خارج الوظائف المجمعة. يمكن أن تكون القيمة واحدة مما يلي:

· أولاً

· الأخير (الأخير)

· سابق

· التالي التالي)

· حاضِر

· LimitingValue(قيمة الحدود) LimitingValue

يكتب: خط. يشير إلى السجل الذي يجب أن يستمر الجزء فيه، والذي يجب أن يتم فيه حساب الوظائف الإجمالية للتعبير. يمكن أن تكون القيمة واحدة مما يلي:

· أولاً. من الضروري الحصول على سجل المجموعة الأولى. بعد الكلمة الموجودة بين قوسين، يمكنك تحديد تعبير، وسيتم استخدام نتيجته كإزاحة من بداية التجميع. يجب أن تكون القيمة الناتجة عددًا صحيحًا أكبر من الصفر. على سبيل المثال، الأول (3) - تلقي السجل الثالث من بداية التجميع.

إذا كان السجل الأول خارج المجموعة، فيعتبر أنه لا توجد سجلات. على سبيل المثال، إذا كان هناك 3 سجلات، وتريد الحصول على الأول (4)، فيعتبر أنه لا توجد سجلات.

· الأخير (الأخير). تحتاج إلى الحصول على سجل التجميع الأخير. بعد الكلمة الموجودة بين قوسين، يمكنك تحديد تعبير، وسيتم استخدام نتيجته كإزاحة من نهاية المجموعة. يجب أن تكون القيمة الناتجة عددًا صحيحًا أكبر من الصفر. على سبيل المثال، Last(3) - تلقي السجل الثالث من نهاية المجموعة.

إذا كان السجل الأخير خارج المجموعة، فيعتبر أنه لا توجد سجلات. على سبيل المثال، إذا كان هناك 3 سجلات، وتريد الحصول على Last(4)، فيُعتبر أنه لا توجد سجلات.

· سابق. تحتاج إلى الحصول على سجل التجميع السابق. بعد الكلمة الموجودة بين قوسين، يمكنك تحديد تعبير، وسيتم استخدام نتيجته كإزاحة من سجل التجميع الحالي. على سبيل المثال، السابق (2) - الحصول على السابق من السجل السابق.

إذا تجاوز السجل السابق التجميع (على سبيل المثال، بالنسبة لسجل التجميع الثاني، تحتاج إلى الحصول على السابق (3))، فسيتم الحصول على سجل التجميع الأول.

عند استرجاع السجل السابق لإجمالي التجميع يعتبر أنه تم الحصول على السجل الأول.

· التالي التالي). تحتاج إلى الحصول على سجل المجموعة التالي. بعد الكلمة الموجودة بين قوسين، يمكنك تحديد تعبير، وسيتم استخدام نتيجته كإزاحة للأمام من سجل التجميع الحالي. على سبيل المثال، التالي(2) - الحصول على التالي من السجل التالي.

إذا تجاوز السجل التالي التجميع، فيعتبر أنه لا توجد سجلات. على سبيل المثال، إذا كان هناك 3 إدخالات واستقبل الإدخال الثالث Next()، فيُعتبر أنه لا توجد إدخالات.

عند استلام السجل التالي لإجمالي التجميع، يعتبر أنه لا يوجد سجل.

· حاضِر. تحتاج إلى الحصول على السجل الحالي.

عند استرداد إجمالي التجميع، يتم الحصول على السجل الأول.

· LimitingValue(قيمة الحدود). الحاجة إلى الحصول على سجل بالقيمة المحددة. بعد الكلمة LimitingValueبين قوسين تحتاج إلى الإشارة إلى التعبير بالقيمة التي تريد أن تبدأ الجزء بها، وهو حقل الترتيب الأول.

سيتم إرجاع السجل الأول الذي تكون قيمة حقل الترتيب الخاص به أكبر من أو تساوي القيمة المحددة كسجل. على سبيل المثال، إذا تم استخدام حقل الفترة كحقل الطلب، وكان يحتوي على القيم 01/01/2010، 02/01/2010، 03/01/2010، وتريد الحصول عليه LimitingValue(DateTime(2010, 1, 15))، ثم سيتم استلام المحضر بتاريخ 02/01/2010.

يكتب: خط. يسرد التعبيرات، مفصولة بفواصل، والتي تصف قواعد الترتيب. إذا لم يتم تحديده، فسيتم تنفيذ الترتيب بنفس الطريقة المتبعة في التجميع الذي يتم تقييم التعبير من أجله. بعد كل تعبير يمكنك تحديد كلمة رئيسية عمر(للترتيب التصاعدي) تنازلي(للترتيب التنازلي) و الطلب التلقائي(لترتيب الحقول المرجعية حسب الحقول التي تريد ترتيب الكائن المشار إليه من خلالها). كلمة الطلب التلقائييمكن استخدامها كما هو الحال مع الكلمة عمر، هكذا مع الكلمة تنازلي.

يكتب: خط. نفس المعلمة فرز. يستخدم لتنظيم السجلات الهرمية. إذا لم يتم تحديده، يقوم منشئ التخطيط بإنشاء الترتيب وفقًا للترتيب المحدد في المعلمة فرز.

يكتب: خط. يحدد قاعدة تحديد السجل السابق أو التالي في حالة وجود عدة سجلات بنفس قيمة الترتيب:

· بشكل منفصليشير إلى أنه يتم استخدام تسلسل السجلات المرتبة لتحديد السجلات السابقة والتالية. القيمة الافتراضية.

· معاًيشير إلى أن السجلات السابقة والتالية يتم تحديدها بناءً على قيم تعبيرات الترتيب.

على سبيل المثال، إذا تم ترتيب التسلسل الناتج حسب التاريخ:

تاريخ الاسم الكامل معنى
1 01 يناير 2001

إيفانوف م.

10
2 02 يناير 2001 بيتروف س. 20
3 03 يناير 2001 سيدوروف ر. 30
4 04 يناير 2001 بيتروف س. 40

بشكل منفصل، الذي - التي:

§ الإدخال السابق للإدخال 3 سيكون الإدخال 2.

التيار الحالي(وبناء على ذلك المعلمات يبدأو نهاية)، ثم بالنسبة للسجل 2، سيتكون هذا الجزء من سجل واحد 2. وسيكون التعبير مساويًا لـ 20.

إذا كانت قيمة المعلمة معاً، الذي - التي:

§ الإدخال السابق للإدخال 3 سيكون الإدخال 1.

§ إذا تم تعريف جزء الحساب على أنه التيار الحالي(وبناء على ذلك المعلمات يبدأو نهاية)، ثم بالنسبة للسجل 2، سيتكون هذا الجزء من السجلين 2 و3. التعبير CalculateExpression("Sum(Value)"، الحالي، الحالي)سوف يساوي 50

عند تحديد قيمة معلمة تساوي معاً، في المعلمات يبدأو نهايةلا يمكنك تحديد إزاحة للمواضع الأول، الأخير، السابق، التالي.

CalculateExpression("Sum(SumTurnover)"، "الأول"، "الحالي")

إذا كنت تريد الحصول على قيمة التجميع في السطر السابق، يمكنك استخدام التعبير التالي:

احسب التعبير ("السعر"، "السابق")

قائمة جديدالمهام:

احسب ExpressionWithGroupArray(,) -

تقوم الدالة بإرجاع مصفوفة، يحتوي كل عنصر منها على نتيجة تقييم تعبير للتجميع حسب الحقل المحدد.

احسب ExpressionWithGroupValueTable(,) -

تقوم الدالة بإرجاع جدول قيم، يحتوي كل صف منه على نتيجة تقييم التعبيرات للتجميع حسب الحقل المحدد

معبأ بالقيمة() - تُرجع True إذا كانت القيمة غير القيمة الافتراضية لهذا النوع، بخلاف NULL، بخلاف مرجع فارغ، بخلاف غير محدد. يتم التحقق من القيم المنطقية بحثًا عن القيم الخالية. يتم التحقق من السلاسل بحثًا عن عدم وجود أحرف ليست بها مسافات بيضاء

شكل(، ) - تلقي سلسلة منسقة للقيمة التي تم تمريرها. يتم تعيين سلسلة التنسيق وفقًا لسلسلة التنسيق الخاصة بنظام 1C:Enterprise.

سلسلة فرعية(، ،) - تم تصميم هذه الوظيفة لاستخراج سلسلة فرعية من سلسلة.

طول الخط() - تم تصميم الوظيفة لتحديد طول السلسلة. المعلمة هي تعبير سلسلة

خط() - إذا تم تمرير مصفوفة كمعلمة، فإن الدالة ترجع سلسلة تحتوي على تمثيلات سلسلة لجميع عناصر المصفوفة، مفصولة بأحرف "؛ ". إذا تم تمرير جدول القيم كمعلمة، تقوم الدالة بإرجاع سلسلة تحتوي على تمثيلات سلسلة لجميع صفوف جدول القيم، مع فصل تمثيلات الخلية لكل صف بواسطة أحرف "؛"، والصفوف بخط جديد شخصية. إذا كان تمثيل سلسلة العنصر فارغًا، فسيتم عرض سلسلة بدلاً من تمثيلها.

يوم جيد أيها القراء الأعزاء لمدونتنا! اليوم أريد أن أخبركم، باستخدام مثال حقيقي، كيف
استخدم وظائف ACS Array وJoinStrings. في مقال عنه

كان هناك القليل من الإشارة إلى كيفية العمل مع
على الإشارة المرجعية
، كما سبق أن تم شرحه
باستخدام علامة التبويب "الموارد". اليوم سوف ننتبه مرة أخرى إلى هذه
الإشارات المرجعية في ضوء موضوعنا.

ظهور مثال لتقرير 1C باستخدام وظيفتي ACS مجموعة مصفوفةو ConnectRowsالتالي:

بيان مشكلة استخدام وظائف ACS Array وJoinStrings

المهمة: تحتاج إلى إدراج جميع أرقام المبيعات لمنتج واحد في خلية واحدة.

شيء من هذا القبيل: التسميات | الكمية | 001، 002، الخ. |

سوف نستخدم طلبًا لتسجيل التراكم "مبيعات TMZ".

يختار
تنفيذ TMZ. المسجل. رقم،
تنفيذ TMZ. التسميات,
تنفيذ TMZ. المسجل،
تنفيذ TMZ. دوران الكمية
من
سجل التراكم. تنفيذ TMZ. الثورات
(،، المسجل،) كيفية تنفيذ TMZ

يوجد سجل التراكم "Realization of TMZ" في كل من تكوين المحاسبة وفي تكوين إدارة المؤسسات التجارية (UTP). تعرف على كيفية تكوين USP في عنصر دليل "Nomenclature". لذلك، بعد التنزيل، يمكنك تشغيل هذا التقرير في كلا التكوينين للتحقق من وظائفه.

تنفيذ المهمة باستخدام وظائف SKD Array وConnectRows


تم استخدام نفس الخطوات لكن مع بعض الإضافات في الإنشاء
.

وصف وظيفة JoinStrings

JoinStrings

يستخدم لربط السلاسل في سلسلة واحدة.

بناء الجملة:

ConnectRows(القيمة، فاصل العناصر، فاصل الأعمدة)

خيارات:

  1. معنى- التعبيرات التي يجب دمجها في سطر واحد.
    إذا كان مصفوفة، فسيتم دمج عناصر المصفوفة في سلسلة.
    إذا كان ValueTable، فسيتم دمج جميع أعمدة وصفوف الجدول في صف واحد؛
  2. فاصل العناصر- سلسلة تحتوي على النص الذي سيتم استخدامه
    فاصل بين عناصر المصفوفة وصفوف جدول القيمة. الافتراضي - حرف تغذية السطر؛
  3. فواصل الأعمدة- سلسلة تحتوي على النص الذي سيتم استخدامه كمحدد
    بين أعمدة جدول القيم. تقصير "؛".

يتيح لك الاستخدام السليم لنظام تكوين البيانات (DCS) ما يلي:

  • تقليل الوقت اللازم لإعداد التقرير بشكل كبير؛
  • القضاء على الحاجة إلى إنشاء معالج نموذج مُدار؛
  • احصل على نتيجة جميلة مع إمكانية التخصيص الإضافي من قبل المستخدم.

ولكن ليس كل المطورين يستفيدون إلى أقصى حد من إمكانيات المخطط، حيث أن إعداداته ليست كلها واضحة وبديهية. على وجه الخصوص، يعرف الكثير من الناس أنه في 1C SKD هناك حقول محسوبة، ومع ذلك، فإنهم لا يفهمون تماما نطاق استخدامها وطرق العمل معهم.

ما هو الحقل المحسوب

في معظم الحالات، يكون مصدر البيانات في الرسم التخطيطي عبارة عن استعلام. من حيث المبدأ، داخل الاستعلام نفسه، يمكنك بالفعل استخدام العديد من الصيغ والإنشاءات والتعبيرات. يطرح سؤال طبيعي: لماذا نحتاج إلى وظائف مكررة؟

الحقيقة هي أن نظام التحكم في الوصول هو أكثر من مجرد عرض نتيجة الاستعلام، وهذا واضح للعيان من نموذج إنشاء المخطط (الشكل 1).

تسمح لك الحقول المحسوبة بتنفيذ إجراءات معينة باستخدام مجموعة البيانات التي تم إنشاؤها:

  • إخراج مصفوفة من البيانات المستلمة بواسطة طلب إلى خلية معينة، ودمج عدة أسطر في سطر واحد؛
  • الوصول إلى وظائف التصدير للوحدة العامة؛
  • قم بتنفيذ التعبيرات المتنوعة المتوفرة للغة التخطيط واستخدم وظائف EvaluateExpression الخاصة.

دعونا نذهب من خلال هذه القائمة.

مجموعة من القيم في خلية واحدة

دعونا نحاكي موقفًا حيث يكون من الضروري استلام جميع أرقام مستندات الاستلام للطرف المقابل في خلية منفصلة:


وبالتالي، قمنا بإنشاء حقل حساب إضافي في مخططنا؛


كما ترون من المثال أعلاه، لا توجد صعوبات في إضافة الحقول المحسوبة ومعالجتها. استخدمنا وظيفتين: Array() و ConnectRows().

بضع كلمات عن هذا الأخير. بالإضافة إلى المعلمة الأولى التي تشير إلى معرف المصفوفة أو القيم أو القيم، يمكن تعيين معلمتين أخريين فيه:

  1. فاصل العناصر - يشير إلى الحرف الذي سيفصل عنصر مصفوفة واحد أو صف واحد من جدول القيم عن عنصر آخر (في حالتنا، حذفنا هذه المعلمة وتم تعيين فاصل أسطر افتراضيًا)؛
  2. فاصل الأعمدة – حرف يستخدم لفصل أعمدة جدول القيم (يتم استخدام الفاصلة المنقوطة بشكل افتراضي).

الوصول إلى وظائف التصدير للوحدة المشتركة

يمكن أن تعمل وظائف الوحدة الشائعة كمصدر بيانات لملء حقل محسوب.

بعض النقاط المهمة:

  • يجب أن تكون الوظيفة قابلة للتصدير؛
  • إذا كانت الوظيفة موجودة في وحدة نمطية مشتركة مع مجموعة السمات "العالمية"، فسيتم استدعاؤها مباشرة بالاسم، وإلا فيجب استدعاء الوظيفة وفقًا لنظام "اسم الوحدة المشتركة". "اسم الدالة المطلوب استدعاؤها."

وكمثال للاستخدام، سنأخذ نفس طلب مستندات الاستلام ونعرضه في عمود منفصل. لن نقوم بوصف الطلب نفسه، فلننتقل مباشرة إلى الحقول المحسوبة:


وبالتالي، نرى أنه يمكن تهيئة أي معالج بيانات تقريبًا من نظام التحكم في الوصول، مما يوسع بشكل كبير إمكانيات استخدام المخطط.

تعبيرات اللغة التخطيطية

في كثير من الأحيان في عمل المطور، ينشأ موقف عندما يكون من الضروري عرض نتيجة التقسيم في حقل ACS:

  1. حساب متوسط ​​تكلفة السلعة؛
  2. جميع أنواع الاهتمام؛
  3. حسابات متوسط ​​الدخل، الخ.

لتجنب المشكلات، يُنصح في هذه الحالات بإدخال اختبار القسمة على 0 في الحقل المحسوب.

يمكن القيام بذلك باستخدام بناء "الاختيار متى....ثم...وإلا...النهاية".

في النهاية، بضع كلمات حول الدالة الجديدة إلى حد ما CalculateExpression(). وبمساعدتها، على وجه الخصوص، يمكنك حساب الانحرافات في التكلفة بين الخطوط الحالية والسابقة، والرصيد التراكمي، وما إلى ذلك.

لنفترض أنه يمكنك الحصول على مجموع المستند من السطر السابق لطلبنا عن طريق تحديد القيمة حساب التعبير ("مجموع المستند"، "المجموع السابق") في حقل "التعبير".

يبدو لي أن هذه الطريقة بها ناقص ولكنها تعمل ولكن الطرح كبير. لنلق نظرة على مثال: يوجد في التكوين مستند "استلام البضائع" مع جزء جدولي "البضائع"، ومن الضروري أن يعرض في التقرير المستندات وأسماء البضائع المستلمة لكل مستند.

لنقم بإنشاء تقرير، وإضافة مخطط تخطيط البيانات الأساسي، وإضافة مجموعة من البيانات من نوع "الاستعلام" إلى نظام التحكم في الوصول وإنشاء طلب بسيط (انظر الشكل 1).

الشكل 1. استعلام مجموعة البيانات
في علامة التبويب "الحقول المحسوبة"، أضف حقلاً محسوبًا يسمى TabularPart وحدد سلسلة فارغة في عمود التعبير (انظر الشكل 2).
سيتم استخدام الحقل المحسوب لدينا كمورد، لذا في علامة التبويب "الموارد"، قمنا بتعيين تعبير التجميع: ConnectRows(Array(Products.Nomenclature)،""). نشير أيضًا إلى أنه يجب حساب هذا المورد باستخدام حقل الرابط (انظر الشكل 3).
نتيجة التقرير:
الجانب السلبي هو استخدام التجميع، في حالتنا، يتم تنفيذ التجميع بواسطة سمة الارتباط، وإلا فلن يعمل. يفرض وجود التجمع بعض القيود على إعداد إخراج البيانات (انظر الشكل 4).

2) استدعاء وظيفتك الخاصة من وحدة نمطية مشتركة.

طريقة بسيطة وواضحة، والصعوبة الوحيدة هي العثور على وحدة مشتركة مناسبة أو إنشاء وحدة جديدة لكتابة وظيفتك الخاصة :). باستخدام الرابط الذي تم تمريره إلى مستند "استلام البضائع"، ستتلقى الوظيفة صفوفًا من الجزء الجدولي من المستند وتقوم بإنشاء صف يحتوي على معلومات حول البضائع المستلمة. لنبدأ بالتنفيذ.

لنقم بإنشاء تقرير، وإضافة مخطط تخطيط بيانات أساسي، وإضافة مجموعة من البيانات من نوع "الاستعلام" إلى نظام التحكم في الوصول وإنشاء طلب بسيط (انظر الشكل 6).


الشكل 6. استعلام مجموعة البيانات
لنقم بإنشاء وحدة نمطية مشتركة _Demo للعمل مع التقارير وكتابة وظيفة التصدير الحصول على قائمة المنتجات للتقرير (). انظر رمز الوظيفة أدناه.
في علامة التبويب "الحقول المحسوبة"، أضف حقلاً محسوبًا يسمى TabularPart وفي عمود Expression نشير إلى استدعاء دالة من الوحدة النمطية العامة (انظر الشكل 2):
_العمل التجريبي مع التقارير.احصل على قائمة المنتجات للتقرير (الرابط)

دعنا نذهب إلى علامة التبويب "الإعدادات" وننشئ إعدادًا لإخراج البيانات - سيكون هذا سجلاً مفصلاً (انظر الشكل 8).
نتيجة التقرير:

تنزيل نموذج التقرير

ما تحتاج إلى معرفته عند استخدام هذه الطريقة:
1) قد يحتوي تعبير محرك تكوين البيانات على استدعاءات لوظائف وحدات التكوين العامة العامة. على سبيل المثال:
الاسم المختصر (الرابط، التاريخ، الرقم)
2) عند إنشاء تقرير برمجيًا، يُسمح باستخدام وظائف الوحدات النمطية المشتركة فقط إذا تم تحديد المعلمة المقابلة لمعالج تكوين البيانات (المعلمة الرابعة):
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout, DecryptionData, True);
3) لا يمكن استخدام وظائف الوحدات الشائعة في تعبيرات الحقول المخصصة.
4) إذا تم طرح استثناء عند إنشاء تقرير يشير إلى وظيفة وحدة نمطية مشتركة، فتحقق من سياق تنفيذ الوحدة (انظر الشكل 9).

وصف الوظائف المستخدمة

ConnectRows(القيمة، فاصل العناصر، فاصل الأعمدة)- مصمم لدمج الأوتار في سطر واحد.
  • القيمة - التعبيرات التي يجب دمجها في سطر واحد. إذا كان مصفوفة، فسيتم دمج عناصر المصفوفة في سلسلة. إذا كان ValueTable، فسيتم دمج جميع أعمدة وصفوف الجدول في صف واحد؛
  • فاصل العناصر - سلسلة تحتوي على نص لاستخدامه كفاصل بين عناصر المصفوفة وصفوف جدول القيمة. الافتراضي - حرف تغذية السطر؛
  • فواصل الأعمدة - سلسلة تحتوي على نص لاستخدامه كفاصل بين أعمدة جدول القيمة. تقصير "؛ ".
صفيف (تعبير [مختلف])- يمكنك استخدام جدول القيم كمعلمة. في هذه الحالة، ستكون نتيجة الدالة عبارة عن مصفوفة تحتوي على قيم العمود الأول من جدول القيم، ويتم تمريرها كمعلمة. إذا كان التعبير يحتوي على دالة صفيف، فسيتم اعتبار التعبير تعبيرًا مجمعًا. إذا تم تحديد الكلمة الأساسية المختلفة، فلن يحتوي المصفوفة الناتجة على قيم مكررة.

الحصول على قائمة المنتجات للتقرير (DocumentLink)- تقوم الوظيفة بإنشاء سطر بقائمة البضائع الواردة.
// خيارات:
// DocumentLink - DocumentLink.إيصال البضائع - مستند "إيصال البضائع".
// قيمة الإرجاع:
// سلسلة - سلسلة تحتوي على قائمة المنتجات.
وظيفة الحصول على قائمة المنتجات لتصدير التقرير (DocumentLink).

قائمة المنتجات = "";

لكل سطر PM من دورة DocumentLink.Products
قائمة المنتجات = قائمة المنتجات + سطر TC.Nomenclature؛
قائمة المنتجات = قائمة المنتجات + الرموز.ملاحظة؛
EndCycle;

قائمة إرجاع المنتجات؛

EndFunction // الحصول على قائمة المنتجات للتقرير ()