вычисляемое поле в табличной части 1с
Работа с вычисляемыми полями
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление также как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс, для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Пример
В приведенном запросе получаются данные из регистра продаж и регистра планов продаж. Результатом запроса будет таблица, где для каждого подразделения и каждой номенклатуры будет получено плановое и фактическое количество продаж.
Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.
Результат отчета будет выглядеть так:
Номенклатура | Подразделение | Стоимость план | Стоимость факт | Перевыполнение плана |
Вентилятор настольный | Отдел оптовой продажи | 238,32 | 737,55 | 209,48 |
Мужские сапоги с искусственным мехом | Отдел оптовой продажи | 234,24 | -100,00 | |
Мишка (конфеты) | Отдел розничной продажи | 114,91 | Не запланировано |
Т.е. для каждой строчки было рассчитано значение вычисляемого поля.
Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :
Номенклатура | Подразделение | Стоимость план | Стоимость факт | Перевыполнение плана |
Вентилятор настольный | Отдел оптовой продажи | 238,32 | 737,55 | 209,48 |
Мужские сапоги с искусственным мехом | Отдел оптовой продажи | 234,24 | -100,00 | |
Мишка (конфеты) | Отдел розничной продажи | 114,91 | Не запланировано | |
Итого | 472,56 | 852,46 | 109,48 |
Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :
В этой формуле уже получается не сумма отношений факта к плану, а отношения суммы факта к сумме плана. Кроме того, в итоге учитываются только те записи, для которых был установлен план.
Введем данную формулу в выражение ресурса:
Теперь результат отчета будет выглядеть так:
Вычисляемое поле в таблице управляемой формы
Элемент управляемой формы Таблица предназначен для визуализации табличных данных. Это может быть динамический список, табличная часть, список значений, дерево значений и т. д. (см рис 1)
Рис 1 Типы значений, с которыми можно связать элемент Таблица управляемой формы
Одни из основных отличий элемента Таблица управляемой формы от от элемента таблицы обычной формы для толстого клиента заключается в том, что:
Решение этого вопроса зависит от того, является ли табличная часть реквизитом объекта или реквизитом формы. Это связано с тем, что в таблице формы не будет отображено поле ( колонка), которое не связано с данными табличной части объекта.
Рис 3. Метаданные документа Заявки
Допустим, что в конфигурации есть документ Заявка с табличной частью Заказы, у которой есть реквизит Заказ ( Это ссылка на документ Заказы покупателю) и нужно вывести в табличной части формы документа вычисляемое поле типа булево, которое показывает все ли заполнены реквизиты выбранного заказа.
Как было сказано выше, я не могу связать на прямую элемент таблицы формы с реквизитом табличной части объекта потому, что дополнительное вычисляемое поле без указания пути к данным не будет отображено и поэтому в форме документа я связал элемент Таблица формы с добавленным реквизитом формы ТЗаказы типа ТаблицаЗначений, где я тоже добавил вычисляемое поле Отказ типа булево. ( Для простоты это показано на рис 4 на примере формы внешней обработки )
Обратите внимание, что стандартный реквизит НомерСтроки отсутствует у таблицы значений ТЗаказы, созданной в форме. Следовательно, для отражения номер строки в таблице формы связанной с таблицей значений нужно добавить соответствующее вычисляемое поле.
В программном коде модули формы документа работается с реквизитом формы ТЗаказы. При открытии формы, данные реквизита объекта Заказы копируются в таблицу значении формы ТЗаказы, а при записи документа наоборот.
При изменении заказа я вычисляю поле Отказ путем вызова глобальной процедуры в общих модулях:
При открытии формы документа я заполняю данные табличной части формы ТЗаказы:
Перед записью документа переносим данные таблицы ТЗаказы в таблицу объекта Заказы
Рис 5 Форма не типового документа Заявка
Табличное поле
Дополнительная вычисляемая или текстовая колонка в табличной части, списке, журнале
Как добавить дополнительную колонку в табличном поле?
Добавляете колонку, а все вычисления реализуются с помощью события ПриВыводеСтроки табличного поля:
Код 1C v 8.х
С помощью этого события можно выводить не только текст, но также флажки и картинки, например:
Картинка:
Код 1C v 8.х
Флажки:
Код 1C v 8.х
Еще можно менять цвет фона и текста, шрифт и другие характеристики оформления:
Код 1C v 8.х
Можно также управлять доступностью отдельных строк и ячеек табличного поля:
Код 1C v 8.х
Обычно колонка должна быть рассчитываемой, или зависимой от данных, поэтому нужно задействовать второй параметр ДанныеСтроки. Этот механизм можно использовать для отображения остатков товаров в форме подбора, текущих цен, долга контрагента, другой информации по строкам.
Но здесь нужно быть осторожным! Событие ПриВыводеСтроки вызывается довольно часто при перерисовке табличного поля. Поэтому процедура должна отрабатывать довольно быстро, чтобы не тормозить вывод списка. Если в ней происходит обращение к базе данных, то вывод может резко замедлиться.
Похожие FAQ
Еще в этой же категории
Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора
8.2. Упр. форма. Как добавить вычисляемую колонку в ТЧ формы документа?
Все глобальные команды основного окна приложения объединяются в разделы. Переход между ними осуществляется при помощи
панели разделов. Состав этих разделов однозначно определяется составом подсистем верхнего уровня, для которых установлен
признак Использовать стандартные команды.
Команды текущего раздела отображаются в панели навигации и панели действий основного окна.
При отображении команд того или иного раздела в панели навигации возможно появление одного или нескольких «подразделов»,
каждый из которых – это совокупность команд, соответствующих подчиненной подсистеме (также с признаком Использовать
стандартные команды). Например, в разделе Торговый учет возможно появление подразделов Розничная торговля и Оптовая
торговля за счет существования соответствующих подчиненных подсистем.
(17) итак, кому еще интересна реализация вычисляемой колонки в ТЧ документа:
Открываем форму документа, в правой части формы, раскрываем нужную ТЧ документа и добавляем реквизит типа «строка». Затем в левой части формы документа добавляем поле и связываем его с только что созданным реквизитом. После чего ан форме появляется нужная нам колонка. Теперь осталось заполнить ее данными, но в управляемых формах в списках теперь нет события «ПриВыводеСтроки()» и «ПриПолученииДанных()», как заполнять? Во-первых необходимо написать обработчик события ПриЧтенииНаСервере():
Но этого мало, нужно еще прописать обработчик списка «ПриИзменении():
В моем случае этого достаточно, но если данные колонки получаем из других таблиц БД, то аналогичным образом нужно описать обработчик списка «ПриАктивизацииСтроки()».
(26) это еще бОльший изврат.
Если ты не понимаешь разницу: в старом механизме (8.0/8.1) заполнение вычисляемой колонки происходило в обработчике «ПриВыводеСтроки()», теперь в 8.2 мне необходимо при открытии документа заполнять (причем программно) ВСЕ строки документа, а если документ, скажем инвентаризация, и содержит тысяч 10 строк?