งานเบื้องหลัง: คุณสมบัติ ความสามารถ การตั้งค่า การรันงานพื้นหลังโดยทางโปรแกรม 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 การทำงานกับงานพื้นหลังในเวอร์ชันไฟล์ทำให้เกิดปัญหาบางประการ:

  1. จำเป็นต้องเปิดเซสชันแยกต่างหากซึ่งทำงานตลอดเวลา โดยแทนที่ตัวกำหนดตารางเวลา
  2. เซสชันนี้ควรมีการดำเนินการเมธอด RunJobProcessing() เป็นระยะ

หลังจากการอัพเดต การเริ่มต้นไคลเอนต์แบบหนาและแบบบางแต่ละครั้ง หากมีการระบุคีย์ AllowExecuteScheduledJobs ในการตั้งค่าการเปิดตัว (รูปที่ 4) ในช่อง "เพิ่มเติม" จะเริ่มต้นเธรดเพิ่มเติมสำหรับการเชื่อมต่อกับฐานข้อมูล ซึ่งจะไม่ส่งผลกระทบต่อ งานของผู้ใช้ในทางใดทางหนึ่ง แต่ดำเนินการเฉพาะในเบื้องหลังเท่านั้น

รูปที่ 4

ควรคำนึงว่าแม้ในเวอร์ชันไฟล์ของงาน กระบวนการเบื้องหลังไม่อนุญาตให้มีการทำงานแบบโต้ตอบกับผู้ใช้ (ข้อความบริการ คำเตือน และคำถามจะไม่แสดง) นั่นคือจะต้องเขียนโค้ดราวกับว่าจะดำเนินการบนฝั่งเซิร์ฟเวอร์

วิธีปิดการใช้งานงานที่กำหนดเวลาไว้

งานที่ไม่ได้ใช้สามารถปิดใช้งานได้โดยยกเลิกการเลือกช่องทำเครื่องหมาย "ใช้" ในคุณสมบัติของวัตถุ

ในกรณีที่ผู้ดูแลระบบจำเป็นต้องห้ามการใช้งานรูทีนและการทำงานเบื้องหลังสำหรับฐานข้อมูลทั้งหมดโดยรวม (เช่น ฐานข้อมูลหลายฐานข้อมูลถูกจัดเก็บไว้บนเซิร์ฟเวอร์ โดยมีเพียง 1 ฐานข้อมูลหลักเท่านั้น และที่เหลือใช้เพียงฐานข้อมูลเดียวเท่านั้น เพื่อการพัฒนา) จำเป็นต้องใช้ยูทิลิตีการดูแลฐานข้อมูล คุณยังสามารถทำเครื่องหมายที่ช่องทำเครื่องหมาย “ตั้งค่าการบล็อกงานประจำ” ในฐานข้อมูลที่สร้างขึ้นบนเซิร์ฟเวอร์

นอกจากนี้ดิสก์ ITS ยังมีการประมวลผลพิเศษ "คอนโซลงาน" ซึ่งช่วยให้คุณสามารถแก้ไขกำหนดการของกระบวนการพื้นหลังและเปลี่ยนแปลงกิจกรรมได้