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

การก่อตัวของคำขอ การร้องขอไปยังหน่วยงานจัดเก็บภาษี วิธีการทำการร้องขอ

ใน 8.3.5 เรามีความสามารถในการทำงานกับข้อความค้นหาโดยทางโปรแกรม
ข่าวเกี่ยวกับเรื่องนี้สามารถอ่านได้ในเว็บไซต์ 1C "ตัวสร้างแบบสอบถามที่มีการจัดการและรูปแบบวัตถุ Query Schema"
เพื่อวิเคราะห์คำขอเฉพาะ ฉันขอแนะนำ

ลองคิดดูว่าคำขอโดยทั่วไปคืออะไร นำเสนอในรูปแบบใดใน 1C และบนเซิร์ฟเวอร์ IS

อย่างง่าย เราสามารถแยกแยะระดับงานต่อไปนี้ด้วยการร้องขอ:
1. คำขอในภาษา DBMSในระดับนี้ แบบสอบถามคือสตริงข้อความในไวยากรณ์ของ DBMS เฉพาะ
ตัวอย่างเช่น "เลือก field1 จาก table1 โดยที่ table1.field2 > 100"
2. ไดรเวอร์ของ DBMS เฉพาะนี่คือยูทิลิตี้ที่ทำหน้าที่เป็นตัวเชื่อมระหว่างโปรแกรมและเซิร์ฟเวอร์ ได้รับคำขอจากโปรแกรมและส่งผ่านไปยัง DBMS
ในระดับนี้ 1C ทำงานร่วมกับแหล่งข้อมูลภายนอก
3. อินเทอร์เฟซการเขียนโปรแกรมสากลนี่เป็นองค์ประกอบสากลที่ช่วยให้โปรแกรมเข้าถึงข้อมูลใน IB ต่างๆ นอกจากนี้ยังสามารถเรียกได้ว่าเป็นผู้จัดการไดรเวอร์ ไดรเวอร์ของ DBMS เฉพาะที่ใช้ในคอมพิวเตอร์เชื่อมต่ออยู่ในรูปแบบของ DSN ขึ้นอยู่กับระบบที่ใช้ อาจมีส่วนประกอบ ODBC, OLE DB, JDBC, ADO.NET หรือมาตรฐานอื่นๆ ตัดสินโดย http://its.1c.ru/db/metod8dev#content:2926:1 ปัจจุบัน 1C ใช้ OLE DB แพลตฟอร์ม 7.7 ใช้ ODBC
4. วัตถุบนเซิร์ฟเวอร์ 1Cในระดับนี้ การทำงานของแอปพลิเคชันเซิร์ฟเวอร์พร้อมคำขอจะดำเนินการ
เท่าที่ฉันเข้าใจ แพลตฟอร์มภาษา C อธิบายอ็อบเจ็กต์การสืบค้นที่เขียนวิธีการสร้างข้อความ SQL ออบเจ็กต์แพลตฟอร์มทำงานกับออบเจ็กต์แบบสอบถามนี้ (ตัวสร้างแบบสอบถาม ตัวสร้าง ฯลฯ)
5. ขอเป็นภาษา 1Cในระดับนี้ แบบสอบถามเป็นข้อความที่เขียนด้วยภาษา SQL หลอกในรูปแบบ "CHOOSE Catalog.CatalogName.FieldName FROM Catalog.CatalogName"

เท่าที่ฉันเข้าใจ ด้วยการแนะนำออบเจ็กต์ Request Schema ไม่มีอะไรใหม่เกิดขึ้นบนแพลตฟอร์ม
ก่อนหน้านี้ เราสามารถทำงานกับการแสดงข้อความของคำขอเท่านั้น (ระดับ 5) นี่เป็นวิธีที่ง่ายและเข้าใจได้ง่ายที่สุด แม้ว่าจะไม่สะดวกเสมอไป
ตอนนี้เราได้รับสิทธิ์เข้าถึงวัตถุ (ระดับ 4) ซึ่งก่อนหน้านี้มีเพียงกลไกแพลตฟอร์มเท่านั้นที่ใช้งานได้
หากคุณวิเคราะห์ออบเจ็กต์ Query Schema คุณสมบัติของออบเจ็กต์จะตัดกับตัวสร้างคิวรีอย่างชัดเจน
แต่ละองค์ประกอบและคุณสมบัติสามารถพบได้ใน ตัวสร้างแบบสอบถาม
การคลิกแต่ละครั้งในตัวสร้างสามารถจับคู่กับคำสั่งที่คล้ายกันได้
ตัวอย่างเช่น:
Bookmark "Request Package" = Request Scheme ขอแพ็คเกจ;
แท็บ "ตารางและฟิลด์" = RequestScheme.QueryPackage.AvailableTables;
คลิกที่ตาราง "Catalogs" - "Nomenclature" = Query Scheme.Package of Requests.Operators.Sources.Add("Catalog.Nomenclature");

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

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

RequestSchema = RequestSchema ใหม่; RequestScheme.SetQueryText (Request.Text); //นี่คือคำสั่งแก้ไขคำขอของเรา Request.Text = RequestScheme.GetQueryText();

ขอโมเดลวัตถุรวมออบเจ็กต์หลัก "Query Schema" และออบเจ็กต์ย่อยที่เกี่ยวข้อง คอลเล็กชัน และประเภทข้อมูลเฉพาะที่เกี่ยวข้องประมาณ 50 รายการในตอนแรก การนำทางในชุดวัตถุนี้ค่อนข้างยาก

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

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

ตัวอย่างเช่น พิจารณาสร้างแพ็คเกจคำขอตั้งแต่เริ่มต้น คล้ายกับคำขอจาก

เลือกรายการที่อนุญาต อ้างอิงตามระบบการตั้งชื่อ, Purchases.Period AS Period, ISNULL(Purchases.SumTurnover, 0) AS SumPurchases, 0 AS SumSales PUT Table Turnovers from Handbook.Nomenclature AS Items LEFT JOIN Accumulation Register.Purchases.Turnovers(&Start, &Endovers) เดือน) ตามการจัดซื้อโดยการจัดซื้อ การตั้งชื่อ = รายการ การอ้างอิงที่ไม่มีรายการ กลุ่มนี้รวมรายการทั้งหมดที่เลือกต่างกัน 100 รายการ การอ้างอิง, การขาย. ระยะเวลา, 0, ISNULL(Sales.AmountTurnover, 0) จากแคตตาล็อก การตั้งชื่อ AS รายการ LEFT JOIN การสะสม Register.Sales .Volumes(&Start, &End, Month) AS Sales BY Sales.Nomenclature = Items.Reference WHERE NOT Items.ThisGroup INDEX BY Item, ระยะเวลา; /////////////////////////////////////////////////////////////////////// / ////////////////////////////// เลือกจำนวนเงินที่ซื้อ SUM (มูลค่าการซื้อขายของตาราง. เทิร์นโอเวอร์ กลุ่ม จำแนกตาม Turnovers ของตาราง Nomenclature, Table Turnovers.Period HAVE AMOUNT(Table Turnovers.AmountPurchases) > 0 ORDER BY TableTurnovers.Nomenclature.AMOUNT,Purchase TOTALSum(Description, Period TOTALSum(Purchases) ) ON clHY ทั่วไปเท่านั้น /////////////////////////////////////////////////////////////////////// /////////////////////////////// ทำลาย TableTurns

มาวิเคราะห์กลุ่มคำขอกัน

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

มาเริ่มกันเลยโดยทางโปรแกรมสร้างชุดคำขอ

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

ขั้นแรก ให้สร้างวัตถุ RequestScheme

RequestSchema = RequestSchema ใหม่;

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

RequestFromIBSelection = RequestScheme.PacketRequests; PurchasingChoiceOperator = RequestChoiceFromIB.Operators;

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

SourceNomenclature = PurchasingChoice Operator.Sources.Add ("Directory.Nomenclature", "สินค้า"); แหล่งที่มาของการซื้อ = ผู้ดำเนินการคัดเลือกการซื้อ แหล่งที่มา เพิ่ม ("การลงทะเบียนสะสม การซื้อ การหมุนเวียน", "การซื้อ");

โดยค่าเริ่มต้น แหล่งที่สองจะถูกเพิ่มด้วยการเชื่อมต่อด้านซ้ายกับแหล่งแรก

เราต้องการการเชื่อมต่อย้อนกลับ เปลี่ยนประเภทการเชื่อมต่อ

Purchasing.Connection.ConnectionType = RequestSchemaConnectionType.RightOuter;

ตัวเลือกตาราง:
สำหรับแต่ละตารางที่เพิ่มเป็นแหล่ง เราสามารถตั้งค่าพารามิเตอร์เพิ่มเติมได้
คอลเลกชันตัวเลือกจะถูกเติมโดยอัตโนมัติเมื่อคุณเพิ่มตาราง ขึ้นอยู่กับชนิดของตาราง
คุณไม่สามารถเพิ่มพารามิเตอร์ด้วยตนเอง คุณสามารถตั้งค่าของพารามิเตอร์ที่มีอยู่เท่านั้น
ตาราง "อ้างอิง ศัพท์" is โต๊ะธรรมดาไดเร็กทอรี เธอไม่มีทางเลือก
ตาราง "ทะเบียนสะสม การซื้อ มูลค่าการซื้อขาย" คือตารางมูลค่าการซื้อขายของการลงทะเบียนสะสม
ตามการร่วมทุนมี 4 พารามิเตอร์: จุดเริ่มต้นของงวด, จุดสิ้นสุดของงวด, ความถี่, เงื่อนไข
เราจำเป็นต้องตั้งค่า 3 พารามิเตอร์แรก:

PurchaseSource.Source.Parameters.Expression = ใหม่ QuerySchemaExpression("&Start" ); PurchaseSource.Source.Parameters.Expression = QuerySchemaExpression("&End" ใหม่); PurchaseSource.Source.Parameters.Expression = ใหม่ QuerySchemaExpression("เดือน");

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

PurchasingChoice Operator.SelectableFields.Add("Goods.Link"); PurchasingSelection Operator.SelectableFields.Add("Purchases.ระยะเวลา"); BuySelection Operator.SelectableFields.Add("ISNULL(Purchases.AmountTurnover, 0)"); PurchasingChoice Operator.SelectableFields.Add("0");

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

QuerySelectionFrom VT.Columns.Alias ​​​​= "ศัพท์เฉพาะ"; QuerySelectFrom BT.Columns.Alias ​​​​= "ระยะเวลา"; QuerySelectionFrom VT.Columns.Alias ​​​​= "จำนวนการซื้อ"; QuerySelectionFrom VT.Columns.Alias ​​​​= "ยอดขาย";

เพิ่มเงื่อนไขการเลือก data

SalesChoice Operator.Selection.Add("NOT Goods.This is a Group");

เราเพิ่มทุกอย่างในทำนองเดียวกันสำหรับส่วนที่สองของคำขอ

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

QuerySelectFrom.Columns.Fields.Set (1,PurchasingExpression); QuerySelectFrom.Columns.Fields.Set(1,ขายนิพจน์);

เราทำซ้ำทุกอย่างในลักษณะเดียวกันสำหรับคำขอที่สองของแพ็คเกจ

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

OperatorSelect.Selection.Add("SUM(Table Turnovers.SumPurchases)> 0");

ขั้นตอนสุดท้ายคือการเพิ่มคำขอให้ทำลายตารางข้อมูล

DestructionRequestVT = QuerySchema.RequestPacket.Add (ประเภท ("DestructionRequestRequestSchemaTable")); คำขอทำลายล้างBT.TableName = "TableTurnovers";

นอกจากนี้เรายังจัดแสดง คุณสมบัติเพิ่มเติมคำขอ:

RequestChoiceFromIB.TableForLocation = "TableTurnovers"; QuerySelectionFromIB.SelectAllowed = True;

สุดท้าย เวอร์ชันเต็มการสร้างคำขอ:

//สร้างสคีมาการร้องขอ RequestSchema = ใหม่ RequestSchema; RequestFromIBSelection = RequestScheme.PacketRequests; //การตั้งค่าคุณสมบัติการร้องขอ RequestChoiceFromIB.TableForPlace = "TableTurnovers"; QuerySelectionFromIB.SelectAllowed = True; //เพิ่มตัวดำเนินการการเลือกสำหรับชุดแรก requestPurchaseChoiceOperator =ChoiceFromIB.Operators SourceNomenclature = PurchasingChoice Operator.Sources.Add ("Directory.Nomenclature", "สินค้า"); //เพิ่มคำขอเลือกจาก registerPurchaseSource ซื้อ = PurchaseSelection Operator.Sources.Add("Accumulation Register.Purchases.Turnovers","Purchases"); PurchaseSource.Source.Parameters.Expression = ใหม่ QuerySchemaExpression("&Start" ); PurchaseSource.Source.Parameters.Expression = QuerySchemaExpression("&End" ใหม่); PurchaseSource.Source.Parameters.Expression = ใหม่ QuerySchemaExpression("เดือน"); //เปลี่ยนประเภทการเชื่อมต่อPurchaseSource.Connection.ConnectionType = ConnectionTypeRequestSchema.RightExternal; //ระบุฟิลด์ที่จะเลือกPurchaseChoice Operator.SelectableFields.Add("Goods.Link"); PurchasingSelection Operator.SelectableFields.Add("Purchases.ระยะเวลา"); BuySelection Operator.SelectableFields.Add("ISNULL(Purchases.AmountTurnover, 0)"); PurchasingChoice Operator.SelectableFields.Add("0"); //ระบุนามแฝงสำหรับ fieldChoiceFromIB.Columns.Alias ​​​​= "Nomenclature" ที่เลือก; QuerySelectFromIB.Columns.Alias ​​​​= "ระยะเวลา"; QueryFrom IB.Columns.Alias ​​​​= "จำนวนเงินที่ซื้อ"; QueryFrom IB.Columns.Alias ​​​​= "ยอดขาย"; //เพิ่มการเลือก PurchasingChoice Operator.Filter.Add("NOT Goods.This isGroup"); /////////////////////////การเลือกข้อมูลการขาย SalesChoiceOperator = QueryChoiceFromIB.Operators.Add(); SourceNomenclature = OperatorChoiceSales.Sources.Add ("Directory.Nomenclature", "สินค้า"); SalesChoice Operator.SelectableFields.Add("Products.Link"); //เพิ่มแหล่ง PH และตั้งค่าพารามิเตอร์ SourceSales =SalesSelect Operator.Sources.Add("Accumulation Register.Sales.Turnovers","Sales"); SaleSource.Source.Parameters.Expression = QuerySchemaExpression("&Start" ใหม่); SaleSource.Source.Parameters.Expression = QuerySchemaExpression("&End" ใหม่); SaleSource.Source.Parameters.Expression = QuerySchemaExpression ใหม่ ("เดือน"); SaleSource.Connection.ConnectionType = QuerySchemaConnectionType.RightOuter; // ระบุฟิลด์ที่จะเลือกและตั้งค่าฟิลด์ตัวเลขให้ตรงกับฟิลด์ของ SalesChoiceOperator ที่ร้องขอครั้งแรก SelectableFields.Add("ระยะเวลาการขาย"); นิพจน์การจัดซื้อ = SalesChoiceOperator.SelectableFields.Add("0"); SalesExpression = SalesSelect Operator.SelectableFields.Add("ISNULL(Sales.SumTurnover, 0)"); QuerySelectFrom.Columns.Fields.Set (1,PurchasingExpression); QuerySelectFrom.Columns.Fields.Set(1,ขายนิพจน์); //เพิ่มการเลือก OperatorChoiceSales.Filter.Add("NOT Goods.This is a Group"); //ดัชนี dataChoiceFromIB.Index.Add (ChoiceFromIB.Columns); แบบสอบถามจาก IB.Index.Add (QueryChoiceFrom IB.Columns); //ตั้งค่าพารามิเตอร์การเลือกข้อมูล SalesChoiceOperator.SelectDifferent = True; ตัวดำเนินการ SalesChoice จำนวนบันทึกที่ได้รับ = 100; //////////////// // คำขอที่สอง คำขอ packetChoiceFromVT = RequestScheme.RequestPacket.Add (); OperatorSelect = RequestSelectionFromVT.Operators; //ตั้งค่าตารางชั่วคราวที่เกิดขึ้นในแบบสอบถามก่อนหน้านี้เป็นแหล่งต้นทาง = OperatorSelect.Sources.Add("Table Turnovers","Table Turnovers"); OperatorSelect.SelectableFields.Add("Table Turnovers.Nomenclature"); OperatorSelect.SelectableFields.Add("Table Turnovers.Period"); OperatorSelect.SelectableFields.Add("SUM(Table Turnovers.AmountPurchases)"); OperatorSelect.SelectableFields.Add("SUM(Table Turnovers.SumSales)"); //เงื่อนไขการเลือก OperatorSelect.Selection.Add("SUM(Table Turnovers.SumPurchases)> 0"); //ตั้งค่านามแฝงของคอลัมน์ QueryFromVT.Columns.Alias ​​​​= "Nomenclature"; QuerySelectFrom BT.Columns.Alias ​​​​= "ระยะเวลา"; QuerySelectionFrom VT.Columns.Alias ​​​​= "จำนวนการซื้อ"; QuerySelectionFrom VT.Columns.Alias ​​​​= "ยอดขาย"; //การเรียงลำดับข้อมูล SelectionFromVT.Order.Add(SelectionFromVT.Operators.Sources.Source.AvailableFields.Fields); QueryChoiceFromVT.Order.Add (RequestChoiceFromVT.Columns); QueryChoiceFromVT.Order.Add (RequestChoiceFromVT.Columns); // แบบสอบถามผลรวม TotalNomenclature = QuerySelectionFromVT.CheckpointsTotals.Add (QuerySelectionFromVT.Columns); TotalNomenclature.CheckpointType = QuerySchemaCheckpointType.HierarchyOnly; QuerySelectionFrom VT.CommonTotals = true; แบบสอบถาม SelectFrom VT.Total Expression.Add (แบบสอบถาม SelectFrom VT.Columns); แบบสอบถาม SelectFrom VT.Total Expression.Add (แบบสอบถาม SelectFrom VT.Columns); //////////////// // คำขอแบทช์ล่าสุด - การลบ tableDestroyRequestVT ชั่วคราว = QuerySchema.QueryPacket.Add (Type("RequestDestroyRequestSchemaTable")); คำขอทำลายล้างBT.TableName = "TableTurnovers";

หลังจากรันชุดคำสั่งนี้แล้ว เราได้รับคำขอเดียวกันกับที่ผู้สร้างได้รับก่อนหน้านี้

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

โบนัสจะปรากฏขึ้นก็ต่อเมื่อเราจำเป็นต้องแก้ไขคำขอนี้เพิ่มเติมขึ้นอยู่กับการตั้งค่า
ลองพิจารณาตัวอย่างการแก้ไขแพ็คเกจ 3 คำขอของเรา:

ตัวอย่างที่ 1

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

เมื่อทำงานกับข้อมูลโดยทางโปรแกรม เราเพียงแค่เพิ่มคำสั่ง:

หาก ValueFilled(Organization) แล้ว PurchasingSelection Operator.Selection.Add("Purchasing.Organization = &Organization"); SalesSelect Operator.Selection.Add("Sales.Organization = &Organization"); จบถ้า; หาก ValueFilled(คลังสินค้า) แสดงว่า PurchasingSelection Operator.Selection.Add("Purchases.Warehouse = &Warehouse"); OperatorChoiceSales.Selection.Add ("Sales.Warehouse = &Warehouse"); จบถ้า;

ตัวอย่าง 2

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

//เพิ่มตารางชั่วคราว RequestFromPriceRegister = RequestScheme.RequestPackage.Add(); //ตั้งค่าตารางชั่วคราว RequestFromPriceRegister.TableForLocation = "VT_NomenclaturePrices"; OperatorSelect = QueryFromPriceRegister.Operators; Source = OperatorSelect.Sources.Add("ข้อมูล Register.Nomenclature ราคา.SliceLast","Nomenclature PricesSliceLast"); OperatorSelect.SelectableFields.Add("การตั้งชื่อราคาSliceLast.Nomenclature"); OperatorSelect.Selection.Add("ราคาสินค้าLast Slice.Price > &ราคา"); //ย้ายตารางใหม่ก่อนการร้องขอการเลือกข้อมูล RequestSchema.QueryPack.Shift(QueryScheme.QueryPack.Index(RequestFromPriceRegister),0); //เพิ่มเงื่อนไขในการสืบค้นต้นฉบับ PurchasingSelection Operator.Selection.Add("Purchases.Nomenclature IN (SELECT BT_NomenclaturePrices.Nomenclature FROM BT_NomenclaturePrice AS BT_NomenclaturePrice)"); OperatorSelectSales.Selection.Add("Sales.Nomenclature IN (SELECT VT_NomenclaturePrices.Nomenclature FROM VT_NomenclaturePrice AS BT_NomenclaturePrice)");

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

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

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

อัปเดต:อีกตัวอย่างเล็กๆ ของการใช้สกีมาแบบสอบถาม การก่อตัวของแบบสอบถามที่ค้นหาค่าสองเท่าของข้อมูลที่กำหนดไว้ล่วงหน้า หากไม่มีการเข้าถึงข้อมูลเมตา มันสร้างคำขอทั่วไปหนึ่งรายการไปยังไดเร็กทอรี ผังบัญชี PVC และ PVR โดยรวมโดยการกำหนดค่า ใช้ในการประมวลผล

RequestSchema = RequestSchema ใหม่; CollectionOperators = QueryScheme.RequestPackage.Operators; สำหรับแต่ละTableGroupFromQuerySchema.QueryPack.AvailableTables Cycle IfTableGroup.View = "References" OR TableGroup.View = "Charts of Accounts" OR TableGroup.View = "PlansofCalculationTypes" ORTableGroup.View = "PlansofCharacteristicTypes" จากนั้น สำหรับแต่ละ TableFromTableGroup.Fomposition สำหรับ Table.Fields Loop IfTableField.Name = "PredefinedDataName" จากนั้น NewOperator = CollectionOperators.Add (); NewSource = NewOperator.Sources.Add (ตาราง, "CatalogName"); NewOperator.SelectableFields.Add(""""+Table.Name+""""); NewOperator.SelectableFields.Add("NUMBER(DIFFERENT DirectoryName.PredefinedDataName)"); NewOperator.Grouping.Add("CatalogName.Name of PredefinedData"); NewOperator.Selection.Add("CatalogName.Predefined"); NewOperator.Selection.Add("NUMBER(DIFFERENT DirectoryName.Reference) > 1"); ดำเนินการ; จบถ้า; สิ้นสุดรอบ; สิ้นสุดรอบ; จบถ้า; สิ้นสุดรอบ;

วิธีการกำหนดคำขอตำแหน่งของลูกค้าอย่างถูกต้อง? นี้มักจะถามโดยลูกค้า บางคนถึงกับขอคำปรึกษาเบื้องต้น: “ช่วยฉันคิดออกและจัดทำคำขอ ฉันสับสน”

ลองคิดออก

ในอดีตมีหลายวิธีในการค้นหากลุ่มดาวที่ถูกต้อง นี่เป็นเพราะว่ากลุ่มดาวเป็นวิธีการที่มีการพัฒนาไปพร้อมกับด้านอื่น ๆ ของจิตบำบัดและประเพณีของการปฏิบัติทางจิตวิญญาณ เมื่อกลุ่มดาวเพิ่งเข้าสู่การปฏิบัติ (ในช่วงปลายยุค 70 - ต้นยุค 80 ของศตวรรษที่ผ่านมา) วิธีการที่เรียกว่าได้รับความนิยมสูงสุด "การบำบัดด้วยการแก้ปัญหาระยะสั้น". ตรงกันข้ามกับงานจิตอายุรเวทที่ยาวนาน (รวมถึงจิตวิเคราะห์) นักบำบัดเริ่มพัฒนาวิธีการช่วยเหลือลูกค้าอย่างรวดเร็วและเป็นรูปธรรม ความช่วยเหลือดังกล่าวจำเป็นต้องมีการร้องขอที่ชัดเจน เกณฑ์สำหรับการบรรลุคำขอนี้จะต้องเข้าใจอย่างชัดเจนทั้งลูกค้าและนักบำบัดโรค “ผมอยากได้เงินเดือนที่มากกว่านี้ แต่ถ้าไปหาเจ้านายเพื่อขอขึ้นเงินเดือน ผมหนาว เหงื่อตก ขาตัวเองหัก”. ภารกิจ: ไปหาเจ้านายเพื่อเลื่อนตำแหน่ง ถามเขาแล้วได้สิ่งที่คุณต้องการ เราจะทำงานนี้ เช่น 10 เซสชัน ในตอนท้ายจะถามลูกค้าว่ารู้สึกมั่นใจมากขึ้นแค่ไหน (อย่างน้อย) การบำบัดที่ประสบความสำเร็จ: โปรโมชั่นที่ได้รับ

แน่นอนว่ากลุ่มดาวเป็นงานระยะสั้น พวกเขาเริ่ม "โดยการเปรียบเทียบ" หมายถึงกลุ่มของวิธีการรักษาระยะสั้นและนำไปใช้กับความต้องการและประสิทธิผลเดียวกันซึ่งเป็นที่ยอมรับในวิธีการเหล่านี้ นอกจากนี้ยังอำนวยความสะดวกโดยความสนใจในกลุ่มดาวของผู้เชี่ยวชาญที่มีชื่อเสียงในการบำบัดระยะสั้น (Matthias Varga von Kiebed และ Inse Sparrer) และโดยปริยาย ฉันคิดว่าความกระตือรือร้นของ Hellinger และแนวโน้มที่จะพูดถึงกลุ่มดาวในแง่เช่น "วิธีแก้ปัญหาที่พบ" ก็มีส่วนทำให้เกิดสิ่งนี้เช่นกัน ในงานเขียนช่วงแรกๆ เขามักพูดถึง "การขจัดอาการ" "การแก้ปัญหาโรคพิษสุราเรื้อรัง" และอื่นๆ

จนถึงขณะนี้ คุณสามารถพบกับกลุ่มดาว "เก่า" ที่ขอแบบเจาะจงจากลูกค้าได้ ถ้อยคำ ผลลัพธ์ที่ต้องการ. ฉันยังพบเพื่อนร่วมงาน (เช่น Thomas Hafer) ซึ่งเขียนคำขอของลูกค้าลงในกระดาษ และเมื่อสิ้นสุดการจัดเตรียม ให้ตรวจสอบว่าคำขอนี้ได้รับการตอบสนองแล้ว กล่าวคือ สถานะของสินค้าทดแทนสอดคล้องกับสถานะที่ต้องการของลูกค้า

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

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

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

บ่อยครั้ง Hellinger ทำงานโดยไม่มีการแลกเปลี่ยนคำแม้แต่คำเดียวเกี่ยวกับคำขอของลูกค้า

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

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

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

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

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

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

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

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

การเรียนการสอน

  • เครื่องมือค้นหา (Google, Yandex, Rambler, Mail, Yahoo เป็นต้น) ได้รับการออกแบบมาเพื่อให้ข้อมูลที่จำเป็นแก่ผู้ใช้ โดยทำสิ่งนี้ตามคำค้นหา คำค้นหาสามารถมีได้สามประเภท:
  • ข้อมูล ผู้ใช้กำลังมองหาข้อมูลที่ถูกต้อง (ไม่ว่าจะอยู่ในไซต์ใดก็ตาม) ตัวอย่างเช่น "เพลงชาติรัสเซีย"

    การนำทาง ผู้ใช้กำลังมองหาที่อยู่ของไซต์ซึ่งอาจมีข้อมูลที่เขาสนใจ ตัวอย่างเช่น: "เว็บไซต์ของ Moscow State University ตั้งชื่อตาม M.V. Lomonosov"

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

  • เสิร์ชเอ็นจิ้นเป็นฐานข้อมูลขนาดใหญ่ ข้อมูลทั้งหมดที่ "สลาย" ลงในชั้นวาง - คำหลัก หลังจากที่คุณถาม การค้นหา, มีการค้นหาคำหลักและส่งคืนผลการค้นหา ข้อผิดพลาดทั่วไปที่ผู้ใช้มือใหม่ทำคือพวกเขารับรู้ว่าเครื่องมือค้นหาเป็นคู่สนทนาที่รู้ทุกอย่างและตั้งค่าคำค้นหาเช่น: "คุณช่วยบอกฉันหน่อยได้ไหมว่าทำอย่างไร ขจัดคราบจากเสื้อใหม่เอี่ยม เธอไหม". โดยธรรมชาติแล้วประโยชน์ของคำขอดังกล่าวจะน้อยมาก คำขอที่มีประสิทธิภาพมากขึ้นคือ: "เสื้อไหมสีขาวเพื่อขจัดคราบ" ดังนั้น สิ่งที่สองที่ต้องทำคือกำหนดคำขออย่างถูกต้อง ควรเรียบง่ายที่สุดและมีคำหลัก
  • หลังจากที่เครื่องประมวลผลคำขอของคุณแล้ว เครื่องจะส่งคืนผลการค้นหา ตามกฎแล้ว ผลลัพธ์ที่เกี่ยวข้องมากที่สุดทั้งหมดจะอยู่ในสองหรือสามหน้าแรก ตามด้วยผลการค้นหาที่ตรงกับคำค้นหาเพียงบางส่วนเท่านั้น อย่างไรก็ตาม มีบางสถานการณ์ที่จำเป็นต้องใช้ข้อมูลที่หายากมาก - จากนั้นคุณจะต้องจัดเรียงคำหลักหลายคำในคำค้นหาและกรองข้อมูลที่ได้รับอย่างระมัดระวัง
  • นอกจากนี้ บางครั้งคุณต้องมองหาข้อมูลที่หายากที่ "มี" อยู่ในความนิยม คีย์เวิร์ด. ตัวอย่างเช่น หากคุณตั้งค่าคำค้นหา "Marx photo Publisher" ดังนั้น ระบบค้นหาจะพบภาพถ่ายมากมายของ Karl Marx ผู้จัดพิมพ์ของ Karl Marx แต่เพื่อที่จะค้นหาภาพถ่ายของ A.F. มาร์กซ์ ผู้จัดพิมพ์หนังสือ จะต้องทำงานหนัก ดังนั้น สิ่งที่สามที่ต้องทำเพื่อให้การค้นหาสำเร็จคือการเรียงลำดับข้อมูลให้ถูกต้อง

    หัวข้อ 2.3. ซอฟต์แวร์การนำเสนอและการเขียนโปรแกรมสำนักงานขั้นพื้นฐาน

    หัวข้อ 2.4. ระบบจัดการฐานข้อมูลและระบบผู้เชี่ยวชาญ

    2.4.11. ฐานข้อมูลการฝึกอบรมที่มีรูปแบบปุ่มหลัก "Training_students" - ดาวน์โหลด


    DBMS และระบบผู้เชี่ยวชาญ

    2.4. ระบบจัดการฐานข้อมูลและระบบผู้เชี่ยวชาญ

    2.4.4. การสร้าง (การก่อตัว) ของคำขอ

    ขอเป็นวิธีการเลือกข้อมูลที่จำเป็นจากฐานข้อมูล คำถามที่เกิดขึ้นเกี่ยวกับฐานข้อมูลคือแบบสอบถาม มีการใช้เคียวรีสองประเภท: ตามตัวอย่าง (QBE - คิวรีตามตัวอย่าง) และภาษาคิวรีที่มีโครงสร้าง (SQL - ภาษาคิวรีที่มีโครงสร้าง)

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

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

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

    2.4.4.1. การสร้าง Select Query โดยใช้ Wizard

    เมื่อสร้างแบบสอบถาม คุณต้องกำหนด:

    • เขตข้อมูลในฐานข้อมูลที่จะค้นหาข้อมูล
    • หัวข้อการค้นหาในฐานข้อมูล
    • รายการเขตข้อมูลอันเป็นผลมาจากการดำเนินการค้นหา

    ในหน้าต่างฐานข้อมูล ให้เลือกแท็บ Queries และดับเบิลคลิกที่ไอคอน Create a query โดยใช้ตัวช่วยสร้าง หน้าต่าง Create Simple Queries จะปรากฏขึ้น


    ข้าว. หนึ่ง.

    ในหน้าต่างวิซาร์ด ให้เลือกตารางที่ต้องการ (ตารางต้นทาง) จากตัวเลือก ตารางและคิวรี แล้วเลือกเขตข้อมูล ถ้าแบบสอบถามถูกสร้างขึ้นจากหลายตาราง จำเป็นต้องทำซ้ำขั้นตอนสำหรับแต่ละตารางต้นฉบับ

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

    2.4.4.2. การสร้างคิวรีแบบใช้เลือกข้อมูลโดยใช้ตัวออกแบบ

    เมื่อใช้ Constructor คุณสามารถสร้างเคียวรีประเภทต่อไปนี้:

    1. เรียบง่าย.
    2. ตามสภาพ.
    3. พารามิเตอร์
    4. สุดท้าย.
    5. พร้อมช่องคำนวณ

    ในการเรียก Query Builder คุณต้องไปที่หน้าต่างฐานข้อมูล ในหน้าต่างฐานข้อมูล ให้เลือกแท็บ คิวรี และดับเบิลคลิกที่ไอคอน สร้างคิวรีในมุมมองออกแบบ หน้าต่าง Add Table ที่ใช้งานอยู่จะปรากฏขึ้นที่ด้านหน้าของ Query ที่ไม่ใช้งาน: Select Query

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

    หน้าต่างตัวสร้างประกอบด้วยสองส่วน - บนและล่าง ส่วนบนของหน้าต่างประกอบด้วยสคีมาข้อมูลคิวรี ซึ่งมีรายการของตารางต้นฉบับและสะท้อนถึงความสัมพันธ์ระหว่างตารางเหล่านั้น

    ที่ด้านล่างของหน้าต่างคือ QBE (แบบสอบถามตามตัวอย่าง) แบบฟอร์มการสร้างแบบสอบถาม ซึ่งแต่ละบรรทัดจะทำหน้าที่เฉพาะ:

    1. ฟิลด์ - ระบุชื่อของฟิลด์ที่เกี่ยวข้องกับแบบสอบถาม
    2. ชื่อตาราง - ชื่อของตารางที่เลือกเขตข้อมูลนี้
    3. เรียงลำดับ - ระบุประเภทการจัดเรียง
    4. แสดงไปที่หน้าจอ - ช่องทำเครื่องหมายเพื่อดูฟิลด์บนหน้าจอ
    5. เงื่อนไขการเลือก - มีการกำหนดเกณฑ์การค้นหา
    6. หรือ – มีการกำหนดเกณฑ์การเลือกเพิ่มเติม



    ข้าว. 2.

    คำขอตัวอย่าง

    ในหน้าต่าง "แบบสอบถาม: แบบสอบถามสำหรับการเลือก" โดยใช้เครื่องมือ เราสร้างแบบสอบถาม:

    1. เลือกตาราง - แหล่งที่มาซึ่งทำการเลือกเรกคอร์ด
    2. ย้ายชื่อเขตข้อมูลจากแหล่งที่มาไปยังแบบฟอร์มคำขอ ตัวอย่างเช่น จากตาราง Student Groups ให้ลากช่อง Name ไปที่ช่องแรกของ Request Form จากตาราง Students ให้ลากช่อง Surname ไปยังช่องที่สองของแบบ Request Form และจากตาราง Progress ให้ลากช่อง Grade ไปที่ฟิลด์ที่สาม และจากตาราง Courses ให้ลากฟิลด์ Name ไปยังฟิลด์ที่สี่ของแบบฟอร์มคำร้อง
    3. กำหนดหลักการจัดเรียง เลื่อนเคอร์เซอร์ของเมาส์ไปที่บรรทัดการเรียงลำดับสำหรับฟิลด์ใดๆ ปุ่มจะปรากฏขึ้นเพื่อเปิดรายการโหมดการเรียงลำดับ: จากน้อยไปมากและมากไปหาน้อย ตัวอย่างเช่น ตั้งค่าโหมดการเรียงลำดับในฟิลด์นามสกุลเป็นน้อยไปหามาก
    4. ในบรรทัดแสดงผล ช่องทำเครื่องหมายสำหรับการดูข้อมูลที่พบในฟิลด์จะถูกตั้งค่าโดยอัตโนมัติ
    5. ในบรรทัด "เงื่อนไข" ของการเลือกและบรรทัด "หรือ" คุณต้องป้อนเงื่อนไขการค้นหาที่จำกัด - เกณฑ์การค้นหา ตัวอย่างเช่น ในฟิลด์เกรด ให้ป้อน - "excellent / A" เช่น แสดงรายชื่อนักเรียนที่ได้รับคะแนน exc/A ทั้งหมด
    6. เมื่อคำขอเสร็จสิ้น ให้ปิดหน้าต่าง Select Request กล่องโต้ตอบ บันทึก - ตอบว่าใช่ (พิมพ์ชื่อของคิวรีที่สร้างขึ้น เช่น คิวรีตัวอย่างในโหมดออกแบบ) แล้วคลิก ตกลง แล้วกลับไปที่หน้าต่างฐานข้อมูล



    ข้าว. 3.

    ในการเปิดแบบสอบถามจากหน้าต่างฐานข้อมูล ให้ไฮไลต์ชื่อแบบสอบถามแล้วคลิกปุ่ม เปิด หน้าต่างแบบสอบถามแบบใช้เลือกข้อมูลที่มีชื่อที่ต้องการจะปรากฏขึ้นบนหน้าจอ



    ข้าว. 4.

    เมื่อต้องการเปลี่ยนแปลงแบบสอบถาม ให้เลือกด้วยการคลิกเมาส์ในหน้าต่างฐานข้อมูล คลิกปุ่มตัวสร้าง และทำการเปลี่ยนแปลง บันทึกคำขอ ดำเนินการซ้ำ

    แบบสอบถามพารามิเตอร์

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

    ลำดับของการสร้างแบบสอบถามแบบพารามิเตอร์:

    1. สร้างคิวรีในมุมมองออกแบบ หรือเปิดคิวรีที่มีอยู่ในมุมมองออกแบบ เช่น คิวรีตัวอย่างในมุมมองออกแบบ
    2. ในแบบฟอร์มคำขอ ในบรรทัดเงื่อนไขการคัดเลือก ให้ป้อนเงื่อนไขการเลือกในรูปแบบของคำเชิญให้ วงเล็บเหลี่ยมเช่น [ป้อนนามสกุล]
    3. ปิดหน้าต่าง Select Request ตอบคำถามเกี่ยวกับการบันทึกการเปลี่ยนแปลง - ใช่ กลับไปที่หน้าต่างฐานข้อมูล ซึ่งจะมีการเน้นข้อความค้นหาที่สร้างไว้
    4. ดำเนินการค้นหาโดยคลิกที่ปุ่ม: เปิด ในกล่องโต้ตอบ "ป้อนค่าพารามิเตอร์" ที่ปรากฏบนหน้าจอ คุณต้องป้อน ตัวอย่างเช่น ชื่อของนักเรียนที่มีข้อมูลความคืบหน้าที่คุณต้องการรับ ให้คลิกปุ่ม ตกลง

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

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

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

    เมื่อใช้ตัวช่วยสร้างใน Access คุณสามารถสร้างคิวรีประเภทต่อไปนี้ได้:

    § ของ่าย

    § แบบสอบถามข้าม

    § รายการซ้ำ

    § การบันทึกโดยไม่มีผู้ใต้บังคับบัญชา

    ในการสร้างรายการใด ๆ ให้เลือกออบเจ็กต์ Queries ในหน้าต่างฐานข้อมูลแล้วคลิกปุ่มสร้าง หน้าต่าง New Query จะเปิดขึ้น มุมมองที่แสดงในรูปที่ หนึ่ง.

    รูปที่ 1 สถานะหน้าต่าง DB และหน้าต่างสำหรับการเลือกประเภทการสืบค้น

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

    บันทึก.แบบสอบถามสามารถทำได้โดยตารางเท่านั้นหรือโดยแบบสอบถามฐานข้อมูลเท่านั้น ไม่อนุญาตให้รวมเขตข้อมูลจากตารางและคิวรีในคิวรี

    รูปที่ 2 การเลือกเขตข้อมูลสำหรับแบบสอบถาม

    คำขอข้ามดูเหมือนโต๊ะ , ซึ่งจะแสดงถึงสามฟิลด์ (คอลัมน์) ของตารางแหล่งที่มา เซลล์ของหนึ่งในเซลล์ที่เหลือจะถูกแปลงเป็นคอลัมน์ใหม่และที่จุดตัดของพวกเขาหนึ่งในค่าที่ระบุโดยผู้ใช้จะปรากฏขึ้น - การกระจาย, ขั้นต่ำ , สูงสุด, ค่าเฉลี่ย, ส่วนเบี่ยงเบน, ตัวเลข, ตัวแรก, ตัวสุดท้าย, ฯลฯ ตัวอย่างเช่น แบบสอบถามในรูป 4 คือ cross-query ของตารางที่ 1 ในรูปที่ 3 ซึ่งค่าระยะทางกลายเป็นชื่อของคอลัมน์:

    ตัวเลือก รายการซ้ำสร้างแบบสอบถามเพื่อค้นหาระเบียน (แถว) ที่ซ้ำกันในหนึ่งตารางหรือแบบสอบถามสำหรับตารางในรูปที่ 3 ด้วยฟิลด์ที่กำหนด ระยะทางและค่าโดยสาร ดูเหมือนว่า (รูปที่ 5)

    MS Access อนุญาตให้คุณสร้างแบบสอบถามดังกล่าวสำหรับหนึ่งตารางหรือแบบสอบถามเท่านั้น (ไม่ใช่สำหรับตารางฐานข้อมูลหลายตาราง) และคุณต้องระบุในนั้น

    รูปที่ 3 ตารางที่ 1 สำหรับการสร้างแบบสอบถามข้าม


    รูปที่ 4 แท็บการสืบค้นข้าม หนึ่ง

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

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

    รูปที่ 6 ตารางหลัก 1

    แบบสอบถามโดยไม่มีผู้ใต้บังคับบัญชาสำหรับรูปเปรียบเทียบตาราง 3 และรูปที่ 6 จะแสดงเส้นที่ไม่ตรงกัน (รูปที่ 7):

    คำขอเหล่านี้เป็นพื้นฐานสำหรับการสร้างเพิ่มเติม คำถามที่ซับซ้อนซึ่งใช้โหมดการออกแบบ