При разработке и настройке интерфейсов в системе «1С:Предприятие» разработчики часто сталкиваются с ситуацией, когда поведение элементов формы меняется в зависимости от состояния объекта. Типичный сценарий: при создании нового элемента справочника пользователь может свободно заполнять любые реквизиты (например, поле Цвет), но стоит только записать элемент, как это поле блокируется и становится доступным только для чтения. При этом кнопка выбора блекнет, а сам реквизит нельзя изменить.
В этой статье мы подробно разберем, почему так происходит, выясним принципиальную разницу между ключевыми свойствами элементов формы, а также научимся находить скрытый программный код, который отвечает за такое поведение платформы.
Для управления возможностью редактирования данных на форме в 1С используются два основных свойства элементов: ТолькоПросмотр (ReadOnly) и Доступность (Enabled). Начинающие разработчики часто путают их или дублируют функционал, однако платформа обрабатывает эти свойства совершенно по-разному. Рассмотрим их подробнее:
Именно поэтому для реквизитов типа справочников или документов разработчики предпочитают использовать ТолькоПросмотр — это сохраняет удобство навигации по информационной базе, не позволяя пользователю случайно исказить данные.
Важно понимать: в конфигураторе 1С нет одной «магической кнопки» или галочки в свойствах реквизита, которая бы автоматически блокировала его сразу после первой записи. Такое поведение всегда описывается разработчиками программно. Давайте разберем основные сценарии, как это реализуется на практике.
В обычных формах (1С v8.3 и более ранних версиях) разработчики часто прописывают проверку состояния объекта непосредственно в событиях открытия формы. Для этого анализируется метод ЭтоНовый(). Давайте посмотрим на классический пример такого кода:
Процедура ПриОткрытии()
Если Не ЭтоНовый() Тогда
ЭлементыФормы.Цвет.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
Если элемент справочника уже существует в базе данных (то есть метод ЭтоНовый() возвращает значение Ложь), платформа принудительно переводит поле ввода Цвет в режим просмотра.
Если ваша конфигурация разработана на основе БСП, то ручного кода в форме может и не быть. В БСП за это отвечает подсистема «Запрет редактирования реквизитов объектов». Логика работает следующим образом:
Часто разработчики пытаются найти место блокировки лобовым методом — через глобальный поиск по тексту Цвет.ТолькоПросмотр — и терпят неудачу. Выясним основные причины, почему система не выдает нужную строку:
ЭтаФорма.ТолькоПросмотр = Истина;
ТолькоПросмотр установлено для всей панели, то и поле Цвет станет недоступным.
Для Каждого Элемент Из ЭлементыФормы Цикл
Если Элемент.ТипЗначения = Тип("СправочникСсылка.Цвета") Тогда
Элемент.ТолькоПросмотр = Не ЭтоНовый();
КонецЕсли;
КонецЦикла;
УстановитьДоступностьПоля(ЭлементыФормы, "Цвет", Ложь);
Обычный поиск по структуре Объект.Свойство здесь также окажется бессилен.Чтобы гарантированно определить, какая именно строка кода или общий модуль меняют поведение поля Цвет, мы воспользуемся механизмом отладки. Выполним следующие шаги:
ПередОткрытием и ПриОткрытии.ПередОткрытием.ЭлементыФормы.Цвет.ТолькоПросмотр и нажмите Enter. Вы увидите текущее значение свойства (на старте оно, скорее всего, будет равно Ложь).ТолькоПросмотр изменится на Истина, посмотрите на строку кода, которая была выполнена только что. Именно она отвечает за блокировку элемента.Этот простой и надежный алгоритм отладки позволяет быстро локализовать проблему даже в сильно кастомизированных конфигурациях со сложной архитектурой.