อัพโหลดอย่างง่ายดายสำหรับแอปพลิเคชันบุคคลที่สาม ขั้นตอนการอัพโหลดข้อมูลเป็น xml การสร้างไฟล์ XML การอัปโหลดอย่างง่ายสำหรับแอปพลิเคชันบุคคลที่สาม 1c อัปโหลดข้อมูล xml ดาวน์โหลด


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

นอกจากนี้ยังสามารถถ่ายโอนข้อมูลโดยใช้ . การกำหนดค่า 1C 8.3 จำนวนมากมีฟังก์ชันมาตรฐานสำหรับการตั้งค่าการซิงโครไนซ์ข้อมูลระหว่างการกำหนดค่าต่างๆ และการผสานรวมกับ 1C Document Flow อย่างราบรื่น

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

คุณสามารถดาวน์โหลดการประมวลผลนี้บนดิสก์ ITS หรือใช้ลิงก์:

เป็นสากลและเหมาะสำหรับการกำหนดค่าใดๆ

ลองพิจารณาตัวอย่างการยกเลิกการโหลดไดเรกทอรี "ระบบการตั้งชื่อ" จากฐานข้อมูล 1C 8.3 Accounting 3.0 หนึ่งไปยังอีกฐานข้อมูลหนึ่ง ข้อกำหนดเบื้องต้นจะถูกเลือกโดยผู้ปกครอง (กลุ่ม) “งานไม้”

การอัปโหลดข้อมูลจาก 1C ไปยัง XML

ไปที่ฐานข้อมูลที่จะดาวน์โหลดข้อมูล (ที่มา) อย่าลืมตรวจสอบโดยคำนึงถึงเงื่อนไขที่เป็นไปได้ทั้งหมดเพื่อหลีกเลี่ยงผลที่ไม่พึงประสงค์

เปิดการประมวลผลการอัปโหลดและดาวน์โหลดข้อมูล XML (Ctrl+O)

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

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

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

คอลัมน์ "ยกเลิกการโหลดหากจำเป็น" หมายความว่าจำเป็นต้องโอเวอร์โหลดวัตถุนี้หรือไม่ หากอ้างอิงโดยแอตทริบิวต์ของไดเร็กทอรีที่เรากำลังโอเวอร์โหลด ตัวอย่างเช่น ตำแหน่งของรายการที่คุณกำลังโหลดมีหน่วยการวัดที่ไม่ได้อยู่ในฐานข้อมูลเป้าหมาย หากเลือกธงในคอลัมน์ "อัปโหลดหากจำเป็น" ตรงข้ามกับหนังสืออ้างอิงพร้อมหน่วยการวัด ตำแหน่งใหม่จะถูกสร้างขึ้น มิฉะนั้นค่าของแอตทริบิวต์จะเป็น “<Объект не найден>" และตัวระบุเฉพาะของมัน

ในกรณีธรรมดาที่ไม่มีการเลือก การตั้งค่ารายการโอเวอร์โหลดจะมีลักษณะเช่นนี้

ในตัวอย่างนี้ คุณต้องเลือกเฉพาะรายการที่อยู่ในโฟลเดอร์ "งานไม้"

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

คุณสามารถเพิ่มออบเจ็กต์ได้ที่นี่ด้วยตนเอง (ปุ่ม “เพิ่ม”) หรือตามคำขอ (“เพิ่มตามคำขอ...”) หากมีจำนวนมากควรใช้ตัวเลือกที่สอง

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

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

ในตัวอย่างนี้ จำเป็นต้องขนถ่ายเพียง 3 ตำแหน่ง แต่ห้าตำแหน่งถูกขนถ่าย เนื่องจากธงถูกตั้งค่าไว้ตรงข้ามไดเรกทอรี "ระบบการตั้งชื่อ" ในคอลัมน์ "อัปโหลดหากจำเป็น" นอกจากตำแหน่งที่จำเป็นแล้ว พ่อแม่ของพวกเขายังมีงานล้นมืออีกด้วย

กำลังโหลดไดเรกทอรีจาก XML

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

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

ผลการดาวน์โหลดจะแสดงเป็นข้อความ ในกรณีของเรา ทุกอย่างเป็นไปด้วยดี

ไดเร็กทอรี "Nomenclature" ในฐานข้อมูลที่ได้รับไม่ได้ถูกกรอก ตอนนี้มีห้าองค์ประกอบ: ตำแหน่งระบบการตั้งชื่อสามตำแหน่งและสองกลุ่ม

ในองค์กร การบัญชีสามารถรักษาได้ไม่เพียงแต่ในโซลูชันบนแพลตฟอร์ม 1C:Enterprise แต่ยังอยู่ในระบบซอฟต์แวร์อื่น ๆ (Galaktika, Parus, SAP ฯลฯ ) สิ่งนี้ทำให้เกิดความท้าทายในการรวมสองแอปพลิเคชันเข้าด้วยกัน

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

การแลกเปลี่ยนโดยใช้รูปแบบนี้เป็นสากลเนื่องจากแอปพลิเคชันส่วนใหญ่สามารถทำงานได้ มาดูกันว่าคุณสามารถอัปโหลดรายการเอกสารการกำหนดค่าไปยังไฟล์ XML จาก 1C:Enterprise ได้อย่างไร

อัปโหลดไปยัง XML

เอาล่ะ เรามาดูประเด็นหลักกันดีกว่า เราจำเป็นต้องสำรวจรายการข้อมูลเมตาของเอกสารและสร้างรายการในไฟล์ XML ภาพหน้าจอต่อไปนี้แสดงอัลกอริทึมสำหรับการสร้างไฟล์ XML:

ฟังก์ชัน CreateXML() ส่งออก // รับชื่อของไฟล์ชั่วคราวเส้นทาง = GetTemporaryFileName() ; // เริ่มต้นคลาส "XML Record"รายการ = รายการใหม่ XML; // เปิดไฟล์ชั่วคราวเพื่อเขียน- 8 " ) ; // เขียนการประกาศไฟล์ XMLบันทึก. WriteDeclarationXML() ; // บันทึก. เขียนองค์ประกอบStart(" เอกสารการกำหนดค่า" ) ; // องค์ประกอบแรก // แอตทริบิวต์ขององค์ประกอบแรกพร้อมวันที่สร้างไฟล์บันทึก. WriteAttribute(" สร้าง ", รูปแบบ (CurrentDate(), " DF = ปปปป-MM- ddThh:mm:ss; ดีแอลเอฟ= DT" ) ) ; // เขียนองค์ประกอบสำหรับเอกสารการกำหนดค่าแต่ละรายการ เราใส่ชื่อของเอกสารในข้อความสำหรับเอกสารแต่ละฉบับจากข้อมูลเมตา เอกสารบันทึกวงจร WriteElementStart("เอกสาร"); บันทึก. WriteText(ชื่อเอกสาร) ; บันทึก. WriteEndElement() ; เอ็นด์ไซเคิล ; // เขียนองค์ประกอบแรกให้เสร็จสิ้นบันทึก. WriteEndElement() ; บันทึก. ปิด(); //ปิดไฟล์ // รับข้อมูลไบนารี่ของไฟล์และนำไปไว้ในที่เก็บข้อมูลชั่วคราว BinaryData = BinaryData ใหม่ (เส้นทาง) ; ที่อยู่ = PlaceInTemporaryStorage (BinaryData, UniqueIdentifier ใหม่); ที่อยู่ผู้ส่งกลับ; // คืนที่อยู่ของไฟล์ไปยังที่เก็บข้อมูล EndFunction

แต่ละองค์ประกอบที่สร้างขึ้นจะต้องเสร็จสมบูรณ์อย่างถูกต้อง หลังจากดำเนินการ “WriteStartofElement()” แล้ว จะต้องดำเนินการเมธอด “WriteEndElement()” มิฉะนั้นโครงสร้างของไฟล์ XML จะไม่ถูกต้อง

เทมเพลตทั่วไปสำหรับการสร้างไฟล์ XML มีลำดับดังต่อไปนี้:

// 1. เริ่มต้นคลาส "XML Record"รายการ = รายการใหม่ XML; - 2. เปิดไฟล์ชั่วคราวเพื่อบันทึกบันทึก. OpenFile(เส้นทาง, " UTF - 8 " ) ; // 3. เขียนการประกาศไฟล์ XMLบันทึก. WriteDeclarationXML() ; - 4. ++ เขียนเนื้อหาของไฟล์ XMLบันทึก. WriteElementStart("XMLElement"); บันทึก. WriteEndElement() ; // -- เขียนเนื้อหาของไฟล์ XML // 5. ปิดไฟล์บันทึก. ปิด();

ห้าขั้นตอนนี้จะสร้างไฟล์ XML เกือบทุกไฟล์

ในตัวอย่างของเรา ไฟล์ที่สร้างขึ้นจะถูกแปลงเป็นข้อมูลไบนารีและส่งคืนไปยังตำแหน่งที่เรียกใช้ฟังก์ชัน CreateXML ไฟล์นี้สามารถเขียนไปยังระบบไฟล์ได้

คุณสามารถดูตัวอย่างไฟล์ที่อัปโหลดได้ในภาพหน้าจอด้านบน

แอปพลิเคชันบุคคลที่สาม

ตามตัวอย่าง ฉันสร้างแอปพลิเคชันใน .NET Framework เพื่อสาธิตการอ่านไฟล์ XML ในแอปพลิเคชันบุคคลที่สาม

โปรแกรมอ่านไฟล์ที่สร้างขึ้นและแสดงเอกสารในรูปแบบของรายการ:

คุณสามารถลองด้วยตัวเองโดยสามารถดาวน์โหลดแอปพลิเคชันได้โดยใช้ลิงก์ท้ายบทความ

ความเก่งกาจ

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

ไฟล์สำหรับดาวน์โหลด:

แอปพลิเคชั่นอ่านไฟล์ XML

กำลังประมวลผลการสร้างไฟล์ XML

โหมดการทำงาน

การประมวลผล UploadLoadDataXML82 ใช้โหมดการทำงาน 2 โหมด: การอัปโหลด (การสร้างไฟล์อัพโหลดของข้อมูลที่ผู้ใช้ระบุ) และการโหลด (การอ่านไฟล์อัพโหลดที่สร้างโดยโหมดที่มีชื่อเดียวกันและการเขียนข้อมูลที่มีอยู่ในนั้น) โหมดนี้ตั้งค่าได้โดยการเลือกในช่องโหมด

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

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

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

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

การกำหนดองค์ประกอบของการขนถ่าย

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

เมื่อเปิดแบบฟอร์ม การประมวลผลจะตั้งค่าสัญญาณของการขนถ่ายโดยอ้างอิงกับออบเจ็กต์ทั้งหมด ซึ่งรับประกันความสมบูรณ์ในการอ้างอิงของแฟรกเมนต์ที่ไม่ได้โหลดของฐานข้อมูล

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

แอปพลิเคชันที่เป็นไปได้

การใช้การประมวลผลนี้เป็นไปได้ เช่น เพื่อสร้างสำเนาสำรองทั้งหมดหรือบางส่วน แลกเปลี่ยนข้อมูลระหว่างฐานข้อมูล และยังเป็นเครื่องมือเสริมเมื่อกู้คืนฐานข้อมูลที่มีปัญหา

2018-11-15T19:32:35+00:00

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

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

การใช้การประมวลผลนี้เป็นไปได้ เช่น เพื่อสร้างสำเนาสำรองทั้งหมดหรือบางส่วน แลกเปลี่ยนข้อมูลระหว่างฐานข้อมูล และยังเป็นเครื่องมือเสริมเมื่อกู้คืนฐานข้อมูลข้อมูลที่ผิดพลาด

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

ขอแสดงความนับถือ (ครูและนักพัฒนา)

2018-11-15T19:32:35+00:00

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

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

การใช้การประมวลผลนี้เป็นไปได้ เช่น เพื่อสร้างสำเนาสำรองทั้งหมดหรือบางส่วน แลกเปลี่ยนข้อมูลระหว่างฐานข้อมูล และยังเป็นเครื่องมือเสริมเมื่อกู้คืนฐานข้อมูลข้อมูลที่ผิดพลาด

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

ขอแสดงความนับถือ (ครูและนักพัฒนา)







2024 maximum03.ru.