--اين پروسيجر با گرفتن گروه عمليات و نام حساب (کالا - اشخاص- و انبار و . . . ) اين حساب را براي تمامي سرفصلها با اين گروه که به صورت اجباري است ايجاد مي کند 
-- همچنين در جدول اسي سي لينک اضافه مي کن
--اين پروسجر با گرفتن نوع کدعمليات و نام حساب (کالا-اشخاص-انبارو...) اين حساب با تمامي سرفصل هاي موجود در اتوکد در جدول اکانت (کدينگ حساب آن را) ايجاد مي کند 

--------------------------------------
-- پيغام هاي خطائي که توسط پروسيجر اکانت نيو برمي گردد
--@Msg = -1  سيستم قادر به قبول کدي با اين طول نمي باشد
--@Msg = -2 کد والد در سند داراي کارکرد ميباشد نمي توان براي آن فرزند تعريف کرد
--@Msg = -3 اين کد قبلا ايجاد شده است
--@Msg = -5  خطاي سيستم
--------------------------------------
--msg-num = -6  در جدول اکانت موردي وجود ندارد
--msg-num = -7 کد مورد نظر در جدول لينک قبلا ايجاد شده
--msg-num = -5 خطاي سيستم

CREATE PROCEDURE [dbo].[Create_Account_Force_Code]
    @msg_num BIGINT OUTPUT ,
    @Class SMALLINT ,
    @Acc_Name NVARCHAR(90) ,
    @Tmp_Code VARCHAR(15) ,
    @UserId SMALLINT
AS
    DECLARE @TmpP_Code_Parent VARCHAR(20)
    DECLARE @TmpP_Code VARCHAR(20)
-- کنترل وجود اتو کد
    IF ( SELECT COUNT(*)
         FROM   Account
         WHERE  Class = @Class
                AND Force_Code = 1
       ) = 0
        BEGIN
            SET @msg_num = -6  --msg-num = -6  در جدول اکانت موردي وجود ندارد
            RETURN @msg_num
        END
    ELSE
        BEGIN
-- تعريف يک فچ روي اکانت
            DECLARE C_Code CURSOR
            FOR
                SELECT  Acc_Code
                FROM    dbo.Account
                WHERE   Class = @Class

            OPEN C_Code


            FETCH NEXT FROM C_Code
    INTO @TmpP_Code_Parent

            BEGIN TRAN 
  
            WHILE @@FETCH_STATUS = 0
                BEGIN 
                    SET @TmpP_Code = dbo.Test_Acc_Code(@TmpP_Code_Parent,
                                                       @Tmp_Code) -- کد دلخواه کاربر 
                    IF @TmpP_Code = '-3'
                        BEGIN
                            SET @msg_num = -3 
                            --GOTO Error_Lable2
                            CLOSE C_Code
                            DEALLOCATE  C_Code
                            ROLLBACK TRANSACTION 
                            RETURN   @msg_num                   
                        END
                    EXEC @Msg_num= Acount_New @Msg_Num, @TmpP_Code, @Acc_Name,
                        0, NULL, 0, 0, 0, 0, 0, @UserId
                    IF @@Error > 0
                        BEGIN                    
                        --GOTO Error_Lable        
                            SET @msg_num = -5
                            CLOSE C_Code
                            DEALLOCATE  C_Code
                            ROLLBACK TRANSACTION
                            RETURN   @msg_num                     
                        END
                    IF @msg_num < 0
                        BEGIN
                            --GOTO Error_Lable2
                            CLOSE C_Code
                            DEALLOCATE  C_Code
                            ROLLBACK TRANSACTION 
                            RETURN   @msg_num         
                        END 
                    ELSE
                        BEGIN
                            IF ( SELECT COUNT(Acc_Code)
                                 FROM   dbo.Acc_link
                                 WHERE  Acc_Code = @Tmp_Code
                               ) > 0
                                BEGIN
                                    SET @msg_num = -7  
                                    --GOTO Error_Lable2
                                    CLOSE C_Code
                                    DEALLOCATE  C_Code
                                    ROLLBACK TRANSACTION 
                                    RETURN   @msg_num     
                                END
                            ELSE
                                BEGIN
                                    INSERT  INTO dbo.Acc_link
                                            ( Code ,
                                              Acc_Code ,
                                              Class ,
                                              Acc_Parent_Code
                                            )
                                    VALUES  ( @Tmp_Code ,
                                              @TmpP_Code ,
                                              @Class ,
                                              @TmpP_Code_Parent
                                            ) 
                                    IF @@Error > 0
                                        BEGIN
                                        --GOTO Error_Lable        
                                            SET @msg_num = -5  
                                            CLOSE C_Code
                                            DEALLOCATE  C_Code
                                            ROLLBACK TRANSACTION 
                                            RETURN   @msg_num     
                                        END
                                END
                        END
                    FETCH NEXT FROM C_Code
        INTO @TmpP_Code_Parent
                END

            CLOSE C_Code
            DEALLOCATE  C_Code
            COMMIT TRAN 
            RETURN @msg_num
        END