Значения ячеек и элементы управления в табличном документе

Табличный документ (ТД) состоит из строк и столбцов, которые образуют ячейки. В этой статье рассмотрены возможности "1С:Предприятия 8", позволяющие разместить в ячейках табличного документа элементы управления для редактирования значений.

Ниже рассмотрены следующие темы:


Свойства "Текст" и "Значение" ячейки табличного документа

Основные свойства у каждой ячейки табличного документа — это Текст и Значение, причем по умолчанию доступно свойство Текст, а свойство Значение заблокировано.

ВАЖНО! Свойства Текст и Значение не могут быть использованы одновременно! Если свойство-признак СодержитЗначение установлено в значение Истина, то свойство Текст недоступно, и наоборот, если свойство-признак СодержитЗначение равно Ложь, то свойство Значение недоступно, а также все связанные другие свойства, например, ТипЗначения и ЭлементУправления.

Ниже на рисунке показана палитра свойств для ячейки табличного документа. Обратите внимание, что флажок Содержит значение не установлен, поэтому данная ячейка будет отображать Текст.

Свойство Текст имеет тип Строка. Если в ячейке необходимо разместить какую-либо текстовую информацию, необходимо использовать именно свойство Текст, например:

Копировать в буфер обмена
ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента; 
ПолеТабДок.Область("R1C2").Текст = спрНоменклатура.Наименование;
ПолеТабДок.Область("R2C2").Текст = "Это Строка"; //указываем явно литерал строки

Обратите внимание, что даже если вы присвоите свойству Текст значение другого типа (не строкового), то оно все равно будет интерпретировано как строка. Значения базовых типов преобразуются к строке, а для ссылочных типов данных (элементов справочников, документов и т. д.) берется их представление. Если же необходимо разместить в ячейке значение другого типа, например, число, булево, дату или ссылку, и при этом не преобразовывать это значение к строке, то нужно использовать свойство Значение.

Для того чтобы появилась возможность использовать свойство Значение, необходимо явно присвоить свойству ячейки СодержитЗначение значение Истина или установить флажок Содержит значение в палитре свойств, как это показано на следующем рисунке:

Для ячейки, у которой установлен признак СодержитЗначение, можно задать тип значения, размещаемого в ячейке. На следующем рисунке указан тип Строка, но есть также возможность указать несколько возможных типов, используя составной тип данных:

Следующий фрагмент демонстрирует, как можно управлять этими свойствами из встроенного языка:

Копировать в буфер обмена
//задаем нужный тип с помощью объекта "ОписаниеТипов" 
МассивБулево = Новый Массив; 
МассивБулево.Добавить(Тип("Булево"));
ОписаниеТиповБулево = Новый ОписаниеТипов(МассивБулево);
//...
ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента; 
ПолеТабДок.Область("R3C3").СодержитЗначение = Истина; //указываем, что в ячейке будет значение
ПолеТабДок.Область("R3C3").ТипЗначения = ОписаниеТиповБулево; //указываем тип значения
ПолеТабДок.Область("R3C3").Значение = СпрНоменклатура.Услуга; //значение типа "Булево" из справочника

Свойство "Формат" ячейки табличного документа

Для ячейки табличного документа можно задавать формат вывода данных. Для этого используется свойство Формат, которое содержит форматную строку. Приемы работы с форматной строкой полностью совпадают с функцией Формат() системы "1С:Предприятие 8". Свойство Формат может быть установлено как интерактивно — через палитру свойств, так и программно — из встроенного языка, например:

Копировать в буфер обмена
ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента; 
ПолеТабДок.Область("R4C3").ТипЗначения = ОписаниеТиповДата; //указываем тип, ранее заданный для Даты
ПолеТабДок.Область("R4C3").Значение = ТекущаяДата();
//указываем форматную строку 
//будет выглядеть как "[031120-2315]-", если текущая дата '20-11-2003 23:15:00') 
ПолеТабДок.Область("R4C3").Формат = "ДФ=[ггММдд-ЧЧмм]-";

Элемент управления в табличном документе

Элементы управления, встроенные в ячейку

Для ячейки, у которой установлен признак СодержитЗначение, можно также задать элемент управления, который будет использоваться для редактирования этого значения.

Элемент управления можно назначить через палитру свойств или из встроенного языка с помощью метода УстановитьЭлементУправления(). Чтобы проверить в программе, установлен ли элемент управления для конкретной ячейки, можно использовать свойство ЭлементУправления, которое возвращает элемент управления, назначенный для ячейки.

Элементы управления, встроенные в ячейку, отображаются только при входе в режим редактирования значения. На приведенном ниже рисунке редактируемая ячейка обведена овалом, и в ней отображается флажок:

Ниже показан пример установки элемента управления типа Флажок из встроенного языка:

Копировать в буфер обмена
//задаем нужный тип с помощью объекта "ОписаниеТипов"
МассивБулево = Новый Массив; 
МассивБулево.Добавить(Тип("Булево"));
ОписаниеТиповБулево = Новый ОписаниеТипов(МассивБулево);
...
ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента; 
ПолеТабДок.Область("R5C3").СодержитЗначение = Истина; //указываем, что в ячейке будет значение
ПолеТабДок.Область("R5C3").ТипЗначения = ОписаниеТиповБулево; //указываем ранее заданный тип
ПолеТабДок.Область("R5C3").Значение = СпрНоменклатура.Услуга; //значение типа "Булево" из справочника
//а теперь указываем, что в ячейке будет отображаться флажок
ПолеТабДок.Область("R5C3").УстановитьЭлементУправления(Тип("Флажок"));

Элементы управления, не встроенные в ячейку

Существует еще один способ размещения элемента управления в ячейке: использование независимого элемента управления и его "привязка" к нужной ячейке. В этом случае сама ячейка не участвует в процессе работы, а ее значения и свойства ни на что не влияют. Значения нужно будет непосредственно получать из элемента управления как обычного элемента формы. Ячейка при этом используется только как область размещения (привязки) элемента управления.

Ниже показано, как могут выглядеть такие элементы управления (не встроенные в ячейку):

В следующем фрагменте приводится пример размещения не встроенного в ячейку элемента управления в табличном документе:

Копировать в буфер обмена
Перем ПолеТабДок;

Процедура УстановитьЭУ(тдОбл, n, ЗначениеЯчейки=Неопределено) //устанавливает элемент управления

    ЭлементыФормы.Добавить(Тип("Флажок"), n, Истина, ПолеТабДок);
    ЭлементыФормы[n].Заголовок = "флажок"+n; //можно задать заголовок элемента управления 
    ЭлементыФормы[n].Значение = ?(ЗначениеЯчейки=Неопределено, Ложь, ЗначениеЯчейки); //задаем значение ячейки 
    ЭлементыФормы[n].ИзменяетДанные = Истина; //устанавливаем различные свойства элемента управления
    ЭлементыФормы[n].ПрозрачныйФон = Истина; 
    ЭлементыФормы[n].Расположить(тдОбл); //привязываем элемент управления к ячейке

КонецПроцедуры
// ...
Процедура ЗаполнитьТаблДок() //процедура, заполняющая табличный документ

n = 1;
СпрНоменклатура = Справочники.Номенклатура.Выбрать();
Пока СпрНоменклатура.Следующий() Цикл
    // ...
    УстановитьЭУ(ПолеТабДок.Область("R" + n + "C3"), n, СпрНоменклатура.Услуга);
    // ...
    n = n + 1;
КонецЦикла;

КонецПроцедуры

ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;

Расширение элементов управления, расположенных в поле табличного документа

Для элементов управления, расположенных в табличном документе, расширяется набор свойств, методов и событий:

Разберем самые важные свойства и методы:

Для элементов управления, расположенных в табличном документе, можно обрабатывать события, например, При изменении. Процедура-обработчик события должен находиться в модуле формы. Вот почему элементы управления имеет смысл располагать в табличном документе, только если он выводится в диалог формы (в поле табличного документа).


Свойство "Защита"  ячейки табличного документа

Это свойство имеет тип Булево и содержит признак защиты ячейки от редактирования. В режиме просмотра в табличном документе недоступны для редактирования ячейки и рисунки, у которых установлено свойство Защита

Устанавливается это свойство так же, как и любое другое:

Копировать в буфер обмена
ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента;
ПолеТабДок.Область("R4C3").Защита = Истина;

Резюме