เรายอมรับไฟล์โดยบริการเว็บ 1c การทำงานกับบริการ Terrasoft Web จากแอปพลิเคชันภายนอก ตัวอย่างการใช้ลิงก์ WS แบบไดนามิก

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

การสร้างบริการเว็บ 1C

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

จะสร้างบริการเว็บใน 1C ได้อย่างไร?

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

  1. ไปที่การกำหนดค่าและเพิ่มออบเจ็กต์บริการ WEB ในสาขาหนึ่งของแผนผัง
  2. อธิบายการดำเนินการทั้งหมดที่ฟังก์ชันของเราสามารถทำได้ คำอธิบายของฟังก์ชั่นดำเนินการในโมดูลในภาษา 1C ในตัว
  3. เพิ่มคำอธิบายพารามิเตอร์ของฟังก์ชันบริการเว็บ โปรดทราบว่าประเภทข้อมูลมีการอธิบายโดยคำนึงถึง ประเภทที่มีอยู่กลไก XDTO ซึ่งปรากฏในแพลตฟอร์มเวอร์ชัน 8.1
  4. เผยแพร่บริการเว็บที่สร้างขึ้นบนเซิร์ฟเวอร์ กลไกที่สร้างขึ้นในแพลตฟอร์ม 1C รองรับมาตรฐานต่อไปนี้:
  • SSL/TLS
  • WS-ฉัน BP

ตัวอย่างการสร้างบริการเว็บอย่างง่าย

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

เปิดตัวกำหนดค่า ค้นหาสาขา “บริการเว็บ” ในแผนผังและเพิ่มบริการใหม่ “wa_LengthString” คุณต้องเพิ่มการดำเนินการใหม่บนแท็บ "การดำเนินการ" เรียกมันว่า "CalcLengthString" ในคุณสมบัติเราจะระบุประเภทของค่าส่งคืน - int หรือจำนวนเต็มและสร้างพารามิเตอร์ "InputString" ภายในนั้น เราปล่อยให้ประเภทค่าเป็นสตริง

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


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

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


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


ในหน้าต่างที่เปิดขึ้นเราต้องการ การตั้งค่าเว็บบริการ 1C และการกรอกข้อมูลในบางฟิลด์:

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

สิ่งที่เหลืออยู่คือการตรวจสอบว่าบริการเว็บที่ต้องการได้ทำเครื่องหมายในช่องแรกแล้วคลิก "เผยแพร่"


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

<имяСервера>.ru/<ИмяУказанногоКаталогаНаСервере>/ws/<НаименованиеФайла>.1cws?wsdl

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

พิมพ์ (Ctrl+P)

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

หัวใจสำคัญของสถาปัตยกรรมการบริการของระบบ 1C:Enterprise 8 คือผู้จัดการฝ่ายบริการ ผู้จัดการฝ่ายบริการทำหน้าที่ดังต่อไปนี้:
● การจัดการกลุ่มการเชื่อมต่อกับฐานข้อมูล
● รองรับคำอธิบายบริการ WSDL;
● การใช้โปรโตคอล SOAP, การทำให้เป็นอนุกรมของข้อความ, การเรียกใช้บริการที่เกี่ยวข้อง
ผู้จัดการฝ่ายบริการทำงานในกระบวนการโฮสต์บริการ ซึ่งทำหน้าที่รับ/ส่งข้อความจาก/ถึงผู้จัดการฝ่ายบริการ เว็บเซิร์ฟเวอร์ IIS หรือ Apache สามารถใช้เป็นโฮสต์บริการได้
ผู้จัดการฝ่ายบริการประกอบด้วยกลุ่มการเชื่อมต่อที่มีการโต้ตอบกับฐานข้อมูลระบบ 1C:Enterprise
กลไกบริการเว็บที่นำไปใช้ในระบบ 1C:Enterprise รองรับมาตรฐานต่อไปนี้:
● สบู่ 1.1,
● สบู่ 1.2,
● WSDL 1.1,
● โปรไฟล์พื้นฐาน WS-I 1.1,
● HTTP 1.1,
● TLS 1.x (รองรับ TLS 1.1 และ 1.2 หากไม่จำเป็นต้องส่งใบรับรองไคลเอ็นต์ไปยังเซิร์ฟเวอร์) รวมถึงอัลกอริธึมการเข้ารหัส
GOST R 34.10-2001, R 34.10-94, R 34.11-94 และ 28147-89 ที่เกี่ยวข้อง;
● เอ็มทอม;
● การตรวจสอบสิทธิ์: พื้นฐาน, NTLM/Negotiate

ในการเข้าถึงบริการบนเว็บ คุณต้องใช้ที่อยู่ที่มีรูปแบบดังนี้:

http://host/base/ws/WebServiceName

http://host/base/ws/WebServiceAddress.

มาดูส่วนประกอบของที่อยู่ให้ละเอียดยิ่งขึ้น:

http://host/base – URL ปกติที่ใช้เข้าถึงฐานข้อมูลต่างๆ โดยใช้เว็บไคลเอ็นต์ เป็นต้น หากมีตัวคั่นอยู่ ไม่รองรับการระบุค่าตัวคั่นโดยใช้พารามิเตอร์ Z บรรทัดคำสั่งเปิดแอปพลิเคชันไคลเอ็นต์

ws เป็นสัญญาณว่ามีการเข้าถึงบริการบนเว็บ (ซึ่งตรงข้ามกับ hs ซึ่งกำหนดการเข้าถึงบริการ HTTP ดูที่นี่)

WebServiceName – ชื่อของบริการบนเว็บ ตั้งค่าในคุณสมบัติของวัตถุบริการเว็บ

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

การโทรโดยใช้ชื่อ WebServiceName และที่อยู่ WebServiceAddress ของบริการบนเว็บจะเทียบเท่ากัน

ให้ฟังก์ชันการทำงานผ่านบริการบนเว็บ

เพื่อให้ฟังก์ชันการทำงานของ 1C:ระบบ Enterprise พร้อมใช้งานสำหรับผู้ใช้บริการเว็บภายนอกคุณต้องทำตามขั้นตอนต่อไปนี้:
● สร้างบริการเว็บตามจำนวนที่ต้องการในการกำหนดค่า
●เผยแพร่บริการเว็บโดยใช้ เครื่องมือพิเศษตัวกำหนดค่า
คำอธิบายของขั้นตอนการเผยแพร่บริการบนเว็บและคำอธิบายของการใช้ Reverse Proxy เพื่อเข้าถึง 1C:Enterprise เขียนไว้ในบทที่ 7 “คู่มือผู้ดูแลระบบ” บนดิสก์ ITS
การสร้างบริการเว็บประกอบด้วย:
● การเพิ่มออบเจ็กต์การกำหนดค่าบริการเว็บลงในแผนผังข้อมูลเมตา
● คำอธิบายของการดำเนินการที่บริการเว็บที่สร้างขึ้นสามารถทำได้
● คำอธิบายของพารามิเตอร์ของการดำเนินงานบริการเว็บ
ออบเจ็กต์การกำหนดค่าบริการเว็บประกอบด้วยโมดูลที่สร้างขั้นตอนในภาษาที่มีอยู่แล้วซึ่งจะดำเนินการเมื่อมีการเรียกใช้การดำเนินการบริการเว็บบางอย่าง ประเภทพารามิเตอร์การดำเนินการบริการเว็บอธิบายโดยใช้ประเภท XDTO และสามารถเป็นค่า XDTO หรือวัตถุ XDTO ได้
บริการเว็บมีชื่อดังต่อไปนี้:
● การเชื่อมต่อที่เหมาะสมจะถูกเลือกจากกลุ่มการเชื่อมต่อด้วย ฐานข้อมูล- หากไม่มีการเชื่อมต่อที่จำเป็น การเชื่อมต่อจะถูกสร้างขึ้น
● มีการสร้างเซสชันใหม่และมีกิจกรรมเกิดขึ้นสำหรับเซสชันที่สร้างขึ้น การตั้งค่าเซสชันพารามิเตอร์(ในโมดูลเซสชัน);
● มีการเรียกวิธีการบริการเว็บที่ร้องขอ และตัวจัดการถูกเรียก การตั้งค่าเซสชันพารามิเตอร์ ()(ในโมดูลเซสชัน) แต่ละครั้งที่มีการเข้าถึงพารามิเตอร์เซสชันที่ไม่ได้กำหนดค่าเริ่มต้น
คำแนะนำ. ไม่แนะนำให้ดำเนินการที่ใช้ทรัพยากรมากในตัวจัดการเหตุการณ์ การตั้งค่าเซสชันพารามิเตอร์.
เหตุการณ์ การตั้งค่าเซสชันพารามิเตอร์โมดูลเซสชันถูกเรียกบนเซิร์ฟเวอร์ในโหมดสิทธิพิเศษ โมดูลบริการที่ถูกเรียกถูกดำเนินการ
เซิร์ฟเวอร์ในโหมดปกติ
โมดูลเซสชันใช้เพื่อเริ่มต้นพารามิเตอร์เซสชันและดำเนินการชุดคำสั่งบางชุดเมื่อเรียกใช้บริการเว็บใด ๆ ของระบบ 1C:Enterprise

ตัวอย่างการใช้งานบริการเว็บ

ตัวอย่างเช่น คุณต้องสร้างบริการบนเว็บของระบบ 1C:Enterprise ซึ่งควรส่งคืนองค์ประกอบของส่วนที่เป็นตารางโดยใช้หมายเลขใบแจ้งหนี้ที่ส่ง ตัวอย่างที่คล้ายกันโดยใช้บริการ HTTP จะมีการกล่าวถึงในบทความอื่น
เพื่ออธิบายค่าที่ส่งคืน เรามาสร้างแพ็คเกจ XDTO กัน ข้อมูลใบแจ้งหนี้ด้วยเนมสเปซ http://www.MyCompany.ru/shipment,มีวัตถุ XDTO สามประเภท:
● ระบบการตั้งชื่อ – สำหรับการถ่ายโอนข้อมูลจากองค์ประกอบไดเรกทอรีระบบการตั้งชื่อ ประเภทอ็อบเจ็กต์ XDTO นี้จะมีคุณสมบัติดังต่อไปนี้:
● ชื่อ – ประเภทสตริงจากเนมสเปซ
ชื่อเต็ม– ประเภทสตริงจากเนมสเปซ http://www.w3.org/2001/XMLSchema;
● บาร์โค้ด – ประเภทสตริงจากเนมสเปซ http://www.w3.org/2001/XMLSchema;
● ราคาซื้อ – ประเภท int จากเนมสเปซ http://www.w3.org/2001/XMLSchema
บรรทัดใบแจ้งหนี้– สำหรับการส่งข้อมูลในบรรทัดเดียวของใบแจ้งหนี้ ประเภทอ็อบเจ็กต์ XDTO นี้จะมีคุณสมบัติดังต่อไปนี้:
● ระบบการตั้งชื่อ – พิมพ์ระบบการตั้งชื่อจากเนมสเปซ เป็นการอ้างอิงถึงวัตถุ XDTO
ซึ่งเรากำหนดไว้ข้างต้น
● ปริมาณ – ประเภท int จากเนมสเปซ http://www.w3.org/2001/XMLSchema
● ราคา – ประเภท int จากเนมสเปซ http://www.w3.org/2001/XMLSchema
● ผลรวม – ประเภท int จากเนมสเปซ http://www.w3.org/2001/XMLSchema
ใบกำกับการขาย– เพื่อส่งข้อมูลทุกบรรทัดของใบแจ้งหนี้ ประเภทวัตถุ XDTO นี้จะมีคุณสมบัติเดียว:
● องค์ประกอบ – ประเภท บรรทัดใบแจ้งหนี้จากเนมสเปซ http://www.MyCompany.ru/shipment- แสดงถึงการอ้างอิงถึงวัตถุ XDTO
ซึ่งเรากำหนดไว้ข้างต้น เพื่อให้คุณสมบัตินี้เก็บค่าได้ไม่จำกัดจำนวน คุณต้องตั้งค่าคุณสมบัตินี้
คุณสมบัติขีดจำกัดบนถึง -1
เมื่อสร้างประเภท XDTO ที่จำเป็นแล้ว คุณควรเพิ่มบริการเว็บใหม่ให้กับการกำหนดค่า ข้อมูลใบแจ้งหนี้ด้วยค่าคุณสมบัติดังต่อไปนี้:

URI เนมสเปซ – http://www.MyCompany.ru/shipment;
● แพ็คเกจ XDTO – ข้อมูลใบแจ้งหนี้;
ชื่อไฟล์สิ่งพิมพ์– การจัดส่ง 1cws
บริการเว็บที่สร้างขึ้นควรมีการดำเนินการรับที่กำหนดไว้ด้วยค่าคุณสมบัติต่อไปนี้:
ประเภทการส่งคืนใบกำกับการขายจากเนมสเปซ http://www.MyCompany.ru/shipment;
ค่าว่างที่เป็นไปได้- ติดตั้ง;
● ชื่อขั้นตอน – รับ
สำหรับการดำเนินการ Get คุณควรกำหนดพารามิเตอร์ DocumentNumber ด้วยค่าคุณสมบัติต่อไปนี้:
● ประเภทค่า – ประเภทสตริงจากเนมสเปซ http://www.w3.org/2001/XMLSchema;
ทิศทางการส่ง – อินพุต.
หลังจากนี้ คุณควรเปิดโมดูลของบริการบนเว็บที่สร้างขึ้น และวางฟังก์ชัน Get() ในโมดูลนี้ ซึ่งจะถูกดำเนินการเมื่อมีการเรียกใช้บริการบนเว็บนี้

ฟังก์ชันรับ (DocumentNumber) ส่งออก // รับวัตถุใบแจ้งหนี้ตามหมายเลขที่ส่งผ่าน DocumentLink = เอกสารใบแจ้งหนี้ FindByNumber(หมายเลขเอกสาร, CurrentDate());ถ้า DocumentLink.Empty()แล้ว กลับไม่ได้กำหนด;สิ้นสุดถ้า; เอกสาร = DocumentLink.GetObject(); // รับประเภทวัตถุ XDTO ประเภทการตั้งชื่อ= FactoryXDTO.Type ("http://www.MyCompany.ru/shipment", "ระบบการตั้งชื่อ"); InvoiceType = FactoryXDTO.Type(“http://www.MyCompany.ru/shipment”, “ใบแจ้งหนี้”); LineTypeใบแจ้งหนี้= FactoryXDTO.Type("http://www.MyCompany.ru/shipment", "รายการใบแจ้งหนี้"); // สร้างวัตถุ XDTO ของใบแจ้งหนี้ ใบแจ้งหนี้ = FactoryXDTO สร้าง(ประเภทใบแจ้งหนี้); สำหรับแต่ละบรรทัดเอกสารจาก Document.Composition Cycle // สร้างวัตถุ XDTO บรรทัดใบแจ้งหนี้ //และระบบการตั้งชื่อ รายการใบแจ้งหนี้ = FactoryXDTO.สร้าง(InvoiceStringType); รายการ = FactoryXDTO สร้าง(ประเภทระบบการตั้งชื่อ); // กรอกคุณสมบัติของรายการ Nomenclature.Name = Document Line.Nomenclature.Name; Nomenclature.FullName = Document Line.Nomenclature.FullName; Nomenclature.Barcode = Document Line.Nomenclature.Barcode; Item.PurchasePrice = DocumentLine.Nomenclature.PurchasePrice; // กรอกคุณสมบัติของบรรทัดใบแจ้งหนี้วัสดุสิ้นเปลืองไทย รายการใบแจ้งหนี้รายการ = รายการ; Invoice Line.Quantity = Document Line.Quantity; Invoice Line.Price = Document Line.Price; รายการใบแจ้งหนี้.จำนวน = รายการเอกสาร.จำนวน; // เพิ่มบรรทัดใบแจ้งหนี้ ใบแจ้งหนี้องค์ประกอบเพิ่ม(สตริงใบแจ้งหนี้); สิ้นสุดรอบ; //คืนใบแจ้งหนี้กลับ ใบกำกับการขาย- EndFunction

การทำงานกับบริการเว็บของบุคคลที่สาม

ระบบ 1C:Enterprise สามารถใช้บริการเว็บที่ให้บริการโดยผู้ให้บริการรายอื่นได้หลายวิธี:
● ใช้ลิงก์คงที่ที่สร้างขึ้นในแผนผังการกำหนดค่า
● การใช้ลิงก์แบบไดนามิกที่สร้างโดยเครื่องมือภาษาในตัว
● การรวมกันของวิธีการก่อนหน้านี้
ข้อดีของการใช้ลิงก์แบบคงที่คือความเร็วที่มากขึ้น เนื่องจากคำอธิบายของบริการเว็บของผู้ให้บริการจะได้รับเพียงครั้งเดียวเมื่อสร้างลิงก์ ต่อมาเมื่อมีการติดต่อ บริการเว็บนี้ใช้คำอธิบายบริการเว็บที่มีอยู่
เมื่อใช้ลิงก์แบบไดนามิก ระบบ 1C:Enterprise จะได้รับคำอธิบายบริการเว็บของซัพพลายเออร์ทุกครั้งที่มีการเรียกใช้บริการเว็บ ซึ่งโดยปกติแล้วจะทำให้การทำงานกับบริการเว็บนี้ช้าลง อย่างไรก็ตาม ข้อดีของแนวทางนี้คือความสามารถในการรับคำอธิบายล่าสุดเกี่ยวกับบริการเว็บของผู้ให้บริการ เมื่อใช้ลิงก์แบบคงที่ หากต้องการรับคำอธิบายปัจจุบันของบริการเว็บ คุณต้องนำเข้าคำอธิบาย WSDL อีกครั้งโดยใช้ตัวกำหนดค่า และบันทึกการกำหนดค่าที่เปลี่ยนแปลง
เมื่อใช้งานโซลูชันแอปพลิเคชัน สถานการณ์อาจเกิดขึ้นเมื่อให้บริการเว็บเดียวกันในที่อยู่ที่แตกต่างกัน (URL) แต่มีคำอธิบายเหมือนกันทุกประการ (WSDL) ในกรณีนี้ จำเป็นต้องโหลดคำอธิบายของบริการเว็บลงในการกำหนดค่า (สร้างออบเจ็กต์ในแผนผังออบเจ็กต์การกำหนดค่า) แต่ในระหว่างการใช้งาน ให้ระบุที่อยู่เฉพาะซึ่งเป็นที่ตั้งของบริการเว็บ วิธีการรวมช่วยให้คุณทำงานในลักษณะนี้ได้ เป็นตัวอย่าง ให้พิจารณาสถานการณ์ต่อไปนี้: มีบริการเว็บจำลองแบบที่ทำงานอยู่
ฟังก์ชั่นบางอย่าง โซลูชันแอปพลิเคชันที่เขียนใน 1C:Enterprise ใช้บริการต่างๆ ของบริการนี้ในขณะที่ที่อยู่ของบริการอาจแตกต่างกัน (บริการสามารถทำซ้ำได้) และคำอธิบายได้รับการแก้ไขแล้ว จากนั้นคุณสามารถโหลดคำอธิบายของบริการเว็บลงในโซลูชันแอปพลิเคชันได้ และในการตั้งค่าโซลูชันแอปพลิเคชัน ให้ป้อนที่อยู่ของอินสแตนซ์เฉพาะของบริการ ซึ่ง (ที่อยู่) จะถูกใช้ระหว่างการดำเนินการ
ยังมีวิธีอื่นให้เลือก: ใช้ลิงก์แบบไดนามิก แต่ไม่ได้รับที่อยู่ของตำแหน่งบริการเว็บจากไฟล์คำอธิบาย (WSDL) แต่จะถูกระบุโดยตรงเมื่อสร้างวัตถุ
เมื่อคุณพยายามโหลดคำอธิบายบริการเว็บในตัวจัดโครงแบบ (สร้างลิงก์แบบคงที่) หรือเมื่อใช้ลิงก์แบบไดนามิก (โดยใช้ออบเจ็กต์ WS Definition) ระบบจะตรวจสอบคำอธิบายบริการเว็บที่โหลด (WSDL) หากมีข้อผิดพลาดในคำอธิบายของบริการบนเว็บ (จาก "มุมมอง" ของระบบ 1C: Enterprise) คำอธิบายจะไม่ถูกโหลดและจะมีการสร้างข้อยกเว้น ข้อความยกเว้นจะมีการวิเคราะห์โดยละเอียดเกี่ยวกับสาเหตุของการดาวน์โหลดล้มเหลว ข้อผิดพลาด WSDL จะแสดงตามลำดับที่พบ ข้อผิดพลาด WSDL แต่ละรายการมีรายการพร้อมคำอธิบายโดยละเอียดดังนี้:

<Тип элемента с ошибкой>.<Имя>
[<Тип элемента с ошибкой>.<Имя>[…]]
<Описание ошибки>
<Тип элемента с ошибкой>
<Имя>
ในคำอธิบายนี้:
● ประเภทองค์ประกอบที่ผิดพลาดคือประเภทองค์ประกอบ WSDL ส่วนใหญ่มักจะสอดคล้องกับชื่อแท็กในไฟล์ xml ที่อธิบายบริการบนเว็บ
● คำอธิบายข้อผิดพลาด – คำอธิบายของข้อผิดพลาดเฉพาะ
● ชื่อ—ชื่อของออบเจ็กต์ WSDL ที่เกิดข้อผิดพลาด

ตัวอย่างการใช้ลิงก์ WS แบบคงที่

เป็นตัวอย่างของการใช้บริการเว็บของบริษัทอื่น ลองเรียกใช้บริการเว็บที่สร้างขึ้นก่อนหน้านี้ในตัวอย่างด้านบน

ก่อนอื่น คุณควรเพิ่มออบเจ็กต์การกำหนดค่า WS-link ใหม่ชื่อ Invoice Data ลงในแผนผังการกำหนดค่า ซึ่งอ้างอิงถึงบริการที่เผยแพร่ ในการดำเนินการนี้ ให้นำเข้าคำอธิบาย WSDL ของบริการที่เผยแพร่และระบุเป็น URL http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl- คำอธิบายของการนำเข้าคำอธิบาย WSDL ถูกเขียนไว้ในบทความอื่น
หลังจากนี้ คุณสามารถสร้างขั้นตอนด้านล่างได้ในโมดูลใบแจ้งหนี้ เธอเติมเต็ม ส่วนที่เป็นตารางเอกสารที่มีข้อมูลใบแจ้งหนี้ของซัพพลายเออร์ที่ได้รับโดยใช้บริการเว็บของซัพพลายเออร์

ขั้นตอน รับ DataConsumableInvoice(หมายเลขใบแจ้งหนี้ของซัพพลายเออร์) พร็อกซี = WSLinks.InvoiceData สร้างWSProxy("http://www.MyCompany.ru/shipment", "ข้อมูลใบแจ้งหนี้", "ข้อมูลใบแจ้งหนี้"); InvoiceData = Proxy.Get()- ถ้า ข้อมูลใบแจ้งหนี้ = ไม่ได้กำหนดแล้วกลับ; สิ้นสุดถ้า; // กรอกใบแจ้งหนี้ด้วยข้อมูลที่ได้รับสำหรับแต่ละ LineInvoice Data.Composition Cycle NewRow = DocumentObject.Composition.Add(); NewLine.Quantity = RowIncl.Quantity; NewLine.Price = LineIncl.Price; NewLine.Amount = RowIncl.Amount; // ค้นหารายการของระบบการตั้งชื่อโดยใช้ข้อมูลที่ส่ง // (เช่น โดยบาร์โค้ด) NewLine.Nomenclature = Directories.Nomenclature ค้นหาโดยรายละเอียด("บาร์โค้ด", LineInk.Nomenclature.Barcode- สิ้นสุดรอบ; สิ้นสุดขั้นตอน

หากที่อยู่ของตำแหน่งจริงของบริการแตกต่างจากที่อยู่ที่ใช้เมื่อโหลดคำอธิบายบริการเว็บลงในการกำหนดค่า
ที่ ที่อยู่ใหม่ต้องระบุอย่างชัดเจนเมื่อสร้างอ็อบเจ็กต์ WSProxy:

ตัวอย่างการใช้ลิงก์ WS แบบไดนามิก

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

// สร้างพร็อกซี WS ตามคำจำกัดความ WS
คำจำกัดความ = WSDefinition ใหม่ (“http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl”);
พร็อกซี = WSProxy ใหม่ (คำจำกัดความ “http://www.MyCompany.ru/shipment”, “ข้อมูลใบแจ้งหนี้”, “ข้อมูลใบแจ้งหนี้สบู่”);
ในขณะที่สร้างพร็อกซี WS ตามลิงก์แบบคงที่จะมีลักษณะดังนี้:

// สร้างพร็อกซี WS ตามลิงก์
พร็อกซี = WSlinks.InvoiceData CreateWSProxy (“http://www.MyCompany.ru/shipment”, “InvoiceData”, “InvoiceData”);
หากที่อยู่ของตำแหน่งที่แท้จริงของบริการแตกต่างจากที่อยู่ที่ระบุในไฟล์ WSDL ที่ใช้ในการสร้างข้อกำหนดของบริการเว็บ ที่อยู่ใหม่จะต้องได้รับการระบุอย่างชัดเจนเมื่อสร้างอ็อบเจ็กต์ WSProxy จากข้อกำหนดของบริการเว็บ:

// สร้างพร็อกซี WS ตามคำจำกัดความ WSคำจำกัดความ = SDefinitions ใหม่ ("http://www.MyCompany.ru/shipment/ws/Shipment.1cws?wsdl"); พร็อกซี = WSProxy ใหม่ (คำจำกัดความ "http://www.MyCompany.ru/shipment", "ข้อมูลใบแจ้งหนี้", "Invoice DataSoap",);

การแก้ไขคุณสมบัติบริการเว็บ

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

คุณสมบัติการดำเนินงาน

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

● ประเภทค่าส่งคืน – ประเภทของค่าที่การดำเนินการบริการเว็บส่งคืน อาจเป็นประเภทค่า XDTO หรือประเภทอ็อบเจ็กต์
เอ็กซ์ดีทีโอ
● Null Possible—ระบุว่าค่าที่ส่งคืนสามารถเป็นค่าว่างได้หรือไม่
● ในธุรกรรม – ระบุว่าโค้ดโมดูลบริการเว็บจะถูกดำเนินการในธุรกรรมหรือไม่ หากตั้งค่าคุณสมบัติไว้ เมื่อเรียกใช้บริการบนเว็บ ธุรกรรมจะเริ่มต้นโดยอัตโนมัติ และเมื่อบริการบนเว็บเสร็จสมบูรณ์ ธุรกรรมจะถูกคอมมิตหรือธุรกรรมจะถูกย้อนกลับ (ขึ้นอยู่กับผลการดำเนินการ) หากไม่ได้ตั้งค่าคุณสมบัติ เมื่อโมดูลบริการเว็บเริ่มดำเนินการ
การทำธุรกรรมจะไม่เริ่มต้น
● ชื่อวิธีการ – ชื่อของขั้นตอนการส่งออกของโมดูลบริการเว็บที่จะดำเนินการเมื่อมีการเรียกคุณสมบัตินี้
แท็บระบบย่อยจะระบุว่าอ็อบเจ็กต์ระบบย่อยประเภทนี้เป็นของใด
บนแท็บ อื่นๆ มีการกำหนดคุณสมบัติต่อไปนี้:
● URI เนมสเปซ ประกอบด้วย URI เนมสเปซของบริการบนเว็บ แต่ละบริการบนเว็บสามารถระบุได้โดยไม่ซ้ำกัน
ชื่อและ URI ของเนมสเปซที่มันอยู่ เนมสเปซบริการไม่ควรเหมือนกับเนมสเปซที่รู้จักซึ่งมีการใช้งานหรือสงวนไว้โดยองค์กรอื่นแล้ว ขอแนะนำให้เนมสเปซบริการรวมส่วนที่ไม่ซ้ำกันสำหรับองค์กรที่กำลังพัฒนาบริการเว็บ ตัวอย่างเช่น สำหรับองค์กรที่ชื่อ Promresurs ก็สมเหตุสมผลที่จะเริ่มต้นเนมสเปซทั้งหมดด้วยคำนำหน้า เช่น http://promresurs.com จากนั้น URI ของเนมสเปซบริการเว็บจะมีลักษณะดังนี้ http://promresurs.com/public/services/ของเราบริการ
● แพ็คเกจ XDTO – รายการแพ็คเกจ XDTO ที่ประเภทสามารถใช้เป็นประเภทการส่งคืนการดำเนินการและประเภทพารามิเตอร์การทำงานของบริการบนเว็บ
● ชื่อไฟล์สิ่งพิมพ์ – ชื่อของไฟล์คำอธิบายบริการบนเว็บ ซึ่งอยู่บนเว็บเซิร์ฟเวอร์
การคลิกปุ่มโมดูลจะเปิดตัวแก้ไขโมดูลบริการเว็บ

คุณสมบัติพารามิเตอร์
นอกเหนือจากคุณสมบัติทั่วไปของอ็อบเจ็กต์คอนฟิกูเรชันแล้ว พารามิเตอร์การดำเนินการบริการเว็บยังมีคุณสมบัติดังต่อไปนี้:
● ประเภทค่า—ประเภทค่าของพารามิเตอร์การทำงานของบริการเว็บ อาจเป็นประเภทค่า XDTO หรือประเภทอ็อบเจ็กต์ XDTO
● Null Possible—ระบุว่าค่าของพารามิเตอร์การทำงานสามารถเป็นค่าว่างได้หรือไม่
● ทิศทางการส่งข้อมูล – กำหนดทิศทางการส่งข้อมูลโดยใช้ พารามิเตอร์นี้- ค่าที่เป็นไปได้:
● อินพุต – หมายถึงพารามิเตอร์ที่ใช้ในการส่งข้อมูลไปยังบริการบนเว็บ
● เอาท์พุต – หมายถึงพารามิเตอร์ที่ใช้เพื่อรับข้อมูลจากบริการบนเว็บ
● อินพุต-เอาต์พุต – หมายความว่าพารามิเตอร์สามารถใช้ได้ทั้งในการส่งข้อมูลและรับจากบริการบนเว็บ


คำสำคัญ: บริการเว็บ, บริการเว็บ, สบู่, WSDL, ลิงก์ ws

ข้อจำกัดความรับผิดชอบและข้อกำหนดการใช้งาน

เครื่องหมายการค้าทั้งหมดที่กล่าวถึงโดยไม่ได้ตั้งใจในบทความนี้เป็นของเจ้าของที่เกี่ยวข้อง
บทความนี้เผยแพร่ภายใต้ Creative Commons Attribution-Share Alike 3.0 Unported License http://creativecommons.org/licenses/by-sa/3.0/

ข้อจำกัดความรับผิดชอบอื่น (หลังจากหลายครั้ง)

แพลตฟอร์ม 1C:Enterprise 8 มีการพัฒนาอย่างต่อเนื่อง ดังนั้นโค้ดที่นำเสนอในบทความนี้ก็คือ เวอร์ชันล่าสุดแพลตฟอร์มจะสร้างข้อผิดพลาด สิ่งนี้เกิดขึ้นโดยเฉพาะอย่างยิ่งเนื่องจากความจริงที่ว่าลำดับการเรียกวิธีการของวัตถุพร็อกซีบริการเว็บเปลี่ยนไป: ตัวอย่างเช่นวัตถุที่ซับซ้อนจะต้องถูกแปลงอย่างชัดเจนเป็นวัตถุ XDTO ประเภทที่เหมาะสมโดยใช้โรงงานของบริการที่เกี่ยวข้อง . คุณสามารถอ่านเกี่ยวกับเรื่องนี้ได้ในฟอรัมของเราหรือในหนังสือ “1C:Enterprise Integration Technologies” http://v8.1c.ru/metod/books/book.jsp?id=288

การแนะนำ

เมื่อปรากฏ เวอร์ชันใหม่ผลิตภัณฑ์ซอฟต์แวร์บางตัว ก่อนอื่นเลย คุณต้องเข้าใจว่ามีอะไรใหม่ในนั้น ในกรณีของ 1C:Enterprise 8.1 บริการบนเว็บกลายเป็น “ฟีเจอร์” ใหม่สำหรับฉัน มีการเขียนและพูดถึงบริการเว็บมากมายเนื่องจากเทคโนโลยีนี้มีมานานแล้วตามมาตรฐานคอมพิวเตอร์ ดังนั้นฉันจะไม่พูดซ้ำอีกครั้ง ฉันแนะนำทุกคนให้ไปที่ Yandex เพื่อขอข้อมูล ให้ฉันพูดอย่างนั้นพร้อมกับการเปิดตัว ฉบับใหม่แพลตฟอร์ม "1C:Enterprise 8.1" ขณะนี้ 1Snikov มีโอกาสที่จะสร้างและใช้เทคโนโลยีบริการเว็บ ในสภาพแวดล้อมดั้งเดิม ในบทความนี้ ฉันต้องการแสดงวิธีใช้บริการเว็บภายนอกในการพัฒนาของคุณ

สำหรับผู้ที่ "ไม่อยู่ในวง" โดยสิ้นเชิง: เกี่ยวกับบริการเว็บ "เพียงปลายนิ้วสัมผัส"

ตกลง, พิเศษสำหรับคุณฉันจะพยายามบอกคุณเล็กน้อยว่าบริการทางเว็บคืออะไรและเพราะเหตุใด นี้สำหรับฉันมันดูเหมือนเป็นนวัตกรรมที่ “อร่อย” ของแพลตฟอร์มนี้ บางทีคุณอาจรู้เกี่ยวกับเทคโนโลยี COM หรือได้ยินบางอย่างเกี่ยวกับ OLE? ไม่ช้าก็เร็วพนักงานทุกคนจะเจอเทคโนโลยีนี้ (โดยเฉพาะหากคุณต้องการโอนไดเร็กทอรีบางส่วน “พนักงาน” อย่างรวดเร็ว และฝ่ายทรัพยากรบุคคลคาดการณ์ว่าจะต้องขับเคลื่อนพนักงานทั้งหมด 1,500 คนอีกครั้ง พร้อมที่จะแขวนคุณเป็นคนแรก เล็บที่เหมาะสมที่ติดมาด้วย)
ใช่แล้ว หัวใจของเทคโนโลยี COM คือแนวคิดของ ความเป็นไปได้การเรียกรหัสโปรแกรม (และการเข้าถึงข้อมูล) ของแอปพลิเคชันหนึ่งจากแอปพลิเคชันอื่น นอกจากนี้, ความเป็นไปได้ทำสิ่งนี้ไม่ใช่ในระดับขั้นตอนและหน้าที่ส่วนบุคคล แต่โดยการกำจัด วัตถุแอปพลิเคชันอื่น เมื่อใช้ OLE เราจะสร้างวัตถุในแอปพลิเคชันของเรานั่นคือ " ตัวแทน“หรือถ้าคุณต้องการ” กระดาษห่อ"ของวัตถุบางส่วนของแอปพลิเคชันที่เราต้องการโต้ตอบ (ที่เรียกว่า "วัตถุ OLE" หรือ "วัตถุ COM") ผ่านวัตถุ "wrapper" นี้ คุณสมบัติและวิธีการของวัตถุของแอปพลิเคชันอื่นจะพร้อมใช้งานสำหรับเรา และเฉพาะผู้พัฒนาเท่านั้น ไปแอพอนุญาตให้เราใช้งานโดยเผยแพร่ในคำอธิบาย อินเตอร์เฟซ- (คือไม่อยากเข้าไปในวัชพืชแต่ไม่มีทางอื่นแล้ว...)
ทีนี้ลองจินตนาการดูว่า เหมือนเดิมทุกประการแอปพลิเคชันนั้นอยู่ในคอมพิวเตอร์เครื่องอื่นและไม่ได้อยู่ในนั้นด้วยซ้ำ เครือข่ายท้องถิ่น(DCOM, CORBA และคำย่อที่ลึกซึ้งอื่น ๆ จัดการกับกรณีดังกล่าวได้ค่อนข้างดี) และที่อื่นที่ห่างไกลบนอินเทอร์เน็ต นี่คือจุดที่บริการเว็บเข้ามามีบทบาท (รวมถึงตัวย่อที่ลึกซึ้งเช่น SOAP, WSDL ฯลฯ ) ซึ่งช่วยให้คุณสามารถดำเนินการ "เคล็ดลับ" ที่คล้ายกันในกรณีนี้: เช่น รับข้อมูลและจัดการออบเจ็กต์จากแอปพลิเคชันที่ทำงานบนคอมพิวเตอร์อีกด้านหนึ่งของอินเทอร์เน็ต
ภายใต้ " ภายนอก"โดยบริการทางเว็บ ฉันจะหมายถึงบริการทางเว็บที่มอบให้กับบางคน ผู้จัดหาบริการ (เช่น ไม่ใช่แอปพลิเคชันของเรา) ดังนั้น โดย "ภายใน" - บริการเว็บที่เราจะมอบให้ จากหรือพูดให้เจาะจงกว่านั้นคือ ซึ่งเป็นรากฐานใบสมัครของเรา เมื่อใช้บริการเว็บภายนอก เราต้องเข้าใจว่าถึงแม้ออบเจ็กต์ "wrapper" จะถูกสร้างขึ้นในแอปพลิเคชัน "ท้องถิ่น" ของเรา แต่ "รหัสดำเนินการ" ของออบเจ็กต์นี้อาจอยู่ที่อีกด้านหนึ่งของโลก ขณะเดียวกันก็มีการแลกเปลี่ยนระหว่าง เราและ พวกเขาเกิดขึ้นใน XML ที่แพร่หลายในขณะนี้ โดยมี "ข้อดี" (ความเก่งกาจและโครงสร้าง) ที่รู้จักกันดีและ "ข้อเสีย" (ขยายตัว) และ http เก่าที่ดีนั้นถูกใช้เป็น "สายส่ง"
ใช่แล้ว และอย่าลืมเกี่ยวกับปริมาณการใช้อินเทอร์เน็ต! นอกจากนี้ ในกรณีของบริการเว็บภายนอก ส่วนใหญ่จะเปิดใช้งานอยู่ เข้ามาส่วนประกอบ.
ทุกอย่างอื่นอยู่ใน Yandex. เดินหน้าต่อไป...

ขามาจากไหนเช่น ปีกเติบโต

เมื่อค้นหาผ่าน Yandex ฉันพบบริการเว็บที่ยอดเยี่ยมจาก บริษัท Aeroflot ซึ่งช่วยให้คุณรับข้อมูลเกี่ยวกับการมาถึงและการออกจากเครื่องบินแบบเรียลไทม์และตัดสินใจสร้าง "Airport Display" ใน 1C:Enterprise บริการนี้อาศัยอยู่ที่นี่: http://webservices.aeroflot.ru/desc_flightinfo.asp

เขาพูดว่า: "ไปกันเถอะ!"

ขั้นแรก ฉันสร้างการกำหนดค่าว่างของ "1C:Enterprise 8.1" (ในขณะที่เขียนฉันมีแพลตฟอร์มเวอร์ชัน 8.1.5.123 พร้อมใช้งาน) จากนั้นฉันก็เพิ่มออบเจ็กต์ใหม่ประเภท WS-link ในการกำหนดค่าของฉัน เมื่อได้รับแจ้งให้ป้อน URL ของ WSDL ที่นำเข้า ฉันป้อนลิงก์ไปยังไฟล์ WSDL ซึ่งแสดงอยู่ในหน้าบริการ: http://webservices.aeroflot.aero/flightstatus.wsdl (ไฟล์ WSDL เป็นคำอธิบายของ บริการเว็บ สำหรับรายละเอียด โปรดไปที่ Yandex ) และตั้งชื่อสิ่งอำนวยความสะดวกที่สร้างขึ้นอย่างภาคภูมิใจว่า "แอโรฟลอต" เมื่อดับเบิลคลิกที่วัตถุนี้ ฉันจะได้แผนผังที่มีโครงสร้างของบริการเว็บ

แผนผังนี้แสดงถึง “ภาพเหมือน” ของบริการบนเว็บ ดังที่ 1Ska เห็น สิ่งที่น่าสนใจที่สุดคือในสาขา "บริการบนเว็บ": นี่ ชื่อและ พอร์ตบริการบนเว็บ (อันที่จริงไฟล์ WSDL ไม่สามารถอธิบายได้เพียงบริการเดียว แต่มีหลายบริการบนเว็บ จากนั้นบริการเว็บแต่ละบริการจะมีสาขาของตัวเอง) และอยู่ในรายการ วิธีการบริการเว็บ. สิ่งเหล่านี้คือ "สตริง" ที่แท้จริงโดยการดึงซึ่งคุณสามารถให้สิทธิ์ตัวเองในการเข้าถึงข้อมูลที่บริการเว็บมอบให้ สาขา "แบบจำลองข้อมูล" มีคำอธิบายของไลบรารีชนิดข้อมูลที่ใช้โดยบริการเว็บ
การอ้างอิงอย่างรวดเร็วเกี่ยวกับการใช้บริการเว็บมักจะอยู่ในตำแหน่งเดียวกับลิงก์ไปยังไฟล์ WSDL ในกรณีของ Aeroflot นี่คือหน้า http://webservices.aeroflot.aero/flightstatus.asmx

"ตอนนี้เครื่องขึ้น ตอนนี้เครื่องลงแล้ว..."

ในการทำงานกับบริการเว็บฉันได้เพิ่มการประมวลผล "Departures Display" ลงในการกำหนดค่าและในนั้น - รูปแบบหนึ่งซึ่งฉันกำหนดให้เป็นรูปแบบหลัก ในแบบฟอร์ม ฉันวางช่องตัวเลือก "การเลือกสนามบิน" ช่องป้อนข้อมูล "วันที่บิน" แผง "แผงโต๊ะ" ที่มีสองหน้า "ขาเข้า" และ "ออกเดินทาง" ในขณะที่ฉันยกเลิกการเลือกแฟล็ก "กระจายข้ามหน้า" ใน คุณสมบัติแผงและฟิลด์ตาราง "Tableboard" "
การโต้ตอบกับบริการบนเว็บเกิดขึ้นบนหลักการ "คำขอ - ตอบกลับ" และมีการสร้างออบเจ็กต์ตัวกลางพิเศษสำหรับบริการบนเว็บ ดังนั้นฉันจึงเพิ่มแอตทริบิวต์แบบฟอร์ม "ServiceAeroflot" ของประเภทที่กำหนดเอง
หากคุณอ่านคำอธิบายของบริการอย่างละเอียด คุณจะเห็นว่าบริการบนเว็บให้ข้อมูลเกี่ยวกับขาเข้าและขาออกผ่านการโทรไปยังวิธีการมาถึงและออกเดินทางตามลำดับ ในกรณีนี้ ทั้งสองวิธีจะใช้รหัสสนามบินและวันที่ที่ต้องการเป็นพารามิเตอร์ นอกจากนี้ บริการบนเว็บยังให้ความสามารถในการรับรายชื่อสนามบินที่มีข้อมูลอยู่ในระบบ สถานการณ์ต่อไปนี้ของการโต้ตอบกับบริการบนเว็บค่อนข้างชัดเจน:
1. รับรายชื่อสนามบิน
2. เลือกสนามบินและวันที่ที่ต้องการ
3. รับข้อมูลเกี่ยวกับขาเข้าหรือขาออก
แต่ก่อนที่จะเข้าถึงบริการเว็บ คุณต้องเริ่มต้นออบเจ็กต์ตัวกลาง (เช่น WSProxy) ซึ่งเป็นสิ่งที่ฉันทำในตัวจัดการการเปิดแบบฟอร์ม:
ServiceAeroflot=WSLinks.Aeroflot.CreateWSProxy(" http: //www.aeroflot.ru/", "FlightStatus", "FlightStatusSoap");
พารามิเตอร์แรกคือ URI ของเนมสเปซบริการเว็บ คุณสามารถค้นหาได้โดยการเปิดคุณสมบัติของบริการเว็บในแผนผังลิงก์ WS พารามิเตอร์ที่สองและสามส่งชื่อและพอร์ตของบริการเว็บตามลำดับ
(อย่าสับสนแนวคิดของ "ชื่อ", "พอร์ต", "พร็อกซี" ฯลฯ ที่นำไปใช้กับบริการเว็บกับแนวคิดโปรโตคอล TCP/IP ที่คุ้นเคยมากกว่า หากมีการติดต่อกันระหว่างกัน ก็จะค่อนข้างเป็นความหมาย ในกรณีทั่วไป คุณต้องเข้าใจว่า เช่น พอร์ตบริการเว็บและพอร์ต TCP นั้นแตกต่างกันโดยสิ้นเชิง)
ดังนั้นฉันจึงเริ่มต้นออบเจ็กต์ ServiceAeroflot ของประเภท WSProxy ซึ่งโดยพื้นฐานแล้วคือ "wrapper" ของบริการบนเว็บ ฉันสามารถเข้าถึงวิธีการบริการเว็บเป็นวิธีการ "ดั้งเดิม" ของแพลตฟอร์มได้
ก่อนอื่น ฉันได้รับรายชื่อสนามบินและกรอกข้อมูลในช่องตัวเลือก "เลือกสนามบิน":

SelectionList=FormElements.AirportSelection.SelectionList; SelectionList.Clear(); AirportList=บริการ Aeroflot.AirportList().GetList("รายการ "); TotalAirports=ListAirports.Count(); สำหรับ ui=0 ถึง TotalAirports-1 Cycle Airport=ListAirports.Get(ies); SelectionList.Add(Airport.code, ""+Airport.city+" : "+Airport.name); สิ้นสุดรอบ;
ที่นี่เราต้องการความคิดเห็นเล็กน้อยเกี่ยวกับการสร้าง Airport List = ServiceAeroflot.AirportList().GetList("list");
ความจริงก็คือค่าที่ส่งคืนโดยวิธีการบริการเว็บจะแสดงในแพลตฟอร์มโดยอ็อบเจ็กต์ประเภท XDTO Object เนื่องจากหัวข้อของเทคโนโลยี XDTO อยู่นอกเหนือขอบเขตของบทความนี้ ฉันจะพูดอย่างนั้นเท่านั้น การเปลี่ยนแปลงวัตถุนี้ลงในรายการ (ซึ่งก็คือ) ฉันเรียกมันว่า GetList() วิธีการ โค้ดที่เหลือค่อนข้างชัดเจน รวมถึงชื่อของฟิลด์ของโครงสร้างสนามบิน ซึ่งฉันพบในหน้าคำอธิบายบริการบนเว็บ
ตอนนี้คุณสามารถรันการกำหนดค่าและตรวจสอบให้แน่ใจว่ารายการฟิลด์การเลือกนั้นเต็มไปด้วยชื่อสนามบิน:

"วันออกเดินทาง วันที่มาถึง..."

ตอนนี้ฉันมีเกือบทุกอย่างพร้อมที่จะทำให้กระดานคะแนนของฉันทำงานแล้ว สิ่งที่เหลืออยู่คือ "ทาสีแล้วทิ้ง" :) นั่นคือสิ่งที่ฉันจะทำ:

ขั้นตอน FillTableboard(Arrival=True) TableTableboard.Columns.Clear(); TableTableboard.Columns.Add("รหัสเที่ยวบิน", "รหัสเที่ยวบิน"); TableTableboard.Columns.Add(" รหัสสายการบิน", "สายการบิน"); TableTable.Columns.Add("FlightNumber", "Number"); TableTable.Columns.Add(" การต่อเครื่องที่สนามบิน", "บริการรับ-ส่งสนามบิน"); TableTable.Columns.Add("สนามบิน", "สนามบิน"+?(ขาเข้า,"ขาออก,"ขาเข้า")); TableTable.Columns.Add(" ตารางเวลา", "ตามกำหนดเวลา"); TableTableboard.Columns.Add(" เวลาที่วางแผนไว้", "วางแผนแล้ว"); TableTableboard.Columns.Add(" เวลาตามความเป็นจริง", "ตามจริง"); TableTable.Columns.Add("เวลาที่คำนวณ", "คำนวณ"); TableTable.Columns.Add("เวลาที่ลงจอด", ?(การมาถึง,"การลงจอด", "การขึ้นเครื่อง")); TableTable. Columns.Add("Combined Flight", "Combined Flight"); TableTable.Columns.Add("สถานะ", "สถานะ"); เพิ่ม ("Landing", "Landing"); EndIf; Form Elements. ("list"); ServiceAeroflot.Departure(SelectAirport, FlightDate).GetList("list"); สำหรับ ii=0 โดย TotalRecords-1 Cycle Record=Data.Get(ies); NewRow=TableTable.Add(); บริษัท; NewLine.FlightNumber = รายการ.flight_no; NewLine.AirportTransit = รายการสนามบิน_inter; NewLine.Airport = รายการสนามบิน; NewLine.TimeSchedule=บันทึก.sched; NewLine.TimePlanned=บันทึก.แผน; NewLine.TimeActual=บันทึก.ข้อเท็จจริง; NewLine.TimeCalculated=บันทึก.calc; NewLine.LandingTime=Record.real; NewLine.UnionFlight=Record.union_flight_no; NewRow.Status = บันทึกสถานะ; ถ้าไม่มาถึงให้ NewLine.Registration=Record.is_check; NewLine.Landing = รายการ.is_board; สิ้นสุดถ้า; สิ้นสุดรอบ; สิ้นสุดขั้นตอน

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

ขั้นตอนการอัปเดต CommandPanel1 (ปุ่ม) FillTableboard (FormElements.TableboardPanel.CurrentPage=FormElements.TableboardPanel.Pages.Arrivals); สิ้นสุดขั้นตอน
ฉันบันทึก เรียกใช้ เลือก คลิก รับ:

คำหลัง

น่าแปลกที่หลังจากเขียนและตีพิมพ์บทความแล้ว ปรากฎว่า ZAV ที่เคารพนับถือได้เผยแพร่ตัวอย่างที่คล้ายกันใน IT-Land แล้ว: http://itland.ru/biblio/detail.php?ID=1060
เพื่อหลีกเลี่ยงข้อกล่าวหาเรื่องการลอกเลียนแบบที่อาจเกิดขึ้น ฉันขอแนะนำให้คุณอ่านบทความนี้ด้วยและเปรียบเทียบแนวทางของผู้เขียน

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

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

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

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

มันทำงานอย่างไร?

ฟังก์ชั่นจากภายนอกถูกเรียก (เปิดตัว) โดยการร้องขอโดยใช้โปรโตคอล SOAP

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

บริการเว็บ 1C

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

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

ในหลายกรณี คุณไม่สามารถสร้างแพ็คเกจ XDTO ของคุณเองได้ แต่ใช้แพ็คเกจเริ่มต้นโดยเลือกแพ็คเกจ www.sample-package.org จากรายการ

วิธีการบริการเว็บ 1C

หลังจากนี้คุณจะต้องเพิ่มรายการฟังก์ชัน (วิธีการของบริการเว็บ 1C) ที่จะให้บริการภายนอก เป็นการดีกว่าที่จะเรียกพวกเขาเป็นภาษาอังกฤษ ฟังก์ชันสามารถมีพารามิเตอร์ได้

ประเภทพื้นฐานที่จะใช้:

  • สตริง - สตริง
  • int หรือจำนวนเต็ม - จำนวนเต็ม
  • จริง – จำนวนเศษส่วน
  • วันที่ – วันที่

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

เป็นฟังก์ชัน 1C นี้ที่จะดำเนินการเมื่อเรียกใช้วิธีบริการเว็บ 1C อย่าลืมว่าจะดำเนินการบนเซิร์ฟเวอร์ 1C ไม่แนะนำให้ใช้โหมดไฟล์สำหรับการทำงานกับบริการเว็บ 1C

ฟังก์ชันมักจะส่งคืนข้อมูลบางส่วน โดยทั่วไปแล้วประเภทจะเป็นสตริงและสตริง XML จะถูกส่งกลับ

สตริง XML สามารถสร้างขึ้นได้โดยใช้ออบเจ็กต์ภาษา 1C สำหรับ หรือคุณสามารถสร้างสตริงข้อความสำหรับจัดเก็บข้อความ XML ก็ได้

การเผยแพร่บริการเว็บ 1C

ดังที่เราได้กล่าวไว้ก่อนหน้านี้ โปรแกรมอื่น ๆ จะต้อง "รู้" ว่ามีบริการเว็บ 1C อยู่ มีรายการวิธีการดังกล่าว และอื่น ๆ

คำอธิบายควรอยู่บนเว็บไซต์ ในการทำเช่นนี้คุณต้องมี:

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

เบราว์เซอร์ควรแสดงบางส่วน ไฟล์ XML(ตัวอย่างของไฟล์ WSDL อยู่ที่นี่ http://ru.wikipedia.org/wiki/WSDL) และไม่ใช่ข้อผิดพลาด ไม่ใช่หน้าว่าง และไม่มีข้อความเบลอในการเข้ารหัสใดๆ

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

ตัวอย่างเช่น, วิชวลสตูดิโออนุญาตให้ใช้ภาษาใดก็ได้ (C ++, C #, วิชวลเบสิก) – รวมบริการเว็บ 1C ในโครงการตามคำอธิบาย WSDL และสร้างคลาสสำหรับการใช้บริการเว็บ 1C

บริการเว็บเป็นหนึ่งในกลไกแพลตฟอร์มที่ใช้ในการบูรณาการกับระบบสารสนเทศอื่น เป็นวิธีการสนับสนุน SOA (Service-Oriented Architecture) ซึ่งเป็นสถาปัตยกรรมเชิงบริการที่เป็นมาตรฐานสมัยใหม่สำหรับการบูรณาการแอปพลิเคชันและระบบข้อมูล

ข้อได้เปรียบที่สำคัญของสถาปัตยกรรมเชิงบริการคือช่วยให้คุณสามารถพัฒนาโครงสร้างพื้นฐานขององค์กรในลักษณะเดียวกัน โดยไม่ทำลายโซลูชันที่มีอยู่ การใช้งานช่วยให้คุณลดต้นทุนลงได้โดยการผสานรวมระบบที่ต่างกันและแบบเดิมเข้ากับภูมิทัศน์องค์กรสมัยใหม่ ช่วยให้คุณสามารถใช้ส่วนประกอบซอฟต์แวร์ที่เชื่อมต่ออย่างหลวม ๆ เพื่อเพิ่มการนำกลับมาใช้ใหม่ให้เกิดประโยชน์สูงสุด

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

โซลูชันแอปพลิเคชัน 1C:Enterprise 8 สามารถเป็นได้ทั้งผู้ให้บริการเว็บและผู้ใช้บริการเว็บที่เผยแพร่โดยผู้ให้บริการรายอื่น

ระบบที่ใช้ฮาร์ดแวร์ที่กำหนดเองและ แพลตฟอร์มซอฟต์แวร์- เทคโนโลยีบริการเว็บเป็นอิสระจากแพลตฟอร์ม


การใช้งานทางเทคนิคของบริการเว็บ

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

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

ในกรณีของงานเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ โมดูลนี้จะถูกดำเนินการในคลัสเตอร์ ในกรณีของเวอร์ชันไฟล์ของงาน - ในโมดูลส่วนขยายของเว็บเซิร์ฟเวอร์

หากโซลูชันแอปพลิเคชันเป็นผู้บริโภคของผู้ให้บริการเว็บบุคคลที่สาม ในกรณีนี้ การโต้ตอบระหว่างโซลูชันแอปพลิเคชันและผู้ให้บริการเว็บจะดำเนินการ