أجهزة الكمبيوتر شبابيك إنترنت

تحديد معلمة عند استدعاء نموذج طباعة خارجي. إخراج النماذج المطبوعة مع طلب البيانات في نموذج "طباعة المستندات" من النظام الفرعي "طباعة" BSP. إضافة رأس تخطيط

ستخبرك هذه المقالة بالتفصيل كيف يمكن للمبتدئين الذين لديهم معرفة قليلة بـ 1C 8 إنشاء نموذج مطبوع. على سبيل المثال، لنأخذ أحد تكوينات 1C 8 الأكثر شيوعًا - المحاسبة 2.0. إنشاء نموذج مطبوع 1C مراحل الكتابة:

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

إنشاء نموذج مطبوع 1C. صياغة المشكلة

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

  • منظمة؛
  • الطرف المقابل؛
  • اتفاقية الطرف المقابل؛
  • تاريخ استلام.

عرض البيانات في القسم الجدولي كجدول بضائعوثيقة. يجب أن يتضمن الجدول الأعمدة التالية:

  • التسميات.
  • كمية؛
  • سعر؛
  • مجموع؛
  • وأيضا سعر الصنف للتاريخ الحالي (حسب نوع السعر من المستند).

ملف المعالجة الخارجية

دعنا ننتقل إلى حل المشكلة. أولا، دعونا نفتح 1C 8 في الوضع مكون. في هذا الوضع يتم تنفيذ جميع التطورات على منصة 1C 8، ونحن الآن بحاجة إلى إنشاء ملف معالجة خارجي. للقيام بذلك، انقر على القائمة ملف -> جديد...أو عن طريق أيقونة الملف الجديد.

في النافذة التي تفتح، حدد العنصر المعالجة الخارجية.

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

دعونا نضيف سمات المعالجة الخارجية LinkToObject وحدداكتب له DocumentLink استلام البضائع والخدمات. للقيام بذلك، في شجرة بيانات تعريف المعالجة الخارجية 1C، حدد العنصر المتطلباتواضغط على الزر يضيف(زر مع علامة زائد خضراء). سيتم فتح نافذة خصائص السمة على الجانب الأيمن من الشاشة، في الحقل اسمدعنا نكتب - ReferenceToObject. فيمجال يكتباضغط على الزر بثلاث نقاط.

دعونا نقوم بتوسيع الفرع في شجرة النوع رابط الوثيقة، وابحث عن العنصر استلام البضائع والخدمات هناك، حدد المربع المجاور له وانقر فوق نعم.

لنحفظ ملف المعالجة الخارجي على القرص الصلب للقيام بذلك، استخدم القائمة ملف -> حفظالرسم التخطيطي يحفظ(قرص مرن أزرق)، أو اختصار لوحة المفاتيح السيطرة + س. دعنا نسمي الملف المحفوظ "PrintForm".

إنشاء تخطيط النموذج المطبوع

لنبدأ في إنشاء تخطيط لنموذج الطباعة 1C. يعمل التخطيط كقالب لإخراج النموذج المطبوع، لذلك إذا كنت تريد أن يبدو النموذج المطبوع جيدًا، فيجب عليك الانتباه إليه.

لنقم بإضافة تخطيط جديد في شجرة بيانات تعريف المعالجة الخارجية؛ ولن نغير أي شيء في نافذة مصمم التخطيط وانقر فوق الزر مستعد.

في التخطيط الجديد الذي سيتم فتحه، سنقوم بإنشاء عدة مناطق ضرورية لعرض النموذج المطبوع. جميع مناطق التخطيط التي نحتاجها ستكون أفقية، لذا لإنشاء منطقة جديدة، حدد العدد المطلوب من خطوط التخطيط وانتقل إلى القائمة الجدول -> الأسماء -> تعيين الاسمأو استخدم اختصار لوحة المفاتيح السيطرة + التحول + N،ثم أدخل اسم المنطقة في المربع. عند إنشاء منطقة تخطيط، لا تخف من ارتكاب خطأ فيما يتعلق بعدد الأسطر؛ حيث يمكنك دائمًا إضافتها أو إزالتها. لحذف خط تخطيط 1C، حدد السطر المطلوب وحدد العنصر في قائمة السياق يمسح. لإضافة سطر جديد إلى التخطيط، حدد أي سطر من التخطيط وحدد العنصر في قائمة السياق يوسع.

إضافة رأس تخطيط

أولا وقبل كل شيء، دعونا إنشاء منطقة قبعة، فإنه سيتم عرض البيانات الخاصة برأس النموذج المطبوع. لهذه المنطقة سنحتاج إلى سبعة خطوط تخطيط. دعنا نختارها، وكما كتبت أعلاه، اضغط على مجموعة المفاتيح Ctrl + Shift + N، في الميدان اسماكتب "قبعة" واضغط على الزر نعم.

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

عادة ما تكون ثلاثة عشر أو أربعة عشر خلية تخطيط كافية، حددها في الصف الأول من المنطقة قبعةودمجها في خلية واحدة ( قائمة السياق -> دمج). بعد ذلك، انقر نقرًا مزدوجًا فوق الخلية الكبيرة الناتجة واكتب اسم المعلمة، في حالتنا "TitleText". لكي يصبح النص الذي تم إدخاله معلمة كاملة، انقر بزر الماوس الأيمن على الخلية وحدد العنصر في قائمة السياق ملكيات. على الإشارة المرجعية تَخطِيطدعونا نجد الحقل حشوةوحدد القيمة معامل. تتم الإشارة إلى المعلمات في تخطيط 1C بين قوسين "<>».

يجب أن يبرز عنوان النموذج المطبوع بين النصوص الأخرى، لذا حدد الخلية مرة أخرى واستخدم الأيقونات الموجودة على لوحة تنسيق التخطيط لتعيين محاذاة النص توسيطوحجم الخط 14.

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

يوضح الشكل كيف تختلف معلمات التخطيط عن النص العادي.

إضافة رأس جدول التخطيط

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

إضافة جدول إلى التخطيط

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

إضافة تذييل إلى التخطيط

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

يجب أن تكون النتيجة النهائية تخطيطًا يبدو كالتالي:

إنشاء نموذج مطبوع 1C. برمجة

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

تحتاج إلى إنشاء وظيفة تصدير في وحدة كائن نموذج الطباعة الخارجية ختم().

وظيفة الطباعة () تصدير EndFunction

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

تهيئة المتغيرات الأساسية

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

TabDoc = TabularDocument الجديد؛

إلى متغير تَخطِيطسوف نحصل على تخطيط النموذج المطبوع الذي أنشأناه. للقيام بذلك نستخدم الوظيفة المضمنة الحصول على تخطيط(<ИмяМакета>).

Layout = GetLayout("Layout");

سنقوم بتحويل جميع مناطق التخطيط إلى متغيرات. للقيام بذلك نستخدم طريقة التخطيط منطقة GetArea(<ИмяОбласти>) .

HeaderArea = Layout.GetArea("Header"); AreaData = Layout.GetArea("Data"); AreaFooter = Layout.GetArea("Footer");

إخراج رأس النموذج المطبوع إلى مستند جدول بيانات

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

Header Area.Parameters.HeaderText = "نموذج الطباعة"+ObjectLink.Number;

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

HeaderArea.Parameters.Organization = LinkToObject.Organization; HeaderArea.Parameters.Account = LinkToObject.Account; HeaderArea.Parameters.ReceiptDate = ObjectLink.Date; منطقة الرأس.اتفاقية المعلمات.Counterparty = اتفاقية LinkToObject.Counterparty;

تمت تعبئة جميع معلمات الرأس، وسنعرضها في مستند جدول البيانات الذي أنشأناه، ولهذا نستخدم الطريقة انتاج(<Область>) .

TabDoc.Output(HeaderArea);

كتابة طلب عائق مطبوع

لنبدأ بملء المنطقة ورسمها بيانات. يتضمن إنشاء نموذج مطبوع 1C أيضًا كتابة استعلام؛ فنحن بحاجة إليه للحصول على بيانات جدولية بضائعوالأسعار التسمياتللتاريخ الحالي سوف نستخدم طلب. تشبه لغة الاستعلام 1C 8 لغة SQL، أو بالأحرى تنسخ إمكانيات مشغل SELECT الخاص بها، ولكن الاستعلام بأكمله مكتوب باللغة الروسية. لذلك، إذا كنت على الأقل على دراية غامضة بـ SQL، فسوف تفهم بسهولة لغة الاستعلام 1C 8.

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

لنقم بإنشاء متغير يحتوي على الطلب.

طلب = طلب جديد؛

سنقوم بتأليف نص الاستعلام باستخدام مُنشئ الاستعلام. لنبدأ بالكتابة:

Request.Text = "";

ضع مؤشر الفأرة بين علامتي الاقتباس ثم اضغط على زر الفأرة الأيمن. في قائمة السياق التي تفتح، حدد العنصر طلب منشئ,سيساعدنا ذلك كثيرًا في إنشاء نموذج طباعة 1C. بعد ذلك، ستفتح نافذة مصمم الاستعلام، وهي تحتوي على العديد من علامات التبويب، ولكن لاستعلامنا سنحتاج إلى أربعة فقط: “الجداول والحقول”، “العلاقات”، “الشروط”، “الانضمام/الأسماء المستعارة”.

لاستعلامنا سنحتاج إلى جدولين: جزء الجدول بضائعوثيقة استلام البضائع والخدماتولمحة سريعة عن أحدث المعلومات عن التاريخ الحالي للتسجيل أسعار الأصناف.

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

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

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

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

بعد النافذة شروطأضفنا حقلاً وصلة، سيقوم مصمم الاستعلام نفسه بإنشاء معلمة بنفس الاسم ووضعها بعد علامة "=". يمكن إعادة تسمية هذه المعلمة إذا رغبت في ذلك. في نص الطلب، يتم وضع علامة على المعلمات بعلامة "&"، ولكن في هذه الحالة ليس من الضروري، لأنه من المفترض أن الجزء الثاني من الشرط يحتوي على معلمة، ما عليك سوى تذكر ذلك. ستتم مناقشة كيفية تمرير قيمة إلى معلمة طلب 1C أدناه.

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

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

نوع السعر = & نوع السعر

تم ملء معلمات الجدول الافتراضي، انقر فوق الزر نعم.

الآن بعد أن قصرنا التحديد على المستند الذي نحتاجه فقط، فلنقم بإنشاء اتصالات بين جداول الاستعلام. إذا لم يتم ذلك، فلن يتم ربط الأسعار من الجدول PriceNomenclatureSliceLast بالعنصر من الاستلام. دعنا نذهب إلى علامة التبويب روابطمصمم الاستعلام. دعونا ننشئ اتصالاً عبر الميدان التسمياتبين طاولتينا. للقيام بذلك، اضغط على الزر يضيف، في الميدان الجدول 1حدد جدولاً استلام البضائع الخدمات البضائع، وفي الحقل الجدول 2 - الأسعار، التسمية، الشريحة الأخيرة. في شروط الاتصال، حدد الحقول التسمياتمن كلا الجدولين.

وتجدر الإشارة أيضًا إلى أنه في تحديد الاستعلام نحتاج إلى الحصول على جميع الصفوف من جزء علامة التبويب بضائعوالأسعار فقط إذا كانت متوفرة في التاريخ الحالي لنوع سعر المستند. وبالتالي البيانات الجدولية بضائعإلزامية، ولكن البيانات التفصيلية للأسعار غير متوفرة. لذلك، في العلاقات بين هذه الجداول، من الضروري استخدام ما يسمى LEFT JOIN، وسيكون الجدول الأيسر (أو المطلوب) استلام البضائع الخدمات البضائع، والسعر الصحيح (أو الاختياري) NomenclatureSliceLast. لكي تعمل الصلة اليسرى لجداول الاستعلام كما هو موضح أعلاه، تحتاج إلى تحديد المربع الجميعبعد الميدان الجدول 1.


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

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

Request.Text = "SELECT | استلام البضائعServicesProducts.Nomenclature، | استلام البضائعServicesProducts.Amount، | استلام البضائعServicesProducts.Price، | استلام البضائعServicesProducts.Quantity، | شريحة الأسعار الأحدث. السعر AS PriceToday | من | مستند. استلام السلعالخدمات.البضائع كمنتجات الاستلامالخدماتالمنتجات |. الاتصال الأيسر سجل المعلومات.الأسعارالتسمية.SliceLast (| &التاريخ الحالي، نوع السعر = &السعرالنوع) AS الأسعارالتسميةالشريحةالأخيرة عند استلام البضائعالخدماتالمنتجات.التسمية |

تنفيذ الطلب

دعونا نمرر المعلمات اللازمة للطلب؛ ولهذا سوف نستخدم طريقة الطلب تعيين المعلمة (<ИмяПараметра>,<Значение>). للحصول على التاريخ الحالي، استخدم الوظيفة المضمنة التاريخ الحالي ()، فهو يقوم بإرجاع تاريخ ووقت الكمبيوتر.

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

حدد = Query.Run().Select();

تعبئة جدول النموذج المطبوع

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

بينما حلقة Select.Next() EndLoop؛

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

مجموع المجموع = 0؛ الكمية الإجمالية = 0;

داخل الحلقة سوف نملأ المنطقة بياناتالبيانات من عنصر التحديد الحالي إلى متغيرات المبلغ الإجماليو الكمية الإجماليةأضف قيم المجموع والكمية، وأخيرًا، اعرض المنطقة في مستند جدول بيانات باستخدام الطريقة المألوفة لدينا بالفعل انتاج(). نظرًا لأن أسماء حقول طلبنا تتطابق تمامًا مع أسماء معلمات المنطقة بيانات، ثم لملء سوف نستخدم الإجراء المدمج فيلبروبيرتيفالويس (<Приемник>, <Источник>)، الذي ينسخ قيم الممتلكات<Источника>إلى الخصائص<Приемника>.

while Selection.Next() Loop fillPropertyValues(AreaData.Parameters,Selection); TotalSum = TotalSum + Sample.Sum؛ TotalQuantity = TotalQuantity + Sample.Quantity؛ TabDoc.Output(AreaData); EndCycle;

إخراج تذييل النموذج المطبوع في مستند جدول بيانات

يبقى ملء وعرض المنطقة الأخيرة من التخطيط - قبو. لقد قمنا بالفعل بإعداد بيانات التعبئة والتعبئة والسحب وفقًا لنفس المخطط.

AreaFooter.Parameters.TotalQuantity = TotalQuantity; AreaFooter.Parameters.TotalSum = TotalSum; TabDoc.Output(AreaFooter);

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

إرجاع TabDoc؛

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

إنشاء نموذج مطبوع 1C. خيارات التسجيل التلقائي

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

ويتم ذلك على النحو التالي:

  • في المعالجة الخارجية نقوم بإنشاء تخطيط جديد. نحن نسميها "Settings_Auto-Registration" (من المهم عدم ارتكاب أي خطأ!).
  • في الخلية الأولى من التخطيط نكتب توثيق.(أو الدلائل.) واسم المستند الذي تريد توصيل النموذج المطبوع به.

توصيل نموذج طباعة خارجي بالقاعدة

  • ابدأ 1C 8 في الوضع شركة؛
  • اذهب إلى القائمة الخدمة -> التقارير والمعالجة الإضافية -> النماذج المطبوعة الخارجية الإضافية;
  • انقر فوق الزر يضيف;
  • في النافذة التي تفتح، انقر فوق الرمز استبدال ملف المعالجة الخارجي;
  • إذا قمت بإنشاء معلمات التسجيل التلقائي، فإننا نوافق على استخدامها؛
  • إذا لم تقم بإنشاء معلمات التسجيل التلقائي، ثم في الجزء الجدولي ملحق لوحة الطباعةإضافة الوثيقة أو الكتاب المرجعي المطلوب؛
  • اضغط الزر نعم.

بعد ذلك، سيكون نموذج الطباعة الخارجية متاحًا في القائمة ختموثيقة استلام البضائع والخدمات.يمكن الآن اعتبار إنشاء النموذج المطبوع 1C مكتملاً.

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

يوفر نموذج "PrintDocuments" بعض الوظائف الإضافية عند العمل مع النماذج المطبوعة، مثل:

  • زر للطباعة إلى الطابعة، مباشرة في النموذج؛
  • بيان عدد النسخ، النموذج المطبوع؛
  • تحرير النموذج المطبوع الذي تم إنشاؤه؛
  • القدرة على حفظ نموذج مطبوع بتنسيقات بيانات مختلفة (Excel، Word، PDF، إلخ)؛
  • إرسال نموذج مطبوع عبر البريد الإلكتروني؛
  • عمل مريح مع مجموعة من الوثائق.

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

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

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

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

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

في هذه الحالة هناك حالتين ممكنتين:

  1. عندما يتم إنشاء لوحة الطباعة مع تغيير التكوين؛
  2. عند إنشاء نموذج مطبوع دون تغيير التكوين، على سبيل المثال. يتم استخدام النظام الفرعي "التقارير والمعالجة الإضافية".

نقوم بإنشاء نموذج مطبوع عن طريق إضافته من خلال أداة التهيئة.

الاختلاف الأول.من خلال إنشاء المعالجة مع الفريق.

يتضمن هذا الخيار إضافة المعالجة مباشرة إلى كائنات البيانات التعريفية:

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

  1. أنشئ أمرًا يستدعي نموذجنا القابل للطباعة؛
  2. إنشاء النموذج نفسه؛
  3. إنشاء تخطيط لنموذج مطبوع؛
  4. قم بإجراء تغييرات على وحدة إدارة المعالجة.

إنشاء فريق

حدد في خصائص الأمر:

  • المجموعة التي نريد أن يظهر فيها الفريق بالشكل؛
  • نوع المعلمة هو بالضبط الكتاب المرجعي أو المستند الذي نصنع نموذجه المطبوع؛
  • طريقة استخدام المعلمة متعددة. بحيث يمكنك عرض النماذج المطبوعة لعدة عناصر محددة في القائمة مرة واحدة.

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

&في إجراء معالجة ClientCommand (معلمة الأمر، معلمات تنفيذ الأمر) // أدخل محتويات المعالج. FormParameters = New Structure("DataForPrint", CommandParameters); OpenForm("Processing.PrintForm.Form",FormParameters,CommandExecutionParameters.Source,CommandExecutionParameters.Uniqueness,CommandExecutionParameters.Window,CommandExecutionParameters.NavigationLink); نهاية الإجراء

تحتوي معلمة الإجراء Command Parameter بدقة على العناصر التي اخترناها للطباعة.

إنشاء نموذج

لنقم بإضافة نموذج للمعالجة، وإنشاء سمة نموذج من نوع قائمة القيم والتفاصيل اللازمة لنا لإدخال معلمات إضافية للنموذج المطبوع:

DataForPrint - اكتب ListValues؛

عدد الصفوف - اكتب الرقم.

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

انتقل إلى وحدة النموذج واكتب الكود التالي:

&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)PrintData.LoadValues(Parameters.PrintData); نهاية الإجراء &في إجراء العميل طباعة (أمر) Print ManagementClient. تنفيذ أمر الطباعة ("Processing.PrintForm"، //مدير الطباعة "PrintForm"، //Identifier GetObjectsForPrint()، //PrintObjectsThisObject، //مالك النموذج - النموذج الذي تسمى الطباعة منه GetPrintParameters()); // معلمات الطباعة - معلمات عشوائية للنقل إلى مدير الطباعة نهاية الإجراء & على وظيفة الخادم GetObjectsForPrint() Array = DataForPrint.UploadValues(); صفيف العودة؛ EndFunction &OnServer Function GetPrintParameters()PrintParameters = New Structure; خيارات الطباعة.إدراج ("عنوان النموذج"، "نموذج الطباعة")؛ // إحدى معلمات نموذج "طباعة المستند". // يحدد عنوان نموذج الإخراج القابل للطباعة. // نضيف هنا المعلمات الخاصة بنا، والتي نريد نقلها أيضًا إلى مدير الطباعة. PrintOptions.Insert("عدد الصفوف"، عدد الصفوف)؛ returnPrintOptions; وظيفة النهاية

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

نقوم بإنشاء أمر طباعة في النموذج ونكتب معالجه، والذي نطلق فيه وظيفة الوحدة العامة ManagePrintClient.ExecutePrintCommand، قم بتعيين المعلمات الضرورية لهذه الوظيفة، وهي:

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

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

إنشاء تخطيط النموذج المطبوع

إجراء تغييرات على وحدة إدارة المعالجة

من الآن فصاعدا، نقوم بتنفيذ الإجراءات القياسية لتطوير النماذج المطبوعة باستخدام النظام الفرعي "طباعة" من BSP.

أضف الكود التالي إلى وحدة المدير:

إجراء الطباعة (صفيف الكائنات، خيارات الطباعة، مجموعة نماذج الطباعة، كائنات الطباعة، خيارات الإخراج) التصدير إذا كان التحكم في الطباعة بحاجة إلى تخطيط الطباعة (مجموعة نماذج الطباعة، "نموذج الطباعة") ثم التحكم في طباعة المستند الجدولي إلى المجموعة (مجموعة نماذج الطباعة، نموذج "نموذج الطباعة"، NStr("ru = "نموذج الطباعة"")، PrintLayout(صفيف الكائنات، معلمات الطباعة)، "Processing.PrintForm.PF_MXL_PrintForm"،); إنهاء إذا؛ نهاية الإجراء & على وظيفة الخادم PrintLayout (صفيف الكائنات، خيارات الطباعة) TabularDocument = New TabularDocument; //إنشاء مستند جدول بيانات //////////////////////////////////// ////////////////////////////////////////////////////////////////////// /////////////// // الجزء الزائد من الوحدة // // هنا نقوم بإنشاء نموذجنا المطبوع Layout = GetLayout("PF_MXL_PrintForm"); لكل كائن من مصفوفة الكائنات Loop AreaHeader = Layout.GetArea("Header"); RegionObject = Layout.GetArea("Object"); TabularDocument.Output(HeaderArea); AreaObject.Parameters["Object"] = Object; TabularDocument.Output(AreaObject); For Account = 1 ByPrint Options["Number of Rows"] Cycle AreaLine = Layout.GetArea("Line"); AreaString.Parameters["String"] = Count; TabularDocument.Output(AreaString); EndCycle; TabularDocument.OutputHorizontalPageSeparator(); EndCycle; //الجزء المحدد من الوحدة /////////////////////////////////// ///////////////////////////////////////////////////////// ///////////////// Return TabularDocument; // قم بإرجاع مستند الجدول End of Function

الخيار الثاني. من خلال تنفيذ أمر الطباعة.

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

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

الإجراء AddPrintCommands(PrintCommands) ExportPrintCommand = PrintCommands.Add(); PrintCommand.Identifier = "PrintForm"; PrintCommand.View = NStr("ru = "طباعة نموذج مطبوع""); PrintCommand.Handler = " GeneralModulePrintForm.ProcessingPrintFormCommand"; PrintCommand.Order = 100؛ نهاية الإجراء

نضيف هنا أمر طباعة يسمى "طباعة النموذج المطبوع" إلى جميع نماذج الدليل (أذكرك أننا نعمل مع دليل الأطراف المقابلة). وهنا النقطة الرئيسية التي يجب أن تؤخذ بعين الاعتبار. يمكنك إضافة نوعين من الأوامر إلى النموذج:

1. استدعاء إجراء الطباعة من وحدة المدير؛

2. استدعاء طريقة العميل.

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

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

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

معالجة الوظيفةPrintCommandPrintForm(PrintParameters) تصدير // أدخل محتويات المعالج. FormParameters = New Structure("DataForPrint", PrintParameters.PrintObjects); OpenForm("Processing.PrintForm.Form", FormParameters); وظيفة النهاية

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

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

يمكن العثور على تنفيذ هذا الخيار في التكوينات القياسية، في الآليات المرتبطة بطباعة الموافقة على معالجة البيانات الشخصية.

نقوم بإنشاء معالجة إضافية.

ماذا لو لم يكن هذا هو التكوين الخاص بنا ويتم دعمه؟ وبشكل عام، لا نريد الدخول في التكوين وتعديله؟

في هذه الحالة، نحتاج إلى استخدام النظام الفرعي "التقارير والمعالجة الإضافية" من BSP.

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

1. معالجة وحدة الكائن؛

2. تجهيز وحدة النموذج.

في وحدة الكائن نكتب الكود التالي:

////////////////////////////////////////////////////////////////////// ///////////////////////// PROGRAM INTERFACE #ProgramInterface Area // إرجاع معلومات حول المعالجة الخارجية. معلومات الدالةOnExternalProcessing() ExportRegistrationParameters = ExtraReportsAndProcessing.InformationOnExternalProcessing("2.2.2.1"); Registration Parameters.View =AdditionalReportsAndProcessingClientServer.ProcessingViewPrintedForm(); معلمات التسجيل. الإصدار = "1.0"; NewCommand = معلمات التسجيل.Commands.Add(); NewCommand.Presentation = NStr("ru = "نموذج خارجي مطبوع مع طلب بيانات أولية""); NewCommand.Identifier = "ExternalPrintForm"; NewCommand.Use = extraReportsAndProcessingClientServer.CommandTypeOpenForm(); NewCommand.ShowAlert = True; NewCommand.Modifier = "PrintMXL"; returnRegistrationParameters; طباعة إجراء EndFunctions (بيانات الطباعة، مجموعة PrintForms، كائنات الطباعة، معلمات الإخراج) تصدير إذا PrintManage.NeedPrintLayout(PrintFormsCollection, "ExternalPrintForm") ثم PrintManage.OutputTabularDocumentIntoCollection(PrintFormsCollection, "ExternalPrintForm" chatForma), NStr("ru = "ورقة الامتحان"" ")، PrintLayout(PrintData)،); إنهاء إذا؛ نهاية الإجراء & على وظيفة الخادم PrintLayout(PrintData)PrintParameters = PrintData.Value; // يتلقى معلمات الطباعة من العنصر الأول في مجموعة كائنات قائمة القيمة = PrintData.Copy(); // انسخ قائمة القيم ArrayObjects.Delete(0); // احذف أسطر العنصر المنسوخ الذي يحتوي على خيارات الطباعة TabularDocument = New TabularDocument; //إنشاء مستند جدول بيانات //////////////////////////////////// ////////////////////////////////////////////////////////////////////// /////////////// // الجزء الزائد من الوحدة // // هنا نقوم بإنشاء نموذجنا المطبوع Layout = GetLayout("Layout"); لكل كائن من مصفوفة الكائنات Loop AreaHeader = Layout.GetArea("Header"); RegionObject = Layout.GetArea("Object"); TabularDocument.Output(HeaderArea); AreaObject.Parameters["Object"] = Object; TabularDocument.Output(AreaObject); For Account = 1 ByPrint Options["Number of Rows"] Cycle AreaLine = Layout.GetArea("Line"); AreaString.Parameters["String"] = Count; TabularDocument.Output(AreaString); EndCycle; TabularDocument.OutputHorizontalPageSeparator(); EndCycle; //الجزء المحدد من الوحدة /////////////////////////////////// ///////////////////////////////////////////////////////// ///////////////// Return TabularDocument; // قم بإرجاع مستند جدول البيانات EndFunction #EndArea

هناك وظيفتان وإجراء واحد.

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

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

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

في هذا النموذج نحتاج إلى إنشاء ثلاث تفاصيل لتخزين القيم التي سنحتاجها لاحقا. دعونا نسمي هذه التفاصيل على النحو التالي:

معرف الأمر - اكتب سلسلة

ObjectsAssignments - اكتب قائمة القيم

في وحدة هذا النموذج نكتب الكود التالي:

&في إجراء الخادم عند الإنشاء على الخادم (فشل، StandardProcessing) // عند الإنشاء على الخادم، تذكر المعلمات القياسية التي تم تمريرها من قبل النظام الفرعي الإضافي ExtraReportsAndProcessingLink = Parameters.AdditionalProcessingLink; CommandIdentifier = Parameters.CommandIdentifier; Destination Objects.LoadValues(Parameters.Destination Objects); EndProcedure &OnClient الإجراء Print(Command) // احصل على مفتاح التفرد للنموذج الذي يتم فتحه. UniqueKey = String(New UniqueIdentifier); // تحديد وملء المعلمات القياسية للنموذج العام PrintDocumentsOpeningParameters = New Structure("DataSource, SourceParameters"); OpeningParameters.DataSource = extraProcessingLink; OpeningParameters.SourceParameters = New Structure("CommandIdentifier, DestinationObjects"); OpeningParameters.SourceParameters.CommandIdentifier = CommandIdentifier; // ستتم معالجة الكائنات المراد طباعتها والمعلمات المدخلة في النموذج // سنمر عبر المعلمة Source Parameters.Destination ObjectsOpening Parameters.Source Parameters.Destination Objects = GetDestination ObjectsAndPrint Parameters(); OpenForm(" GeneralForm.PrintDocuments", OpeningParameters,FormOwner,UniqueKey); نهاية الإجراء &على وظيفة الخادم GetDestinationObjectsAndPrintParameters()PrintData = DestinationObjects.Copy(); ////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////// //////// // الجزء الزائد من الوحدة // // هنا نقوم بإنشاء بنية معلمات الطباعة ونملأها بالمعلمات // التي يجب تمريرها إلى وظيفة الطباعة Print Parameters = New Structure; PrintOptions.Insert("عدد الصفوف"، عدد الصفوف)؛ PrintData.Insert(0, PrintOptions); //الجزء المحدد من الوحدة /////////////////////////////////// ///////////////////////////////////////////////////////// ///////////////// ReturnPrintData; وظيفة النهاية

في إجراء CreateOnServer، نقوم بملء التفاصيل الثلاثة التي أنشأناها لتخزين المعلمات التي تم تمريرها إلى نموذج المعالجة.

بعد ذلك، نحدد معالجًا لزر الطباعة في النموذج. في هذا المعالج، نحتاج إلى فتح نموذج "طباعة المستندات" بأنفسنا؛ ولهذا نحتاج إلى إعداد معلمات الفتح لبنية معينة. في هذا الهيكل، على الأقل، يجب تحديد حقلين:

معلمات المصدر، والتي تتضمن معرف الأمر وكائنات الوجهة:

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

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

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

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

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

يتم تحديد مثل هذه المعالجات باستخدام معلمة Assignment Objects من خلال تفاصيل استدعاء إجراء وحدة كائن الطباعة. يمكنك تتبع كيفية تمرير المعلمات وإجراء استدعاءات الوظائف بنفسك عن طريق فتح وحدة نموذج طباعة المستندات.

نتيجة.

نتيجة لمثل هذه التلاعبات، سنتلقى ثلاثة أوامر على النموذج الذي نريد عرض النموذج المطبوع منه:

يتوافق ترقيم الأوامر مع ترتيب خيارات التنفيذ.

كل هذه الأوامر سوف تفعل نفس الشيء:

عرض نموذج طلب معلمات إضافية

إخراج النماذج المطبوعة التي تم إنشاؤها إلى نموذج "طباعة المستندات".. بالضبط ما أردناه:

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

دعونا نفكر في كتابة أبسط نموذج مطبوع فيه 1ث 8.1 - 8.2باستخدام مثال التكوين محاسبة المؤسسات 2.0. لنفترض أنك بحاجة إلى كتابة نموذج مطبوع خارجي للمستند: عرض البيانات الأساسية للمستند، وكذلك من الجزء الجدولي بضائع: التسمية والسعر والكمية والمقدار.

يمكنك تنزيل المثال الناتج من .

في التكوين 1C الشركات 8إنشاء معالجة خارجية ( ملف->جديد->معالجة خارجية)، قم بتعيين الاسم، وإنشاء التفاصيل المطلوبة للنموذج المطبوع الخارجي مرجع الكائنمع النوع DocumentLink مبيعات السلع والخدمات.

إنشاء تخطيط النموذج المطبوع

أضف واحدة جديدة تَخطِيط، اترك نوع التخطيط وثيقة جدول البيانات. نقوم بإنشاء ثلاث مناطق في التخطيط: الرأس، البياناتو قبو. يمكن القيام بذلك عن طريق تحديد العدد المطلوب من الأسطر والنقر على القائمة الجدول->الأسماء->تخصيص الاسم (Ctrl+Shift+N).

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

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

برمجة

دعنا ننتقل إلى وحدة كائن نموذج الطباعة الإجراءات->فتح وحدة الكائن.

لنقم بإنشاء وظيفة تصدير إلزامية للنماذج المطبوعة. ختم().

طباعة الوظيفة () يصدّروظيفة النهاية

في الدالة سنقوم بإنشاء متغير لـ وثيقة جدول البيانات، حيث سيتم إخراج النموذج المطبوع، نحصل عليه تَخطِيطو مناطق التخطيط.

TabDoc = TabularDocument الجديد؛ Layout = GetLayout("Layout" ); HeaderArea = Layout.GetArea("Header" ); AreaData = Layout.GetArea("البيانات" ); AreaFooter = Layout.GetArea("Footer" );

دعونا ملء المعلمات القبعاتوإحضاره إلى وثيقة جدول البيانات.

HeaderArea.Parameters.HeaderText = +LinkToObject.Number; HeaderArea.Parameters.Organization = LinkToObject.Organization; TabDoc.Output(HeaderArea);

للحصول على صفوف الجدول بضائعنستخدم الطلب.

طلب = طلب جديد؛ Request.SetParameter("Link"، ObjectLink); استعلام.نص = "حدد | مبيعات السلع والسلع الخدمات. | مبيعات السلع والسلع الخدمات. | مبيعات السلع وأسعار الخدمات. | كمية مبيعات السلع والخدمات|من | وثيقة مبيعات السلع والخدمات كيفية بيع السلع والسلع الخدمات|أين | رابط مبيعات السلع وبضائع الخدمات = &الرابط";

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

حدد = Query.Run().Select();

التالي في الحلقة نقوم بملء معلمات المنطقة بياناتلكل سطر من تحديد المستند وعرضها فيه وثيقة جدول البيانات. نقوم أيضًا بحساب القيم الإجمالية في الحلقة كمياتو كميات. لن نقوم بملء كل معلمة على حدة، ولكننا نستخدم الإجراء املأ قيم الخاصية ((<Приемник>, <Источник>) من السياق العالمي، فهو ينسخ قيم الممتلكات <Источника> إلى الخصائص <Приемника> . تتم المطابقة عن طريق أسماء الخصائص. يمكنك قراءة المزيد عن هذا في مساعد بناء الجملة 1C إنتربرايز 8.

المجموع = 0 ; الكمية الإجمالية = 0 ; while Selection.Next() Loop fillPropertyValues(AreaData.Parameters,Selection); TotalSum = TotalSum + Sample.Sum؛ TotalQuantity = TotalQuantity + Sample.Quantity؛ TabDoc.Output(AreaData); دورة النهاية؛

ملء وعرض المنطقة قبو.

AreaFooter.Parameters.TotalQuantity = TotalQuantity; AreaFooter.Parameters.TotalSum = TotalSum; TabDoc.Output(AreaFooter);

إرجاع مستند جدول البيانات المكتمل من الوظيفة ختم().

إرجاع TabDoc؛

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

5. ربط النموذج المطبوع بالمستند

في التكوينات القياسية 1C 8يوجد دليل لتسجيل النماذج المطبوعة الخارجية المعالجة الخارجية. للاتصال، انتقل إلى القائمة في وضع المؤسسة الخدمة->التقارير والمعالجة الإضافية->نماذج مطبوعة خارجية إضافية.

قم بإضافة عنصر دليل جديد، وقم بتحميل النموذج المطبوع من القرص وحدد نوع المستند.

الآن في الوثيقة مبيعات السلع والخدماتستظهر نسخة جديدة قابلة للطباعة.

التسجيل التلقائي للنموذج المطبوع

للتأكد من أنه عند توصيل نموذج الطباعة، لا تحتاج إلى تحديد نوع المستند يدويًا، يمكنك تكوينه التسجيل التلقائي. للقيام بذلك، قم بإضافة تخطيط جديد واستدعاءه الإعدادات_التسجيل التلقائي(هذه هي الطريقة الوحيدة) وفي خليتها الأولى نكتب توثيق.<Наименование документа> (أو الدلائل.<Наименование справочника> ).

الآن، عند توصيل نموذج الطباعة، سيُطلب منا استخدامه معلمات التسجيل التلقائي.