문제

대형 배치로 송장을 생성 해야하는 송장을 EDI로 변환하고 본사로 전송해야합니다. 모든 주문이 들어오는 주문 테이블이 있습니다. 어느 시점에서 나는 세트 (약 1K)를 잡고 송장을 생성해야합니다.

  1. 송장 번호를 생성하기에 가장 좋은 곳은 어디입니까? SQL Server 백엔드에서? 또는 배치를 .NET 응용 프로그램으로 가져간 다음 송장 번호를 생성 하시겠습니까? 송장 번호는 무작위 일 수 있지만 반복해서는 안됩니다 (3-4 년 동안). 나는 최대 12 자리 숫자를 가지고 있으며 알파 숫자 일 수 있습니다. 송장 번호 생성에 대한 정보는 어디에서 찾을 수 있습니까?

참고 : 송장을 생성하는 동안 주문 합계와 세금을 계산해야합니다.

귀하의 의견에 감사드립니다.

도움이 되었습니까?

해결책

송장 번호는 법적 요구에 의해 규제 될 수 있습니다 (내가 사는 곳은 순서대로 있어야하며 순서대로 간격이있을 수 있다고 생각하지 않습니다).

당신은 종종 숫자에 제 시간에 그들을 범위로 만드는 요소가 포함되어 있음을 알 수 있습니다 (예 : 올해 : 200903472). 그렇게하면 같은 숫자를 두 번 사용할 위험을 최소화합니다.

하루에 ~ 1k 송장이 있다고 말합니다. 즉, 6 그림 송장 번호가 귀하의 요구를 충당 할 것임을 의미합니다. 따라서 4 자리 연도와 제로 패딩 6 그림 송장 번호가 나올 것입니다.

데이터베이스가 고유한지 확인하기 위해 데이터베이스를 생성 할 것입니다.

다른 팁

사용 된 마지막 송장 번호의 값을 저장하는 데이터베이스에 테이블을 추가 하고이 값을 증가시키고 송장 생성에 사용할 새 값을 반환하기위한 저장된 절차.

새 송장을 저장할 때 SP에 호출하여 다음 송장 번호 1을 마지막으로 받으십시오. 유효성 검사가 통과 된 후 디스크에 글을 쓰기 전에 즉시 "구멍"의 위험을 최소화하려고 노력하십시오. 당신의 번호 순서.

어떤 이유로 랜덤이되기를 원하지 않는 한 순차 ID를 사용하는 것이 가장 좋을 것입니다 (고객은 거의 같은 기간부터 다른 주문의 주문 ID를 추측 할 수 없기 때문에). 순차 ID를 사용하면 현재 Max를 읽은 다음 배치 프로세스에서 주문을 받기 직전에 쓸 수있는 범위에 기록 된 것이 없는지 확인할 수 있습니다.

데이터베이스 확인 부담을 원하지 않고 다른 프로세스가 방해하지 않을 수있는 경우 DateTime.utcNow 및 Base64 변환을 활용할 수 있습니다. 정말 어리석은 일러스트레이션은 다음과 같습니다.

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Year, 
                                    (byte)DateTime.UtcNow.Month,
                                    (byte)DateTime.UtcNow.Day,
                                    (byte)DateTime.UtcNow.Hour,
                                    (byte)DateTime.UtcNow.Minute,
                                    (byte)DateTime.UtcNow.Second,
                                    (byte)DateTime.UtcNow.Millisecond })

또는

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Ticks })

당신은 아마도 더 관심이있을 것입니다 베이스 32 전환 (문자 AZ와 Digits 2-7을 사용합니다)은 기본 .NET 변환이 없지만 검색해야합니다.

송장 ID 생성에 관한 규칙을 제한하는 법이 없다면, 원하는 것이 될 수 있다고 생각합니다.

이제 좋은 예가 있습니다.

실제로 송장 시스템을 프로그래밍하고 있으며 ID 코드를 순차적으로 생성했으며 고객이 회사와 계약을 취소 할 때 이미 12 개의 송장을 생성했기 때문에 약간의 차이가있었습니다.

(여기서 우리는 ISP 회사이고 계약은 6, 12 개월이어야합니다)

시스템 사용자가 취소 된 송장을 삭제했기 때문에 데이터베이스에 차이가 생겼습니다. 정말 순차적 인 숫자가 필요하다면 법에 문제가 있습니다. 그리고 나는 여기에 순차적 인 송장 번호에 차이가있는 다른 많은 상황이 있습니다.

나는 이런 종류의 문제를 피하는 방법을 실제로 모른다. 아이디어가 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top