통합된 재고 거래
시간이 지남에 따라 재고 트랜잭션 테이블(InventTrans
)은 계속 증가하여 더 많은 데이터베이스 공간을 소비합니다. 따라서 테이블에 대해 수행되는 쿼리는 점차 느려집니다. 이 문서에서는 재고 거래 통합 기능을 사용하여 재고 거래에 대한 데이터를 통합하여 시스템 성능을 향상시키는 방법을 설명합니다.
메모
장부상으로 업데이트된 재고 거래만 선택한 마감 원장 기간에 통합할 수 있습니다. 통합하려면 장부상으로 업데이트된 아웃바운드 재고 거래의 출고 상태가 판매됨이어야 하며 인바운드 재고 거래의 입고 상태는 구매함이어야 합니다.
재고 거래를 통합하면 모든 관련 거래가 테이블로 이동됩니다 InventTransArchive
. 재고 출고 거래와 입고 거래는 항목 ID()와 재고 차원 ID(itemId
inventDimId
)의 조합에 따라 별도로 통합되며 요약 출고 및 요약 입고 거래에 배치됩니다.
and itemId
조합에 inventDimId
입고 또는 출고 거래가 하나만 포함된 경우 거래가 통합되지 않습니다.
메모
재고 거래를 통합한 후 장기 보존 기능이 있는 보관 기능을 사용하여 Dataverse 레코드를 데이터 레이크로 이동하여 InventTransArchive
스토리지 및 시스템 성능을 더욱 최적화할 수 있습니다. Microsoft Azure 자세한 내용은 재고 거래 데이터 보관을 참조하세요 Dynamics 365 Supply Chain Management.
시스템에 기능 사용 설정
시스템에 이 문서에 설명된 기능이 아직 포함되어 있지 않은 경우 기능 관리 로이동하여 재고 거래 통합 기능을 켭 니다. 이 기능을 사용하도록 설정한 후에는 사용하지 않도록 설정할 수 없습니다.
재고 거래를 통합하기 전에 고려해야 할 사항
재고 거래를 통합하기 전에 작업의 영향을 받는 다음과 같은 비즈니스 시나리오를 고려해야 합니다.
- 구매 주문 라인과 같은 관련 문서의 재고 거래를 감사하면 통합된 것으로 표시됩니다. 통합 거래를 검토하려면 재고 관리 정기 작업 재고 거래 통합 정리 > 로 > 이동해야 합니다 > .
- 통합 기간의 재고 마감은 취소할 수 없습니다.
- 연결 기간에는 표준 비용 변환을 완료할 수 없습니다.
- 재고 거래에서 제공된 재고 보고서는 재고 거래를 통합할 때 영향을 받습니다. 이러한 보고서에는 재고 에이징 보고서와 재고 가치 보고서가 포함됩니다.
- 재고 예측은 통합 기간의 기간 동안 실행되는 경우 영향을 받을 수 있습니다.
전제 조건
재고 거래는 다음 조건이 충족되는 기간에만 통합할 수 있습니다.
- 원장 기간을 마감해야 합니다.
- 재고 마감은 통합 종료일 또는 그 이후에 실행되어야 합니다.
- 기간은 통합의 시작 기간일로부터 최소 1년 전이어야 합니다.
- 기존 재고 재계산이 없어야 합니다.
재고 거래 통합
재고 거래를 통합하려면 다음 단계를 따라와 마십시오.
재고 관리로 이동 정기 작업 재고 거래 통합을 정리합니다>>.>
재고 거래 통합 페이지가 나타나고 통합 프로세스 레코드 목록이 표시됩니다.
작업 창에서 재고 거래 통합을 선택하여 재고 거래 통합을 생성합니다.
재고 거래 통합 대화 상자의 매개 변수 빠른 탭에서 다음 필드를 설정합니다.
- 마감 원장 기간 의 시작 날짜– 통합에 포함할 가장 빠른 거래 날짜를 선택합니다.
- 마감 원장 기간 의 종료 날짜– 연결에 포함할 최신 거래 날짜를 선택합니다.
메모
전제 조건을 충족하는 기간만 선택이 가능합니다.
백그라운드에서 실행 빠른 탭에서 필요에 따라 일괄 처리 세부 정보를 설정합니다. 의 일괄 처리 작업에 Microsoft Dynamics 365 Supply Chain Management 대한 일반적인 단계를 따라와 수행합니다.
확인을 선택합니다.
계속할 것인지 확인하는 메시지가 나타납니다. 메시지를 주의 깊게 읽은 다음 계속하려면 예를 선택합니다.
재고 거래 통합 작업이 배치 대기열에 추가되었다는 메시지가 표시됩니다. 선택한 기간의 재고 거래를 통합하는 작업이 시작됩니다.
통합 재고 트랜잭션 보기
재고 거래 통합 페이지에는 전체 통합 내역이 표시됩니다. 그리드의 각 행에는 통합이 생성된 날짜, 통합을 생성한 사용자 및 상태와 같은 정보가 표시됩니다.
페이지 맨 위에 있는 드롭다운 목록에서 다음 값 중 하나를 선택하여 그리드에 표시된 통합을 필터링합니다.
- Active(활성 ) – 활성 통합만 표시합니다.
- 모두 – 모든 통합을 표시합니다.
그리드의 각 통합에 대해 다음 정보가 제공됩니다.
- Active(활성 ) – 확인 표시는 통합이 활성 상태임을 나타냅니다.
- 시작 날짜 – 통합에 포함될 수 있는 가장 오래된 거래의 날짜입니다.
- 종료 날짜– 통합에 포함될 수 있는 최신 트랜잭션의 날짜입니다.
- 예약자 – 통합을 생성한 사용자 계정입니다.
- Executed – 통합이 생성된 날짜입니다.
- 현재 업데이트 중지– 확인 표시는 통합이 진행 중이지만 일시 중지되었음을 나타냅니다.
- State – 통합의 처리 상태입니다. 가능한 값은 대기 중, 진행 중 및 완료됨입니다.
그리드 위의 도구 모음은 선택한 통합으로 작업하는 데 사용할 수 있는 다음 단추를 제공합니다.
통합 거래 – 선택한 통합의 전체 세부 정보를 봅니다. 표시되는 통합 거래 페이지에는 통합의 모든 거래가 표시됩니다.
통합 거래 페이지에서 특정 거래에 대한 자세한 정보를 보려면 그리드에서 해당 거래를 선택한 다음 작업 창에서 통합 거래 세부 정보를 선택합니다. 표시되는 통합 거래 세부 정보 페이지에는 원장 기장, 관련 보조원장 참조 및 재무 차원과 같은 정보가 표시됩니다.
일시 중지 – 현재 처리 중인 선택된 통합을 일시 중지합니다. 일시 중지는 보관 작업이 생성된 후에만 적용됩니다. 따라서 일시 중지가 적용되기 전에 잠시 지연될 수 있습니다. 통합이 일시 중지되면 현재 업데이트 중지 필드에 확인 표시가 나타납니다 .
재개 – 현재 일시 중지된 선택된 통합에 대한 처리를 재개합니다.
사용자 지정 필드를 지원하도록 코드 확장
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;
}
}