Тема: Изменение базовой единицы измерения

Добрый день.

            Nomenclatures nomenclatures = TCSApp.Nomenclatures[NmkClassifTypeId];
            
            var r = nomenclatures.Locate["NOTE", note1, 0];
            
            if (r)
            {
                try
                {
                    nomenclatures.Set_Nmk_Mesur(8);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }

            Console.WriteLine("========================================");
            

            var r2 = nomenclatures.Locate["NOTE", note2, 0];

            if (r2)
            {
                try
                {
                    nomenclatures.Set_Nmk_Mesur(8);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        public static void Set_Nmk_Mesur(this Nomenclatures nomenclatures, int mesurId)
        {
            nomenclatures.Edit();
            nomenclatures.Properties["MESUR_ID"].Value = mesurId;
            nomenclatures.SaveChanges();
        }

SQL Server Error: Exception. Базовая единица измерения уже используется!<KeyErr> [MsSqlNativeError:50000]


Вывод в консоль:
System.Runtime.InteropServices.COMException (0x8000FFFF): SaveChanges failed!
   в CSDN.NomenclaturesClass.SaveChanges()

========================================

System.Runtime.InteropServices.COMException (0x8000FFFF): Данная операция не доступна в режиме редактирования
   в CSDN.NomenclaturesClass.Edit()


Если запускать Set_Nmk_Mesur только для note2 или сначала для note2, а затем для note1, то у note2 единица измерения меняется. То есть ошибка, которая возникает при изменении единицы измерения note1 влияет как-то на дальнейший ход программы. Как этого избежать?

Re: Изменение базовой единицы измерения

Мне кажется тут проблема немножко другая.
Перед Edit лучше вызвать CancelChanges (или в случае ошибки его надо вызвать).
Лучше использовать SaveChangesEx - это метод гарантированно дает ошибку, SaveChanges не совсем корректно был реализован, но для совместимости со старыми приложениями его не трогали.

Спасибо сказали: q41HCxSH0bAz1Reugyc01

Re: Изменение базовой единицы измерения

Чтобы новую тему не создавать. Вместо ERP в параметр записывается знак вопроса.

            var parValue = "\"1С:ERP Управление предприятием 2\"";

            Nomenclatures nomenclatures = TCSApp.Nomenclatures[NmkClassifTypeId];

            var r = nomenclatures.Locate["NOTE", note, 0];

            if (r)
            {
                (nomenclatures as IAttachedParams).SetParameterValue("NMK_TYPE", parValue);
            }
            
            IParameterValues pars = (IParameterValues) nomenclatures.Properties["Parameters"].AsIDispatch;
            var r2 = pars.Locate["PAR_CODE", "NMK_TYPE", 0];
            var v = pars.Properties["PAR_VALUE"].Value;
            Console.WriteLine(string.Format("Значение параметра \"{0}\"", v));

Вывод в консоль: Значение параметра ""1С? Управление предприятием 2""

Re: Изменение базовой единицы измерения

Это  наша ошибка похоже, с : проблема.