Создается таблица в AX, вставка в которую будет происходить только сторонними средствами (скорее всего DTS). Планируется изменение одного поля (Status) в созданных записях непосредственно из AX.
Разумеется, сразу озаботился необходимостью формирования RecId.
Эта тема уже поднималась
8 лет назад, но у предложенного решения было существенное ограничение: требовалось передавать параметры во внешнюю программу.
Три года назад был
предложен следующий код:
Цитата:
Сообщение от
oip
Код:
-- Генерация RecId. На выходе не 0 если всё Ok и 0, если что-то не так
-- Входные параметры: код компании и шаг
-- Пример: exec AX_GETRECID 'dat', '25'
CREATE PROCEDURE [dbo].[AX_GETRECID] (@dataAreaId VARCHAR(3), @hop INT)
AS
SET NOCOUNT ON
DECLARE @RecID INT
SET @RecID = NULL
UPDATE SYSTEMSEQUENCES SET @RecID = A.NextVal,
NextVal = A.NextVal + @HOP
FROM SYSTEMSEQUENCES A WHERE A.Id = -1 AND A.DATAAREAID = @dataAreaId
SELECT ISNULL(@RecID, 0) AS RecId
RETURN ISNULL(@RecID, 0)
GO
Не знаю, пробовал ли его уже кто-нибудь. Боязно снаружи менять SystemSequences.
В связи с тем, что
пишут, что "в AX 2009 RecId уникален лишь для каждой таблицы, а не для базы в целом", появилась мысль: почему бы, ни на что не взирая, не авто-инкрементить RecId в данной конкретной таблице, начиная с единицы?
Это чем-то чревато? Как бы поступили вы сами?
Прошу поделиться соображениями.