จำนวนพารามิเตอร์งานพื้นหลังไม่ตรงกัน งานประจำและงานเบื้องหลัง (1Cv8)
ช่วยให้เราทำการคำนวณใดๆ ในระบบโดยที่ผู้ใช้ไม่มีใครสังเกตเห็น กล่าวคือ ในเบื้องหลัง นอกจากนี้ กลไกนี้ยังช่วยให้เราสามารถดำเนินการคำนวณแบบขนานได้ เรายังสามารถทำให้ขั้นตอนที่จะดำเนินการเป็นแบบขนานได้ เมื่อต้องการทำเช่นนี้ งานพื้นหลังของเราต้องรันงานพื้นหลังเพิ่มเติมอีกหลายงาน ในกรณีนี้ กระบวนการต่างๆ จะขนานกัน และถ้าเรามีระบบมัลติโปรเซสเซอร์และมัลติคอร์ อัลกอริธึมของเราก็จะทำงานได้อย่างมีประสิทธิภาพ หลังจากเปิดตัวกระบวนการต่างๆ แล้ว เราสามารถบอกระบบได้ว่าต้องรอให้กระบวนการเหล่านี้เสร็จสิ้นจึงจะสามารถรวมผลลัพธ์ได้
ตัวอย่างเช่น ในการกำหนดค่าทั่วไป ในขณะที่ผู้ใช้กำลังทำงาน งานบริการพื้นหลังประเภทต่างๆ จะถูกดำเนินการ สิ่งนี้สามารถเห็นได้จากรายการบันทึกที่บันทึกข้อเท็จจริงว่ามีการดำเนินการดังกล่าว ยิ่งไปกว่านั้นสิ่งนี้จะไม่ส่งผลกระทบต่องานของผู้ใช้แต่อย่างใด เพียงแต่เขาไม่สังเกตเห็นพวกเขาเลย
ตามหลักการแล้ว งานเบื้องหลังจะถูกนำไปใช้ในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ ซึ่งในกรณีนี้โหลดทั้งหมดจะถูกส่งไปยังเซิร์ฟเวอร์ สำหรับเวอร์ชันของไฟล์นั้น งานพื้นหลังก็เป็นไปได้ แต่มีลักษณะเฉพาะบางประการ
นี่คือสิ่งที่ระบบจะสร้างขึ้นหากคุณไม่คำนึงถึงคุณลักษณะเหล่านี้และรันงานเบื้องหลังในเวอร์ชันไฟล์ของฐานข้อมูล
งานพื้นหลัง 1C มีข้อจำกัดบางประการเนื่องจากมันทำงานบนฝั่งเซิร์ฟเวอร์ จึงไม่มีโอกาสโต้ตอบกับผู้ใช้ได้ ตัวอย่างเช่น คุณไม่สามารถแสดงข้อความหรือข้อมูลใดๆ ได้เลย ข้อมูลทั้งหมดนี้จำเป็นต้องเก็บไว้ในฐานข้อมูลและประมวลผลเพิ่มเติมในทางใดทางหนึ่ง
โดยการติดต่อผู้ช่วยไวยากรณ์ คุณสามารถรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับงานพื้นหลัง 1C ได้ ควรสังเกตว่าวัตถุนี้เป็นซอฟต์แวร์ล้วนๆ และไม่ได้จัดเก็บไว้ในฐานข้อมูลแต่อย่างใด นั่นคือเราสร้างอินสแตนซ์ของคลาส เริ่มต้นคุณสมบัติและเปิดใช้งานเพื่อดำเนินการ
เรามีเครื่องมืออะไรบ้างในการจัดการงานเบื้องหลัง? สิ่งอำนวยความสะดวกนี้เป็นออบเจ็กต์ข้อมูลเมตา "ตัวจัดการงานพื้นหลัง". วัตถุนี้มีวิธีการ "วิ่ง"เมื่อใช้วิธีนี้ งานเบื้องหลังจะเริ่มขึ้น
มีพารามิเตอร์ดังต่อไปนี้:
“ชื่อวิธี”- ชื่อของขั้นตอนหรือฟังก์ชันที่จะดำเนินการ และจะต้องเป็นขั้นตอนหรือฟังก์ชันของบริบทเซิร์ฟเวอร์
"ตัวเลือก"- อาร์เรย์ของพารามิเตอร์ จำนวนองค์ประกอบที่ต้องสอดคล้องกับจำนวนพารามิเตอร์ของขั้นตอน/ฟังก์ชันของเราที่ระบุในพารามิเตอร์ “ชื่อวิธี”;
"สำคัญ"- คีย์ที่ไม่ซ้ำกันซึ่งเป็นบรรทัดที่ระบบเข้าใจว่าจำเป็นต้องเปิดตัวงานเบื้องหลังหรืองานดังกล่าวกำลังทำงานอยู่หรือไม่
"ชื่อ"- ที่นี่คุณสามารถระบุคำอธิบายวิธีการของเราได้ตามใจชอบ
ค่าที่ส่งคืนเป็นวัตถุ "งานพื้นหลัง"ซึ่งมีชื่อวิธีการปัจจุบัน คีย์ปัจจุบัน และคุณสมบัติและวิธีการอื่นๆ อีกมากมาย วิธีหนึ่งดังกล่าวก็คือวิธีการ "รอเสร็จ". จุดประสงค์คือเราสามารถบอกระบบได้ว่าไม่ต้องทำอะไรจนกว่างานเบื้องหลังจะเสร็จสิ้น
งานพื้นหลัง 1C 8.2, 8.3 - ตัวอย่างการใช้งาน
มาดูตัวอย่างการทำงานกับงานพื้นหลัง 1C กัน ขั้นแรก เราจะสร้างอัลกอริทึมง่ายๆ ที่จะโหลดระบบ 1C ในเวลาสั้นๆ ในลักษณะที่เราไม่สามารถทำอะไรได้ในขณะนี้
สำหรับสิ่งนี้:1. มาสร้างโมดูลทั่วไปกันดีกว่า "ตัวจัดการงานพื้นหลัง"ซึ่งจะถูกคอมไพล์ทางฝั่งเซิร์ฟเวอร์
2. เราจะอธิบายขั้นตอนการส่งออกในนั้น "สร้างการคำนวณพื้นหลัง (พารามิเตอร์)"ซึ่งรับหนึ่งพารามิเตอร์ประเภทสตริง
ขั้นตอน PerformBackgroundCalculation(พารามิเตอร์) ExportStartTime = CurrentDate() ; ในขณะที่ CurrentDate() - เวลาเริ่มต้น< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("พารามิเตอร์บางอย่าง") ; สิ้นสุดขั้นตอนพร้อม. ตอนนี้เมื่อคุณเริ่มการประมวลผลและกดปุ่ม ระบบจะค้างเป็นเวลาหลายวินาที ซึ่งในระหว่างนั้นไม่สามารถทำอะไรได้ นี่คือสิ่งที่เราต้องทำ
ตอนนี้เราจะตรวจสอบให้แน่ใจว่าการคำนวณเหล่านี้ดำเนินการในพื้นหลังนั่นคือเพื่อให้งานพื้นหลัง 1C 8.2, 8.3 ดำเนินการ แต่ไม่รบกวนเรา
สำหรับสิ่งนี้:1. ในการประมวลผล ในเหตุการณ์คลิกปุ่ม ให้เขียนโค้ดต่อไปนี้
ขั้นตอน KnPress() พารามิเตอร์ = อาร์เรย์ใหม่; ตัวเลือก. เพิ่ม( "พารามิเตอร์บางอย่าง") ; งานพื้นหลัง วิ่ง ( "ตัวจัดการงานพื้นหลัง ดำเนินการคำนวณพื้นหลัง", พารามิเตอร์, UniqueIdentifier ใหม่ "ทดสอบ") ; สิ้นสุดขั้นตอนที่นี่เราจะส่งชื่อของขั้นตอนโมดูลทั่วไปเป็นพารามิเตอร์ตัวแรก และอาร์เรย์ของพารามิเตอร์เป็นพารามิเตอร์ตัวที่สอง พารามิเตอร์ตัวที่สามจะต้องส่งผ่านคีย์เฉพาะ และพารามิเตอร์ตัวที่สี่เป็นคำอธิบายขั้นตอนของเรา
อาจไม่ใช่การกำหนดค่าที่ร้ายแรงเพียงครั้งเดียวใน 1C 8.3 หรือ 8.2 ที่สามารถทำได้โดยไม่ต้องใช้งานประจำและงานเบื้องหลัง สะดวกมากเนื่องจากจะดำเนินการตามกำหนดเวลาที่กำหนดไว้อย่างชัดเจนโดยไม่มีการแทรกแซงของผู้ใช้หรือโปรแกรมเมอร์
เช่น คุณต้องแลกเปลี่ยนข้อมูลกับโปรแกรมอื่นวันละครั้ง เมื่อใช้งานประจำและงานเบื้องหลัง 1C จะสามารถดำเนินการเหล่านี้ได้อย่างอิสระ เช่น ในช่วงนอกเวลางาน วิธีการนี้จะไม่ส่งผลกระทบต่อประสบการณ์ผู้ใช้แต่อย่างใดและจะช่วยประหยัดเวลา
ก่อนอื่น เรามาทำความเข้าใจกันก่อนว่าพวกเขาหมายถึงอะไรและความแตกต่างคืออะไร:
- งานที่กำหนดเวลาไว้ช่วยให้คุณสามารถเปิดการดำเนินการเฉพาะใดๆ ตามกำหนดเวลาที่กำหนดไว้ล่วงหน้า
- งานเบื้องหลังเป็นวัตถุที่มีการดำเนินการที่จะดำเนินการ
สมมติว่าบริษัทของเราขายอะไรบางอย่างและมีเว็บไซต์ของตัวเองซึ่งระบุราคาไว้ เราต้องการอัปโหลดวันละครั้งเพื่อรักษาความเกี่ยวข้อง
เปิดการกำหนดค่าและเพิ่มงานที่กำหนดเวลาไว้
การตั้งค่าคุณสมบัติ
มาดูพารามิเตอร์ที่สำคัญที่สุดที่ต้องกรอกคุณสมบัติกัน
- ในสนาม" ชื่อวิธีการ» เลือกขั้นตอนของโมดูลทั่วไปเฉพาะที่จะดำเนินการโดยตรง มันจะระบุขั้นตอนทั้งหมดในการอัพโหลดราคาไปยังเว็บไซต์ของเรา โปรดทราบว่าการดำเนินการจะเกิดขึ้นบนเซิร์ฟเวอร์ นี่เป็นเหตุผล เนื่องจากการดำเนินการตามปกติจะดำเนินการโดยที่ผู้ใช้ไม่มีส่วนร่วม
- งานที่กำหนดเวลาไว้สามารถปิดใช้งานหรือเปิดใช้งานได้ตามต้องการ ไม่จำเป็นต้องแก้ไขกำหนดการของเขาทุกครั้ง เมื่อต้องการทำเช่นนี้ ในพาเล็ตคุณสมบัติ ให้ตั้งค่าหรือล้างแฟล็ก " การใช้งาน».
- สิ่งสำคัญอีกประการหนึ่งคือการกำหนดว่างานประจำนี้จะเป็นอย่างไร ที่กำหนดไว้ล่วงหน้า, หรือไม่. งานที่กำหนดเวลาไว้ล่วงหน้าจะถูกเปิดใช้งานโดยอัตโนมัติ หากไม่ได้ติดตั้งคุณสมบัตินี้ คุณจะต้องเปิดใช้งานโดยทางโปรแกรมหรือใช้การประมวลผล "คอนโซลงาน" กับ ITS
- คุณยังสามารถระบุได้ จำนวนการทำซ้ำและช่วงเวลาระหว่างพวกเขาในกรณีที่มีการเลิกจ้างที่ผิดปกติ การเลิกจ้างที่ผิดปกติหมายถึงสถานการณ์เหล่านั้นเมื่องานไม่เสร็จสมบูรณ์เนื่องจากข้อผิดพลาด
การกำหนดตารางเวลา
ขั้นตอนสุดท้ายคือการกำหนดตารางเวลาสำหรับการอัปโหลดของเราไปยังไซต์โดยใช้ไฮเปอร์ลิงก์ที่เกี่ยวข้องในแผงคุณสมบัติ
คุณจะเห็นการตั้งค่ากำหนดการทั่วไปใน 1C 8.3 ไม่มีอะไรซับซ้อนที่นี่ ในตัวอย่างนี้ เราตั้งค่าการเปิดตัวการอัปโหลดราคาไปยังไซต์ทุกวันตั้งแต่ตีห้าถึงเจ็ดโมงเช้า ในกรณีที่งานที่กำหนดเวลาไว้ไม่มีเวลาให้แล้วเสร็จก่อน 07.00 น. ก็จะแล้วเสร็จในวันถัดไป
การบล็อกงานที่กำหนดเวลาไว้
เรียกใช้ยูทิลิตี้มาตรฐาน“ การดูแลเซิร์ฟเวอร์องค์กร 1C” และเปิดคุณสมบัติของฐานข้อมูลที่คุณสร้างงานประจำ (สำหรับ 1C เวอร์ชันไคลเอ็นต์ - เซิร์ฟเวอร์)
ในหน้าต่างที่เปิดขึ้น (หลังจากป้อนข้อมูลเข้าสู่ระบบและรหัสผ่านเพื่อเข้าถึงความปลอดภัยของข้อมูล) ตรวจสอบว่าไม่ได้เลือกช่องทำเครื่องหมาย "เปิดใช้งานการบล็อกงานประจำ" หากคุณพบสถานการณ์ที่งานไม่ทำงาน ให้ตรวจสอบการตั้งค่านี้ก่อน
ในทำนองเดียวกัน คุณสามารถปิดการใช้งานงานประจำใน 1C 8.3 ได้อย่างสมบูรณ์ หากต้องการปิดใช้งานงานพื้นหลังบางงาน คุณสามารถใช้การประมวลผล "คอนโซลงานพื้นหลัง" ที่มีอยู่ในรุ่นล่าสุดได้
งานเบื้องหลังและกำหนดเวลาในโหมดไฟล์
ในโหมดนี้ การตั้งค่าและการเริ่มงานเหล่านี้จะยากกว่ามากในการจัดระเบียบ บ่อยครั้งที่มีการสร้างบัญชีเพิ่มเติม ซึ่งเซสชันจะเปิดอยู่เสมอ
ในกรณีนี้ งานประจำจะถูกเปิดใช้งานโดยใช้วิธี “RunTaskProcessing()”
คุณยังสามารถใช้โครงสร้างต่อไปนี้:
คุณต้องระบุชื่อของขั้นตอนไคลเอ็นต์ที่จะดำเนินการเป็นชื่อขั้นตอน ช่วงเวลาจะแสดงจำนวนวินาทีต่อมาที่การดำเนินการจะเกิดขึ้น ไม่จำเป็นต้องมีพารามิเตอร์ "ครั้งเดียว" สะท้อนให้เห็นว่าขั้นตอนนี้จะดำเนินการครั้งเดียวหรือหลายครั้ง
การติดตามข้อผิดพลาดในงานเบื้องหลัง
คุณสามารถดูความคืบหน้าของงานเบื้องหลัง ตลอดจนข้อผิดพลาดที่อาจเกิดขึ้นได้ในบันทึก ในตัวกรอง ให้เลือกแอปพลิเคชัน "งานพื้นหลัง" และเลือกความสำคัญของความสนใจ เช่น เฉพาะ "ข้อผิดพลาด" หากจำเป็น
บันทึกจะแสดงรายการทั้งหมดที่ตรงกับการเลือกของคุณ พร้อมด้วยความคิดเห็นที่จะช่วยให้คุณเข้าใจสาเหตุของข้อผิดพลาด
กลไกการทำงาน
กลไกงานได้รับการออกแบบมาเพื่อดำเนินการแอปพลิเคชันหรือฟังก์ชันการทำงานตามกำหนดเวลาหรือแบบอะซิงโครนัส
กลไกงานแก้ไขงานต่อไปนี้:
- ความสามารถในการกำหนดขั้นตอนการควบคุมในขั้นตอนการกำหนดค่าระบบ
- การดำเนินการตามที่กำหนดตามกำหนดเวลา
- การเรียกขั้นตอนหรือฟังก์ชันที่กำหนดแบบอะซิงโครนัส เช่น โดยไม่ต้องรอให้เสร็จ
- ติดตามความคืบหน้าของงานเฉพาะเจาะจงและรับสถานะเสร็จสมบูรณ์ (ค่าที่ระบุว่างานสำเร็จหรือไม่)
- รับรายการงานปัจจุบัน
- ความสามารถในการรอให้งานหนึ่งงานขึ้นไปเสร็จสิ้น
- การจัดการงาน (ความเป็นไปได้ของการยกเลิก การปิดกั้นการดำเนินการ ฯลฯ)
กลไกงานประกอบด้วยองค์ประกอบดังต่อไปนี้:
- ข้อมูลเมตาของงานประจำ
- งานประจำ;
- งานพื้นหลัง;
- ตัวกำหนดเวลางาน
งานเบื้องหลังได้รับการออกแบบมาเพื่อดำเนินงานแอปพลิเคชันแบบอะซิงโครนัส งานเบื้องหลังจะดำเนินการโดยใช้ภาษาในตัว
งานที่กำหนดเวลาไว้ - ออกแบบมาเพื่อปฏิบัติงานที่ประยุกต์ตามกำหนดเวลา งานประจำจะถูกจัดเก็บไว้ในฐานข้อมูลและสร้างขึ้นตามข้อมูลเมตาที่กำหนดไว้ในการกำหนดค่า ข้อมูลเมตาของงานด้านกฎระเบียบประกอบด้วยข้อมูล เช่น ชื่อ วิธีการ การใช้งาน ฯลฯ
งานประจำมีตารางเวลาที่กำหนดว่าจะต้องดำเนินการวิธีการที่เกี่ยวข้องกับงานประจำเมื่อใด ตามกฎแล้วกำหนดการระบุไว้ในฐานข้อมูล แต่ยังสามารถระบุได้ในขั้นตอนการกำหนดค่า (เช่น สำหรับงานประจำที่กำหนดไว้ล่วงหน้า)
ตัวกำหนดเวลางานใช้เพื่อกำหนดเวลาการปฏิบัติงานตามปกติ สำหรับงานที่กำหนดเวลาไว้แต่ละงาน ผู้จัดกำหนดการจะตรวจสอบเป็นระยะว่าวันที่และเวลาปัจจุบันตรงกับกำหนดการของงานที่กำหนดเวลาไว้หรือไม่ หากตรงกัน ผู้จัดกำหนดการจะมอบหมายงานนั้นให้ดำเนินการ เมื่อต้องการทำเช่นนี้ สำหรับงานตามกำหนดการนี้ ตัวจัดกำหนดการจะสร้างงานพื้นหลังซึ่งดำเนินการประมวลผลตามจริง
งานเบื้องหลัง
งานเบื้องหลังสะดวกในการใช้คำนวณที่ซับซ้อน เมื่อผลลัพธ์ของการคำนวณอาจใช้เวลานานในการรับ กลไกงานมีวิธีการคำนวณดังกล่าวแบบอะซิงโครนัส
ที่เกี่ยวข้องกับงานพื้นหลังเป็นวิธีการที่เรียกว่าเมื่องานพื้นหลังรัน วิธีการทำงานเบื้องหลังอาจเป็นขั้นตอนหรือฟังก์ชันใดๆ ของโมดูลทั่วไปที่ไม่ใช่แบบโกลบอลซึ่งสามารถเรียกใช้บนเซิร์ฟเวอร์ได้ พารามิเตอร์งานพื้นหลังอาจเป็นค่าใดก็ได้ที่ได้รับอนุญาตให้ส่งไปยังเซิร์ฟเวอร์ พารามิเตอร์ของงานพื้นหลังต้องตรงกับพารามิเตอร์ของขั้นตอนหรือฟังก์ชันที่เรียกใช้ทุกประการ หากวิธีการของงานพื้นหลังเป็นฟังก์ชัน ค่าที่ส่งคืนจะถูกละเว้น
งานเบื้องหลังสามารถมีคีย์ - ค่าแอปพลิเคชันใดก็ได้ คีย์แนะนำข้อจำกัดในการเริ่มงานพื้นหลัง - สามารถดำเนินการงานพื้นหลังได้เพียงงานเดียวต่อหน่วยเวลาด้วยค่าคีย์เฉพาะและชื่อวิธีงานพื้นหลังที่กำหนด (ชื่อวิธีการประกอบด้วยชื่อโมดูลและชื่อของขั้นตอน หรือฟังก์ชัน) คีย์นี้ช่วยให้คุณสามารถจัดกลุ่มงานพื้นหลังที่มีวิธีการเดียวกันตามคุณลักษณะเฉพาะของแอปพลิเคชัน เพื่อไม่ให้มีงานพื้นหลังมากกว่าหนึ่งงานภายในกลุ่มเดียว
งานเบื้องหลังจะถูกสร้างขึ้นและจัดการโดยทางโปรแกรมจากการเชื่อมต่อใดๆ ผู้ใช้ทุกคนจะได้รับอนุญาตให้สร้างงานพื้นหลังได้ ยิ่งไปกว่านั้น มันถูกดำเนินการในนามของผู้ใช้ที่สร้างมันขึ้นมา การรับงานรวมถึงการรอจนเสร็จสิ้นจะได้รับอนุญาตจากการเชื่อมต่อใดๆ กับผู้ใช้ที่มีสิทธิ์ระดับผู้ดูแลระบบ หรือกับผู้ใช้ที่สร้างงานเบื้องหลังเหล่านี้
งานพื้นหลังเป็นออบเจ็กต์เซสชันล้วนๆ และไม่ได้เป็นของเซสชันผู้ใช้ใดๆ สำหรับแต่ละงาน จะมีการสร้างเซสชันระบบพิเศษขึ้น โดยทำงานในนามของผู้ใช้ที่ทำการโทร งานเบื้องหลังไม่มีสถานะคงอยู่
งานพื้นหลังสามารถวางไข่งานพื้นหลังอื่นๆ ได้ ในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ การดำเนินการนี้ช่วยให้คุณสามารถคำนวณการคำนวณที่ซับซ้อนพร้อมกันระหว่างกระบวนการของผู้ปฏิบัติงานคลัสเตอร์ ซึ่งสามารถเร่งกระบวนการคำนวณโดยรวมได้อย่างมาก การทำงานแบบขนานนั้นดำเนินการโดยการสร้างงานพื้นหลังย่อยหลายงาน และรอให้งานแต่ละงานเสร็จสิ้นในงานพื้นหลังหลัก
งานเบื้องหลังที่เสร็จสมบูรณ์หรือล้มเหลวจะถูกเก็บไว้เป็นเวลา 24 ชั่วโมงแล้วจึงลบออก หากจำนวนงานพื้นหลังที่เสร็จสมบูรณ์เกิน 1,000 งานพื้นหลังที่เก่าที่สุดจะถูกลบออกด้วย
งานที่กำหนดเวลาไว้
งานที่กำหนดเวลาไว้จะใช้เมื่อจำเป็นต้องดำเนินการตามกำหนดเวลาหรือครั้งเดียวตามกำหนดเวลา
งานที่กำหนดเวลาไว้จะถูกจัดเก็บไว้ในฐานข้อมูลและสร้างขึ้นตามข้อมูลเมตาของงานประจำที่กำหนดไว้ในการกำหนดค่า ข้อมูลเมตาระบุพารามิเตอร์ของงานประจำดังนี้: วิธีการที่เรียกว่า ชื่อ คีย์ ความเป็นไปได้ในการใช้งาน สัญลักษณ์ของการกำหนดไว้ล่วงหน้า ฯลฯ เมื่อสร้างงานประจำ คุณสามารถระบุกำหนดการเพิ่มเติมได้ (สามารถระบุได้ในข้อมูลเมตา) ค่า ของพารามิเตอร์วิธีการ ชื่อของผู้ใช้ที่ดำเนินงานประจำแทน ฯลฯ
การสร้างและการจัดการงานที่กำหนดเวลาไว้จะดำเนินการโดยทางโปรแกรมจากการเชื่อมต่อใดๆ และได้รับอนุญาตเฉพาะกับผู้ใช้ที่มีสิทธิ์ระดับผู้ดูแลระบบเท่านั้น
บันทึก. เมื่อทำงานในเวอร์ชันไฟล์ คุณสามารถสร้างและแก้ไขงานประจำได้โดยไม่ต้องเรียกใช้ตัวกำหนดเวลางาน
เชื่อมโยงกับงานรูทีนเป็นวิธีการที่ถูกเรียกเมื่อมีการดำเนินการงานรูทีน วิธีการงานรูทีนอาจเป็นขั้นตอนหรือฟังก์ชันใดๆ ของโมดูลทั่วไปที่ไม่ใช่แบบโกลบอลซึ่งสามารถเรียกใช้บนเซิร์ฟเวอร์ได้ พารามิเตอร์ของงานประจำสามารถเป็นค่าใดก็ได้ที่ได้รับอนุญาตให้ส่งไปยังเซิร์ฟเวอร์ พารามิเตอร์ของงานประจำต้องตรงกับพารามิเตอร์ของขั้นตอนหรือฟังก์ชันที่เรียกใช้ทุกประการ หากวิธีการงานประจำเป็นฟังก์ชัน ค่าที่ส่งคืนจะถูกละเว้น
งานประจำสามารถมีคีย์ - ค่าแอปพลิเคชันใดก็ได้ คีย์แนะนำข้อจำกัดในการเปิดตัวงานที่กำหนดเวลาไว้ เนื่องจาก ต่อหน่วยเวลา ในบรรดางานประจำที่เกี่ยวข้องกับออบเจ็กต์เมตาดาต้าเดียวกัน สามารถดำเนินการงานประจำที่มีค่าคีย์เฉพาะได้เพียงงานเดียวเท่านั้น คีย์ช่วยให้คุณสามารถจัดกลุ่มงานประจำที่เกี่ยวข้องกับออบเจ็กต์เมตาดาต้าเดียวกันตามคุณลักษณะเฉพาะของแอปพลิเคชัน เพื่อไม่ให้มีงานประจำมากกว่าหนึ่งงานภายในกลุ่มเดียว
ในระหว่างการกำหนดค่า คุณสามารถกำหนดงานประจำที่กำหนดไว้ล่วงหน้าได้ งานรูทีนที่กำหนดไว้ล่วงหน้าไม่แตกต่างจากงานรูทีนปกติ ยกเว้นว่าไม่สามารถสร้างหรือลบได้อย่างชัดเจน หากมีการตั้งค่าไว้ในข้อมูลเมตาของงานที่กำหนดเวลาไว้ สัญญาณของงานประจำที่กำหนดไว้ล่วงหน้าจากนั้นเมื่ออัปเดตการกำหนดค่าในฐานข้อมูล งานประจำที่กำหนดไว้ล่วงหน้าจะถูกสร้างขึ้นโดยอัตโนมัติ หากล้างการตั้งค่าสถานะที่กำหนดไว้ล่วงหน้าแล้ว เมื่ออัปเดตการกำหนดค่าในฐานข้อมูล งานประจำที่กำหนดไว้ล่วงหน้าจะถูกลบโดยอัตโนมัติ ค่าเริ่มต้นของคุณสมบัติของงานที่กำหนดเวลาไว้ล่วงหน้า (เช่น กำหนดการ) จะถูกตั้งค่าไว้ในข้อมูลเมตา ในอนาคตเมื่อแอปพลิเคชันทำงานอยู่ก็สามารถเปลี่ยนแปลงได้ งานรูทีนที่กำหนดไว้ล่วงหน้าไม่มีพารามิเตอร์
กำหนดการงานประจำจะกำหนดเวลาที่ควรรันงานประจำ กำหนดการช่วยให้คุณสามารถตั้งค่า: วันที่และเวลาของการเริ่มต้นและสิ้นสุดของงาน ระยะเวลาดำเนินการ วันในสัปดาห์และเดือนที่ต้องดำเนินการตามกำหนดการที่กำหนดไว้ ฯลฯ (ดูคำอธิบายของ ในภาษา)
ตัวอย่างตารางงานประจำ:
ทุกชั่วโมงเพียงวันเดียว |
ระยะเวลา RepeatDays = 0, ระยะเวลา RepeatDays = 3600 |
ทุกวันวันละครั้ง |
ระยะเวลา RepeatDays = 1, ระยะเวลา RepeatDays = 0 |
วันหนึ่งครั้งหนึ่ง |
ระยะเวลาทำซ้ำวัน = 0 |
วันเว้นวัน วันละครั้ง |
ระยะเวลาทำซ้ำวัน = 2 |
ทุกชั่วโมง ตั้งแต่ 01.00 – 07.00 น. ทุกวัน |
ระยะเวลาทำซ้ำวัน = 1 ทำซ้ำระยะเวลาระหว่างวัน = 3600 เริ่มเวลา = 01.00 น เวลาสิ้นสุด = 07.00 น |
ทุกวันเสาร์และอาทิตย์ เวลา 09.00 น |
ระยะเวลาทำซ้ำวัน = 1 วันในสัปดาห์ = 6, 7 เริ่มเวลา = 09.00 น |
ทุกวันเป็นเวลาหนึ่งสัปดาห์ ข้ามหนึ่งสัปดาห์ |
ระยะเวลาทำซ้ำวัน = 1 ระยะเวลาสัปดาห์ = 2 |
เวลา 01.00 น. ครั้งหนึ่ง |
เริ่มเวลา = 01.00 น |
วันสุดท้ายของทุกเดือน เวลา 9.00 น. |
ระยะเวลาทำซ้ำวัน = 1 วันในเดือน = -1 เริ่มเวลา = 09.00 น |
วันที่ห้าของทุกเดือน เวลา 9.00 น |
ระยะเวลาทำซ้ำวัน = 1 วันในเดือน = 5 เริ่มเวลา = 09.00 น |
วันพุธที่สองของทุกเดือน เวลา 09:00 น |
ระยะเวลาทำซ้ำวัน = 1 วันสัปดาห์ในเดือน = 2 วันในสัปดาห์ = 3 เริ่มเวลา = 09.00 น |
คุณสามารถตรวจสอบว่างานกำลังทำงานในวันที่กำหนดหรือไม่ (วิธี RequiredExecution ของวัตถุ ScheduleTasks) งานที่กำหนดเวลาไว้จะดำเนินการภายใต้ชื่อผู้ใช้เฉพาะเสมอ หากไม่ได้ระบุผู้ใช้ของงานที่กำหนดเวลาไว้ การดำเนินการจะเกิดขึ้นในนามของผู้ใช้เริ่มต้นที่มีสิทธิ์ระดับผู้ดูแลระบบ
งานประจำจะดำเนินการโดยใช้งานเบื้องหลัง เมื่อตัวกำหนดเวลาพิจารณาว่าควรเปิดใช้งานงานที่กำหนดเวลาไว้ งานพื้นหลังจะถูกสร้างขึ้นโดยอัตโนมัติตามงานที่กำหนดเวลาไว้นี้ ซึ่งจะดำเนินการประมวลผลเพิ่มเติมทั้งหมด ถ้างานประจำนี้กำลังทำงานอยู่แล้ว งานนั้นจะไม่ถูกรันอีก โดยไม่คำนึงถึงกำหนดการ
งานที่กำหนดเวลาไว้สามารถเริ่มต้นใหม่ได้ โดยเฉพาะอย่างยิ่งเมื่อต้องรับประกันว่าวิธีงานประจำจะต้องดำเนินการได้ งานประจำจะเริ่มต้นใหม่เมื่อสิ้นสุดอย่างผิดปกติ หรือเมื่อกระบวนการของผู้ปฏิบัติงาน (ในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์) หรือกระบวนการไคลเอ็นต์ (ในเวอร์ชันไฟล์) ซึ่งงานประจำถูกดำเนินการสิ้นสุดลงอย่างผิดปกติ ในงานที่กำหนดเวลาไว้ คุณสามารถระบุจำนวนครั้งที่ต้องรีสตาร์ท รวมถึงช่วงเวลาระหว่างการรีสตาร์ท เมื่อใช้วิธีการงานประจำที่รีสตาร์ทได้ คุณต้องคำนึงว่าเมื่อรีสตาร์ทแล้ว การดำเนินการจะเริ่มต้นจากจุดเริ่มต้น และไม่ดำเนินการต่อจากช่วงเวลาที่สิ้นสุดอย่างผิดปกติ
สิ่งสำคัญคือต้องจำไว้ว่า เวลาสิ้นสุดไม่จำเป็นต้องทำงานเบื้องหลังให้เสร็จตามเวลาที่กำหนด ข้อความบางส่วน:
* งานเบื้องหลังสามารถเพิกเฉยต่อการยกเลิกอัตโนมัติได้หากไม่ได้ถูกหยุดทำงานแต่ยังคงทำงานต่อไปเนื่องจากไม่สามารถยกเลิกการทำงานของแพลตฟอร์มทั้งหมดได้ หากมีการดำเนินการรหัสวนของภาษาในตัว งานก็สามารถยกเลิกได้ ไม่เช่นนั้นจะยกเลิกไม่ได้ ทุกอย่างขึ้นอยู่กับว่างานทำอะไร * เวลาสิ้นสุด - ขอบเขตภายในที่งานสามารถเริ่มต้นได้มากกว่าสิ้นสุด? * การบังคับยุติงานจะย้อนกลับการเปลี่ยนแปลงที่เกิดขึ้นตั้งแต่เริ่มต้นธุรกรรมหรือไม่
คุณลักษณะของการดำเนินการงานเบื้องหลังในรูปแบบไฟล์และไคลเอ็นต์-เซิร์ฟเวอร์
กลไกในการดำเนินการงานเบื้องหลังในไฟล์และเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์จะแตกต่างกัน
- ในเวอร์ชันไฟล์ คุณต้องสร้างกระบวนการไคลเอ็นต์เฉพาะที่จะทำงานเบื้องหลัง เมื่อต้องการทำเช่นนี้ กระบวนการไคลเอ็นต์ต้องเรียกใช้ฟังก์ชันบริบทส่วนกลาง ExecuteJobProcessing เป็นระยะๆ กระบวนการไคลเอ็นต์เพียงหนึ่งกระบวนการต่อฐานข้อมูลควรประมวลผลงานเบื้องหลัง (และเรียกใช้ฟังก์ชันนี้ตามลำดับ) หากไม่ได้สร้างกระบวนการไคลเอ็นต์เพื่อประมวลผลงานเบื้องหลัง เมื่อเข้าถึงกลไกงานโดยทางโปรแกรม ข้อผิดพลาด "Job Manager ไม่ได้ใช้งานอยู่" จะปรากฏขึ้น ไม่แนะนำให้ใช้กระบวนการไคลเอ็นต์ที่ประมวลผลงานเบื้องหลังสำหรับฟังก์ชันอื่นๆ
เมื่อเริ่มต้นการประมวลผลงานพื้นหลังของกระบวนการไคลเอนต์ กระบวนการไคลเอนต์อื่น ๆ จะสามารถเข้าถึงกลไกงานพื้นหลังโดยทางโปรแกรมได้ เช่น สามารถเรียกใช้และจัดการงานเบื้องหลังได้
ในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ ตัวกำหนดเวลางานใช้เพื่อดำเนินงานเบื้องหลังซึ่งอยู่ในตัวจัดการคลัสเตอร์ สำหรับงานพื้นหลังที่อยู่ในคิวทั้งหมด ตัวกำหนดเวลาจะได้รับกระบวนการของผู้ปฏิบัติงานที่โหลดน้อยที่สุด และใช้เพื่อรันงานพื้นหลังที่เกี่ยวข้อง กระบวนการของผู้ปฏิบัติงานดำเนินงานและแจ้งผู้จัดกำหนดการผลการดำเนินการ
ในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ คุณสามารถบล็อกการปฏิบัติงานประจำได้ การดำเนินงานตามปกติจะถูกบล็อกในกรณีต่อไปนี้:
- มีการติดตั้งการบล็อกงานประจำอย่างชัดเจนบนฐานข้อมูล การล็อคสามารถตั้งค่าได้ผ่านคอนโซลคลัสเตอร์
- มีบล็อกการเชื่อมต่ออยู่ในฐานข้อมูล การล็อคสามารถตั้งค่าได้ผ่านคอนโซลคลัสเตอร์
- เมธอด SetExclusionMode() ที่มีพารามิเตอร์ True ถูกเรียกจากภาษาที่มีอยู่แล้ว
- ในบางกรณี (เช่น เมื่ออัพเดตการกำหนดค่าฐานข้อมูล)
การสร้างข้อมูลเมตาสำหรับงานประจำ
ก่อนที่คุณจะสร้างงานประจำในฐานข้อมูลโดยทางโปรแกรม คุณต้องสร้างออบเจ็กต์ข้อมูลเมตาก่อน
หากต้องการสร้างออบเจ็กต์เมทาดาทาสำหรับงานรูทีนในแผนผังการกำหนดค่าในสาขา "ทั่วไป" สำหรับสาขา "งานประจำ" ให้ดำเนินการคำสั่ง "เพิ่ม" และกรอกคุณสมบัติต่อไปนี้ของงานรูทีนในแผงคุณสมบัติ:
ชื่อวิธีการ - ระบุชื่อของวิธีการงานประจำ
คีย์ - ระบุค่าสตริงที่ต้องการที่จะใช้เป็นคีย์ของงานที่กำหนดเวลาไว้
กำหนดการ - ระบุกำหนดการของงานประจำ หากต้องการสร้างกำหนดการ ให้คลิกลิงก์ "เปิด" และตั้งค่าที่ต้องการในแบบฟอร์มกำหนดการที่เปิดขึ้นมา
บนแท็บ "ทั่วไป" วันที่เริ่มต้นและสิ้นสุดของงานและโหมดทำซ้ำจะถูกระบุ
บนแท็บ "รายวัน" กำหนดการรายวันของงานจะถูกระบุ
ระบุกำหนดการ:
- เวลาเริ่มต้นและเวลาสิ้นสุดของงาน
- เวลาเสร็จสิ้นงาน หลังจากนั้นจะถูกบังคับยุติ
- ระยะเวลาการทำซ้ำงาน
- ระยะเวลาของการหยุดชั่วคราวระหว่างการทำซ้ำ
- ระยะเวลาการดำเนินการ
อนุญาตให้ระบุการรวมเงื่อนไขโดยพลการ
บนแท็บ "รายสัปดาห์" กำหนดการรายสัปดาห์ของงานจะถูกระบุ
เลือกช่องทำเครื่องหมายสำหรับวันในสัปดาห์ที่งานจะดำเนินการ หากคุณต้องการทำซ้ำงาน ให้ระบุช่วงเวลาทำซ้ำในหน่วยสัปดาห์ ตัวอย่างเช่น งานจะดำเนินการใน 2 สัปดาห์ ค่าทำซ้ำคือ 2
บนแท็บ "รายเดือน" กำหนดการรายเดือนของงานจะถูกระบุ
เลือกช่องทำเครื่องหมายสำหรับเดือนที่งานจะดำเนินการ หากจำเป็น คุณสามารถระบุวัน (เดือนหรือสัปดาห์) ของการดำเนินการที่เฉพาะเจาะจงได้ตั้งแต่ต้นเดือน/สัปดาห์หรือสิ้นสุด
การใช้งาน - หากตั้งค่าไว้ งานจะถูกดำเนินการตามกำหนดเวลา
กำหนดไว้ล่วงหน้า - หากตั้งค่าไว้ งานจะเป็นงานที่กำหนดไว้ล่วงหน้า
จำนวนการลองใหม่ในกรณีการสิ้นสุดที่ผิดปกติ - ระบุจำนวนการลองใหม่ในกรณีการสิ้นสุดที่ผิดปกติ
ช่วงเวลาการลองอีกครั้งเมื่อการสิ้นสุดที่ผิดปกติ - ระบุช่วงเวลาการลองอีกครั้งเมื่อการสิ้นสุดที่ผิดปกติ ตัวอย่าง
การสร้างงานพื้นหลัง “การอัปเดตดัชนีการค้นหาข้อความแบบเต็ม”:
การสร้างงานประจำ "การกู้คืนลำดับ":
งาน = RoutineTasks.CreateRoutineTask ("การเรียกคืนลำดับ"); Job.Schedule = กำหนดการ; งาน.เขียน();
คอนโซลงาน
ประมวลผลด้วย ITS จัดการงานประจำ:
การทำงานกับงานประจำ
วัตถุงาน
ออบเจ็กต์งานไม่ได้ถูกอ้างอิง แต่ถูกจัดเก็บไว้ในฐานข้อมูลในพื้นที่เก็บข้อมูลพิเศษบางแห่ง
หากเปิดใช้งานการตั้งค่าสถานะ "ที่กำหนดไว้ล่วงหน้า" ในข้อมูลเมตา ออบเจ็กต์ดังกล่าวจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อ 1C:Enterprise เปิดตัวและจะมีอยู่ในอินสแตนซ์เดียวเสมอ วัตถุดังกล่าวไม่สามารถลบได้
หากไม่ได้ตั้งค่าสถานะ "ที่กำหนดไว้ล่วงหน้า" ออบเจ็กต์ของงานดังกล่าวจะถูกสร้างและลบโดยทางโปรแกรมโดยระบุกำหนดการและพารามิเตอร์
รับรายการงาน
สามารถรับรายการงานได้โดยใช้วิธีการ รับงานประจำผู้จัดการงานระดับโลก งานประจำ
ScheduledJobsManager
รับงานตามกำหนดเวลา (GetScheduledJobs)
ไวยากรณ์:
รับงานประจำ (<Отбор>)
ตัวเลือก:
<Отбор>(ไม่จำเป็น)
ประเภท: โครงสร้าง. โครงสร้างการกำหนดการเลือก ค่าโครงสร้างอาจเป็น: UniqueIdentifier, คีย์, ข้อมูลเมตา, กำหนดไว้ล่วงหน้า, การใช้งาน, ชื่อ หากไม่ได้ระบุการเลือก งานประจำทั้งหมดจะได้รับ
หากคุณกำลังกรองตามข้อมูลเมตา คุณสามารถระบุออบเจ็กต์ข้อมูลเมตาของงานประจำหรือชื่อเป็นค่าข้อมูลเมตาได้
ค่าส่งคืน:
ประเภท: อาร์เรย์
คำอธิบาย:
รับอาร์เรย์ของงานประจำสำหรับการเลือกที่กำหนด การรับงานที่กำหนดเวลาไว้สามารถทำได้สำหรับผู้ดูแลระบบเท่านั้น
มีจำหน่าย:
สำหรับแต่ละกิจวัตรของวงจรประจำ NewLine = รายการ RoutineTasks.Add(); NewRow.Metadata = Regular.Metadata.View(); NewLine.Name = Regular.Name; NewString.Key = ปกติ.คีย์; NewLine.Schedule = Schedule.Schedule; NewLine.User = ปกติ.ชื่อผู้ใช้; NewString.Predefed = Regular.Predefed; NewString.Use = ปกติ.ใช้; NewString.Identifier = Regular.UniqueIdentifier;
LastTask = ปกติ LastTask; ถ้า LastTask<>ไม่ได้กำหนดไว้ จากนั้น NewRow.Running = LastTask.Start; NewRow.State = LastTask.State; สิ้นสุดถ้า; สิ้นสุดรอบ;
การสร้าง
สร้างโดยเมธอด Create RoutineTask สำหรับผู้จัดการงานรูทีน:
RegularTask.Name = ชื่อ; RegularTask.Key = คีย์; RegularTask.Use = การใช้งาน; RoutineTask.UserName = UsersChoice; RoutineTask.Number of RepetitionsAtEmergencyCompletion = จำนวน RepetitionsAtEmergencyCompletion; ScheduledTask.RepeatIntervalAtEmergencyCompletion = ลองใหม่อีกครั้ง IntervalAtEmergencyCompletion; ScheduleTask.Schedule = กำหนดการ; RegularTask.บันทึก();
TaskObject.Name = ชื่อ; JobObject.Use = จริง;
วัตถุงานมีฟิลด์ "พารามิเตอร์" ที่ระบุพารามิเตอร์วิธีการ:
งานที่กำหนดเวลาไว้
ตัวเลือก(พารามิเตอร์)
การใช้งาน:
อ่านและเขียน.
คำอธิบาย:
ประเภท: อาร์เรย์ อาร์เรย์ของพารามิเตอร์สำหรับงานตามกำหนดการ จำนวนและองค์ประกอบของพารามิเตอร์จะต้องสอดคล้องกับพารามิเตอร์ของวิธีการงานประจำ
มีจำหน่าย:
เซิร์ฟเวอร์ ไคลเอ็นต์แบบหนา การเชื่อมต่อภายนอก
บันทึก:
ความสามารถในการอ่านและเขียนมีให้เฉพาะผู้ดูแลระบบเท่านั้น
การกำจัด
ลบโดยใช้เมธอด Delete() ของวัตถุงาน:
รับวัตถุงาน
- รายการผ่านวิธี GetRoutineTasks:
- ผ่าน FindByUniqueIdentifier ของวิธีจัดการงาน: