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

Печать (Ctrl+P)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0

Автор публикации

не в сети 6 дней

master1c8

0
Комментарии: 10Публикации: 406Регистрация: 25-12-2016

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

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

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