จำนวนพารามิเตอร์งานพื้นหลังไม่ตรงกัน งานประจำและงานเบื้องหลัง (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

บนแท็บ "รายเดือน" กำหนดการรายเดือนของงานจะถูกระบุ

เลือกช่องทำเครื่องหมายสำหรับเดือนที่งานจะดำเนินการ หากจำเป็น คุณสามารถระบุวัน (เดือนหรือสัปดาห์) ของการดำเนินการที่เฉพาะเจาะจงได้ตั้งแต่ต้นเดือน/สัปดาห์หรือสิ้นสุด

การใช้งาน - หากตั้งค่าไว้ งานจะถูกดำเนินการตามกำหนดเวลา

กำหนดไว้ล่วงหน้า - หากตั้งค่าไว้ งานจะเป็นงานที่กำหนดไว้ล่วงหน้า

จำนวนการลองใหม่ในกรณีการสิ้นสุดที่ผิดปกติ - ระบุจำนวนการลองใหม่ในกรณีการสิ้นสุดที่ผิดปกติ

ช่วงเวลาการลองอีกครั้งเมื่อการสิ้นสุดที่ผิดปกติ - ระบุช่วงเวลาการลองอีกครั้งเมื่อการสิ้นสุดที่ผิดปกติ ตัวอย่าง

การสร้างงานพื้นหลัง “การอัปเดตดัชนีการค้นหาข้อความแบบเต็ม”:

BackgroundTasks.Run("การอัปเดต FullTextSearchIndex");

การสร้างงานประจำ "การกู้คืนลำดับ":

กำหนดการ = ScheduleTask ใหม่; กำหนดการPeriodRepeatDays = 1; Schedule.RepeatPeriodDuringDay = 0;

งาน = RoutineTasks.CreateRoutineTask ("การเรียกคืนลำดับ"); Job.Schedule = กำหนดการ; งาน.เขียน();

คอนโซลงาน

ประมวลผลด้วย ITS จัดการงานประจำ:

การทำงานกับงานประจำ

วัตถุงาน

ออบเจ็กต์งานไม่ได้ถูกอ้างอิง แต่ถูกจัดเก็บไว้ในฐานข้อมูลในพื้นที่เก็บข้อมูลพิเศษบางแห่ง

หากเปิดใช้งานการตั้งค่าสถานะ "ที่กำหนดไว้ล่วงหน้า" ในข้อมูลเมตา ออบเจ็กต์ดังกล่าวจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อ 1C:Enterprise เปิดตัวและจะมีอยู่ในอินสแตนซ์เดียวเสมอ วัตถุดังกล่าวไม่สามารถลบได้

หากไม่ได้ตั้งค่าสถานะ "ที่กำหนดไว้ล่วงหน้า" ออบเจ็กต์ของงานดังกล่าวจะถูกสร้างและลบโดยทางโปรแกรมโดยระบุกำหนดการและพารามิเตอร์

รับรายการงาน

สามารถรับรายการงานได้โดยใช้วิธีการ รับงานประจำผู้จัดการงานระดับโลก งานประจำ

ScheduledJobsManager

รับงานตามกำหนดเวลา (GetScheduledJobs)

ไวยากรณ์:

รับงานประจำ (<Отбор>)

ตัวเลือก:

<Отбор>(ไม่จำเป็น)

ประเภท: โครงสร้าง. โครงสร้างการกำหนดการเลือก ค่าโครงสร้างอาจเป็น: UniqueIdentifier, คีย์, ข้อมูลเมตา, กำหนดไว้ล่วงหน้า, การใช้งาน, ชื่อ หากไม่ได้ระบุการเลือก งานประจำทั้งหมดจะได้รับ

หากคุณกำลังกรองตามข้อมูลเมตา คุณสามารถระบุออบเจ็กต์ข้อมูลเมตาของงานประจำหรือชื่อเป็นค่าข้อมูลเมตาได้

ค่าส่งคืน:

ประเภท: อาร์เรย์

คำอธิบาย:

รับอาร์เรย์ของงานประจำสำหรับการเลือกที่กำหนด การรับงานที่กำหนดเวลาไว้สามารถทำได้สำหรับผู้ดูแลระบบเท่านั้น

มีจำหน่าย:

กิจวัตร = RoutineTasks.GetRoutineTasks (การเลือก);

สำหรับแต่ละกิจวัตรของวงจรประจำ 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 สำหรับผู้จัดการงานรูทีน:

RoutineTask = RoutineTasks.CreateRoutineTask (การเลือกข้อมูลเมตา);

RegularTask.Name = ชื่อ; RegularTask.Key = คีย์; RegularTask.Use = การใช้งาน; RoutineTask.UserName = UsersChoice; RoutineTask.Number of RepetitionsAtEmergencyCompletion = จำนวน RepetitionsAtEmergencyCompletion; ScheduledTask.RepeatIntervalAtEmergencyCompletion = ลองใหม่อีกครั้ง IntervalAtEmergencyCompletion; ScheduleTask.Schedule = กำหนดการ; RegularTask.บันทึก();

TaskObject = RoutineTasks.CreateRoutineTask ("ExchangeExchange");

TaskObject.Name = ชื่อ; JobObject.Use = จริง;

วัตถุงานมีฟิลด์ "พารามิเตอร์" ที่ระบุพารามิเตอร์วิธีการ:

งานที่กำหนดเวลาไว้

ตัวเลือก(พารามิเตอร์)

การใช้งาน:

อ่านและเขียน.

คำอธิบาย:

ประเภท: อาร์เรย์ อาร์เรย์ของพารามิเตอร์สำหรับงานตามกำหนดการ จำนวนและองค์ประกอบของพารามิเตอร์จะต้องสอดคล้องกับพารามิเตอร์ของวิธีการงานประจำ

มีจำหน่าย:

เซิร์ฟเวอร์ ไคลเอ็นต์แบบหนา การเชื่อมต่อภายนอก

บันทึก:

ความสามารถในการอ่านและเขียนมีให้เฉพาะผู้ดูแลระบบเท่านั้น

การกำจัด

ลบโดยใช้เมธอด Delete() ของวัตถุงาน:

ScheduledTask.Delete();

รับวัตถุงาน

  • รายการผ่านวิธี GetRoutineTasks:

กิจวัตร = RoutineTasks.GetRoutineTasks (การเลือก);

  • ผ่าน FindByUniqueIdentifier ของวิธีจัดการงาน:

งาน = ScheduledTasks.FindByUniqueIdentifier (UID);