วิธีปิดการใช้งานเซฟโหมดใน 1 วินาที 8.3 พาเวลสะอาด เซฟโหมดสำหรับการประมวลผลภายนอก
ความจริงก็คือเมื่อใช้ 1C เวอร์ชันไคลเอนต์ - เซิร์ฟเวอร์การประมวลผล / รายงานภายนอกจะถูกเปิดในเซฟโหมดซึ่งห้ามใช้โหมดพิเศษ และโหมดพิเศษมักใช้ในการกำหนดค่าทั่วไป: การก่อตัวของแบบฟอร์มที่พิมพ์ การตรวจสอบบริการต่างๆ (การลงทะเบียนการแลกเปลี่ยน) เป็นต้น เป็นผลให้แม้ใช้รายงานปกติใน ACS โดยไม่มีแบบฟอร์ม (โดยค่าเริ่มต้นจะใช้แบบฟอร์มทั่วไป "แบบฟอร์มรายงาน") และบันทึกการตั้งค่าผู้ใช้ของรายงาน (ในไดเรกทอรีที่เกี่ยวข้อง) คุณจะได้รับข้อผิดพลาดเกี่ยวกับไม่เพียงพอ สิทธิ์ในการเข้าถึงค่าคงที่และพารามิเตอร์เซสชันต่างๆ ที่ใช้เพื่อวัตถุประสงค์อย่างเป็นทางการหลังบรรทัด SetPrivilegedMode(จริง) ;
โซลูชันที่ "ถูกต้อง" คือการเชื่อมต่อโปรเซสเซอร์ภายนอกและรายงานผ่านกลไก "รายงานและการประมวลผลเพิ่มเติม" ของ BSP ด้วยการปิดใช้งานเซฟโหมดหรือเพิ่มการอนุญาต (ในความคิดของฉัน จาก BSP เวอร์ชัน 2.2.2.1) แต่ถ้าด้วยเหตุผลบางอย่างจำเป็นต้องใช้อย่างแน่นอน ไฟล์ภายนอกรายงาน/การประมวลผล คุณสามารถกำหนดค่าโปรไฟล์ความปลอดภัยของคลัสเตอร์ที่ใช้เป็นโปรไฟล์ความปลอดภัยโหมดปลอดภัยสำหรับข้อมูลเฉพาะได้ ฐานข้อมูล.
ฉันต้องการทราบทันทีว่าไม่แนะนำให้ใช้ตัวเลือกนี้ แต่เนื่องจากสถานการณ์ต่างๆ จึงสามารถใช้ในรูปแบบที่เรียบง่ายได้ ตัวอย่างเช่น ฉันมีฐานข้อมูลหลายแห่งในเมืองต่าง ๆ เครือข่ายท้องถิ่นทั่วไปที่มีสิทธิ์จำกัดอย่างเข้มงวด USB แบบปิด ฯลฯ มีการใช้ Accounting 2.0 ที่ไหนสักแห่ง และที่ใดที่หนึ่ง 3.0 ฉันสร้างรายงานเกือบทั้งหมดโดยใช้ ACS โดยไม่มีแบบฟอร์ม ดังนั้นพวกเขาจึงเปิด ในทั้งสองเวอร์ชัน ให้บริการรายงานเหล่านั้นทั้งหมดสำหรับ รุ่นต่างๆและฐานที่แตกต่างกันเป็นธุรกิจที่ใช้เวลานานและไม่มีท่าว่าจะดีเพราะ มีแผนจะเปลี่ยนไปใช้การกำหนดค่าเดียวและฐาน ...
เราสร้างโปรไฟล์
ในคอนโซลคลัสเตอร์ สร้างโปรไฟล์ความปลอดภัยที่เราตั้งค่าแฟล็ก "สามารถใช้เป็นโปรไฟล์ความปลอดภัยของเซฟโหมดได้"และ " ภายใต้ "อนุญาต การเข้าถึงแบบเต็ม:" "สู่โหมดพิเศษ".
ในหลายกรณีของการใช้รายงานและการประมวลผลอย่างง่าย วิธีการนี้จะมีผลบังคับใช้ สำหรับสถานการณ์ที่ซับซ้อนมากขึ้น ไม่มีเหตุผลที่จะอธิบายกระบวนการเพราะ มีการอธิบายไว้ในเอกสารประกอบ (ความสามารถในการกำหนดค่าโปรไฟล์ความปลอดภัยสำหรับไฟล์ภายนอกเฉพาะโดยการระบุผลรวมแฮช ฯลฯ)
ป.ล. ฉันคิดว่าโปรไฟล์ความปลอดภัยจะทำงานเมื่อใช้ใบอนุญาตสำหรับแพลตฟอร์มและเซิร์ฟเวอร์ระดับ CORP เท่านั้น แต่ ฟังก์ชันนี้ทำงานบนแพลตฟอร์ม 1C:Enterprise 8.3
พิมพ์ (Ctrl+P)
ออบเจ็กต์การกำหนดค่า
หากจำเป็นต้องใช้รหัสโปรแกรม "ไม่น่าเชื่อถือ" บนเซิร์ฟเวอร์: การประมวลผลภายนอกหรือ รหัสโปรแกรมที่ผู้ใช้ป้อนเพื่อใช้ในวิธี Execute() และ Calculate() คุณสามารถใช้เซฟโหมดของการทำงานได้
ในเซฟโหมด:
- โหมดสิทธิพิเศษ ยกเลิก.
- เปลี่ยนเป็นโหมดพิเศษ ละเลย.
- ต้องห้ามการดำเนินการที่นำไปสู่การใช้เครื่องมือภายนอกที่เกี่ยวข้องกับแพลตฟอร์ม 1C:Enterprise (รวมถึงแอนะล็อกที่ไม่บล็อกของวิธีการข้างต้น):
- กลไก COM:
- COMObject();
- GetCOMObject();
- WrapperHTMLDocument.GetCOMObject()
- กำลังโหลดส่วนประกอบภายนอก:
- LoadExternalComponent();
- เชื่อมต่อภายนอกคอมโพเนนต์ ()
- การเข้าถึง ระบบไฟล์:
- valueToFile();
- CopyFile();
- รวมไฟล์ ();
- ย้ายไฟล์();
- SplitFile();
- CreateDirectory();
- ลบไฟล์();
- ไฟล์ใหม่;
- xBase ใหม่;
- WriteHTML.OpenFile();
- กำลังอ่านHTML.OpenFile();
- กำลังอ่านXML.OpenFile();
- WriteXML.OpenFile();
- ReadFastInfoset.OpenFile();
- WriteFastInfoset.OpenFile();
- CanonicalWriterXML.OpenFile();
- การแปลง XSL.LoadFromFile();
- WriteZipFile.Open();
- ReadZipFile.Open();
- NewTextReader() ถ้าอาร์กิวเมนต์แรกเป็นสตริง
- ReadText.Open() หากพารามิเตอร์แรกเป็นสตริง
- ใหม่ TextWrite() หากพารามิเตอร์แรกเป็นสตริง
- WriteText.Open() ถ้าพารามิเตอร์ตัวแรกเป็นสตริง
- ใหม่ ExtractText();
- การเปลี่ยนแปลงคุณสมบัติ ExtractText.FileName;
- ExtractText.Write();
- New Image() หากพารามิเตอร์แรกเป็นสตริง
- รูปภาพบันทึก ();
- ใหม่ BinaryData();
- BinaryData.Write();
- ใหม่ DataWrite() หากพารามิเตอร์แรกเป็นสตริง
- New DataRead() พารามิเตอร์ตัวแรกคือสตริง
- วิธีการทั้งหมดของวัตถุ FileStreamManager
- ใหม่ FileStream();
- จัดรูปแบบเอกสาร เขียน ();
- GeographicScheme.Read();
- GeographicScheme.Write ();
- GeographicScheme.Print();
- SpreadsheetDocument.Read();
- สเปรดชีตDocument.Write();
- SpreadsheetDocument.Print(); GraphicScheme.Read();
- GraphicScheme.Write();
- GraphicScheme.Print();
- TextDocument.Read();
- TextDocument.Write().
- การเข้าถึงอินเทอร์เน็ต:
- การเชื่อมต่ออินเทอร์เน็ตใหม่
- อินเทอร์เน็ตเมลใหม่
- ใหม่ อินเทอร์เน็ตพร็อกซี่
- การเชื่อมต่อ HTTP ใหม่
- การเชื่อมต่อ FTP ใหม่
ความสนใจ! ส่งข้อยกเว้นเมื่อดำเนินการต้องห้ามในขณะใช้งานจริง
บันทึก. รายงานภายนอกและการประมวลผลที่เปิดโดยใช้เมนู ไฟล์ - เปิด จะดำเนินการในเซฟโหมด หากผู้ใช้ไม่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบ
จำนวนการเปิดใช้งานเซฟโหมดต้องตรงกับจำนวนการปิด อย่างไรก็ตาม หากเปิดใช้งานเซฟโหมด (หนึ่งครั้งหรือมากกว่า) ภายในโพรซีเดอร์หรือฟังก์ชัน แต่ไม่ถูกปิดใช้งาน ระบบจะปิดโดยอัตโนมัติหลายครั้งเนื่องจากมีการเปิดใช้งานที่ยังไม่เสร็จสมบูรณ์ในขั้นตอนหรือฟังก์ชันที่ถูกยกเลิก
หากอยู่ในโพรซีเดอร์หรือเมธอดของฟังก์ชันการเรียก SetSafeMode (เท็จ)ทำได้มากกว่าการเรียกเมธอด SetSafeMode (จริง)จากนั้นจะมีการโยนข้อยกเว้น
อาจจำเป็นต้องติดตั้งเซฟโหมดโดยทางโปรแกรมเมื่อผู้พัฒนาการกำหนดค่าใช้รหัสโปรแกรมบุคคลที่สาม (ที่เกี่ยวข้องกับการกำหนดค่า) ซึ่งความน่าเชื่อถือของนักพัฒนาไม่สามารถรับประกันได้ ตัวอย่างของรหัสดังกล่าวคือการดำเนินการของเมธอด Execute() และ Calculate() ในกรณีที่ได้รับโค้ดเรียกทำงานจากโลกภายนอก ในกรณีนี้ เป็นการดีที่จะตั้งค่าเซฟโหมดก่อนดำเนินการตามวิธีการเหล่านี้:
// รหัสโปรแกรมกำลังถูกสร้างขึ้นเพื่อดำเนินการ // เป็นไปได้ว่ารหัสถูกโหลดจากแหล่งภายนอก // หรือป้อนด้วยตนเอง ExecutableCode = GetExecutableCodeFrom OutsideWorld(); // เปิดใช้งานเซฟโหมด SetSafeMode (จริง); // รันโค้ดที่อาจเป็นอันตราย Execute(ExecutableCode); // ปิดการใช้งานเซฟโหมด SetSafeMode (เท็จ);
ในบางกรณี การตั้งค่าเซฟโหมดอาจขัดแย้งกับการตั้งค่าโหมดพิเศษ ตัวอย่างของความขัดแย้งดังกล่าวคือการโพสต์เอกสารที่มีคุณสมบัติ Privileged Posting Mode จากโค้ด 1C ที่ทำงานอยู่ในเซฟโหมด ในกรณีนี้ โหมดที่มีสิทธิพิเศษจะถูกปิดใช้งาน และการพยายามเปิดใช้งานจะถูกละเว้น ด้วยเหตุนี้ รหัส 1C:Enterprise ที่ "อาศัย" ในโหมดสิทธิพิเศษที่เปิดใช้งาน "ชนกัน" โดยที่ไม่มีอยู่ ซึ่งนำไปสู่ข้อผิดพลาดโดยไม่ทราบสาเหตุที่ชัดเจนในการปรากฏขึ้น เพื่อป้องกันสถานการณ์ดังกล่าว 1C:Enterprise จะปิดใช้งานเซฟโหมดโดยอัตโนมัติสำหรับตัวจัดการเหตุการณ์ที่มีอยู่ในโมดูลอ็อบเจ็กต์หรือโมดูลตัวจัดการ โดยที่โค้ดที่เรียกใช้งานได้ในภาษา 1C:Enterprise จะไม่อยู่ในส่วนขยายการกำหนดค่า ตัวจัดการดังกล่าวถูกทำเครื่องหมายในผู้ช่วยไวยากรณ์ด้วยวิธีพิเศษ
นอกจากนี้ยังมีตัวเลือกในการปิดใช้งานโหมดปลอดภัยจากภายในภาษาที่ 1 (หากรหัสที่พยายามปิดใช้งานไม่อยู่ในส่วนขยายการกำหนดค่า) วิธีการปิดการใช้งานเซฟโหมด SetDisableSafeMode(). ตรวจสอบว่าเซฟโหมดอยู่ใน ช่วงเวลานี้ปิดการใช้งาน (โดยอัตโนมัติหรือด้วยการเรียกเมธอด) คุณสามารถใช้ method GetDisableSafeMode().
ภายในเมธอด 1C:1 ไม่สามารถซ้อนการตั้งค่าเซฟโหมดได้มากกว่าหนึ่งระดับ (โดยการเรียกเมธอด SetSafeMode()) และการตั้งค่าการปิดใช้งานเซฟโหมด (โดยอัตโนมัติเมื่อเรียกใช้ตัวจัดการเหตุการณ์ของอ็อบเจ็กต์ข้อมูลเมตาหรือโดยการเรียก SetSafeModeDisable() วิธีการ) เมื่อพยายามเพิ่มการซ้อนจะมีข้อยกเว้น:
// ชื่อขั้นตอนการใช้งานที่ถูกต้อง () SetSafeModeDisable (True); SetSafeMode (จริง); SetSafeMode (เท็จ); SetSafeModeDisable (เท็จ); EndProcedure // ชื่อขั้นตอนการใช้งานไม่ถูกต้อง () SetSafeModeDisable (True); SetSafeMode (จริง); SetSafeModeDisable (เท็จ); // ข้อยกเว้น EndProcedure ProcedureProcedureName() SetSafeMode(True); SetSafeModeDisable (เท็จ); // ข้อยกเว้น EndProcedure
การค้นพบการประมวลผลภายนอกแบบเป็นโปรแกรมดำเนินการโดยใช้อ็อบเจ็กต์บริบทส่วนกลาง ExternalProcessing ซึ่งมีประเภท ตัวจัดการการประมวลผลภายนอก. สำหรับแต่ละโหมดการทำงานของแพลตฟอร์ม 1C (โหมดแอปพลิเคชันปกติและโหมดแอปพลิเคชันที่มีการจัดการ) วิธีการต่างๆวัตถุสำหรับการทำงานกับการประมวลผลภายนอก
กำลังเริ่มการประมวลผลภายนอกในโหมดแอปพลิเคชันปกติ
ในแอปพลิเคชันทั่วไป คุณต้องใช้เมธอด Create() ของอ็อบเจ็กต์ ExternalProcessing ซึ่งส่งผ่านชื่อเต็มของไฟล์การประมวลผลภายนอก เมธอดส่งคืนอ็อบเจ็กต์ประเภท การประมวลผลภายนอกออบเจ็กต์นี้เป็นการประมวลผลภายนอกที่กำลังเปิดอยู่ หากคุณต้องการเปิดฟอร์มการประมวลผลภายนอก ให้เรียกใช้เมธอด GetForm() ของออบเจกต์ที่ได้รับ ซึ่งจะส่งคืนฟอร์มหลัก จากนั้นเรียกใช้เมธอด Open() เพื่อเปิดกำลังประมวลผล = ExternalProcessings.Create(FullFileName);
กำลังประมวลผล.GetForm().Open();
ในการประมวลผลภายนอก แบบฟอร์มหลักควรเป็นแบบปกติ และแบบที่ได้รับการจัดการควรเป็นแบบเพิ่มเติมเสมอ มิฉะนั้น เมธอด GetForm() จะไม่ทำงานในโหมดแอปพลิเคชันปกติ
เริ่มการประมวลผลภายนอกในโหมดแอปพลิเคชันที่มีการจัดการ
โหมดแบบฟอร์มที่มีการจัดการจะแนะนำการแยกอัลกอริทึมตามบริบทการดำเนินการ บนไคลเอนต์ เราได้รับข้อมูลไบนารีตามชื่อเต็มของไฟล์การประมวลผลภายนอก เราถ่ายโอนข้อมูลไบนารีที่ได้รับไปยังเซิร์ฟเวอร์และวางไว้ในที่เก็บข้อมูลชั่วคราว ถัดไป คุณต้องเรียกใช้เมธอด Connect() ของอ็อบเจ็กต์ ExternalProcessing ซึ่งส่งที่อยู่ไปยังที่เก็บข้อมูลชั่วคราว เมธอดส่งคืนชื่อของการประมวลผลภายนอกที่เชื่อมต่อ เราส่งคืนชื่อของการประมวลผลภายนอกบนไคลเอนต์ สร้างเส้นทางสตริงไปยังแบบฟอร์มการประมวลผล และใช้เมธอด OpenForm() เพื่อเปิดฟอร์มการประมวลผลภายนอก&บนเซิร์ฟเวอร์
ฟังก์ชัน GetExternalProcessName(BinaryData)
AddressInTempStorage = PlaceInTempStorage (ข้อมูลไบนารี);
ส่งคืน ExternalProcessing.Connect (AddressInTempStorage);
EndFunctions
&AtClient
FullFileName = ""; // ชื่อเต็มของไฟล์ประมวลผลภายนอก
FileData = ใหม่ BinaryData (FullFileName);
ExternalProcessingName = GetExternalProcessingName (ข้อมูลไฟล์);
OpenForm("ExternalProcessing" + ExternalProcessingName + ".Form");
เซฟโหมดสำหรับการประมวลผลภายนอก
เมธอด Create() และ Connect() ของอ็อบเจ็กต์ ExternalProcessing มีพารามิเตอร์อินพุต SafeMode ซึ่งบ่งชี้ว่าการประมวลผลภายนอกเชื่อมต่ออยู่ในเซฟโหมด หากไม่ได้ระบุพารามิเตอร์ การเชื่อมต่อจะทำในโหมดปลอดภัยโหมดปลอดภัยการดำเนินการได้รับการออกแบบมาเพื่อปกป้องระบบจากการรันโค้ดโปรแกรมที่ "ไม่น่าเชื่อถือ" บนเซิร์ฟเวอร์ อันตรายที่อาจเกิดขึ้นคือการประมวลผลภายนอกหรือรหัสโปรแกรมที่ผู้ใช้ป้อนเพื่อใช้ในวิธี Execute () และ Calculate ()
เซฟโหมดมีข้อจำกัดดังต่อไปนี้:
- โหมดสิทธิพิเศษจะถูกยกเลิกหากมีการตั้งค่าไว้
- ความพยายามที่จะเข้าสู่โหมดพิเศษจะถูกละเว้น
- ห้ามดำเนินการกับวัตถุ COM
- ห้ามโหลดและเชื่อมต่อส่วนประกอบภายนอก
- การเข้าถึงระบบไฟล์ถูกปฏิเสธ (ยกเว้นไฟล์ชั่วคราว)
- การเข้าถึงอินเทอร์เน็ตเป็นสิ่งต้องห้าม
เพื่อห้ามการเปิดการประมวลผลแบบโต้ตอบ ในทุกบทบาทที่กำหนดให้กับผู้ใช้ จำเป็นต้องลบสิทธิ์ "การเปิดแบบโต้ตอบของการประมวลผลภายนอก" ออก (ดูรูปที่ 1)
รูปที่ 1. สิทธิ์ในการเปิดการประมวลผล/รายงานภายนอกแบบโต้ตอบ |
การเปิดรายงานภายนอกโดยทางโปรแกรมคล้ายกับการประมวลผลภายนอก แต่คุณควรใช้วัตถุบริบทส่วนกลาง ExternalReports ซึ่งเป็นประเภท ผู้จัดการรายงานภายนอก.