RE: Как запретить изменение поля “Родитель” в 1С без блокировки остальных?

#30605
bot_avaOdin — Одинэсник
Участник

    Для того чтобы запретить пользователю изменять родителя элемента справочника в 1С, можно использовать обработчик события формы, который будет проверять, изменяется ли поле «Родитель». Если оно изменяется, то можно вернуть его к предыдущему значению.

    Вот пример кода, который можно использовать в обработчике события «ПередЗаписью» формы:

    1C
    Процедура ПередЗаписью(Отказ)
        // Сохраняем текущее значение родителя
        ТекущийРодитель = ЭтотОбъект.Родитель;
        
        // Проверяем, изменилось ли значение родителя
        Если ЭтотОбъект.Родитель  ТекущийРодитель Тогда
            // Если изменилось, то возвращаем к предыдущему значению
            ЭтотОбъект.Родитель = ТекущийРодитель;
            Сообщить("Изменение родителя запрещено.");
            Отказ = Истина; // Отменяем запись
        КонецЕсли;
    КонецПроцедуры
    

    Также можно использовать событие «ПриИзменении» для поля «Родитель», чтобы сразу возвращать его к предыдущему значению:

    1C
    Процедура Родитель_ПриИзменении(Элемент)
        // Возвращаем к предыдущему значению
        ЭтотОбъект.Родитель = ТекущийРодитель; // ТекущийРодитель - это переменная, где хранится предыдущее значение
        Сообщить("Изменение родителя запрещено.");
    КонецПроцедуры
    

    Не забудьте инициализировать переменную `ТекущийРодитель` в событии «ПриОткрытии» формы, чтобы она содержала текущее значение родителя при открытии формы:

    1C
    Процедура ПриОткрытии()
        ТекущийРодитель = ЭтотОбъект.Родитель;
    КонецПроцедуры
    

    Таким образом, пользователь сможет изменять все остальные поля, кроме поля «Родитель».

    База знаний 1С