Вычисляемое поле в таблице управляемой формы

Печать (Ctrl+P)

Элемент управляемой формы Таблица предназначен для визуализации табличных данных. Это может быть динамический список, табличная часть, список значений, дерево значений и т. д. (см рис 1)

Рис 1 Типы значений, с которыми можно связать элемент Таблица управляемой формы

Более полный набор свойств и методов ( событий) элемента
Таблица доступен, когда таблица связана с реквизитом типа ДинамическийСписок . Например, доступно событие ПриПолученииДанныхНасервере, которое вызывается на сервере после получения данных динамическим списком
Такое событие у элемента Таблица не доступно, когда она
связана с реквизитом типа ТаблицаЗначений. Отметим также, что событие ПриВыводеСтроки также недоступен если форма является
управляемой.

Одни из основных отличий элемента Таблица управляемой формы от от элемента таблицы обычной формы для толстого клиента заключается в том, что:

  • Событие ПриВыводеСтроки недоступен
  • Колонка (Поле) не отображается в форме если не заполнено свойство ПутьКДанным (См рис 2)
Рис 2 Свойства поля таблицы формы

Как создавать вычисляемое поле в таблице формы, связанной с типом ТаблицаЗначений ?

Решение этого вопроса зависит от того, является ли табличная часть реквизитом объекта или реквизитом формы. Это связано с тем, что в таблице формы не будет отображено поле ( колонка), которое не связано с данными табличной части объекта.

Рис 3. Метаданные документа Заявки

Допустим, что в конфигурации есть документ Заявка с табличной частью Заказы, у которой есть реквизит Заказ ( Это ссылка на документ Заказы покупателю) и нужно вывести в табличной части формы документа вычисляемое поле типа булево, которое показывает все ли заполнены реквизиты выбранного заказа.

Как было сказано выше, я не могу связать на прямую элемент таблицы формы с реквизитом табличной части объекта потому, что дополнительное вычисляемое поле без указания пути к данным не будет отображено и поэтому в форме документа я связал элемент Таблица формы с добавленным реквизитом формы ТЗаказы типа ТаблицаЗначений, где я тоже добавил вычисляемое поле Отказ типа булево. ( Для простоты это показано на рис 4 на примере формы внешней обработки )

Рис 4 . Структура реквизитов

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

В программном коде модули формы документа работается с реквизитом формы ТЗаказы. При открытии формы, данные реквизита объекта Заказы копируются в таблицу значении формы ТЗаказы, а при записи документа наоборот.

Нужно иметь ввиду , что при изменении табличной части
ТЗаказы нужно менять значение свойства формы модифицированность:

&НаКлиенте
Процедура ТЗаказыПриИзменении(Элемент)
Этаформа.Модифицированность = Истина;
КонецПроцедуры

При изменении заказа я вычисляю поле Отказ путем вызова глобальной процедуры в общих модулях:

&НаКлиенте
Процедура ТзаказыЗаказПриИзменении(Элемент)
ТекущиеДанные= Элементы.ТЗаказы.ТекущиеДанные;
Результат =_ОбщийМодульВызовСервер.ПроверитьРеквизитыЗаказа(ТекущиеДанные.Заказ);
ТекущиеДанные.Отказ= Результат.Отказ;
РасчетСуммНасервере();
КонецПроцедуры

При открытии формы документа я заполняю данные табличной части формы ТЗаказы:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ТаблицаЗаказовВФорму();
КонецПроцедуры
НаКлиенте
Процедура ТаблицаЗаказовВФорму()
Тзаказы.Очистить();
Для каждого Стр Из Объект.Заказы Цикл
НоваяСтрока=Тзаказы.Добавить();
Результат =_ОбщийМодульВызовСервер.ПроверитьРеквизитыЗаказа(Стр.Заказ);
НоваяСтрока.ЕстьОшибка =не Результат.Отказ;
НоваяСтрока.Заказ = Стр.Заказ;
КонецЦикла;
КонецПроцедуры

Перед записью документа переносим данные таблицы ТЗаказы в таблицу объекта Заказы

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ТаблицаЗаказовВОбъект();
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаЗаказовВОбъект()
Объект.Заказы.Очистить();
Для каждого Стр Из ТЗаказы Цикл
Если ЗначениеЗаполнено(Стр.Заказ) тогда
ЗаполнитьЗначенияСвойств(Объект.Заказы.Добавить(),Стр);
КонецЕсли;
КонецЦикла;
Объект.Количество = объект.Заказы.Количество();
КонецПроцедуры

Форма документа документа показа на рис 5. В первой колонки отображается вычисляемое поле с помощью коллекцией картинок в качестве представления значения .

Рис 5 Форма не типового документа Заявка

Previous Article
Next Article

4 Replies to “Вычисляемое поле в таблице управляемой формы”

  1. Дмитрий

    Добрый день. А почему в данном случае просто не добавить колонку реквизита в Объект.Заказы ?
    В ТЧ не хранится. Можно использовать в работе. Да, при создании формы и после записи, нужно перезаполнять.

    • master1c8

      Дорогой коллега! В данном примере Колонка Отказ – это вычисляемое поле , а колонка Заказ -это реквизит табличной части объекта . В обычную форму можно вывести табличные части объекта и добавить вычисляемые поля , а потом в событие ПриВыводеСтроки вывести вычисляемые значения полей. Однако, в управляемых формах нет события ПриВыводеСтроки у элемента типа ТабличныеЗзначения. Поэтому если вывести табличные части объекта в управляемую форму , как Вы говорите, то тогда ВЫ не сможете вывести вычисляемую колонку «Отказ». Попробуйте такой пример решить: Допустим , что у Вас есть табличная часть объекта с тремя реквизитами : Номенклатура, цена и количество . У табличной части объекта отсутствует реквизит Сумма , но Вам нужно в управляемой форме показать вычисляемое поле Сумма, которое равно произведению количество на цену . Такую задачу можно решить только с помощью описанного в этой статье приема. У Вас не получиться вывести табличную часть объекта в управляемую форму и добавить вычисляемую колонку сумма

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.