ทีวีและโปรเจคเตอร์ 

1c การทำงานกับตัวอย่างสตริง ฟังก์ชั่นใหม่สำหรับการทำงานกับสตริง ฟังก์ชันสำหรับการทำงานกับสตริง StrFind()

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

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

การวิเคราะห์ข้อความ 1C - รูปแบบและปุ่ม

ดังนั้น เรามาสร้างการประมวลผลภายนอกกันดีกว่า: Configurator/File/New/External Processing

การเพิ่มแบบฟอร์ม ในแบบฟอร์ม เราจำเป็นต้องวางฟิลด์การเลือกไฟล์ข้อความและปุ่มการวิเคราะห์

การวิเคราะห์ข้อความ 1C - ไคลเอ็นต์แบบหนา

มาวางฟิลด์ข้อความปกติในแบบฟอร์มกัน ความยาวของบรรทัดไม่จำกัด เนื่องจากเส้นทางไปยังไฟล์ (ชื่อไดเร็กทอรี) อาจมีนัยสำคัญ

เพื่อให้ผู้ใช้ไม่ต้องกรอกชื่อไฟล์แต่สามารถเลือกได้ เราจะเปิดใช้งานปุ่มเลือกในช่อง

เราจะเปลี่ยนชื่อฟิลด์เป็น "FileName" ชื่อของแอตทริบิวต์แบบฟอร์มที่เกี่ยวข้องจะเปลี่ยนเป็นชื่อเดียวกันโดยอัตโนมัติ

ในส่วนของปุ่ม เราจะใช้ปุ่ม “Run” ที่แพลตฟอร์มเพิ่มโดยอัตโนมัติ (และมีตัวจัดการเชื่อมต่ออยู่แล้ว - สะดวก)

การวิเคราะห์ข้อความ 1C - ไคลเอ็นต์แบบบาง

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

ในส่วนของปุ่ม เราจะสร้างคำสั่ง “Run” กำหนดการประมวลผลให้กับคำสั่งนั้น และลากไปยังแบบฟอร์ม

การวิเคราะห์ข้อความ 1C - การเขียนโปรแกรม

สิ่งแรกที่เราต้องทำคือดำเนินการคลิกปุ่มเลือก - แสดงกล่องโต้ตอบการเลือกไฟล์เมื่อคลิก

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

ภายในฟังก์ชันตัวจัดการที่ 1C จะสร้างเมื่อได้รับมอบหมาย เราจะเขียนโค้ดง่ายๆ ดังนี้

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

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

มาเพิ่มโค้ดให้กับตัวจัดการที่อ่านไฟล์เป็นสตริง:

เกี่ยวกับการเข้ารหัสไฟล์ หากคุณสร้างวัตถุ TextReading() โดยไม่มีพารามิเตอร์ที่ระบุการเข้ารหัส 1C จะพยายามกำหนดการเข้ารหัสอย่างอิสระ (โดยใช้ลายเซ็น Byte Order Mark - BOM หรือจะพิจารณาการเข้ารหัส ANSI)

คุณสามารถระบุการเข้ารหัสที่ต้องการได้โดยตรง เช่น:
ไฟล์ = ข้อความอ่านใหม่ (ชื่อไฟล์, "UTF-8"); //แทนที่ชื่อการเข้ารหัสที่ต้องการ

ด้วยเหตุนี้เราจึงได้:

  • สตริงข้อความที่อ่านจากไฟล์ในตัวแปร "ข้อความ"
  • ขั้นตอนที่เราจะวิเคราะห์สตริงผลลัพธ์จากตัวแปรที่เรียกว่า "TextAnalysis()" โดยใช้ฟังก์ชันสตริง 1C

ใช้งานในเวอร์ชัน 8.3.6.1977

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

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

ฟังก์ชันการจัดรูปแบบ StrTemplate()

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

Strเทมเพลต(<Шаблон>, <Значение1-Значение10>)

<Шаблон>- นี่คือสตริงที่คุณต้องการแทนที่การแสดงพารามิเตอร์

<Значение1> , ... <Значение10>- นี่คือพารามิเตอร์ (สูงสุดสิบ) ซึ่งจะต้องแทนที่การแทนค่าในสตริง

หากต้องการระบุตำแหน่งเฉพาะในเทมเพลตที่คุณต้องการดำเนินการทดแทน คุณต้องใช้เครื่องหมาย เช่น %1, ... %10 จำนวนเครื่องหมายที่เกี่ยวข้องกับเทมเพลตและจำนวนพารามิเตอร์ที่มีค่าต้องตรงกัน

ตัวอย่างเช่น ผลลัพธ์ของการดำเนินการตัวดำเนินการดังกล่าว:

จะมีบรรทัด:

ข้อผิดพลาดของข้อมูลในบรรทัด 2 (ต้องระบุประเภทวันที่)

ฟังก์ชันสำหรับการทำงานกับสตริง StrCompare()

ฟังก์ชันนี้เปรียบเทียบสองสตริงในลักษณะที่ไม่คำนึงถึงขนาดตัวพิมพ์ ตัวอย่างเช่นเช่นนี้:

คุณสามารถดำเนินการเดียวกันก่อนหน้านี้ได้โดยใช้ออบเจ็กต์การเปรียบเทียบค่า:

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

ฟังก์ชันสำหรับการทำงานกับสตริง StrStartsWith(), StrEndsAt()

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

ตัวอย่างเช่น สะดวกในการใช้ในคำสั่ง If:

ฟังก์ชั่นสำหรับการทำงานกับสตริง StrDivide(), StrConnect()

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

ฟังก์ชันสำหรับการทำงานกับสตริง StrFind()

แทนที่จะใช้ฟังก์ชัน Find() แบบเก่า เรานำมาใช้ คุณลักษณะใหม่ซึ่งมีคุณสมบัติเพิ่มเติม:

  • ค้นหาในทิศทางต่างๆ (ตั้งแต่ต้นจนจบ)
  • ค้นหาจากตำแหน่งที่ระบุ
  • ค้นหาเหตุการณ์ด้วยหมายเลขที่ระบุ (วินาที สาม ฯลฯ)

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

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

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

การเพิ่มสตริง

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

เลือก "ชื่อ: " + คู่สัญญา ชื่อ AS คอลัมน์ 1 จากไดเร็กทอรี คู่สัญญา AS คู่สัญญา โดยที่ลิงก์ = &ลิงก์

ฟังก์ชันสตริงย่อย

สตริงย่อย(<Строка>, <НачальнаяПозиция>, <Длина>)

อะนาล็อกของฟังก์ชัน Environment() จากโมเดลออบเจ็กต์ สามารถใช้ฟังก์ชัน Substring() กับข้อมูลสตริงและอนุญาตให้คุณเลือกส่วนย่อยได้ <Строки> เริ่มต้นด้วยหมายเลขตัวอักษร <НачальнаяПозиция> (อักขระในบรรทัดจะมีหมายเลขเริ่มต้นจาก 1) และความยาว <Длина> ตัวอักษร ผลลัพธ์ของการคำนวณฟังก์ชันมีประเภทสตริงที่มีความยาวผันแปรได้ และหากความยาวจะถือว่าไม่จำกัด <Строка> มีความยาวและพารามิเตอร์ไม่จำกัด <Длина> ไม่เป็นค่าคงที่หรือมากกว่า 1024

หากความยาวของสตริงน้อยกว่าที่ระบุในพารามิเตอร์ตัวที่สอง ฟังก์ชันจะส่งกลับสตริงว่าง

ความสนใจ!ไม่แนะนำให้ใช้ฟังก์ชัน SUBSTRING() เพื่อแปลงสตริงที่มีความยาวไม่จำกัดเป็นสตริงที่มีความยาวจำกัด ควรใช้ตัวดำเนินการคาสต์ EXPRESS() แทน

ฟังก์ชั่นที่คล้ายกัน

หากเราต้องการให้แน่ใจว่าแอตทริบิวต์สตริงตรงตามเกณฑ์ที่กำหนด เราจะเปรียบเทียบ:

เลือกคู่สัญญา ตั้งชื่อ AS คอลัมน์ 1 จากไดเรกทอรี AS คู่สัญญา โดยที่ชื่อคู่สัญญา = "Gazprom"

แต่ถ้าคุณต้องการการเปรียบเทียบที่ละเอียดกว่านี้ล่ะ? ไม่ใช่แค่ความเสมอภาคหรือความไม่เท่าเทียมกันเท่านั้น แต่ยังมีความคล้ายคลึงกับรูปแบบบางอย่างด้วย? นี่คือสิ่งที่ฟังก์ชัน SIMILAR ถูกสร้างขึ้นมาเพื่อสิ่งนี้

LIKE - ตัวดำเนินการสำหรับตรวจสอบสตริงเพื่อความคล้ายคลึงกับรูปแบบ อะนาล็อกของ LIKE ใน SQL

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

อักขระต่อไปนี้ในสตริงเทมเพลตคืออักขระบริการและมีความหมายแตกต่างจากอักขระสตริง:

  • % (เปอร์เซ็นต์): ลำดับที่มีอักขระตามจำนวนเท่าใดก็ได้
  • _ (ขีดล่าง): อักขระหนึ่งตัว;
  • […] (อักขระหนึ่งตัวขึ้นไปในวงเล็บเหลี่ยม): อักขระเดี่ยวใด ๆ ที่อยู่ในวงเล็บเหลี่ยม การแจงนับอาจมีช่วง เช่น a-z ซึ่งหมายถึงอักขระใดๆ ที่รวมอยู่ในช่วง รวมถึงจุดสิ้นสุดของช่วงด้วย
  • [^...] (ในวงเล็บเหลี่ยม เครื่องหมายลบตามด้วยอักขระหนึ่งตัวขึ้นไป): อักขระเดี่ยวใดๆ นอกเหนือจากที่แสดงอยู่หลังเครื่องหมายปฏิเสธ

สัญลักษณ์อื่นใดหมายถึงตัวมันเองและไม่มีภาระเพิ่มเติมใดๆ หากจำเป็นต้องเขียนอักขระตัวใดตัวหนึ่งในรายการด้วยตัวมันเอง จะต้องนำหน้าด้วย<Спецсимвол>- ตัวฉันเอง<Спецсимвол>(อักขระที่เหมาะสมใดๆ) ถูกกำหนดไว้ในคำสั่งเดียวกันหลังคีย์เวิร์ด SPECIAL CHARACTER

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

ใน 1C ความสามารถในการทำงานกับสตริงนั้นถูกตั้งโปรแกรมไว้ในแพลตฟอร์มนั้นเอง วันนี้เราจะมาดูคุณสมบัติของการทำงานกับสตริง 1C ในโปรแกรมในภาษา 1C ในตัว

ค่าเส้น 1C

1. เริ่มจากสิ่งที่ง่ายที่สุดกันก่อน การสร้างตัวแปรและการกำหนดค่าสตริงคงที่ให้มีลักษณะเช่นนี้ใน 1C:

ตัวแปร = "สวัสดีชาวโลก!";

หากคุณต้องการระบุอักขระเครื่องหมายคำพูดในค่าสตริง 1C คงที่ คุณจะต้องเพิ่มเป็นสองเท่า “”

ตัวแปร = "สวัสดีชาวโลก"!;

2. สามารถระบุตัวแบ่งบรรทัด 1C ได้สองวิธีในคราวเดียว อันแรกใช้สัญลักษณ์ |

ตัวแปร = "สวัสดี
- โลก! -

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

ตัวแปร = "สวัสดี" + Symbols.PS + "สันติภาพ!";

3. การกำหนดค่าใน 1C สามารถพัฒนาได้ไม่เพียง แต่สำหรับภาษาเดียว (รัสเซีย, อังกฤษหรืออื่น ๆ ) - แต่พร้อมกันสำหรับหลายภาษา ในกรณีนี้ ภาษาที่ใช้อยู่จะถูกเลือกที่ด้านล่างของหน้าต่าง 1C

รายการภาษาจะอยู่ในหน้าต่างการกำหนดค่าในสาขาทั่วไป/ภาษา แต่ละภาษาจะมีตัวระบุแบบสั้น เช่น รุหรือ อังกฤษ.

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

ตัวแปร = "ru=""สวัสดีชาวโลก! ""; en=""สวัสดีชาวโลก! """;

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

//แก้ไขสำหรับการกำหนดค่าสองภาษา
รายงาน (NStr (ตัวแปร));

อุปกรณ์ประกอบฉากแบบเส้น 1C

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

หากคุณระบุประเภทของแอตทริบิวต์ - บรรทัด 1C คุณต้องระบุพารามิเตอร์เพิ่มเติม

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

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

การทำงานกับสตริง 1C

มีฟังก์ชันในตัวหลายอย่างของแพลตฟอร์ม 1C สำหรับการทำงานกับสตริง

  • AbbrLP (“เหลือเชื่อ แต่จริง!”)
    ลบช่องว่างพิเศษออกจากบรรทัด 1C ยังสามารถใช้เพื่อแปลงประเภทใดๆ ให้เป็นสตริง 1C (เช่น ตัวเลข)
  • ตัวแปร = "วาสยา" + AbbrLP(" บวก") + "โอลิยา"; //จะมี "วาสยาบวกโอลิยา"
    ตัวอย่างการรวมค่าสตริง 1C หลายค่า ผลลัพธ์จะเป็นหนึ่งบรรทัด 1C
  • ตัวแปร = เลฟ("ดนตรี", 2); //จะเป็น "มู"
    ตัวแปร = ปานกลาง("ดนตรี", 2, 2); //จะมี "ภัยคุกคาม"
    ตัวแปร = สิทธิ์("ดนตรี", 2); //จะมี "คะ"
    ตัวเลือกต่างๆ สำหรับการรับสตริงย่อยจากสตริง 1C
  • ตัวแปร = ค้นหา ("เพลง", "zy"); //จะมี 3
    ค้นหาสตริงย่อยในสตริง 1C โดยเริ่มต้นด้วยอักขระ 1
  • ตัวแปร = StrLength("ดนตรี"); //จะมี 6
    ส่งกลับจำนวนอักขระในบรรทัด 1C
  • รายงาน("สวัสดี") //ในหน้าต่างข้อความที่ด้านล่างของหน้าต่าง 1C
    Alert("Hello") //กล่องโต้ตอบป๊อปอัป
    Status("Hello") //ในบรรทัดแสดงสถานะที่ด้านซ้ายล่าง
    .

นำวัตถุมาที่เส้น 1C

ดังที่คุณทราบ รูปแบบที่นิยมที่สุดในการแลกเปลี่ยนข้อมูลที่มีโครงสร้างในปัจจุบันคือ XML สม่ำเสมอ เวอร์ชันล่าสุด MS Office Word และ Excel บันทึกไฟล์ในรูปแบบนี้ (docx และ xlsx ตามลำดับ เปลี่ยนนามสกุลเป็น zip เปิดใน archiver)

แพลตฟอร์ม 1C สำหรับการแลกเปลี่ยนข้อมูลมีหลายตัวเลือก โดยตัวเลือกหลักคือ XML

1. วิธีที่ง่ายที่สุดคือการใช้ฟังก์ชัน Abbreviation() หรือ String() คุณสามารถใช้ฟังก์ชัน REPRESENTATION() ในเนื้อหาคำขอได้ ผลลัพธ์ของการกระทำจะเหมือนกัน - พวกเขาสร้างการแสดงสตริงของวัตถุ 1C ใด ๆ สำหรับผู้ใช้

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

2. วัตถุ 1C ใด ๆ (มีข้อจำกัด) สามารถแปลงเป็น XML และในทางกลับกัน กระบวนการแปลงเรียกว่าการทำให้เป็นอนุกรม

StringViewXml = XMLString(ค่า); //รับ XML จากค่า 1C
Value1C = XMLValue(Type("DirectoryLink.Nomenclature"),TypeStringXml); //รับค่า 1C จากสตริง XML คุณต้องระบุประเภท 1C ที่ควรได้รับ

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

แถว = ValueInRowInt(Value1C); // รับสตริง 1C จากค่า 1C
ValueVFile("C:\MyFile.txt", Value1C); // อีกทางเลือกหนึ่งเราได้รับไฟล์ที่มีสตริงที่บันทึกไว้จากค่า 1C
Value1C = ValueFromStringInt (สตริง); // กลับจากบรรทัด 1C
Value1C = ValueFile("C:\MyFile.txt"); //กลับจากไฟล์

การแก้ไขบรรทัด 1C บนแบบฟอร์ม

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

1. วิธีที่ง่ายที่สุดคือการขอเข้าสาย 1C ตามความต้องการ วิธีนี้ใช้ในการสอนการเขียนโปรแกรม 1C ในชีวิตนั้นมีการใช้น้อยกว่ามาก (แต่ใช้!)

ตัวแปร = "";
Row = EnterValue(ตัวแปร, "ป้อนชื่อเต็ม");

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

3. สามารถขยายขีดความสามารถของช่องป้อนข้อมูลได้ (ดูคุณสมบัติของช่องป้อนข้อมูล คลิกขวารายละเอียดเพิ่มเติม):

  • ช่องทำเครื่องหมายโหมดแก้ไขหลายบรรทัด
  • ช่องทำเครื่องหมายการแก้ไขขั้นสูง (ใช้ได้หากทำเครื่องหมายในช่องก่อนหน้า)
  • โหมดรหัสผ่านช่องทำเครื่องหมาย (ดู)

4. หากความสามารถทั้งหมดของช่องป้อนข้อมูลไม่เพียงพอสำหรับคุณ แสดงว่ามีตัวแก้ไขในตัว หากต้องการเพิ่มลงในแบบฟอร์ม คุณต้องเพิ่มฟิลด์เอกสารข้อความลงในเมนูควบคุมแบบฟอร์ม/แทรก ในคุณสมบัติ คุณสามารถระบุโหมดการทำงานได้ – คุณสมบัติส่วนขยาย

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

องค์ประกอบของแบบฟอร์ม ElementNameTextDocumentField.SetText (StringValue); //ในที่นี้ ValueString คือข้อความที่ได้รับ เช่น จากแอตทริบิวต์

และในตัวจัดการบันทึก - ตัวอย่างเช่นในปุ่มบันทึก - ให้เพิ่มการบันทึก:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //Valueบรรทัดที่นี่คือแอตทริบิวต์ที่เราบันทึกค่า

5. ใน 1C เวอร์ชัน 8.2.11 ในรูปแบบที่ได้รับการจัดการ ตัวเลือกใหม่ปรากฏขึ้นเพื่อแสดงบรรทัด 1C - ฟิลด์เอกสารที่จัดรูปแบบ


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

  • ในวัตถุ 1C ที่เรากำลังสร้างแบบฟอร์ม (ไดเร็กทอรี เอกสาร การประมวลผล ฯลฯ) - เพิ่มแอตทริบิวต์ด้วยประเภท Value Storage
  • ในฟังก์ชัน OnReadOnServer() เราตั้งค่าข้อความจากแอตทริบิวต์

    // ที่นี่ Attribute คือแอตทริบิวต์ที่เพิ่มของวัตถุ 1C
    //ที่นี่ FormattedDocument คือชื่อของฟิลด์ในแบบฟอร์มที่จะแก้ไข
    &บนเซิร์ฟเวอร์

    FormattedDocument = CurrentObject.Attributes.Get();
    สิ้นสุดขั้นตอน

  • ในฟังก์ชัน BeforeWritingOnServer() หรือใช้ปุ่ม เราจะเขียนข้อความจากฟิลด์

    &บนเซิร์ฟเวอร์
    ขั้นตอนเมื่อ ReadOnServer(CurrentObject)
    CurrentObject.Props = NewValueStorage (FormattedDocument);
    สิ้นสุดขั้นตอน

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

เส้น

ในการแปลงตัวแปรประเภทใดๆ ให้เป็นสตริง จะมีฟังก์ชันชื่อเดียวกันคือ “String()” พารามิเตอร์อินพุตจะเป็นตัวแปรเอง ซึ่งจะต้องได้รับการแสดงสตริง

String(False) // ส่งคืน "ไม่"
String(12345) // ส่งกลับ "12,345"
String(CurrentDate()) //"07/21/2017 11:55:36″

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

ซกร์แอลพี, ซ็อกร์ล, ซ็อกร์พี

พารามิเตอร์อินพุตของฟังก์ชันเหล่านี้เป็นตัวแปรประเภทสตริง ฟังก์ชั่นจะลบอักขระที่ไม่มีนัยสำคัญ (ช่องว่าง การขึ้นบรรทัดใหม่ ฯลฯ): จากด้านซ้าย และ ด้านขวาเฉพาะด้านซ้ายและด้านขวาเท่านั้นตามลำดับ

อักษรย่อ(" Spaces will be removal onทั้งสองด้าน ") // "Spaces will be removal on ทั้งสองด้าน"
ตัวย่อ(" ช่องว่างทั้งสองด้านจะถูกลบออก ") // " ช่องว่างด้านซ้ายจะถูกลบออก "
ตัวย่อ(" ช่องว่างทั้งสองด้านจะถูกลบออก ") // " ช่องว่างทางด้านขวาจะถูกลบออก"

ลีโอ ขวา ปานกลาง

ฟังก์ชันเหล่านี้ช่วยให้คุณสามารถตัดส่วนของสตริงได้ ฟังก์ชัน "Left()" จะส่งคืนส่วนของสตริงจากด้านซ้ายของความยาวที่ระบุ ฟังก์ชัน "Right()" คล้ายกัน แต่จะครอบตัดจากด้านขวา ฟังก์ชัน “Avg()” ช่วยให้คุณระบุจำนวนอักขระที่จะเลือกบรรทัดและความยาวของบรรทัดได้

Lev("ตัวแปรสตริง", 4) // ส่งกลับ "Str"
Right("ตัวแปรสตริง", 7) // ส่งกลับ "ตัวแปร"
ปานกลาง ("ตัวแปรสตริง", 2, 5) // ส่งคืน "troko"

StrLength

ฟังก์ชันกำหนดจำนวนอักขระที่มีอยู่ในตัวแปรสตริง

StrLength("Word") // ผลลัพธ์ของการดำเนินการจะเป็นหมายเลข 5

หา

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

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

Find("one, two, one, two, three", "two") // ฟังก์ชันจะคืนค่าตัวเลข 6

EmptyString

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

EmptyString("Pupkin Vasily Ivanovich") // ฟังก์ชันจะคืนค่าเป็นเท็จ
EmptyString(" ") // ฟังก์ชันจะส่งคืนค่า True

VReg, NReg, TReg

ฟังก์ชันเหล่านี้มีประโยชน์มากเมื่อเปรียบเทียบและแปลงตัวแปรสตริง "Vreg()" จะส่งคืนสตริงต้นฉบับเป็นตัวพิมพ์ใหญ่ "HPreg()" เป็นตัวพิมพ์เล็ก และ "TReg()" จะจัดรูปแบบเพื่อให้อักขระตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่ และอักขระที่ตามมาทั้งหมดจะเป็นตัวพิมพ์ใหญ่

VReg("ผู้อำนวยการทั่วไป") // ค่าส่งคืน - "ผู้อำนวยการทั่วไป"
NReg("CEO DIRECTOR") // ส่งคืนค่า - "CEO"
TREG("CEO DIRECTOR") // ค่าตอบแทน – “ผู้อำนวยการทั่วไป”

แทนที่หน้า

ฟังก์ชันนี้คล้ายคลึงกับการแทนที่ใน โปรแกรมแก้ไขข้อความ- อนุญาตให้คุณแทนที่อักขระตัวหนึ่งหรือชุดอักขระด้วยอักขระตัวอื่นในตัวแปรสตริง

StrReplace("แดง ขาว เหลือง", ","", ";") // ส่งกลับ "สีแดง; สีขาว; สีเหลือง"

StrNumberLines

ฟังก์ชันนี้ช่วยให้คุณกำหนดจำนวนบรรทัดที่คั่นด้วยการขึ้นบรรทัดใหม่ในตัวแปรข้อความ

การวนซ้ำในตัวอย่างด้านล่างจะผ่านไปสามรอบเนื่องจากฟังก์ชัน LineNumberRow จะส่งกลับค่า 3:

สำหรับ ind = 1 โดย StrNumber of Strings("Line1" + Symbols.PS + "Line2" + Symbols.PS + "Line3")
<тело цикла>
สิ้นสุดรอบ;

StrGetString

ฟังก์ชันนี้ใช้งานได้กับข้อความหลายบรรทัดในลักษณะเดียวกับข้อความก่อนหน้า อนุญาตให้คุณรับสตริงเฉพาะจากตัวแปรข้อความ

StrGetString("String1" + ตัวละคร.PS + "String2" + ตัวละคร.PS + "String3", 2) // ส่งคืน "String2"

จำนวนหน้าที่เกิดขึ้น

ฟังก์ชันนับจำนวนครั้งของอักขระหรือสตริงย่อยในสตริงการค้นหา

StrNumberAttachments("a;b;c;d; ", ";") // ฟังก์ชันจะคืนค่าตัวเลข 4

สัญลักษณ์และรหัสสัญลักษณ์

ฟังก์ชันเหล่านี้ช่วยให้คุณรับอักขระด้วยโค้ดในการเข้ารหัส Unicode รวมถึงกำหนดโค้ดนี้ด้วยอักขระด้วย

SymbolCode("A") // ฟังก์ชันจะคืนค่าตัวเลข 1,040
CharacterCode(1040) // ฟังก์ชันจะส่งกลับ “A”

งานทั่วไปเมื่อทำงานกับสตริง

การต่อสายอักขระ

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

“บรรทัดที่ 1″ + “บรรทัดที่ 2″ //ผลลัพธ์ของการเพิ่มสองบรรทัดจะเป็น “บรรทัดที่ 1 บรรทัดที่ 2”

การแปลงประเภท

หากต้องการแปลงประเภทเป็นสตริง เช่น ลิงก์ไปยังองค์ประกอบไดเร็กทอรี ตัวเลข ฯลฯ การใช้ฟังก์ชัน "String()" ก็เพียงพอแล้ว ฟังก์ชันเช่น “ScrLP()” จะแปลงตัวแปรให้เป็นสตริงด้วย แต่จะตัดอักขระที่ไม่มีนัยสำคัญออกทันที

สตริง (1,000) // ส่งกลับ "1,000"

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

StrReplace(String(1000),Characters.NPP,"") // ส่งคืน "1,000"

String(Format(1000,"HG=")) // ส่งคืน "1,000"

เครื่องหมายคำพูดในสตริง

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

Header = String("Horns and Hooves LLC - นั่นคือพวกเรา!") // จะกลับมา "Horns and Hooves LLC - นั่นคือพวกเรา!"

หลายบรรทัด, ตัวแบ่งบรรทัด

หากต้องการสร้างข้อความหลายบรรทัด เพียงเพิ่มตัวแบ่งบรรทัด (Symbols.PS) ลงไป

MultilineText = “บรรทัดแรก” + Symbols.PS + “บรรทัดที่สอง”

วิธีลบช่องว่าง

หากต้องการลบช่องว่างทางขวาหรือซ้าย คุณสามารถใช้ฟังก์ชัน “ScrAP()” (เช่นเดียวกับ “ScrL()” และ “ScrP()”):

StringNoSpaces = Abbreviation(" Many ตัวอักษร ") // ฟังก์ชันจะส่งกลับค่า "Many ตัวอักษร"

หลังจากแปลงตัวเลขเป็นสตริงแล้ว หากจำเป็นต้องลบช่องว่างที่ไม่แยกออก ให้ใช้โครงสร้างต่อไปนี้:

StringNoSpaces = StrReplace(String(99999),Characters.NPP,"") // ส่งคืน "99999"

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

StringNoSpaces = StrReplace("hello", "") // ส่งคืน "hello"

การเปรียบเทียบสตริงระหว่างกัน

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

"Hello" = "hello" // คืนค่าเป็นเท็จ
"Hello" = "Hello" // คืนค่า True
"สวัสดี" = "ลาก่อน" // ส่งคืนค่าเท็จ