เริ่มธุรกรรม 1C 8 ธุรกรรมบัตรธนาคารคืออะไร ผลกระทบของธุรกรรมต่อการทำงานของออบเจ็กต์ซอฟต์แวร์

บทความนี้ประกอบด้วยเนื้อหาส่วนใหญ่ ข้อมูลทางทฤษฎีจำเป็นต้องเข้าใจถึงความสำคัญของธุรกรรมและการล็อคใน 1C:Enterprise และ DBMS และสิ่งนี้สะท้อนให้เห็นในประสิทธิภาพของ 1C:Enterprise บทความนี้อธิบายความสัมพันธ์ระหว่างธุรกรรมและการล็อคอย่างแพร่หลายผ่านระดับการแยกและปัญหาการทำงานพร้อมกัน
บทความนี้ไม่ได้ดำเนินการ คำแนะนำการปฏิบัติเพื่อแก้ไขปัญหาเฉพาะ แต่เป็นพื้นฐานสำหรับการทำความเข้าใจบทความต่อไปนี้ ซึ่งอธิบายขั้นตอนในการเพิ่มประสิทธิภาพและปรับปรุง 1C: ประสิทธิภาพองค์กรที่เกี่ยวข้องกับธุรกรรมและการล็อค

ผลผลิตเกี่ยวข้องโดยตรงกับ 1C: ธุรกรรมระดับองค์กร

"ล็อคข้อขัดแย้งระหว่างการทำธุรกรรม:
ผู้ให้บริการ Microsoft OLE DB เซิร์ฟเวอร์ SQL:เกินระยะเวลาหมดเวลาคำขอล็อกแล้ว.
HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, สถานะ=34, ความรุนแรง=10, ดั้งเดิม=1222, บรรทัด=1"

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

ธุรกรรม 1C: องค์กร

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

มีข้อกำหนดหลายประการสำหรับกลไกการทำธุรกรรม (รู้จักกันในชื่อย่อว่า ACID): อะตอมมิกซิตี (อะตอมมิกซิตี), ความสม่ำเสมอ (ความสม่ำเสมอ), การแยกตัว (การแยกตัว), ความยั่งยืน (ความทนทาน)

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

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

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

บันทึกธุรกรรม (SQL Server)

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

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

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

ในเชิงกายภาพ บันทึกธุรกรรม MS SQL Server DBMS จะอยู่ในไฟล์ .LDF (และไฟล์ข้อมูลคือ .MDF)

ธุรกรรมในระบบ 1C:Enterprise

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

ตัวอย่างของธุรกรรมโดยนัย: ลำดับของเหตุการณ์เมื่อโพสต์เอกสารจากแบบฟอร์ม

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

การใช้การเรียกธุรกรรมที่ชัดเจน

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

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

ปัญหาที่เกิดขึ้นพร้อมกัน

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

พิจารณาสถานการณ์ที่อาจเกิดปัญหาเหล่านี้:

การอัปเดตที่หายไป

การอ่านสกปรก

หากปัญหาก่อนหน้านี้เกิดขึ้นเมื่อเขียนข้อมูล การอ่านข้อมูลแบบสกปรกอาจเกิดขึ้นได้เมื่อธุรกรรมหนึ่งพยายามอ่านข้อมูลที่มีธุรกรรมอื่นเกิดขึ้นพร้อมกัน
สมมติว่ามีธุรกรรมสองรายการที่เปิดอยู่ แอพพลิเคชั่นต่างๆซึ่งมีการดำเนินการคำสั่ง SQL ต่อไปนี้:

การอ่านแบบไม่ซ้ำซาก

สมมติว่ามีสองธุรกรรมที่เปิดโดยแอปพลิเคชันที่แตกต่างกันซึ่งมีการดำเนินการคำสั่ง SQL ต่อไปนี้:

ธุรกรรม 1 ธุรกรรม 2
เลือก f2 จาก tbl1 โดยที่ f1=1;
อัปเดต tbl1 SET f2=f2+1 โดยที่ f1=1;
เลือก f2 จาก tbl1 โดยที่ f1=1;

ใน Transaction2 ค่าของฟิลด์ f2 จะถูกเลือก จากนั้นใน Transaction1 ค่าของฟิลด์ f2 จะถูกเปลี่ยนแปลง หากคุณพยายามเลือกค่าจากฟิลด์ f2 อีกครั้งในรายการที่ 1 คุณจะได้รับผลลัพธ์ที่แตกต่างออกไป สถานการณ์นี้ไม่สามารถยอมรับได้โดยเฉพาะเมื่อมีการอ่านข้อมูลโดยมีเจตนาที่จะแก้ไขบางส่วนและเขียนกลับไปยังฐานข้อมูล

การอ่านแบบผี

สมมติว่ามีสองธุรกรรมที่เปิดโดยแอปพลิเคชันที่แตกต่างกันซึ่งมีการดำเนินการคำสั่ง SQL ต่อไปนี้:

ธุรกรรม 1 ธุรกรรม 2
เลือกผลรวม (f2) จาก tbl1;
แทรกลงในค่า tbl1 (f1,f2) (15,20);
เลือกผลรวม (f2) จาก tbl1;

Transaction2 รันคำสั่ง SQL ที่ใช้ค่าทั้งหมดในฟิลด์ f2 จากนั้นใน Transaction1 จะมีการแทรก บรรทัดใหม่ทำให้คำสั่ง SQL ถูกดำเนินการอีกครั้งในรายการที่ 2 เพื่อให้ได้ผลลัพธ์ที่แตกต่างออกไป สถานการณ์นี้เรียกว่าการแทรก phantom และเป็นกรณีพิเศษของการอ่านแบบไม่ซ้ำ

ระดับการแยกธุรกรรม

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

มาตรฐานแนะนำระดับการแยกสี่ระดับต่อไปนี้ ซึ่งใช้เพื่อป้องกันปัญหาการทำงานพร้อมกันบางอย่าง:
- READ_UNCOMMITTED- การอ่านแบบไม่คงที่ ระดับการแยกนี้ช่วยแก้ปัญหา "การอัปเดตที่สูญหาย" แต่เป็นไปได้ที่จะได้รับผลลัพธ์ที่แตกต่างกันสำหรับการสืบค้นเดียวกันโดยไม่คำนึงถึงการทำธุรกรรม (อาจเป็นปัญหา "การอ่านสกปรก") นี่คือระดับการแยกต่ำสุดที่ใช้ใน DBMS และให้การทำงานพร้อมกันสูงสุด
- READ_COMMITTED- การอ่านคงที่ ระดับการแยกนี้ป้องกันปัญหา "การอ่านสกปรก" แต่ช่วยให้คุณได้รับผลลัพธ์ที่แตกต่างกันสำหรับคำขอเดียวกันในธุรกรรม (ความเป็นไปได้ของ "การอ่านที่ไม่ซ้ำ" จะถูกรักษาไว้)
- ทำซ้ำ_อ่าน- อ่านซ้ำ ระดับการแยกนี้ช่วยแก้ปัญหา "การอ่านไม่ซ้ำ" ในระดับนี้ ยังคงเป็นไปได้ที่จะดำเนินการคำสั่ง INSERT ที่นำไปสู่สถานการณ์ความขัดแย้ง "phantom insert" ระดับนี้มีประโยชน์หากการดำเนินการคำสั่ง SQL ไม่ได้รับผลกระทบจากการเพิ่มแถวใหม่
- เรียงลำดับได้- การดำเนินการตามลำดับ ระดับที่สาม. ระดับนี้รับประกันการป้องกันปัญหาการทำงานพร้อมกันทั้งหมดที่อธิบายไว้ข้างต้น แต่ตามนั้น ระดับต่ำสุดของการทำงานพร้อมกันจะถูกสังเกต เนื่องจากการประมวลผลธุรกรรม (ด้วยการเข้าถึงทรัพยากรเดียวกัน) จะดำเนินการตามลำดับเท่านั้น

วิธีแก้ไขปัญหาการเข้าถึงธุรกรรมแบบขนานและระดับการแยกในรูปแบบของตารางสามารถอธิบายได้ดังต่อไปนี้ (“+” - ปัญหาถูกกำจัด):

ปัญหาที่เกิดขึ้นพร้อมกันและระดับการแยกตัว การอ่านแบบผี การอ่านแบบไม่ซ้ำซาก การอ่านสกปรก การอัปเดตที่หายไป
เรียงลำดับได้ + + + +
ทำซ้ำ_อ่าน - + + +
READ_COMMITTED - - + +
READ_UNCOMMITTED - - - +

ที่ระดับเซิร์ฟเวอร์ SQL คุณสามารถตั้งค่าระดับการแยกได้ด้วยตัวเอง:
สำหรับเซสชันทั้งหมด เช่น ตามคำสั่ง
ตั้งค่าระดับการแยกธุรกรรมแบบอนุกรมได้

สำหรับการสืบค้นเฉพาะโดยใช้โครงสร้าง WITH
เลือกชื่อจากสัญญาที่มีซีเรียลไลซ์ได้

ค้นหาระดับการแยกตัวที่ตั้งไว้ในเซสชันปัจจุบัน
เลือก Transaction_isolation_level จาก sys.dm_exec_sessions
โดยที่ session_id = @@spid

ใน โหมดอัตโนมัติ(โหมดเก่าซึ่งใช้ใน 8.0) การจัดการล็อคข้อมูลใช้ระดับการแยกธุรกรรม ทำซ้ำ_อ่านและ เรียงลำดับได้จัดทำโดยระบบการจัดการฐานข้อมูล ระดับการแยกธุรกรรมเหล่านี้ทำให้แน่ใจได้ว่าการอ่านข้อมูลจะสม่ำเสมอและสม่ำเสมอ โดยไม่ต้องอาศัยความพยายามในการจัดการล็อคเพิ่มเติมจากนักพัฒนา

โหมดการล็อกที่ได้รับการจัดการ (เริ่มต้นจากเวอร์ชัน 8.1) ช่วยให้คุณสามารถเพิ่มการทำงานพร้อมกันของผู้ใช้ในโหมดไคลเอ็นต์-เซิร์ฟเวอร์โดยใช้การแยกธุรกรรมฐานข้อมูลในระดับที่ต่ำกว่า ( READ_COMMITTED- ระดับการแยกเดียวกันจะถูกตั้งค่าตามค่าเริ่มต้น
และใน MS เซิร์ฟเวอร์ SQL- เมื่อเขียนข้อมูลลงในธุรกรรม ออบเจ็กต์ภาษาในตัวจะล็อคข้อมูลที่จำเป็นโดยอัตโนมัติ แต่เมื่ออ่าน นักพัฒนาจำเป็นต้องจัดการการล็อกข้อมูลในกรณีที่ตรรกะทางธุรกิจต้องการการอ่านข้อมูลในธุรกรรมที่สม่ำเสมอและสม่ำเสมอ

สำหรับเวอร์ชัน 8.3 โหมดที่ได้รับการจัดการจะใช้ระดับการแยก READ_COMMITTED_SNAPSHOT.

ข้อสรุป

ธุรกรรมเป็นกลไก DBMS ที่จำเป็นซึ่งใช้งานอยู่ใน 1C:Enterprise เพื่อแก้ไขปัญหาการทำงานพร้อมกัน ธุรกรรมใน DBMS สามารถทำได้โดยมีระดับการแยกที่แตกต่างกัน

ระดับการแยกที่ใช้โดย 1C:Enterprise READ_COMMITTEDแก้ปัญหา "การอัปเดตที่สูญหาย" และ "การอ่านสกปรก": ข้อมูลที่เปลี่ยนแปลงจะถูกล็อคจนกระทั่งสิ้นสุดการทำธุรกรรมทั้งสำหรับการอ่านและการแก้ไข (มีการล็อคแบบเอกสิทธิ์เฉพาะบุคคล)

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

8.3 ใช้ระดับการแยกที่ยืดหยุ่นมากขึ้น READ_COMMITTED_SNAPSHOT.

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

ความหมายของคำ

ธุรกรรมเป็นขั้นตอนบางอย่างสำหรับการโต้ตอบของออบเจ็กต์ใดๆ ในช่วงระยะเวลาหนึ่ง ขั้นตอนดังกล่าวจัดทำขึ้นโดยโปรแกรมเมอร์ มีลักษณะขั้นตอนที่ชัดเจน ธุรกรรมใดๆ ก็ตามประกอบด้วยองค์ประกอบที่สำคัญสามประการ:

  • ขอ;
  • การดำเนินการ;
  • รายงาน.

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

ธุรกรรมธนาคาร

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

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

ประเภทของธุรกรรม

ในการธนาคาร มีการดำเนินงานสองประเภท:

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

เพื่อให้เข้าใจถึงสาระสำคัญของธุรกรรมทางธนาคารได้ดีขึ้น ลองพิจารณาตัวเลือกต่างๆ กัน

การโอนเงิน

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

การแปล

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

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

จะทำอย่างไรถ้าการทำธุรกรรมล้มเหลว?

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

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

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

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

การใช้คำนี้บ่อยที่สุดคือการโอนเงินและซื้อสินค้า อาจเป็น:

  • ถอนเงินสดจากตู้ ATM หรือสาขาธนาคาร
  • การซื้อหุ้นในตลาดหลักทรัพย์จำนวนหนึ่ง
  • ชำระเงินด้วยบัตรในร้าน

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

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

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

สายพันธุ์

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

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

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

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

การใช้งาน

ในการใช้งานด้านต่างๆ จะใช้สัญลักษณ์ที่แตกต่างกันสำหรับคำว่า "ธุรกรรม":

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

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

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

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

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

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

เรากำลังเปลี่ยนจากการซื้อครั้งเดียวไปสู่ลูกค้าประจำ

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

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

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


ความน่าจะเป็นของธุรกรรมครั้งต่อไปขึ้นอยู่กับจำนวนธุรกรรมปัจจุบัน

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

วันในสัปดาห์

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

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


ความน่าจะเป็นในการทำธุรกรรมครั้งที่สองขึ้นอยู่กับวันในสัปดาห์ของการทำธุรกรรมครั้งแรกในการเดิมพันกีฬา

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


ความน่าจะเป็นของการทำธุรกรรมครั้งที่สองขึ้นอยู่กับวันในสัปดาห์ของการทำธุรกรรมครั้งแรกในการขายปลีก

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


ความน่าจะเป็นของการทำธุรกรรมครั้งที่สองขึ้นอยู่กับวันในสัปดาห์ของการทำธุรกรรมการขายปลีกครั้งแรกสำหรับแบรนด์หนึ่ง

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

เวลาของวัน

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


ความน่าจะเป็นของลำดับที่สองขึ้นอยู่กับช่วงเวลาของวันที่มีลำดับแรก

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

ต้นทุนสินค้าในการสั่งซื้อ

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

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


ความน่าจะเป็นของต้นทุนของคำสั่งซื้อที่สองขึ้นอยู่กับต้นทุนของคำสั่งซื้อแรก

ลูกค้าส่วนใหญ่ที่สั่งซื้อในช่วงราคาต่ำยังคงอยู่ในช่วงเดียวกันในคำสั่งซื้อที่สอง

บทสรุป

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

2017-10-31

วิธีสร้างตัวแปรสำหรับธุรกรรมที่ใช้ SHD0?

คำอธิบายของคำถาม

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

ในบันทึกนี้ ฉันต้องการพิจารณาลำดับของการดำเนินการที่ต้องดำเนินการเพื่อให้เป็นไปตามข้อกำหนด:

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

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

ประเภทข้อมูลเป็นตัวอย่างที่ดี 0002 - "ข้อมูลส่วนบุคคล"

ให้เรากำหนดปัญหาของสิ่งที่เรียกว่าการแบ่งเขตอำนาจดังต่อไปนี้:

  • สนาม มี.ค.สถานะ Infotype 0002 "ข้อมูลส่วนบุคคล" จะต้องไม่สามารถแก้ไขได้ (นั่นคือ อ่านอย่างเดียว)
  • สนาม มีผลตั้งแต่วันที่สถานภาพการสมรสปัจจุบัน Infotype 0002 "ข้อมูลส่วนบุคคล" จะต้องถูกซ่อนไว้

การแก้ปัญหา

เพื่อแก้ไขปัญหาข้างต้น จำเป็นต้องดำเนินการตามลำดับหลายประการ ซึ่งจะกล่าวถึงด้านล่าง สั้น ๆ :

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

1. สร้างธุรกรรมใหม่

เนื่องจากธุรกรรมหลักคือ PA30เรามาใช้เป็นพื้นฐานโดยคัดลอกไปเป็นอันใหม่ ซึ่งสามารถทำได้ผ่านการทำธุรกรรม สพ93

ในตาราง T588Aคัดลอกบันทึกที่มีอยู่ด้วยรหัสธุรกรรม PA30 สำหรับบันทึกใหม่ และลองเริ่มธุรกรรมใหม่อีกครั้ง

การทำธุรกรรมเริ่มต้นได้สำเร็จ เรามาดูประเด็นต่อไปกันดีกว่า

2. สร้างตัวแปรสำหรับธุรกรรมใหม่

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

ในสนาม รหัสธุรกรรมระบุชื่อของธุรกรรมใหม่ (ดูจุดที่ 1 การสร้างธุรกรรมใหม่)

2.1 การสร้างรูปแบบหน้าจอ

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

ส่วนย่อยของวิดีโอต่อไปนี้แสดงลำดับการดำเนินการที่ต้องทำเพื่อสร้างรูปแบบหน้าจอ

สร้างตัวเลือกหน้าจอแล้ว ยังไม่มีการสังเกตการเปลี่ยนแปลง

2.2 การกำหนดรูปแบบหน้าจอให้กับรูปแบบธุรกรรม

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

2.3 การทดสอบ

สคริปต์ทดสอบนั้นง่ายมาก:

  • เริ่มการทำธุรกรรม PA30เลือกหมายเลขบุคลากร เปิดประเภทข้อมูลเพื่อแก้ไข 0002 และตรวจสอบว่าช่องด้านบนแสดงโดยไม่มีการเปลี่ยนแปลง
  • เริ่มการทำธุรกรรม ZPA30และดำเนินการตามลำดับการกระทำที่เหมือนกันทุกประการ

ความแตกต่างชัดเจน ซึ่งหมายความว่างานเสร็จสมบูรณ์แล้ว

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

หากเราหันไปใช้เอกสารทางเทคนิคหรือดิสก์ ITS เราจะเห็นว่า 1C แนะนำวิธีการต่อไปนี้ในการจัดการธุรกรรมในความพยายาม

พยายาม //1. จุดเริ่มต้นของการทำธุรกรรมเริ่มธุรกรรม() ; //2. บล็อกของการดำเนินการที่ทำในธุรกรรม //3. หากการดำเนินการทั้งหมดประสบความสำเร็จ เราจะทำธุรกรรมกระทำธุรกรรม() ; //4. หากเกิดข้อผิดพลาดขณะดำเนินการโค้ด ให้ยกเลิกธุรกรรมยกเลิกธุรกรรม() ; //5. หากจำเป็นให้บันทึกไว้ในสมุดบันทึก //6. หากจำเป็น ให้แสดงข้อความแก่ผู้ใช้ความพยายามสิ้นสุด ;

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

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

&บนเซิร์ฟเวอร์โดยไม่มีบริบทเริ่มธุรกรรม() ; //บันทึกผลิตภัณฑ์ใหม่สินค้า = ไดเรกทอรี สินค้า. สร้างรายการ() ; ผลิตภัณฑ์. Name = "เจาะรู" ;ผลิตภัณฑ์. เขียน() ;

//เขียนราคา RecordSet = ผู้ลงทะเบียนข้อมูล ราคา. CreateRecordSet() ; NewRecord = ชุดระเบียน เพิ่ม() ; ใหม่บันทึก ระยะเวลา = CurrentDate() ; ใหม่บันทึก สินค้า = สินค้า ลิงค์; ใหม่บันทึก จำนวน = 100 ;ชุดระเบียน เขียน() ; กระทำธุรกรรม() ;

&บนเซิร์ฟเวอร์โดยไม่มีบริบทสิ้นสุดขั้นตอน ตอนนี้เรามาวางธุรกรรมไว้ในบล็อกพยายามยกเว้น - เป็นไปได้มากว่าข้อผิดพลาดสามารถเกิดขึ้นได้เฉพาะเมื่อเขียนไปยังไดเร็กทอรีหรือการลงทะเบียนข้อมูลเท่านั้นการเตรียมการเบื้องต้น เอามันออกไปนอกธุรกรรมขั้นตอน RunTransactionOnServer() "เกิดข้อผิดพลาดขณะบันทึกสินค้าและราคา"- ความพยายามสิ้นสุด ;

สิ้นสุดขั้นตอน

สิ่งที่ไม่ควรทำ

ผู้ที่เพิ่งเริ่มทำงานกับธุรกรรมมักมีความปรารถนาที่จะทำเช่นนี้

เริ่มธุรกรรม() ;

พยายามเริ่มธุรกรรม();

//บล็อกการดำเนินการ CommitTransaction() ; ข้อยกเว้น ยกเลิกธุรกรรม() ;ความพยายามสิ้นสุด ; พยายามเริ่มธุรกรรม();//บล็อกการดำเนินการ CommitTransaction() ; ข้อยกเว้น ยกเลิกธุรกรรม() ;:

&บนเซิร์ฟเวอร์โดยไม่มีบริบทความพยายามสิ้นสุด ; ข้อยกเว้น ยกเลิกธุรกรรม() ; กระทำธุรกรรม() ;หรืออยู่ในวง

เริ่มธุรกรรม() ;

(ExternalProcessing.TransactionsAtTrying.Form.Form.Form(20)): เกิดข้อผิดพลาดในการเขียนรายการ (ExternalProcessing.TransactionsAtTrying.Form.Form.Form (40)): ข้อผิดพลาดเมื่อเรียกวิธีบริบท (เขียน): มีข้อผิดพลาดเกิดขึ้นแล้วในธุรกรรมนี้!

ดังนั้นการจัดระเบียบธุรกรรมที่ซ้อนกันใน 1C จึงไม่มีประโยชน์อย่างยิ่ง

ตัวเลือกที่เป็นไปได้

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

&บนเซิร์ฟเวอร์โดยไม่มีบริบทสิ้นสุดขั้นตอน // เริ่มการทำธุรกรรมปฏิเสธ = เท็จ ; เริ่มธุรกรรม() ;//พยายามบันทึกสินค้า พยายามผลิตภัณฑ์ = ไดเรกทอรี สินค้า. สร้างรายการ() ;ผลิตภัณฑ์. Name = "เจาะรู" ; ผลิตภัณฑ์. เขียน() ; ข้อยกเว้นล้มเหลว = True ;ข้อความ = MessageToUser ใหม่; ข้อความ. ข้อความ =ผลิตภัณฑ์. Name = "เจาะรู" ; "สินค้าบันทึกข้อผิดพลาด"- ข้อความ. รายงาน() ; ความพยายามสิ้นสุด ;

//พยายามบันทึกราคา