งานเบื้องหลัง: คุณสมบัติ ความสามารถ การตั้งค่า การรันงานพื้นหลังโดยทางโปรแกรม 1c แบบฟอร์มที่ได้รับการจัดการตั้งค่างานพื้นหลังของไฟล์
อาจเป็นไปได้ว่าโปรแกรมเมอร์ 1C 8.3 ทุกคนไม่ช้าก็เร็วจะต้องตั้งค่าการดำเนินงานบางอย่างตามกำหนดเวลา ด้านล่างฉันจะให้ คำอธิบายโดยละเอียดกลไกเหล่านี้ก็หวังว่าจะเป็นเช่นนั้น ข้อมูลที่เป็นประโยชน์สำหรับโปรแกรมเมอร์ 1C มือใหม่ สะดวกมาก เนื่องจากไม่จำเป็นต้องมีการกระทำของมนุษย์ งานประจำจะได้รับการกำหนดค่าเพียงครั้งเดียวและทำงานตามกำหนดการของคุณ
คุณจะพบคำแนะนำโดยละเอียดโดยใช้ตัวอย่างด้านล่าง
งานประจำและพื้นหลังใน 1C คืออะไร
- งานที่กำหนดเวลาไว้เป็นกลไกพิเศษ 1C Enterprise 8.3 ที่ออกแบบมาเพื่อดำเนินการเฉพาะตามกำหนดเวลาที่กำหนด
- งานเบื้องหลัง- วัตถุที่สร้างขึ้นโดยงานประจำที่ดำเนินการตามที่ตั้งใจไว้โดยตรงโดยไม่ต้องมีส่วนร่วมของผู้ใช้หรือโปรแกรมเมอร์ 1C 8.2
กลไกของงานตามกำหนดเวลาและงานเบื้องหลังทำงานในโหมดไคลเอ็นต์-เซิร์ฟเวอร์ (SQL) ด้วยฟังก์ชันการทำงานของ DBMS หากคุณมีฐานข้อมูลไฟล์ ก็สามารถกำหนดค่างานได้เช่นกัน แต่ใช้หลักการที่แตกต่างออกไปเล็กน้อย
การตั้งค่างานพื้นหลังในโหมดไคลเอนต์เซิร์ฟเวอร์ 1C
ขั้นแรก เรามาสร้างออบเจ็กต์ข้อมูลเมตาใหม่ซึ่งเป็นงานประจำ ฉันจะเรียกงานของฉันว่า "กำลังโหลดอัตราสกุลเงิน" ลองดูที่แผงคุณสมบัติของวัตถุการกำหนดค่านี้:
รับบทเรียนวิดีโอ 267 บทเรียนบน 1C ฟรี:
- ชื่อวิธีการ— เส้นทางไปยังขั้นตอนที่จะดำเนินการในงานเบื้องหลังตามกำหนดเวลาที่กำหนด ขั้นตอนจะต้องอยู่ในโมดูลทั่วไป ไม่แนะนำให้ใช้แบบมาตรฐาน แต่เพื่อสร้างของคุณเอง อย่าลืมว่างานพื้นหลังทำงานบนเซิร์ฟเวอร์!
- การใช้งาน— สัญลักษณ์ของการใช้งานประจำ
- กำหนดไว้ล่วงหน้า— ระบุว่างานประจำถูกกำหนดไว้ล่วงหน้าแล้วหรือไม่ หากคุณต้องการให้งานรูทีนทำงานทันทีหลังจากวางในฐานข้อมูล ให้ระบุแฟล็กนี้ มิฉะนั้น คุณจะต้องใช้การประมวลผล Job Console หรือทำให้งานรันโดยทางโปรแกรม
- จำนวนการลองใหม่เมื่องานยุติอย่างผิดปกติ— มีกี่ครั้งที่งานเบื้องหลังถูกรีสตาร์ทหากดำเนินการโดยมีข้อผิดพลาด
- ลองช่วงเวลาอีกครั้งเมื่องานยุติอย่างผิดปกติ— ความถี่ที่งานเบื้องหลังจะถูกรีสตาร์ทหากเสร็จสมบูรณ์โดยมีข้อผิดพลาด
และมากที่สุด การตั้งค่าที่น่าสนใจ — กำหนดการ:
ที่นี่ คุณจะกำหนดค่าช่วงเวลาการเปิดตัวของขั้นตอนที่ระบุในช่อง "ชื่อวิธีการ" สมมติว่าฉันกำหนดค่าไว้
ความสนใจ!อย่าลืมปิดการใช้งานการบล็อกงานประจำและงานพื้นหลังในระดับ DBMS!
ซึ่งสามารถทำได้ในยูทิลิตี้การดูแลระบบของเวอร์ชันไคลเอนต์ - เซิร์ฟเวอร์หรือเมื่อสร้างฐานข้อมูลใหม่:
การตั้งค่างานประจำในโหมดไฟล์ 1C
ในโหมดไฟล์ การตั้งค่างานดังกล่าวจะค่อนข้างยากขึ้น สำหรับงานดังกล่าวจะต้องเปิดตัวเซสชันแยกต่างหากของโปรแกรม 1C ซึ่งมักแก้ไขได้ด้วยการสร้างผู้ใช้ "ทางเทคนิค" ซึ่งมีเซสชันทำงานอยู่ตลอดเวลา
ในโหมดไฟล์ งานรูทีนจะเริ่มต้นได้เมื่อมีการเรียกใช้เมธอด “RunTaskProcessing()”
สำหรับผู้ใช้ที่เฉพาะเจาะจงคุณสามารถกำหนดค่าวิธีนี้ให้ทำงานโดยใช้วิธีอื่น -
เชื่อมต่อรอแฮนด์เลอร์( <ИмяПроцедуры>, <Интервал>, <Однократно>).
- ชื่อขั้นตอน— ชื่อของขั้นตอนที่เชื่อมต่อเป็นตัวจัดการการรอ ชื่อของขั้นตอนการส่งออกของโมดูลแอปพลิเคชันที่ได้รับการจัดการ (module การสมัครปกติ) หรือโมดูลทั่วไประดับโลก ขั้นตอนจะต้องอยู่บนไคลเอนต์.
- ช่วงเวลา— ระยะเวลาระหว่างการดำเนินการในหน่วยวินาที
- ครั้งหนึ่ง- ทำอย่างไรให้งานสำเร็จเพียงครั้งเดียวหรือไม่
ConnectWaitHandler, 3600 ) ;
วิดีโอความยาวสองนาทีที่แสดงวิธีตั้งค่างานประจำในตัวกำหนดค่า 1C:
1C Enterprise มีงานประจำและงานเบื้องหลังในการกำหนดค่า งานเหล่านี้ได้รับการดำเนินการตามตัวกำหนดเวลา โดยคำนึงถึงกำหนดการสำหรับแต่ละงาน งานบางอย่างจะเริ่มดำเนินการโดยใช้ตัวจับเวลาหลังจากผ่านไปตามจำนวนวินาทีที่กำหนด ซึ่งอาจส่งผลเสียต่อประสิทธิภาพการทำงานและรบกวนการทำงานในฐานข้อมูลอย่างชัดเจน
หากต้องการแก้ไขงานประจำและงานเบื้องหลัง ในแท็บการดูแลระบบ ให้เลือก “งานประจำและงานเบื้องหลัง” ทางด้านซ้าย รายการงานที่มีอยู่ สถานะ กำหนดการ และข้อมูลอื่น ๆ จะปรากฏขึ้น
เมื่อคลิกสองครั้งที่งานใด ๆ หน้าต่างที่มีคุณสมบัติของงานนี้จะเปิดขึ้น ที่นี่คุณสามารถเปลี่ยนการตั้งค่าต่างๆ ตามที่คุณต้องการ รวมถึงกำหนดการสำหรับงานนี้ด้วย หากต้องการปิดการใช้งาน ต้องล้างช่องทำเครื่องหมาย "เปิดใช้งาน" แต่หากงานต้องรันตามกำหนดเวลา สิ่งสำคัญอย่างยิ่งคือต้องใช้ผู้ใช้แยกต่างหากที่มีสิทธิ์เต็มที่สำหรับงานเบื้องหลังทั้งหมด
พารามิเตอร์สำหรับการจัดกำหนดการงานมีความยืดหยุ่นมาก แต่ก็ยังแนะนำให้ตั้งค่างานทั้งหมดในลักษณะที่จะดำเนินการได้ครั้งละ 1 งานเท่านั้น และควรเป็นช่วงที่ไม่ใช่ชั่วโมงทำงาน ข้อยกเว้นเพียงอย่างเดียวอาจเป็นการซิงโครไนซ์ฐานข้อมูลข้อมูลที่เกี่ยวข้องหลายแห่ง เช่น การบัญชีองค์กร + บัญชีเงินเดือน และการจัดการบุคลากร
กำลังโหลดตัวแยกประเภทธนาคาร - วันอาทิตย์ 4:30 น
กำลังโหลดอัตราสกุลเงิน - ทุกวัน 07:00 น
การแยกข้อความ - ทุกวัน 6:00 น.
แลกเปลี่ยนข้อความระหว่างบัญชีการจัดการเอกสาร - ทุกวัน ทุกๆ 10800 วินาที
มีการอัพเดทหน่วยทุกวัน ตั้งแต่เวลา 05:00:00 น. วันละครั้ง
อัปเดตงานนักบัญชี - ทุกวัน ตั้งแต่เวลา 06:30:00 น. วันละครั้ง
อัปเดตดัชนี PPD (ค้นหาข้อความแบบเต็ม) - ทุกวัน ทุกๆ 10800 วินาที
สร้างหน่วยใหม่ - ทุกวันตามวันในสัปดาห์ [วันเสาร์]; ตั้งแต่เวลา 03:00:00 น. วันละครั้ง
การคำนวณค่าปัจจุบันของวันที่สัมพันธ์ของการห้ามการเปลี่ยนแปลง - ทุกวัน ตั้งแต่เวลา 07:00:00 น. วันละครั้ง
ผสานดัชนี PPD (ค้นหาข้อความแบบเต็ม) - ทุกวัน ตั้งแต่เวลา 04:00:00 น. วันละครั้ง
การลบข้อมูลการซิงโครไนซ์ที่ไม่เกี่ยวข้อง - ทุกวัน ตั้งแต่เวลา 03:30:00 น. วันละครั้ง
การกำหนดระยะเวลาสำหรับผลรวมที่คำนวณได้ - ทุกวันที่ 5 ของเดือน ตั้งแต่เวลา 01:00:00 น. วันละครั้ง
แนวคิดการเขียนโปรแกรมแบบอะซิงโครนัส
แนวคิดการเขียนโปรแกรมแบบอะซิงโครนัสคือผลลัพธ์ของการดำเนินการฟังก์ชันไม่สามารถใช้งานได้ทันที แต่หลังจากผ่านไประยะหนึ่งในรูปแบบของการเรียกแบบอะซิงโครนัส (ละเมิดลำดับการดำเนินการปกติ)
เหล่านั้น. แนวคิดหลักของการเขียนโปรแกรมแบบอะซิงโครนัสคือการเรียกใช้เมธอดแต่ละรายการและทำงานอื่นแบบขนานต่อไปโดยไม่ต้องรอให้การโทรเสร็จสิ้น
วิธีการบางอย่างที่ลดโอกาสที่จะเกิดข้อยกเว้นให้เหลือน้อยที่สุดไม่จำเป็นต้องใช้วิธีแบบอะซิงโครนัส แต่วิธีอื่นๆ จำเป็นต้องใช้ตั้งแต่เริ่มต้นของการพัฒนา
ดังที่เห็นได้จากกราฟ ไม่มีสัมประสิทธิ์การกระทำของผู้ใช้เชิงโต้ตอบที่มีประโยชน์กับโมเดลการเขียนโปรแกรมแบบซิงโครนัส เนื่องจากระบบบล็อกอินเทอร์เฟซผู้ใช้ ในขณะที่โมเดลอะซิงโครนัส ผู้ใช้ยังคงทำงานในระบบต่อไป
เมื่อทำงานแบบซิงโครนัส แอปพลิเคชันจะมีเธรดเดียวเท่านั้น ด้วยโมเดลการเขียนโปรแกรมแบบอะซิงโครนัส คุณสามารถรันหลายเธรดพร้อมกันและตอบสนองต่อการกระทำของผู้ใช้ใหม่ในขณะที่รัน เมื่อดำเนินการ n-thread คุณจะแสดงผลลัพธ์บนหน้าจอ
งานพื้นหลังใน 1C:Enterprise 8
ใน 1C:Enterprise 8 งานพื้นหลังได้รับการออกแบบมาเพื่อทำงานของแอปพลิเคชันแบบอะซิงโครนัส พวกเขาสามารถสร้างงานพื้นหลังย่อยได้ เช่น เพื่อทำการคำนวณที่ซับซ้อนพร้อมกันในเซิร์ฟเวอร์การทำงานที่แตกต่างกันของคลัสเตอร์ในโหมดการดำเนินการแบบไคลเอ็นต์-เซิร์ฟเวอร์
เป็นไปได้ที่จะจำกัดการดำเนินงานพื้นหลังที่มีวิธีการเดียวกันโดยขึ้นอยู่กับเกณฑ์การใช้งานเฉพาะ การสร้างและการจัดการงานพื้นหลังโดยทางโปรแกรมสามารถทำได้จากการเชื่อมต่อผู้ใช้ใดๆ ก็ตาม ฐานข้อมูลระบบ งานเบื้องหลังจะทำงานในนามของผู้ใช้ที่สร้างงานขึ้นมา
กลไกงานทำงานทั้งในโหมดไคลเอ็นต์ - เซิร์ฟเวอร์และโหมดไฟล์ แต่ความสามารถในการจัดการและดำเนินงานในทั้งสองเวอร์ชันนั้นแตกต่างกันบ้าง
ตัวเลือกไคลเอนต์เซิร์ฟเวอร์
ในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ การกำหนดเวลางานจะดำเนินการโดยตัวกำหนดเวลางาน ซึ่งอยู่ในตัวจัดการคลัสเตอร์
ตัวกำหนดเวลาจะตรวจสอบเป็นระยะๆ เพื่อดูว่าได้รับคำขอใดๆ เพื่อเรียกใช้งานเบื้องหลังหรือไม่ หากมีงานที่จำเป็นต้องดำเนินการ ตัวกำหนดเวลาจะกำหนดกระบวนการของผู้ปฏิบัติงานที่โหลดน้อยที่สุดในคลัสเตอร์ และมอบหมายงานของตนเองให้ดำเนินการตามลำดับ ดังนั้นกระบวนการของผู้ปฏิบัติงานคนเดียวกันจึงสามารถดำเนินงานหลาย ๆ งานพร้อมกันได้ หลังจากที่กระบวนการของผู้ปฏิบัติงานได้รับงาน กระบวนการของผู้ปฏิบัติงานจะสร้างการเชื่อมต่อกับฐานข้อมูลและดำเนินงานภายในการเชื่อมต่อนั้น หลังจากงานเสร็จสิ้น กระบวนการของผู้ปฏิบัติงานจะแจ้งผู้จัดกำหนดการว่างานเสร็จสมบูรณ์หรือไม่สำเร็จ
ตัวเลือกไฟล์
ตั้งแต่เวอร์ชัน 8.3.3.641 ของแพลตฟอร์ม นักพัฒนาได้ทำให้การทำงานเบื้องหลังในเวอร์ชันไฟล์ง่ายขึ้นอย่างมาก
ก่อนหน้านี้ หากต้องการดำเนินงานโดยอัตโนมัติ จำเป็นต้องเปิดเซสชัน 1C:Enterprise เพิ่มเติมแยกต่างหาก ซึ่งใช้เป็นตัวกำหนดเวลางาน และในเซสชั่นนี้ จำเป็นต้องดำเนินการวิธีการภาษาในตัวเป็นระยะ ExecuteTaskProcessing()วิธีการนี้ค่อนข้างยุ่งยาก ไม่สะดวก และจำกัดการใช้พื้นหลังและงานประจำในเวอร์ชันไฟล์ของงานอย่างมาก
ตอนนี้ทุกอย่างง่ายขึ้นมาก หากไคลเอ็นต์แบบบางหรือแบบหนาเริ่มต้นขึ้น และหากเว็บเซิร์ฟเวอร์มีการเชื่อมต่อไคลเอ็นต์ ในแต่ละแอปพลิเคชันเหล่านี้ เธรดอื่นจะเปิดตัวโดยอัตโนมัติพร้อมการเชื่อมต่อกับฐานข้อมูล เธรดเหล่านี้มีส่วนร่วมในการปฏิบัติงานเบื้องหลังและงานประจำ
แต่ละแอปพลิเคชันที่อยู่ในรายการจะดำเนินงานพื้นหลังของตนเอง หากแอปพลิเคชันได้เริ่มต้นงานเบื้องหลังหลายงาน งานเหล่านั้นจะถูกดำเนินการตามลำดับตามลำดับที่ได้รับ
ข้อเสียที่ชัดเจนของงานพื้นหลัง 1C: เนื่องจากดำเนินการบนฝั่งเซิร์ฟเวอร์ จึงไม่มีความเป็นไปได้ในการทำงานแบบโต้ตอบกับผู้ใช้ (เช่น ไม่สามารถแสดงข้อความหรือข้อมูลอื่น ๆ ได้ ข้อมูลทั้งหมดนี้จะต้องเก็บไว้ในฐานข้อมูลและประมวลผลเพิ่มเติมใน ด้วยวิธีใดวิธีหนึ่ง)
ควรสังเกตว่างานพื้นหลังเป็นออบเจ็กต์ซอฟต์แวร์ล้วนๆ และไม่สามารถจัดเก็บไว้ในฐานข้อมูลได้ นั่นคือเราสามารถสร้างได้เฉพาะอินสแตนซ์ของคลาส เริ่มต้นคุณสมบัติของคลาส และเปิดใช้งานเพื่อดำเนินการ
ตัวอย่างของการเรียกใช้โค้ดแบบอะซิงโครนัสใน 1C:Enterprise 8
“การเขียนโปรแกรมโดยไม่ทราบผลลัพธ์ของการเรียกใช้ฟังก์ชันเมื่อใดนั้นยากกว่าโปรแกรมทั่วไปมาก การโทรที่ซ้อนกัน การจัดการข้อผิดพลาด ควบคุมสิ่งที่เกิดขึ้น - ทุกอย่างซับซ้อนมากขึ้น” เฉพาะผู้ที่ไม่ทราบวิธีใช้ความสามารถของแพลตฟอร์มอย่างเหมาะสมเท่านั้นที่จะพูดสิ่งนี้ แต่ไม่ใช่พวกเรา!
มาสาธิตความเรียบง่ายและความสง่างามของการรันโค้ดแบบอะซิงโครนัสใน 1C:Enterprise 8 กัน!
ขั้นตอนที่ 1มาสร้างระบบรักษาความปลอดภัยข้อมูลใหม่สำหรับการพัฒนาการกำหนดค่ากันดีกว่า
ขั้นตอนที่ 2ในการกำหนดค่าเราจะเพิ่มโมดูลทั่วไป “Asynchronous Handlers”
เหตุใดเราจึงเพิ่มโมดูลที่ใช้ร่วมกัน? ทุกอย่างเป็นเรื่องง่ายที่นี่: เพื่อดำเนินการแบบอะซิงโครนัสใน 1C:Enterprise 8 จะมีการใช้งานพื้นหลังซึ่งมีผู้จัดการของตัวเอง - "BackgroundTask Manager" ออบเจ็กต์นี้มีเมธอด "เรียกใช้" ซึ่งเปิดใช้งานงานเบื้องหลัง
หันไปหาผู้ช่วยไวยากรณ์กันดีกว่า
ดังนั้นเราจึงต้องมีโมดูลทั่วไป
ขั้นตอนที่ 3ในโมดูลทั่วไป “Asyncronous Handlers” เราจะเพิ่มขั้นตอนการส่งออก OurLongOperation()
ขั้นตอน OurLongOperation(Duration) Export // การจำลองการกระทำระยะยาว (Duration วินาที)< Длительность Цикл КонецЦикла; КонецПроцедуры
OperationStartDate = CurrentDate(); While CurrentDate() - วันที่เริ่มต้นการดำเนินการ
ขั้นตอนที่ 4
เพิ่มการประมวลผล “แนวคิดการเขียนโปรแกรมแบบอะซิงโครนัส” ให้กับการกำหนดค่า (คุณสามารถสร้างการประมวลผลภายนอกได้)
เพิ่มหนึ่งแอตทริบิวต์ลงในแบบฟอร์ม:
ระยะเวลา (จำนวน)
และสองทีม
ดำเนินการ LongOperation;ดำเนินการแบบยาว-ยาวแบบอะซิงโครนัส
&ในขั้นตอนไคลเอนต์ ดำเนินการ Long-RunningOperation(Command) ExecuteLong-RunningOperationOnServer(); EndProcedure & ขั้นตอน OnServer ExecuteLongOperationOnServer () AsynchronousHandlers. OurLongOperation (ระยะเวลา); สิ้นสุดขั้นตอน &บนขั้นตอนไคลเอ็นต์ ดำเนินการดำเนินการแบบอะซิงโครนัสแบบยาวนาน (คำสั่ง) ดำเนินการแบบอะซิงโครนัสแบบรันยาวนานบนเซิร์ฟเวอร์ (); สิ้นสุดขั้นตอน &บนขั้นตอนเซิร์ฟเวอร์ ดำเนินการระยะยาวแบบอะซิงโครนัสบนเซิร์ฟเวอร์ () พารามิเตอร์ = อาร์เรย์ใหม่;
พารามิเตอร์เพิ่ม (ระยะเวลา); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", พารามิเตอร์, UniqueIdentifier ใหม่, "ตัวอย่างแนวคิดการเขียนโปรแกรมแบบอะซิงโครนัส"); สิ้นสุดขั้นตอน
ขั้นตอนที่ 6
มาเปิดตัวและตรวจสอบกันเถอะ!
ผลลัพธ์:
หากเราคลิกที่ปุ่ม "ดำเนินการระยะยาว" อินเทอร์เฟซผู้ใช้จะถูกบล็อกเป็นเวลา "ระยะเวลา" วินาที
หากเราคลิกที่ปุ่ม "ดำเนินการระยะยาวแบบอะซิงโครนัส" ส่วนต่อประสานกับผู้ใช้จะไม่ถูกบล็อกและโค้ดโปรแกรมจะถูกดำเนินการแบบขนาน
เราสามารถตรวจสอบได้ว่าโค้ดโปรแกรมถูกดำเนินการแบบอะซิงโครนัสโดยดูที่บันทึก
เราสามารถดีบักโค้ดโปรแกรมที่ทำงานใน "พื้นหลัง" ได้หากเราตั้งค่าคุณสมบัติที่เหมาะสมในพารามิเตอร์การดีบัก
ตัวอย่างของการเรียกใช้โค้ดแบบอะซิงโครนัสใน 1C:Enterprise 8 โดยใช้ BSP ลองพิจารณาตัวอย่างการนำแนวคิดการเขียนโปรแกรมแบบอะซิงโครนัสไปใช้ใน 1C:Enterprise 8 ใน BSP โดยใช้ตัวอย่างการประมวลผล "เหตุการณ์ปัจจุบัน"ตรรกะเป็นดังนี้: เมื่อโปรแกรมเริ่มทำงาน พื้นที่ทำงานจะถูกเตรียมใช้งาน
หน้าแรก
ซึ่งคุณสามารถแสดงแบบฟอร์มประมวลผล "เหตุการณ์ปัจจุบัน" ได้ แบบฟอร์มนี้กรอกโดยสถานการณ์ปัจจุบันของผู้ใช้ และต้องใช้เวลาในการกรอก หากนักพัฒนาไม่มีความสามารถในการรันโค้ดแบบอะซิงโครนัส อินเทอร์เฟซผู้ใช้จะถูกบล็อกในขณะที่กรอกแบบฟอร์มการประมวลผล!
มาวิเคราะห์โค้ดโปรแกรมของแบบฟอร์มกัน
เหตุการณ์แบบฟอร์ม "เมื่อ CreateOnServer" เรียกขั้นตอน "RunBackgroundTask" - นี่คือสิ่งที่เราต้องการ
มาวิเคราะห์ขั้นตอนนี้กันดีกว่าโดยไม่ถูกรบกวนจากความแตกต่างเล็กน้อย เชื่อมต่อรอแฮนด์เลอร์(<ИмяПроцедуры>, <Интервал>, <Однократно>).
และที่นี่เราจะเห็นว่ามีการใช้ตัวจัดการงานเบื้องหลังและวิธีการ "เรียกใช้" โปรดทราบว่านักพัฒนาจะจัดเก็บ ID เฉพาะสำหรับงานพื้นหลัง เมื่อต้องการทำเช่นนี้ นักพัฒนาใช้วิธีนี้ในขั้นตอนติดยาเสพติด Connectable_CheckTaskเสร็จสมบูรณ์()
นักพัฒนาเรียกใช้ฟังก์ชัน
ควรสังเกตว่า BSP ได้พัฒนาโมดูลทั่วไปเพื่อรองรับการทำงานของเซิร์ฟเวอร์ในระยะยาว
ดังนั้นแนวคิดการเขียนโปรแกรมแบบอะซิงโครนัสใน 1C:Enterprise 8 เพิ่มความซับซ้อนในการแก้ปัญหาสำหรับนักพัฒนาเล็กน้อยเล็กน้อย แต่ปรับปรุงการทำงานของโปรแกรมอย่างมากจากมุมมองของผู้ใช้
งานบางอย่างในการจัดการเอกสารและการบัญชีอาจจำเป็นต้องดำเนินการเป็นระยะ ตัวอย่างเช่นในวันที่ยี่สิบ หรือรายวัน
โดยทั่วไป บริษัทจะพยายามสร้างกฎสำหรับการปฏิบัติงานดังกล่าว ใคร เมื่อไร และอย่างไรควรทำงานให้เสร็จสิ้น ใครควรควบคุมงานดังกล่าว
งานดังกล่าวเรียกว่าการควบคุมซึ่งก็คือดำเนินการตามข้อบังคับ
ในด้านไอที การตรวจสอบมักดำเนินการในลักษณะที่ได้รับการควบคุม
มันคุ้นเคย ผู้ดูแลระบบ- มี โปรแกรมพิเศษซึ่งจะตรวจสอบประสิทธิภาพของเซิร์ฟเวอร์และโครงสร้างพื้นฐานเครือข่ายเป็นระยะๆ และรายงาน SMS หรือ ทางอีเมลผู้ดูแลระบบ
มีสิ่งที่คล้ายกันสำหรับผู้ดูแลเว็บ - เพื่อตรวจสอบความพร้อมใช้งานของเว็บไซต์ในระหว่างวัน
ใน 1C งานการตรวจสอบและงานเป็นระยะอื่น ๆ ที่ควรดำเนินการโดยอัตโนมัติตามกำหนดเวลาจะดำเนินการโดยใช้กลไกงานที่กำหนดเวลาไว้ของ 1C
วันนี้เราจะมาพูดถึงพวกเขากัน
งานที่กำหนดเวลาไว้ 1C
งานที่กำหนดเวลาไว้ 1C คืองานที่อนุญาตให้คุณดำเนินการตามที่ทำ แต่เป็นไปตามกำหนดเวลา
งานรูทีน 1C ในตัวปรับแต่งเป็นวิธีระบุการตั้งค่าและกำหนดเวลา อย่างไรก็ตาม กำหนดการสามารถเปลี่ยนแปลงได้แบบไดนามิกในภายหลังในโหมด 1C Enterprise
งานพื้นหลังสามารถสร้างได้จากข้อความโปรแกรมในภาษา 1C โดยพลการโดยไม่ต้องมีงาน 1C ที่กำหนดไว้ การคำนวณแบบขนานบนเซิร์ฟเวอร์
การดำเนินการตามภารกิจ 1C ตามปกติสามารถปิดใช้งานได้ชั่วคราว - เข้า
การเพิ่มงานประจำ 1C
งานประจำ 1C จะอยู่ในการกำหนดค่าในสาขางานทั่วไป/งานประจำ 1C มาเพิ่มงานด้านกฎระเบียบ 1C ใหม่และระบุชื่อ
ในคุณสมบัติของงานรูทีน 1C ชื่อวิธีการจะถูกระบุ เช่นเดียวกับใน ฟังก์ชันจะอยู่ในโมดูลทั่วไปโดยทำเครื่องหมายที่ช่องเซิร์ฟเวอร์ในคุณสมบัติ กล่าวคือ ต้องเพิ่มโมดูลล่วงหน้า
คุณสมบัติงานที่กำหนดเวลาไว้ 1C - ชื่องาน - กำหนดชื่อที่งานจะปรากฏในเครื่องมือการจัดการงาน
คุณสมบัติงานประจำ 1C - คีย์ - ช่วยให้คุณสามารถจัดกลุ่มงานประจำ 1C ที่แตกต่างกันได้หลายงาน สามารถเริ่มงานที่มีค่าคีย์เดียวกันได้ครั้งละหนึ่งงานเท่านั้น ค่านั้นสามารถกำหนดเองได้ ค่าว่างจะไม่ถูกนำมาพิจารณาระหว่างการควบคุม (นั่นคือ ถือว่าว่างเปล่า)
คุณสมบัติของงานประจำ 1C - กำหนดไว้ล่วงหน้า - กำหนดว่าเมื่อเปิดตัว 1C Enterprise งานดังกล่าวจะถูกสร้างขึ้นในสำเนาเดียวพร้อมกำหนดเวลาที่ระบุในตัวกำหนดค่า งานที่ไม่ได้กำหนดไว้ล่วงหน้าจะปรากฏโดยทางโปรแกรม ณ เวลาที่กำหนด
ใน การกำหนดค่าทั่วไปตัวอย่างเช่น การบัญชีรุ่น 2.0 งานประจำ 1C เช่นการอัปเดตการกำหนดค่าและการคำนวณผลรวมใหม่ถูกกำหนดไว้ล่วงหน้า แต่เช่นการแลกเปลี่ยนข้อมูลหรือการเคลื่อนไหวที่เลื่อนออกไปไม่ได้ถูกกำหนดไว้ล่วงหน้า
การใช้งาน – เปิดใช้งานงาน (นั่นคือ จะถูกดำเนินการก็ต่อเมื่อมีการเลือกช่องทำเครื่องหมาย การใช้งาน เท่านั้น)
ลองอีกครั้งในกรณีของการยุติที่ผิดปกติ - ตามที่คุณอาจเดาได้ หมายถึงการรีสตาร์ทงานหากไม่สามารถดำเนินการได้สำเร็จในครั้งแรก โดยจะระบุจำนวนครั้งที่ต้องรีสตาร์ทและระยะเวลาหลังจากการสิ้นสุดที่ผิดปกติ
การจัดการและการตรวจสอบงานประจำ 1C
ในการจัดการงาน 1C ตามปกติ จะมีคอนโซลงานการประมวลผลมาตรฐานพิเศษ นอกจากนี้ยังสามารถพบได้ที่
การประมวลผลนี้เป็นของสิ่งที่เรียกว่าการประมวลผล 1C มาตรฐานภายนอกสากลซึ่งมักจะไม่รวมอยู่ในการกำหนดค่า แต่จะแจกจ่ายแยกต่างหากเช่นบนดิสก์ ITS
การใช้การประมวลผลคอนโซลงานคุณสามารถ:
- เปิด/ปิดการทำงานของงาน 1C ตามปกติ
- กำหนด/เปลี่ยนแปลงกำหนดการของงาน 1C ประจำ (และพารามิเตอร์อื่นๆ)
- ระบุผู้ใช้ 1C ที่จะดำเนินงานประจำ 1C แทน
- ดูว่างานใดเสร็จสมบูรณ์เมื่อใดและด้วยผลลัพธ์ใด ข้อผิดพลาดในการทำงาน 1C ให้เสร็จสิ้น
- ทำงานให้เสร็จ
สำเนาฐานข้อมูลและงานประจำ 1C
หากคุณใช้เซิร์ฟเวอร์ 1C สถานการณ์ต่อไปนี้จะเกิดขึ้น:
- เพื่อวัตถุประสงค์ของคุณเอง (เช่น สำหรับการเขียนโปรแกรม) จะมีการจัดทำสำเนาฐานข้อมูลการทำงาน
- งาน ทดสอบ ฯลฯ ในสำเนาฐานข้อมูล
- คุณลืมปิดงาน 1C ประจำในฐานข้อมูลทดสอบดังกล่าว
แม้ว่างานประจำของ 1C จะดำเนินงานที่เกี่ยวข้องกับฐานข้อมูลเท่านั้น แต่ก็ไม่มีอะไรอยู่ในนั้น
อย่างไรก็ตาม งานประจำของ 1C มักจะสามารถบันทึกไฟล์ ข้อมูลใดๆ ไปยังฐานข้อมูลอื่น ทำการแลกเปลี่ยน และส่งอีเมลได้
ในกรณีนี้ คุณอาจได้รับส่วนผสมที่น่าสนใจระหว่างผลลัพธ์ของการปฏิบัติงาน 1C ตามปกติในฐานข้อมูลการทำงานและสำเนา
งานประจำ 1C สำหรับสำเนาของฐานข้อมูลการทำงานจะต้องปิดการใช้งานใน.
การปฏิบัติตามและการไม่ปฏิบัติตามงานด้านกฎระเบียบ 1C
เมื่อสร้างงาน 1C ประจำคุณต้องจำไว้ว่า:
- งานจะดำเนินการด้วยตัวเอง - จำเป็นต้องได้รับการตรวจสอบ
- งานจะดำเนินการในโมดูลบนเซิร์ฟเวอร์
- งานจะดำเนินการภายใต้ผู้ใช้ Windows อื่นโดยมีสิทธิ์ต่างกัน
ขั้นแรก คุณต้องตรวจสอบว่างานกำลังดำเนินการอยู่และสามารถดำเนินการเป็นงาน 1C ประจำได้
ประการที่สอง โมดูลเซิร์ฟเวอร์หมายความว่าหลายสิ่งที่มีอยู่ในไคลเอนต์ไม่พร้อมใช้งาน ตัวอย่างเช่น บางครั้ง เอกสารบางฉบับไม่สามารถโพสต์ได้เฉพาะบนเซิร์ฟเวอร์เท่านั้น เนื่องจากอัลกอริทึมอาจกำหนดให้ผู้ใช้เริ่มต้นการโพสต์ด้วยตนเอง และฟังก์ชันที่ไม่ใช่เซิร์ฟเวอร์ก็สามารถใช้ได้ เช่น
คำเตือน ("สวัสดี!")
ประการที่สาม หากงานเกี่ยวข้องกับบางสิ่งที่อยู่นอกฐานข้อมูล 1C สิทธิ์ก็มีความสำคัญ ผู้ใช้วินโดวส์ซึ่งงานจะถูกดำเนินการ
ประเด็นที่สามมีความสำคัญอย่างยิ่งในการพัฒนา หากไม่สามารถดำเนินการโมดูลบนเซิร์ฟเวอร์ งานจะไม่ถูกดำเนินการเลย ในการตรวจสอบ คุณต้องรันงานอย่างน้อยหนึ่งครั้งและดูผลลัพธ์ “งานเสร็จสมบูรณ์” ในการประมวลผลคอนโซลงาน
บ่อยครั้งเมื่อต้องเก็บรักษาบันทึกก็จำเป็นต้องทำ การดำเนินการเป็นระยะการกระทำบางอย่างโดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ งานประจำและงานเบื้องหลังใน 1C เป็นกลไกที่มีให้เพื่อจุดประสงค์นี้ในโปรแกรมเวอร์ชันที่แปดและอนุญาต:
- ตั้งค่าการจัดส่งเอกสารให้ตรงเวลา
- คำนวณยอดคงเหลือและผลรวม
- ตรวจสอบความถี่ของการส่งจดหมาย
- ตรวจสอบและลบข้อมูลที่ไม่เกี่ยวข้อง
งานที่อยู่เบื้องหลังและงานที่กำหนดเวลาไว้ - คืออะไรและกำหนดค่าไว้ที่ใด
งานประจำเป็นกลไกที่สร้างขึ้นใน 1C ที่ช่วยให้คุณสามารถกำหนดค่าและดำเนินการตามลำดับการกระทำบางอย่างตามกำหนดเวลาและความถี่ที่กำหนด
งานเบื้องหลังคือการดำเนินการที่สร้างขึ้นจากการดำเนินการตามปกติ และไม่จำเป็นต้องให้ผู้ใช้มีส่วนร่วมโดยตรง
งานประจำจะถูกสร้างขึ้นในโหมดตัวกำหนดค่า:
- ในหน้าต่างแผนผังการกำหนดค่า เราจะพบสาขาที่เกี่ยวข้อง (รูปที่ 1)
- คลิกปุ่มเพิ่ม;
- ในหน้าต่างที่เปิดขึ้น คุณต้องระบุชื่อที่ช่วยให้คุณสามารถระบุวัตถุในการกำหนดค่าได้
รูปที่ 2
- ตรงข้ามกับจารึก "กำหนดการ" (รูปที่ 2) มีจารึก "เปิด" ซึ่งคลิกที่จะเปิดหน้าต่างเพื่อตั้งเวลาและความถี่ในการดำเนินการของตัวจัดการ (รูปที่ 3)
รูปที่ 3
- นอกจากนี้ยังจำเป็นต้องกรอก "ชื่อวิธีการ" (ชื่อของขั้นตอนที่เรียกจากโมดูลทั่วไปและอธิบายอัลกอริทึมพฤติกรรมของโปรแกรมจะถูกป้อนที่นี่)
- ช่อง "ชื่อ" และ "คีย์" ช่วยให้คุณสามารถจัดกลุ่มวัตถุได้
- ช่องทำเครื่องหมาย "ใช้" ที่เลือกระบุกิจกรรมของการดำเนินการตามกำหนดเวลา
- ควรตั้งค่า "ที่กำหนดไว้ล่วงหน้า" หากตัวจัดการควรเปิดใช้งานทันทีหลังจากเพิ่มลงในฐานข้อมูล มิฉะนั้น การเปิดตัวสามารถทำได้จากการประมวลผลที่เกี่ยวข้อง (เพิ่มเติมเกี่ยวกับด้านล่าง)
- พารามิเตอร์ "จำนวนการลองใหม่" และ "ช่วงเวลาการลองใหม่" อธิบายการทำงานของโปรแกรมหากมีข้อยกเว้นเกิดขึ้นขณะรันงานเบื้องหลัง
ดังนั้น ด้วยการใช้กลไกของการปฏิบัติงานประจำ คุณสามารถกำหนดตารางเวลาและการดำเนินการหลักของงานเบื้องหลังได้ ตอนนี้เรามาดูคุณสมบัติของพวกเขากันดีกว่า
คุณสมบัติของงานพื้นหลัง
คุณลักษณะหลักของกลไกนี้คือกระบวนการเบื้องหลังทำงานแบบอะซิงโครนัส
สิ่งนี้หมายความว่าอย่างไร? ความจริงก็คือด้วยโมเดลการทำงานแบบซิงโครนัส หากมีการดำเนินการอัลกอริทึมใด ๆ การบล็อกจะเกิดขึ้น ส่วนต่อประสานกับผู้ใช้- ในกรณีของเรา ผู้ใช้สามารถป้อนและแก้ไขข้อมูลต่อไปได้แม้ว่าขั้นตอนจะทำงานอยู่ก็ตาม โมเดลการเขียนโปรแกรมแบบอะซิงโครนัสเกี่ยวข้องกับการแยกเธรดการคำนวณ
ดังนั้นงานเบื้องหลังใน 1C สามารถสร้างกระบวนการของตนเองได้ โดยกระจายการคำนวณไปยังเซิร์ฟเวอร์ต่างๆ ที่รวมอยู่ในคลัสเตอร์เดียวกัน
คุณสมบัติของการทำงานในโหมดไคลเอนต์ - เซิร์ฟเวอร์
- การวางแผนและการควบคุมการดำเนินการดำเนินการโดยตัวกำหนดเวลาจากคลัสเตอร์เซิร์ฟเวอร์
- หากคำขอดำเนินการปรากฏขึ้น ตัวกำหนดเวลาจะค้นหากระบวนการของผู้ปฏิบัติงานคลัสเตอร์ที่มีโหลดน้อยที่สุด และกระจายงานให้กับกระบวนการเหล่านั้นเพื่อดำเนินการ
- แต่ละกระบวนการสามารถทำการคำนวณแบบขนานได้หลายรายการ
- หลังจากที่งานมาถึง กระบวนการจะเชื่อมต่อกับฐานข้อมูลและดำเนินการอัลกอริทึมในนั้น
- กระบวนการรายงานผลลัพธ์ไปยังผู้จัดกำหนดการ
งานพื้นหลังในโหมดไฟล์
ก่อนแพลตฟอร์มเวอร์ชัน 8.3.3.641 การทำงานกับงานพื้นหลังในเวอร์ชันไฟล์ทำให้เกิดปัญหาบางประการ:
- จำเป็นต้องเปิดเซสชันแยกต่างหากซึ่งทำงานตลอดเวลา โดยแทนที่ตัวกำหนดตารางเวลา
- เซสชันนี้ควรมีการดำเนินการเมธอด RunJobProcessing() เป็นระยะ
หลังจากการอัพเดต การเริ่มต้นไคลเอนต์แบบหนาและแบบบางแต่ละครั้ง หากมีการระบุคีย์ AllowExecuteScheduledJobs ในการตั้งค่าการเปิดตัว (รูปที่ 4) ในช่อง "เพิ่มเติม" จะเริ่มต้นเธรดเพิ่มเติมสำหรับการเชื่อมต่อกับฐานข้อมูล ซึ่งจะไม่ส่งผลกระทบต่อ งานของผู้ใช้ในทางใดทางหนึ่ง แต่ดำเนินการเฉพาะในเบื้องหลังเท่านั้น
รูปที่ 4
ควรคำนึงว่าแม้ในเวอร์ชันไฟล์ของงาน กระบวนการเบื้องหลังไม่อนุญาตให้มีการทำงานแบบโต้ตอบกับผู้ใช้ (ข้อความบริการ คำเตือน และคำถามจะไม่แสดง) นั่นคือจะต้องเขียนโค้ดราวกับว่าจะดำเนินการบนฝั่งเซิร์ฟเวอร์
วิธีปิดการใช้งานงานที่กำหนดเวลาไว้
งานที่ไม่ได้ใช้สามารถปิดใช้งานได้โดยยกเลิกการเลือกช่องทำเครื่องหมาย "ใช้" ในคุณสมบัติของวัตถุ
ในกรณีที่ผู้ดูแลระบบจำเป็นต้องห้ามการใช้งานรูทีนและการทำงานเบื้องหลังสำหรับฐานข้อมูลทั้งหมดโดยรวม (เช่น ฐานข้อมูลหลายฐานข้อมูลถูกจัดเก็บไว้บนเซิร์ฟเวอร์ โดยมีเพียง 1 ฐานข้อมูลหลักเท่านั้น และที่เหลือใช้เพียงฐานข้อมูลเดียวเท่านั้น เพื่อการพัฒนา) จำเป็นต้องใช้ยูทิลิตีการดูแลฐานข้อมูล คุณยังสามารถทำเครื่องหมายที่ช่องทำเครื่องหมาย “ตั้งค่าการบล็อกงานประจำ” ในฐานข้อมูลที่สร้างขึ้นบนเซิร์ฟเวอร์
นอกจากนี้ดิสก์ ITS ยังมีการประมวลผลพิเศษ "คอนโซลงาน" ซึ่งช่วยให้คุณสามารถแก้ไขกำหนดการของกระบวนการพื้นหลังและเปลี่ยนแปลงกิจกรรมได้