แชร์ผ่าน


รวมบัญชีของธุรกรรมสินค้าคงคลัง

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

หมายเหตุ

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

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

ถ้าชุด itemId inventDimId และประกอบด้วยธุรกรรมการรับสินค้าหรือการตัดสินค้าจากคลังเพียงธุรกรรมเดียว ธุรกรรมจะไม่รวมบัญชี

หมายเหตุ

หลังจากรวมรายการความเคลื่อนไหวของสินค้าคงคลังแล้ว Dataverse คุณยังสามารถเพิ่มประสิทธิภาพในการจัดเก็บและประสิทธิภาพของระบบของฉันได้โดยใช้ส่วนเก็บถาวรที่มี คุณลักษณะเงินประกันผลงานระยะยาวเพื่อย้าย InventTransArchive เรกคอร์ดไปยัง Microsoft Azure ชุดข้อมูล ดูข้อมูลเพิ่มเติมที่ เก็บถาวร ข้อมูลธุรกรรมสินค้าคงคลัง Dynamics 365 Supply Chain Management

เปิดใช้งานคุณลักษณะการทำงานในระบบของคุณ

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

สิ่งที่ต้องพิจารณาก่อนที่คุณจะรวมบัญชีธุรกรรมสินค้าคงคลัง

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

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

ข้อกำหนดเบื้องต้น

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

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

การรวมรายการความเคลื่อนไหวของสินค้าคงคลัง

หากต้องการรวมบัญชีรายการความเคลื่อนไหวของสินค้าคงคลัง ให้ปฏิบัติตามขั้นตอนต่อไปนี้

  1. ไปที่งาน การบริหารสินค้าคงคลัง>เมื่อล้างข้อมูล>การรวม>บัญชีธุรกรรมสินค้าคงคลัง

    หน้า การรวมบัญชี ธุรกรรมสินค้าคงคลังจะปรากฏและแสดงรายการเรกคอร์ดกระบวนการรวมบัญชี

  2. ในบานหน้าต่างการคลิก "การรวมบัญชีรายการ ความเคลื่อนไหวของสินค้าคงคลัง " เพื่อสร้างการรวมบัญชีรายการความเคลื่อนไหวของสินค้าคงคลัง

  3. ในกล่องโต้ตอบ การรวมบัญชี ธุรกรรมสินค้าคงคลัง บนแท็บ ด่วน พารามิเตอร์ ให้ตั้งค่าฟิลด์ต่อไปนี้

    • วันที่เริ่มต้นในรอบระยะเวลาบัญชีแยกประเภทที่ ปิด– เลือกวันที่ธุรกรรมแรกสุดที่จะรวมไว้ในการรวมบัญชี
    • วันที่สิ้นสุดในรอบระยะเวลาบัญชีแยกประเภทที่ ปิด– เลือกวันที่ธุรกรรมล่าสุดที่จะรวมไว้ในการรวมบัญชี

    หมายเหตุ

    เฉพาะรอบระยะเวลาที่ตรงตาม เงื่อนไขเบื้องต้น เท่านั้นที่จะพร้อมใช้งานในการเลือก

  4. บน FastTab รันในแบบเบื้องหลัง ให้ตั้งค่ารายละเอียดการประมวลผลชุดงานตามที่คุณต้องการ ปฏิบัติตามขั้นตอนปกติของชุดงาน Microsoft Dynamics 365 Supply Chain Managementใน

  5. เลือก ตกลง

  6. คุณจะได้รับข้อความเตือนให้คุณยืนยันว่าคุณต้องการดำเนินการต่อหรือไม่ อ่านข้อความอย่างรอบคอบ แล้วจากนั้น เลือก ใช่ ถ้าคุณต้องการดำเนินการต่อ

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

ดูธุรกรรมสินค้าคงคลังแบบรวมบัญชี

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

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

  • ใช้งานอยู่ – แสดงเฉพาะการรวมบัญชีที่ใช้งานอยู่เท่านั้น
  • ทั้งหมด – แสดงการรวมบัญชีทั้งหมด

ข้อมูลต่อไปนี้จะมีไว้ดังต่อไปนี้:

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

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

  • ธุรกรรมที่รวม บัญชี– ดูรายละเอียดทั้งหมดของการรวมบัญชีที่เลือก หน้า ธุรกรรมที่ รวมบัญชีที่ปรากฏแสดงธุรกรรมทั้งหมดในการรวมบัญชี

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

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

  • ประวัติ ย่อ– เริ่มการประมวลผลการรวมบัญชีที่เลือกที่หยุดชั่วคราวในปัจจุบัน

ขยายโค้ดของคุณเพื่อรองรับฟิลด์ที่กำหนดเอง

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

  • ถ้าฟิลด์ที่ศุลกากรจาก InventTrans ตารางมีชื่อฟิลด์เหมือนกับในตาราง InventtransArchive ซึ่งหมายความว่าฟิลด์นั้นถูกแม็ปใหม่ 1:1 ดังนั้นคุณจึงสามารถวางฟิลด์ที่กำหนดเองลงในกลุ่มฟิลด์ InventoryArchiveFields ของตาราง inventTrans ได้
  • ถ้าชื่อฟิลด์ที่กำหนดเองในตาราง InventTrans ไม่ตรงกับชื่อฟิลด์ในตาราง InventtransArchive คุณต้องเพิ่มโค้ดเพื่อแมปชื่อฟิลด์เหล่านั้น ตัวอย่างเช่น ถ้าคุณมีฟิลด์ระบบที่ชื่อ InventTrans.CreatedDateTime คุณต้องสร้างฟิลด์ในตาราง InventTransArchive ด้วยชื่ออื่น (เช่น InventtransArchive.InventTransCreatedDateTime) และเพิ่มส่วนขยายไปยังคลาส InventTransArchiveProcessTask และ InventTransArchiveSqlStatementHelper ตามที่แสดงในโค้ดตัวอย่างต่อไปนี้

โค้ดตัวอย่างต่อไปนี้แสดงตัวอย่างวิธีเพิ่มส่วนขยายที่ต้องการลงในคลาส InventTransArchiveProcessTask

[ExtensionOf(classStr(InventTransArchiveProcessTask))]
Final class InventTransArchiveProcessTask_Extension
{

    protected void addInventTransFields(SysDaSelection _selectionObject)
    {
        _selectionObject.add(fieldStr(InventTrans, ModifiedBy))
            .add(fieldStr(InventTrans, CreatedBy)).add(fieldStr(InventTrans, CreatedDateTime));

        next addInventTransFields(_selectionObject);
    }


    protected void addInventTransArchiveFields(SysDaSelection _selectionObject)
    {
        _selectionObject.add(fieldStr(InventTransArchive, InventTransModifiedBy))
            .add(fieldStr(InventTransArchive, InventTransCreatedBy)).add(fieldStr(InventTransArchive, InventTransCreatedDateTime));

        next addInventTransArchiveFields(_selectionObject);
    }
}

โค้ดตัวอย่างต่อไปนี้แสดงตัวอย่างวิธีเพิ่มส่วนขยายที่ต้องการลงในคลาส InventTransArchiveSqlStatementHelper

[ExtensionOf(classStr(InventTransArchiveSqlStatementHelper))]
final class InventTransArchiveSqlStatementHelper_Extension
{
    private str     inventTransModifiedBy;  
    private str     inventTransCreatedBy;
    private str     inventTransCreatedDateTime;

    protected void initialize()
    {
        next initialize();
        inventTransModifiedBy = new SysDictField(tablenum(InventTrans), fieldNum(InventTrans, ModifiedBy)).name(DbBackend::Sql);
        inventTransCreatedDateTime = new SysDictField(tablenum(InventTrans), fieldNum(InventTrans, CreatedDateTime)).name(DbBackend::Sql);
        inventTransCreatedBy = new SysDictField(tablenum(InventTrans), fieldNum(InventTrans, CreatedBy)).name(DbBackend::Sql);
    }

    protected str buildInventTransArchiveSelectionFieldsStatement()
    {
        str     ret;

        ret = next buildInventTransArchiveSelectionFieldsStatement();
        
        if (inventTransModifiedBy)
        {
            ret += ',';
            ret += strFmt('%1',  new SysDictField(tablenum(InventTransArchive), fieldNum(InventTransArchive, InventTransModifiedBy)).name(DbBackend::Sql));
        }

        if (inventTransCreatedBy)
        {
            ret += ',';
            ret += strFmt('%1',  new SysDictField(tablenum(InventTransArchive), fieldNum(InventTransArchive, InventTransCreatedBy)).name(DbBackend::Sql));
        }

        if (inventTransCreatedDateTime)
        {
            ret += ',';
            ret += strFmt('%1',  new SysDictField(tablenum(InventTransArchive), fieldNum(InventTransArchive, InventTransCreatedDateTime)).name(DbBackend::Sql));
        }

        return ret;
    }

    protected str buildInventTransTargetFieldsStatement()
    {
        str     ret;

        ret = next buildInventTransTargetFieldsStatement();

        if (inventTransModifiedBy)
        {
            ret += ',';
            ret += strFmt('%1', inventTransModifiedBy);
        }

        if (inventTransCreatedBy)
        {
            ret += ',';
            ret += strFmt('%1', inventTransCreatedBy);
        }

        if (inventTransCreatedDateTime)
        {
            ret += ',';
            ret += strFmt('%1', inventTransCreatedDateTime);
        }

        return ret;
    }
}