Вычисляемая колонка в табличной части 1с

Реализация на платформе 1С: Предприятие 8.1 (или в обычном приложении)

В начале коротко о том, как добавить дополнительную колонку в табличное поле на платформе 1С 8.1.

Предположим, что у нас есть некий документ с табличной частью “Товары” (с колонками “Номенклатура” и “Количество”) и нам нужно вывести дополнительную колонку “Цена”, которая бы содержала данные реквизита “Цена” элементов справочника “Номенклатура”, выбранных в строках табличной части.

Для этого нам достаточно добавить в форме документа новую колонку “Цена” в табличное поле, содержащее данные табличной части документа и написать следующий код в обработчике события “ПриПолученииДанных” этого табличного поля:

Хочу обратить внимание на то, что строки табличного поля обрабатываются порциями, по мере прокрутки списка.

Реализация на платформе 1С: Предприятие 8.2 (8.3 управляемое приложение)

На платформе 8.2 с использованием управляемых форм решение данной задачи потребует бóльших усилий. Это связано с тем, что за счет своей клиент-серверной ориентированности в платформе 8.2 в управляемом режиме отсутствуют некоторые привычные возможности – например, у табличного поля отсутствуют обработчики событий “ПриПолученииДанных” и “ПриВыводеСтроки”, которые мы могли бы использовать для этих целей в 1С 8.1 или 8.2 в обычных формах.

Пусть в нашей конфигурации есть документ “ВводОстатковДолга” с табличной частью “Контрагенты” (с колонками “Контрагент” и “Сумма”). В свою очередь у справочника “Контрагенты” есть реквизит “ИНН”, значение которого необходимо выводить в строках табличного поля.

[qu_spoiler title=»Примечание от ‘Капитально:» open=»yes» icon=»chevron-circle»]в статье взят неудачный пример т.к. реквизиты вынести можно получить гораздо проще, но тем не менее статья полезна для рассмотрения в учебных целях[/qu_spoiler]

Откроем управляемую форму документа, добавим новую колонку “ИНН” реквизита “Контрагенты” и перенесём её на закладку “Элементы” (для отображения в форме).

Читайте также:  Как включить автоматический пересчет формул в excel

Откроем палитру свойств поля “КонтрагентыКонтрагент” и добавим обработчик события “ПриИзменении”

// обработчик события «ПриИзменении» поля «Контрагент» в табличном поле «Контрагенты»
&НаКлиенте
Процедура КонтрагентыКонтрагентПриИзменении ( Элемент )
ТекДанные = Элементы . Контрагенты . ТекущиеДанные ;
ТекДанные . ИНН = ЗначениеРеквизита ( ТекДанные . Контрагент , «ИНН» ) ;
КонецПроцедуры

Это обеспечит нам изменение значения поля “ИНН” при выборе контрагента в строке табличного поля.
Теперь необходимо предусмотреть заполнение колонки “ИНН” при открытии формы документа, а так же после записи и при чтении на сервере.

Обновление данных после записи и при чтении на сервере необходимо в связи с тем, что иначе значения колонки “ИНН” будут очищаться каждый раз при возникновении этих событий. Для заполнения колонки “ИНН” опишем в модуле формы служебную серверную процедуру:

Затем добавим в модуль формы документа обработчики событий “ПриОткрытии”, “ПриЧтенииНаСервере” и “ПослеЗаписиНаСервере”, в каждой из которых будем вызвать описанную ранее служебную процедуру “ОбновитьДанныеКолонкиИНН”

Всё готово. Можно посмотреть на результат.

Статья найдена на просторах интернета

Как добавить реквизит объекта в таблицу формы

Реклама — самый дешевый способ продажи товара, особенно если товар не имеет никакой ценности.

Дополнительная вычисляемая или текстовая колонка в табличной части, списке, журнале

Проконсультироваться
со специалистом 1С

Как добавить дополнительную колонку в табличном поле?
Добавляете колонку, а все вычисления реализуются с помощью события ПриВыводеСтроки табличного поля:
Код 1C v 8.х

С помощью этого события можно выводить не только текст, но также флажки и картинки, например:
Картинка:
Код 1C v 8.х

Флажки:
Код 1C v 8.х

Еще можно менять цвет фона и текста, шрифт и другие характеристики оформления:
Код 1C v 8.х

Можно также управлять доступностью отдельных строк и ячеек табличного поля:
Код 1C v 8.х

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

Но здесь нужно быть осторожным! Событие ПриВыводеСтроки вызывается довольно часто при перерисовке табличного поля. Поэтому процедура должна отрабатывать довольно быстро, чтобы не тормозить вывод списка. Если в ней происходит обращение к базе данных, то вывод может резко замедлиться.

Если начались тормоза, то рекомендуется сделать следующее:
1. Кеширование результата запроса в переменной модуля формы (таблица значений или массив, еще можно использовать соответствие, которое индексируется для примитивных типов данных, например, код товара или артикул)
2. При отключенной колонке (видимость) запрос к базе НЕ должен выполняться.
По умолчанию колонку держать выключенной, включение только по кнопке в форме или при личных настройках определенного пользователя.
3. Лучше выполнять один большой запрос на несколько товаров, чем несколько маленьких запросов на один товар.
4. Список товаров нужно передавать как ПАРАМЕТР виртуальной таблицы Остатки, а не как параметр условия ГДЕ.
5. При повышенных требованиях к скорости отображения списка и большом количестве пользователей можно завести регистр сведений, хранящий актуальные остатки. Для поддержки его актуальности можно создать последовательность.
6. Еще вариант через обработчик — при ПолученииДанных (вроде так называется). Там сразу передается массив ОформленияСтрок — в нем все строки сразу и вызывается он реже, чем при выводе строки.
7. Завести в табличной части реквизит, куда при открытии формы и по мере надобности помещать остатки, это значительно ускорит вывод остатков, правда будет не лучшим образом влиять на флаг Модифицированность.

Читайте также:  Как возвести число в иррациональную степень

Дополнительная вычисляемая или текстовая колонка в табличной части, списке, журнале

Как добавить дополнительную колонку в табличном поле?
Добавляете колонку, а все вычисления реализуются с помощью события ПриВыводеСтроки табличного поля:
Код 1C v 8.х

С помощью этого события можно выводить не только текст, но также флажки и картинки, например:
Картинка:
Код 1C v 8.х

Флажки:
Код 1C v 8.х

Еще можно менять цвет фона и текста, шрифт и другие характеристики оформления:
Код 1C v 8.х

Можно также управлять доступностью отдельных строк и ячеек табличного поля:
Код 1C v 8.х

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

Но здесь нужно быть осторожным! Событие ПриВыводеСтроки вызывается довольно часто при перерисовке табличного поля. Поэтому процедура должна отрабатывать довольно быстро, чтобы не тормозить вывод списка. Если в ней происходит обращение к базе данных, то вывод может резко замедлиться.

Если начались тормоза, то рекомендуется сделать следующее:
1. Кеширование результата запроса в переменной модуля формы (таблица значений или массив, еще можно использовать соответствие, которое индексируется для примитивных типов данных, например, код товара или артикул)
2. При отключенной колонке (видимость) запрос к базе НЕ должен выполняться.
По умолчанию колонку держать выключенной, включение только по кнопке в форме или при личных настройках определенного пользователя.
3. Лучше выполнять один большой запрос на несколько товаров, чем несколько маленьких запросов на один товар.
4. Список товаров нужно передавать как ПАРАМЕТР виртуальной таблицы Остатки, а не как параметр условия ГДЕ.
5. При повышенных требованиях к скорости отображения списка и большом количестве пользователей можно завести регистр сведений, хранящий актуальные остатки. Для поддержки его актуальности можно создать последовательность.
6. Еще вариант через обработчик — при ПолученииДанных (вроде так называется). Там сразу передается массив ОформленияСтрок — в нем все строки сразу и вызывается он реже, чем при выводе строки.
7. Завести в табличной части реквизит, куда при открытии формы и по мере надобности помещать остатки, это значительно ускорит вывод остатков, правда будет не лучшим образом влиять на флаг Модифицированность.

Читайте также:  Гугл переводчик с русского на английский фото

Похожие FAQ

Еще в этой же категории

Заполнение списка значений в элементе поле выбора на форме 9
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Форма

Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Форма

Как активизировать, перевести фокус на необходимый элемент на форме? 6
//Текущему Элементу формы присваиваем элемент котровый необходимо активизировать ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличноеПоле; Форма

Программное добавление элементов на форму 6
ЭлементыФормы (Controls) . Добавить (Add) — Добавляет элемент управления на форму. Синтаксис: Добавить( Тип , Имя , Видимость , ПоместитьНа ) Параметры: Тип (обязательный) Тип: Тип. Тип добавляемого элемента управления: Индикатор; П Поле выбора

Как ограничить список выбора? 5
Ограничим список элементов, установив отбор в открываемой форме //Пример 1 Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка) ФормаВыбора = Справочники.ПрочиеДоходыИРасходы.ПолучитьФормуВыбора(, Элемент); ЭлементОтбораВидПДР = Форма Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Оцените статью
Добавить комментарий

Adblock
detector