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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как запретить изменение поля «Родитель» в 1С без блокировки остальных?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #30604
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        как тогда правильно написать код чтоб пользователь не мог менять родитель,а все остальное мог менять

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

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

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С