คอมพิวเตอร์ Windows อินเทอร์เน็ต

วิธีปิดการใช้งานเซฟโหมดใน 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. สิทธิ์ในการเปิดการประมวลผล/รายงานภายนอกแบบโต้ตอบ
สิทธิ์ "เปิดการประมวลผลภายนอกแบบโต้ตอบ" ไม่มีผลกับวัตถุ ExternalProcessing แต่อย่างใด

การเปิดรายงานภายนอกโดยทางโปรแกรมคล้ายกับการประมวลผลภายนอก แต่คุณควรใช้วัตถุบริบทส่วนกลาง ExternalReports ซึ่งเป็นประเภท ผู้จัดการรายงานภายนอก.