1c กระบวนการของผู้ปฏิบัติงานเบื้องหลังสิ้นสุดลงอย่างผิดปกติ กระบวนการงานเบื้องหลังสิ้นสุดลงอย่างผิดปกติ แนวคิดการเขียนโปรแกรมแบบอะซิงโครนัส

คำถาม: กระบวนการงานเบื้องหลังล้มเหลว...


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

คำตอบ:() () สวัสดีตอนบ่ายอีกครั้ง) ฉันเปิดนิตยสารเทคโนโลยีแล้วพบสิ่งที่น่าสนใจเหล่านี้ (บางทีคุณอาจรู้ว่าปัญหาคืออะไร):
มีความพยายามดำเนินการกับวัตถุที่ไม่ใช่ซ็อกเก็ต...
กระบวนการสิ้นสุดลง สายโทรออกถูกปฏิเสธ...
ไม่พบเซิร์ฟเวอร์ที่โฮสต์บริการ...

คำถาม: งานพื้นหลัง


แพลตฟอร์ม 1C:องค์กร 8.3 (8.3.9.2170) ประชุม BP 3.0
การกำหนดค่าจะกำหนดค่าการรวมผ่านแหล่งข้อมูลภายนอก (ประเภท DBMS - OracleDatabase) มีการเพิ่มตารางจำนวนหนึ่งซึ่งมีการโหลดข้อมูลหลักและธุรกรรม เพราะ มีข้อมูลจำนวนมาก ดังนั้นจึงตัดสินใจดาวน์โหลดเป็นชุดผ่านงานเบื้องหลัง ขนาดส่วนคือ 100,000 ขนาดแบทช์คือ 10,000 จำนวนธุรกรรมในเอกสารคือ 1,000 จำนวนงานพื้นหลังที่ทำงานพร้อมกันคือ 8
ฉันเปิดตัวโหลดทุกอย่างก็โอเค แต่ถ้าฉันใส่ตอนกลางคืน จะรู้สึกเหมือน 1c เข้าสู่โหมดสลีป เช่น หลังจากผ่านไประยะหนึ่ง ดังที่บันทึกแสดง งานพื้นหลังจะเริ่มต้นขึ้นแต่ยังไม่เสร็จสมบูรณ์ ผลปรากฏว่างานเริ่มเวลา 12.00 น. และเสร็จสิ้นตอน 8.00 น. (เมื่อฉันเลื่อนเมาส์) และหลังจากนั้นงานเหล่านั้นก็ยังคงถูกดำเนินการในโหมดปกติต่อไป ฉันรันมันกับไคลเอนต์ทั้งแบบบางและแบบหนา มีการตั้งค่าในพารามิเตอร์ - เวลาในการหลับในเซสชันแบบพาสซีฟคือ 1200 แต่สิ่งนี้ไม่เพียงใช้กับไคลเอ็นต์แบบบางเท่านั้นและอาจเป็นปัญหาได้หรือไม่ ฉันไม่ต้องการปิดการใช้งานนี้เพราะ... ผู้ใช้ไม่ต้องออกจากโปรแกรมปล่อยให้พวกเขาหลับไป มีใครพบปัญหาที่คล้ายกันหรือไม่? คุณตัดสินใจอย่างไร?

คำตอบ:

ไม่มีความเป็นไปได้ดังกล่าว

การรันงานเบื้องหลังและรอให้งานเสร็จจะมีประโยชน์อะไร
เพื่อไม่ให้สร้างงานพื้นหลังเกิน 8 งาน?

ลาก "ผู้จัดการ" ของงานพื้นหลังไปที่ฝั่งเซิร์ฟเวอร์แล้วปล่อยให้ควบคุม....

ฉันรันงานพื้นหลัง 40-50 งานบน Pentuim D840 - การบินเป็นปกติ จากนั้นถูกจำกัดโดยโปรเซสเซอร์/หน่วยความจำ

คำถาม: วิธีการถ่ายโอนไฟล์ไปยังงานเบื้องหลัง


แพลตฟอร์ม 8.3.6.2152
คุณต้องถ่ายโอนไฟล์จาก UV ไปยังงานพื้นหลังเพื่อการประมวลผลในภายหลัง
ทำสิ่งนี้:
&บนไคลเอนต์
ขั้นตอน Command1 (คำสั่ง) FileDD = BinaryData ใหม่ (ชื่อไฟล์); StorageAddressForBackground = PlaceInTemporaryStorage (FileDD, UniqueIdentifier); เริ่มอัพโหลดLoadOnServer(StorageAddressForBackground) EndProcedure &ฟังก์ชันOnServer StartUploadLoadOnServer(StorageAddressForBackground) พารามิเตอร์วิธีการ = อาร์เรย์ใหม่; MethodParameters.Add(StorageAddressForBackground); งาน = BackgroundTasks.Run("MyGeneralModule.MyBackground", MethodParameters); EndFunction
ในโมดูลทั่วไป:

ขั้นตอน MyBackground (StorageAddress) ส่งออก FileDD = GetFromTemporaryStorage (StorageAddress); ถ้า TypeValue(FileDD) = Type("BinaryData") แล้ว การลงทะเบียนรายการวารสาร การลงทะเบียนรายการวารสาร("ดีบัก", "ไม่มี DD"); สิ้นสุดถ้า ; สิ้นสุดขั้นตอน ฉันลองสิ่งนี้: PlacedFiles = New Array; PlacedFiles.Add (คำอธิบายใหม่ของ TransferFile (ชื่อไฟล์)); PlacedFiles = อาร์เรย์ใหม่; ถ้าไม่ใช่ PlaceFiles(PlaceFiles, PlaceFiles, False, UniqueIdentifier) ​​​​ให้ Return ; สิ้นสุดถ้า ; StorageAddressForBackground = PlacedFiles.Storage; ฉันลองสิ่งนี้: StorageAddressForBackground = PlaceInTemporaryStorage(Undef, UniqueIdentifier); PlaceFile(StorageAddressForBackground, ชื่อไฟล์, เท็จ);
โดยปกติแล้วจะถูกถ่ายโอนจากพื้นหลังไปยังไคลเอนต์ผ่านพื้นที่จัดเก็บชั่วคราว แต่ด้วยเหตุผลบางประการ จึงไม่ถ่ายโอนจากไคลเอนต์ไปยังพื้นหลัง

คำตอบ:โดยทั่วไปแล้วทุกอย่างกลายเป็นเรื่องง่าย ปรากฎว่าคุณสามารถส่งข้อมูลไบนารี่เป็นพารามิเตอร์ไปยังงานเบื้องหลังได้อย่างโง่เขลา สำหรับมือสมัครเล่นที่ไม่มีทักษะในการอ้างการอ้างอิงและบอกพวกเขาว่า "นี่คือสิ่งที่ตั้งใจไว้" รหัสการทำงานคือ:
&บนไคลเอนต์
ขั้นตอน Command1 (คำสั่ง) เริ่ม UploadLoadOnServer (BinaryData ใหม่ (ชื่อไฟล์)) EndProcedure
&OnServer Function StartUploadLoadOnServer(DD) พารามิเตอร์เมธอด = อาร์เรย์ใหม่; MethodParameters.Add(DD); งาน = BackgroundTasks.Run("MyGeneralModule.MyBackground", MethodParameters); ขั้นตอน EndFunctions MyBackground (FileDD) ส่งออกถ้า TypeValue (FileDD) = Type ("BinaryData") จากนั้น การลงทะเบียนรายการวารสาร("การดีบัก", "ใช่ DD"); มิฉะนั้น การลงทะเบียนรายการวารสาร("ดีบัก", "ไม่มี DD"); สิ้นสุดถ้า ; สิ้นสุดขั้นตอน

คำถาม: การรันงานเบื้องหลังภายใต้ผู้ใช้ที่ต้องการ


สวัสดี!
มี 1C:Enterprise 8.3 (8.3.11.2924), UT 11.3.4.93 ไคลเอนต์ - เซิร์ฟเวอร์
ในการกำหนดค่านี้ การเคลื่อนไหวในการลงทะเบียน "การชำระบัญชีกับลูกค้าในเอกสาร" จะไม่ดำเนินการในเวลาของการผ่านรายการเอกสาร แต่ด้วยงานประจำ "การดำเนินการของการเคลื่อนไหวที่เลื่อนออกไปในการชำระหนี้กับลูกค้า\ซัพพลายเออร์"
ในเวลาเดียวกัน บางครั้งงานประจำก็เกิดข้อผิดพลาดเพราะว่า พยายามเคลื่อนไหวในช่วงเวลาปิด (ก่อนวันห้ามแก้ไข) ในการตั้งค่าของงานประจำ เราได้ลงทะเบียนผู้ใช้พิเศษซึ่งมีการเปิดวันที่แบน หลังจากนั้นทุกอย่างก็เริ่มทำงาน
อย่างไรก็ตาม จำเป็นต้องตรวจสอบให้แน่ใจว่าการเคลื่อนย้ายเหล่านี้ในการลงทะเบียนเสร็จสิ้นในเวลาที่มีการผ่านรายการเอกสาร และไม่ใช่เมื่องานพื้นหลังเริ่มต้นตามกำหนดการ
หากคุณเรียกใช้โค้ดซึ่งทำงานตามปกติเมื่อโพสต์เอกสาร ข้อผิดพลาดเดียวกันนี้จะเกิดขึ้น - ปิดงวดแล้ว และถ้าคุณรันงานพื้นหลังโดยทางโปรแกรมซึ่งรันโค้ดเดียวกัน ณ เวลาที่โพสต์เอกสาร มันจะทำให้เกิดข้อผิดพลาดเดียวกันทุกประการเพราะ ช่วงเวลาถูกปิด และงานเบื้องหลังที่เปิดใช้โดยทางโปรแกรมจะถูกเปิดตัวภายใต้ชื่อผู้ใช้ปัจจุบัน และวันที่แบนของเขาจะถูกปิด อย่างไรก็ตาม เมื่อมีการเปิดตัวงานเบื้องหลังตามกำหนดเวลาซึ่งมีผู้ใช้ที่ "ถูกต้อง" ติดตั้งอยู่ในตัวกำหนดตารางเวลา ทุกอย่างจะดำเนินไปด้วยดี ต่อไปนี้เป็นวิธีดำเนินการนี้โดยทางโปรแกรม วิธีรันงานพื้นหลังโดยทางโปรแกรมภายใต้ผู้ใช้ที่ต้องการ "ผ่านตัวกำหนดเวลา" เช่นเดียวกับงานที่กำหนดเวลามาตรฐาน โปรดบอกฉัน

คำตอบ:

ไม่ใช่อันที่มันถูกกำหนดค่าไว้ใช่ไหม?
นี่ต้องเป็นข้อผิดพลาดของการกำหนดค่า

Lis2007 กล่าวว่า:

สวัสดี!บางครั้งงานประจำก็เกิดข้อผิดพลาดเนื่องจาก... พยายามเคลื่อนไหวในช่วงเวลาปิด (ก่อนวันห้ามแก้ไข) ในการตั้งค่าของงานประจำ เราได้ลงทะเบียนผู้ใช้พิเศษซึ่งมีวันแบนเปิดอยู่ หลังจากนั้นทุกอย่างก็เริ่มทำงาน

คลิกเพื่อขยาย...

คำถาม: การดีบักงานพื้นหลัง


งานเบื้องหลังกำลังทำงานโดยมีข้อผิดพลาด ฉันตัดสินใจที่จะแก้ไขข้อบกพร่องมัน
ฉันเปิดใช้งานผ่านการประมวลผลภายนอกด้วยบรรทัดเดียว:
BackgroundTasks.Run("MyModule.MyTask");
ไม่ถึงจุดพักในโมดูล
อนุญาตให้มีการดีบักบนเซิร์ฟเวอร์ มีการตรวจสอบการดีบัก การเชื่อมต่ออัตโนมัติ เปิดใช้งานงานพื้นหลัง มีอะไรอีกที่อาจเป็นปัญหา?

คำตอบ:ในโมดูลทั่วไป มีการเรียกใช้ฟังก์ชันที่จำเป็นต้องมีไคลเอ็นต์มากกว่าการดำเนินการของเซิร์ฟเวอร์ ฉันต้องใส่ไว้ในวงเล็บ #If Client แล้ว พื้นหลังก็ใช้งานได้เช่นกัน

คำถาม: เกิดข้อผิดพลาดเมื่อทำการแลกเปลี่ยน


สวัสดีตอนบ่าย บอกฉันว่าจะขุดที่ไหน:
ฉันทำการแลกเปลี่ยนในฐานข้อมูลทางบัญชี มีการอัปโหลดเอกสารประมาณสามโหลจาก UT-shka ผ่านการแลกเปลี่ยนมาตรฐาน พวกเขาคิดอยู่นาน (ประมาณหนึ่งชั่วโมง) และปิดท้ายด้วยข้อความ:
กระบวนการงานเบื้องหลังล้มเหลว

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

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

ก่อนอื่น เรามาทำความเข้าใจกันก่อนว่าพวกเขาหมายถึงอะไรและความแตกต่างคืออะไร:

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

สมมติว่าบริษัทของเราขายอะไรบางอย่างและมีเว็บไซต์ของตัวเองซึ่งระบุราคาไว้ เราต้องการอัปโหลดวันละครั้งเพื่อรักษาความเกี่ยวข้อง

เปิดการกำหนดค่าและเพิ่มงานที่กำหนดเวลาไว้

การตั้งค่าคุณสมบัติ

มาดูพารามิเตอร์ที่สำคัญที่สุดที่ต้องกรอกคุณสมบัติกัน

  • ในสนาม" ชื่อวิธีการ» เลือกขั้นตอนของโมดูลทั่วไปเฉพาะที่จะดำเนินการโดยตรง มันจะระบุขั้นตอนทั้งหมดในการอัพโหลดราคาไปยังเว็บไซต์ของเรา โปรดทราบว่าการดำเนินการจะเกิดขึ้นบนเซิร์ฟเวอร์ นี่เป็นเหตุผล เนื่องจากการดำเนินการตามปกติจะดำเนินการโดยที่ผู้ใช้ไม่มีส่วนร่วม
  • งานที่กำหนดเวลาไว้สามารถปิดใช้งานหรือเปิดใช้งานได้ตามต้องการ ไม่จำเป็นต้องแก้ไขกำหนดการของเขาทุกครั้ง เมื่อต้องการทำเช่นนี้ ในพาเล็ตคุณสมบัติ ให้ตั้งค่าหรือล้างแฟล็ก " การใช้งาน».
  • สิ่งสำคัญอีกประการหนึ่งคือการกำหนดว่างานประจำนี้จะเป็นอย่างไร ที่กำหนดไว้ล่วงหน้า, หรือไม่. งานที่กำหนดเวลาไว้ล่วงหน้าจะถูกเปิดใช้งานโดยอัตโนมัติ หากไม่ได้ติดตั้งคุณสมบัตินี้ คุณจะต้องเปิดใช้งานโดยทางโปรแกรมหรือใช้การประมวลผล "คอนโซลงาน" กับ ITS
  • คุณยังสามารถระบุได้ จำนวนการทำซ้ำและช่วงเวลาระหว่างพวกเขาในกรณีที่มีการเลิกจ้างที่ผิดปกติ การเลิกจ้างที่ผิดปกติหมายถึงสถานการณ์เหล่านั้นเมื่องานไม่เสร็จสมบูรณ์เนื่องจากข้อผิดพลาด

การกำหนดตารางเวลา

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

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

การบล็อกงานที่กำหนดเวลาไว้

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

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

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

งานเบื้องหลังและกำหนดเวลาในโหมดไฟล์

ในโหมดนี้ การตั้งค่าและการเริ่มงานเหล่านี้จะยากกว่ามากในการจัดระเบียบ บ่อยครั้งที่มีการสร้างบัญชีเพิ่มเติม ซึ่งเซสชันจะเปิดอยู่เสมอ

ในกรณีนี้ งานประจำจะถูกเปิดใช้งานโดยใช้วิธี “RunTaskProcessing()”

คุณยังสามารถใช้โครงสร้างต่อไปนี้:

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

การติดตามข้อผิดพลาดในงานเบื้องหลัง

คุณสามารถดูความคืบหน้าของงานเบื้องหลัง ตลอดจนข้อผิดพลาดที่อาจเกิดขึ้นได้ในบันทึก ในตัวกรอง ให้ตั้งค่าการเลือกเป็นแอปพลิเคชัน "งานพื้นหลัง" และเลือกความสำคัญของความสนใจ เช่น เฉพาะ "ข้อผิดพลาด" หากจำเป็น

บันทึกจะแสดงรายการทั้งหมดที่ตรงกับการเลือกของคุณ พร้อมด้วยความคิดเห็นที่จะช่วยให้คุณเข้าใจสาเหตุของข้อผิดพลาด

ปัญหาไม่ใช่เรื่องใหม่และมีการพูดคุยกันเป็นครั้งคราวในฟอรัม 1C ต่างๆ วิธีแก้ปัญหาที่ง่ายที่สุดและเป็นที่นิยมมากที่สุดคือการรีบูตเซิร์ฟเวอร์ 1C น่าเสียดายที่ตัวเลือกนี้ไม่เป็นที่ยอมรับหรือไม่เป็นที่ต้องการเสมอไป ในกรณีเช่นนี้ มีวิธีแก้ไขที่ละเอียดอ่อนกว่านี้

ที่นี่ หนึ่งในวิธีการเหล่านี้ในรูปแบบของคำแนะนำทีละขั้นตอนสั้น ๆ :

1. การใช้คอนโซลการดูแลระบบเซิร์ฟเวอร์ 1C เรากำลังมองหา f ที่มีปัญหางานใหม่ในรายการการเชื่อมต่อ (เช่น ตามเวลาเริ่มต้นของการดำเนินการ เปรียบเทียบกับเวลาเริ่มต้นของงานที่ควบคุมในคอนโซลงาน) เรากำหนดกระบวนการของผู้ปฏิบัติงานซึ่งมีการเชื่อมต่อที่หยุดอยู่

2. เปิดคุณสมบัติของกระบวนการนี้และทำเครื่องหมายว่าไม่ได้ใช้ (หากใช้เพียงกระบวนการเดียว คุณต้องสร้างกระบวนการของผู้ปฏิบัติงานใหม่ก่อน เพื่อให้การเชื่อมต่อที่ใช้งานอยู่ทั้งหมดเชื่อมต่อใหม่) เราจำหมายเลข PID ของกระบวนการนี้


3. เรารอจนกว่าการเชื่อมต่อปัจจุบันทั้งหมดจะย้ายจากกระบวนการที่ปิดใช้งานไปเป็นกระบวนการที่ใช้ ท้ายที่สุดแล้ว มีเพียงการเชื่อมต่อที่มีปัญหาเท่านั้นที่ควรยังคงอยู่ในกระบวนการของเรา ซึ่งเราต้องการลบออก

4. บนคอมพิวเตอร์ที่มีเซิร์ฟเวอร์ 1C ให้ใช้ตัวจัดการงาน ค้นหากระบวนการ rphost.exe ที่เกี่ยวข้องโดยใช้ PID ของกระบวนการของผู้ปฏิบัติงานที่ถูกปิดใช้งานแล้วลบออก

5 . ในกรณีที่คุณสามารถลบเวิร์กโฟลว์ 1C ที่เราปิดใช้งานโดยใช้ผู้ดูแลระบบได้ คอนโซล และหากจำเป็น ให้สร้างอันใหม่

6. พร้อม. คุณสามารถล็อกอินเข้าสู่คอนโซลงานและตรวจสอบการทำงานของงานที่กำหนดเวลาไว้ได้

ในบทความนี้ ฉันจะอธิบายประสบการณ์เล็กๆ น้อยๆ ของฉันในการจัดการแลกเปลี่ยนข้อมูลผ่านรูปแบบ Universal EnterpriseData

ในกรณีของฉัน การแลกเปลี่ยนได้รับการกำหนดค่าระหว่างการกำหนดค่า "Trade Management 11.2" (ต่อไปนี้จะเรียกว่า UT) และ "Enterprise Accounting 3.0.43" (ต่อไปนี้จะเรียกว่า BP) การแลกเปลี่ยนเป็นแบบทางเดียวจาก UT ไปยัง BP ก่อนที่จะอัปเกรด Trade Management 11.1 เป็น 11.2 การแลกเปลี่ยนข้อมูลได้รับการกำหนดค่าโดยใช้การกำหนดค่า Data Conversion 2.0 อย่างไรก็ตาม หลังจากเปลี่ยนเป็น “11.2” แล้ว มีข้อผิดพลาดปรากฏขึ้นใน “การจัดการการค้า” สำหรับผู้ใช้ ขั้นตอนการอัปเดตกฎการแลกเปลี่ยนได้ดำเนินการไปแล้ว แต่ก็ไม่ได้ผลลัพธ์ใดๆ ดีบักเกอร์แสดงว่าปัญหาอยู่ในการแลกเปลี่ยนข้อมูล มีการตัดสินใจที่จะลบการตั้งค่าการแลกเปลี่ยนข้อมูลในการกำหนดค่าทั้งสองและกำหนดค่าใหม่อีกครั้ง

ทั้ง “การจัดการการค้า” และ “การบัญชีองค์กร” ทำงานในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ ฉันเริ่มตั้งค่าการซิงโครไนซ์กับ UT ฉันดำเนินการในลักษณะที่ข้อมูลถูกอัปโหลดจาก UT ไปยังไฟล์ นั่นคือการซิงโครไนซ์ผ่านไดเร็กทอรีเครือข่าย ใน BP ฉันกำหนดค่าการแลกเปลี่ยนในลักษณะที่ไม่มีการดาวน์โหลดข้อมูลจาก BP

ข้อผิดพลาดเมื่อเรียกวิธีการบริบท (ตรวจสอบ): ข้อผิดพลาดในการตรวจสอบข้อมูล XDTO:
โครงสร้างของวัตถุ "/บัญชีธนาคารของคู่สัญญา/ธนาคาร" ไม่สอดคล้องกับประเภท: (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)KeyPropertiesBank
การตรวจสอบคุณสมบัติ "BIK":
รูปร่าง: องค์ประกอบ
ชื่อ: (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)BIK
พิมพ์:
ทรัพย์สินที่จำเป็นขาดหายไป
วัตถุประสงค์: ข้อตกลงกับคู่สัญญาหมายเลข ...

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

ฉันลองซิงโครไนซ์ข้อมูลจาก UT อีกครั้ง ครั้งนี้อัปโหลดข้อมูลสำเร็จแล้ว ไฟล์ XML ถูกสร้างขึ้นในโฟลเดอร์เครือข่ายที่มีข้อมูลที่จะถ่ายโอนจาก UT ไปยัง BP

ขั้นตอนต่อไปคือการโหลดข้อมูลจากไฟล์ไปยังแผนกบัญชีองค์กร ในการกำหนดค่า "การบัญชีองค์กร" ฉันคลิกปุ่ม "ซิงโครไนซ์" ซึ่งเป็นแบบฟอร์มการประมวลผลที่เปิดขึ้นพร้อมข้อความ "การวิเคราะห์ข้อมูลอยู่ระหว่างดำเนินการ" หลังจากนั้นไม่นานข้อความก็เปลี่ยนเป็น “กำลังอัปโหลดข้อมูล” ในเวลาเดียวกันตัวบ่งชี้และตัวนับแสดงให้เห็นว่ามีการขนถ่ายวัตถุมากกว่า 80,000 รายการออกจากหน่วยจ่ายไฟ สิ่งนี้ทำให้ฉันสับสนเพราะฉันระบุไว้ในการตั้งค่าว่าไม่ควรถอดสิ่งใดออกจากแหล่งจ่ายไฟ การประมวลผลใช้เวลานานและจบลงด้วยข้อผิดพลาด:

เหตุการณ์: การแลกเปลี่ยนข้อมูล
(GeneralModule.Long-runningOperations.Module(371)): กระบวนการของผู้ปฏิบัติงานในเบื้องหลังสิ้นสุดลงอย่างผิดปกติ
RaiseException(ข้อความผิดพลาด);

เพื่อจำกัดข้อผิดพลาด ฉันลองเปลี่ยนการตั้งค่าการซิงโครไนซ์และตัวเลือกการทำงานของฐานจ่ายไฟ ด้วยเหตุนี้ เมื่อฉันแปลงฐานข้อมูลเป็นเวอร์ชันไฟล์ ระบบก็ทำงานได้อย่างเพียงพอ: แบบฟอร์มสำหรับเปรียบเทียบฐานข้อมูลสองฐานข้อมูลที่เปิดอยู่ หลังจากจับคู่วัตถุแล้ว การซิงโครไนซ์ครั้งแรกก็สำเร็จ จากนั้นฉันก็เปลี่ยนฐานข้อมูลกลับไปเป็นเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์

ด้วยการทดสอบการซิงโครไนซ์เพิ่มเติม จำเป็นต้องทำการเปลี่ยนแปลงกฎสำหรับการแปลงออบเจ็กต์ ถึงเวลาใช้การกำหนดค่า Data Conversion 3.0 วิธีใช้การกำหนดค่าในตัวจะอธิบายวิธีการทำงาน บทความบนเว็บไซต์ ITS ก็ช่วยได้เช่นกัน

ด้วยเหตุนี้ ฉันจึงโหลดข้อมูลต่อไปนี้ลงใน "Data Conversion 3.0":

  • ข้อความของโมดูลทั่วไป "Data Exchange Manager ผ่าน Universal Format" จากสองฐานข้อมูล
  • เค้าโครงของฐานทั้งสอง
  • คำอธิบายของรูปแบบ EnterpriseData (จากฐานข้อมูลใดฐานข้อมูลหนึ่ง)
  • กฎการแปลง

หลังจากดาวน์โหลด ฉันเปิดกฎสำหรับการแปลงข้อมูล ออบเจ็กต์ และคุณสมบัติใน “Data Conversion 3.0” ทำการเปลี่ยนแปลงที่ฉันต้องการ จากนั้นฉันใช้ปุ่ม "ยกเลิกการโหลดโมดูลตัวจัดการการแลกเปลี่ยน" ข้อความโมดูลถูกคัดลอกไปยังคลิปบอร์ดแล้ว สิ่งที่เหลืออยู่คือการใส่เข้าไปในการกำหนดค่า

หลังจากทดลองตั้งกฎใน "Data Conversion 3.0" แล้วฉันก็สรุปด้วยตัวเองว่าในกรณีที่การเปลี่ยนแปลงที่เกิดขึ้นไม่มีนัยสำคัญ จะง่ายกว่าที่จะตั้งกฎโดยตรงในการกำหนดค่า UT และ BP ในโมดูลทั่วไป "ตัวจัดการการแลกเปลี่ยนข้อมูลผ่านรูปแบบสากล" หากการแก้ไขมีความร้ายแรง เช่น การเพิ่มออบเจ็กต์ใหม่ลงใน Exchange คุณควรใช้การกำหนดค่า " การแปลงข้อมูล 3.0"

ฉันดำเนินการเพิ่มเอกสาร "สั่งซื้อไปยังซัพพลายเออร์" ให้กับแผนการแลกเปลี่ยนโดยใช้ " การแปลงข้อมูล 3.0" ในเวอร์ชันมาตรฐานของ UT - BP เอกสารนี้ไม่รวมอยู่ในแผนการแลกเปลี่ยน

โปรดจำไว้ว่ากฎสำหรับการลงทะเบียนออบเจ็กต์สำหรับการอัปโหลดยังคงได้รับการกำหนดค่าในการกำหนดค่า "Data Conversion 2.0"

นี่เป็นครั้งแรกของการซิงโครไนซ์ข้อมูลผ่านรูปแบบ Universal EnterpriseData

ป.ล. หากคุณมีคำถามหรือข้อสังเกตของคุณเองเกี่ยวกับการแลกเปลี่ยนข้อมูลผ่านรูปแบบสากลและการกำหนดค่า" การแปลงข้อมูล 3.0" เขียนในความคิดเห็น เราจะแลกเปลี่ยนประสบการณ์

  • การซิงโครไนซ์ข้อมูล
  • รูปแบบข้อมูลองค์กรสากล
  • การแปลงข้อมูล 3.0
  • การแปลงข้อมูล 2.0
  • การจัดการการค้า
  • การบัญชีองค์กร

อาจเป็นไปได้ว่าโปรแกรมเมอร์ 1C 8.3 ทุกคนไม่ช้าก็เร็วจะต้องตั้งค่าการดำเนินงานบางอย่างตามกำหนดเวลา ด้านล่างนี้ฉันจะให้คำอธิบายโดยละเอียดเกี่ยวกับกลไกเหล่านี้ ฉันหวังว่านี่จะเป็นข้อมูลที่เป็นประโยชน์สำหรับโปรแกรมเมอร์ 1C มือใหม่ สะดวกมาก เนื่องจากไม่จำเป็นต้องมีการกระทำของมนุษย์ งานประจำจะได้รับการกำหนดค่าเพียงครั้งเดียวและทำงานตามกำหนดการของคุณ

คุณจะพบคำแนะนำโดยละเอียดโดยใช้ตัวอย่างด้านล่าง

งานประจำและพื้นหลังใน 1C คืออะไร

  • งานที่กำหนดเวลาไว้เป็นกลไกพิเศษ 1C Enterprise 8.3 ที่ออกแบบมาเพื่อดำเนินการเฉพาะตามกำหนดเวลาที่กำหนด
  • งานเบื้องหลัง- วัตถุที่สร้างขึ้นโดยงานประจำที่ดำเนินการตามที่ตั้งใจไว้โดยตรงโดยไม่ต้องมีส่วนร่วมของผู้ใช้หรือโปรแกรมเมอร์ 1C 8.2

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

การตั้งค่างานพื้นหลังในโหมดไคลเอนต์เซิร์ฟเวอร์ 1C

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

รับบทเรียนวิดีโอ 267 บทเรียนบน 1C ฟรี:

  • ชื่อวิธีการ— เส้นทางไปยังขั้นตอนที่จะดำเนินการในงานเบื้องหลังตามกำหนดเวลาที่กำหนด ขั้นตอนจะต้องอยู่ในโมดูลทั่วไป ไม่แนะนำให้ใช้แบบมาตรฐาน แต่เพื่อสร้างของคุณเอง อย่าลืมว่างานพื้นหลังทำงานบนเซิร์ฟเวอร์!
  • การใช้งาน— สัญลักษณ์ของการใช้งานประจำ
  • กำหนดไว้ล่วงหน้า— ระบุว่างานประจำถูกกำหนดไว้ล่วงหน้าแล้วหรือไม่ หากคุณต้องการให้งานรูทีนทำงานทันทีหลังจากวางในฐานข้อมูล ให้ระบุแฟล็กนี้ มิฉะนั้น คุณจะต้องใช้การประมวลผล Job Console หรือทำให้งานรันโดยทางโปรแกรม
  • จำนวนการลองใหม่เมื่องานยุติอย่างผิดปกติ— มีกี่ครั้งที่งานเบื้องหลังถูกรีสตาร์ทหากดำเนินการโดยมีข้อผิดพลาด
  • ลองช่วงเวลาอีกครั้งเมื่องานยุติอย่างผิดปกติ— ความถี่ที่งานเบื้องหลังจะถูกรีสตาร์ทหากเสร็จสมบูรณ์โดยมีข้อผิดพลาด

และฉากที่น่าสนใจที่สุดคือ กำหนดการ:

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

ความสนใจ!อย่าลืมปิดการใช้งานการปิดกั้นการปฏิบัติงานประจำและงานพื้นหลังในระดับ DBMS!

ซึ่งสามารถทำได้ในยูทิลิตี้การดูแลระบบของเวอร์ชันไคลเอนต์ - เซิร์ฟเวอร์หรือเมื่อสร้างฐานข้อมูลใหม่:

การตั้งค่างานประจำในโหมดไฟล์ 1C

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

ในโหมดไฟล์ งานรูทีนจะเริ่มต้นได้เมื่อมีการเรียกใช้เมธอด “RunTaskProcessing()”

สำหรับผู้ใช้ที่เฉพาะเจาะจงคุณสามารถกำหนดค่าวิธีนี้ให้ทำงานโดยใช้วิธีอื่น -

เชื่อมต่อรอแฮนด์เลอร์( <ИмяПроцедуры>, <Интервал>, <Однократно>).

  • ชื่อขั้นตอน— ชื่อของขั้นตอนที่เชื่อมต่อเป็นตัวจัดการการรอ ชื่อของขั้นตอนการส่งออกของโมดูลแอปพลิเคชันที่ได้รับการจัดการ (โมดูลแอปพลิเคชันทั่วไป) หรือโมดูลที่ใช้ร่วมกันทั่วโลก ขั้นตอนจะต้องอยู่บนไคลเอนต์.
  • ช่วงเวลา— ระยะเวลาระหว่างการดำเนินการในหน่วยวินาที
  • ครั้งหนึ่ง- ทำอย่างไรให้งานสำเร็จเพียงครั้งเดียวหรือไม่

ConnectWaitHandler, 3600 ) ;

วิดีโอความยาวสองนาทีที่แสดงวิธีตั้งค่างานประจำในตัวกำหนดค่า 1C:



มีคำถามหรือไม่?

แจ้งการพิมพ์ผิด

ข้อความที่จะส่งถึงบรรณาธิการของเรา: