Есть скрипт, который хочу выполнять при открытии документа. Спотыкаемся на "Begin tran" либо на вставке. В QA все работает. Версия 1с++ 1.8.1.6 Может поможет версия 1.8.1.6b? Более позднюю версию не хочу ставить, поскольку очень много завязано на компоненту, а на тестирование времени нет. Спасибо.
Текст_ЗаписатьБлокировку = " |SET NOCOUNT ON | |--Создание процедуры для генерации ID объектов | |IF OBJECT_ID('[dbo].[proc_GetNextID]') IS NULL |BEGIN | |EXEC sp_executesqlN' |----------------------------------------------------------------- |--Made by Zmei/25.03.07/ICQ 173706221 |--Процедура генерирует ID объектов в 36-й системе счисления |--на основании последнего заданного ID |--Вначале, текущий ID преобразуется в десятичную систему счисления, |--увеличивается на единицу,затем выполняется обратная операция |------------------------------------------------------------------ |CREATE PROCEDURE proc_GetNextID(@ID char(9) OUTPUT) AS |DECLARE @Alphabet char(36), --Алфавит 36-ричной системы счисления | @Basic tinyint, --Основание 36-ричной системы счисления | @CurrentID varchar(6), --Генерируемый ID | @Decimal decimal, --Эквивалент ID в десятичной системе счисления | @i smallint, --Счетчик/степень разложения | @Len smallint, --Кво разрядов последнего ID | @k int --Коэффициент разложения для перевода в 36-ричную систему счисления | |SET @Alphabet = ''123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'' |SET @Basic = 36 |SET @CurrentID = LTRIM(LEFT(@ID,6)) |SET @i = 0 |SET @Decimal = 0 |SET @Len = LEN(@CurrentID) | |--Формирование десятичного эквивалента последнего ID |WHILE @i < @Len |BEGIN | | SET @Decimal = @Decimal + POWER(@Basic,@i) * CHARINDEX(SUBSTRING(@CurrentID,@Len - @i,1),@Alphabet,1) | SET @i = @i + 1 | |END | |--Увеличиваем десятичный эквивалент |SET @Decimal = @Decimal + 1 |SET @CurrentID = '''' | |--Проверяем, нужен ли дополнительный разряд для хранения IDв 36-ричной системе |IF POWER(CAST(@Basic AS decimal),@i) = @Decimal |BEGIN | | SET @i = @i + 1 | |END | |--Формула представления десятичного числа в 36-ричной системе счисления |--N10 = A*36^k + B*36^(k-1) + ... + Z*36^0 |--Поочередно находим коэффициенты разложения для преобразовния в 36-ричную систему |-- и генерируем новый ID |WHILE @i > 0 |BEGIN | | SET @k = CASE WHEN @Decimal >= POWER(@Basic,@i - 1) THEN @Decimal/POWER(@Basic,@i - 1) ELSE 0 END | SET @CurrentID = @CurrentID + CASE @k WHEN 0 THEN ''0'' ELSE SUBSTRING(@Alphabet,@k,1) END | SET @Decimal = @Decimal - POWER(@Basic,@i - 1) * @k | SET @i = @i - 1 | |END | |SET @ID = ISNULL(REPLICATE('' '',6 - @Len - 1),'''')+ @CurrentID + RIGHT(@ID,3)' | |END | |--Вставка нового элемента справочника ""Блокировки"" | |IF NOT EXISTS(SELECT [id] FROM $Справочник.Блокировки WHERE [descr] = :ТекущийДокумент~) | |BEGIN | | BEGIN TRANSACTION | | DECLARE @NewID varchar(9) | | --получение последнего ID | EXEC [dbo].[_1sp__1SUIDCTL_GetMaxID] :ВидСправочника, @NewID OUTPUT | | --генерирование следующего ID | EXEC [dbo].[proc_GetNextID] @NewID OUTPUT | | --установка максимального ID для справочника ""Блокировки"" | EXEC [dbo].[_1sp__1SUIDCTL_SetMaxID] :ВидСправочника, @NewID | | INSERT INTO $Справочник.Блокировки([id],[descr],[verstamp],$Справочник.Блокировки.Пользователь) | VALUES (@NewID,:ТекущийДокумент~,1,:Пользователь) | | COMMIT TRANSACTION | | IF @@TRANCOUNT = 0 | BEGIN | | ROLLBACK TRANSACTION | | END | |END | |SELECT @@TRANCOUNT |";
|