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