1с документы вычисляемые колонки

1с документы вычисляемые колонки

Дополнительная вычисляемая или текстовая колонка в списке

В 7.7 были текстовые колонки, в Формуле которых можно было написать произвольное выражение. В 8.0 программный код может находиться только в модулях, поэтому дополнительные колонки реализуются с помощью события ПриВыводеСтроки табличного поля. Автор статьи: Волшебник | Редакторы: Мелкий бес, Гений 1С, le_
Последняя редакция №10 от 06.02.12 | История
URL: http://kb.mista.ru/article.php?id=48

1-й вариант:

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

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

Если начались тормоза, то рекомендуется сделать следующее:

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

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

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

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

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

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

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

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

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

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

Избегай конкретных обещаний. Текст должен быть чарующе неопределенным.

— Первый закон Кросби о рекламе.

Источник

Вычисляемая колонка в форме списка документа.

Попросили в форме списка документа «Внутренний заказ» сделать дополнительную колонку «Сумма в оптовых ценах». Написал запрос и подцепил его в процедуру при «ВыводеСтроки»

Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Запрос = Новый Запрос;
Менеджер = новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = Менеджер;
Запрос.Текст = «ВЫБРАТЬ
| ПТЗ.Номенклатура,
| ПТЗ.ЕдиницаИзмерения,
| ПТЗ.Количество
|ПОМЕСТИТЬ ВТЗ
|ИЗ
| &ПТЗ КАК ПТЗ»;
Запрос.УстановитьПараметр(«ПТЗ», ДанныеСтроки.Ссылка.Товары.Выгрузить());
Запрос.Выполнить();

Запрос.Текст = «ВЫБРАТЬ
| СУММА(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * ВТЗ.Количество) КАК Сумма
|ИЗ
| ВТЗ КАК ВТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДок, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
| ПО ВТЗ.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И ВТЗ.ЕдиницаИзмерения = ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения»;
Запрос.УстановитьПараметр(«ДатаДок», ДанныеСтроки.Ссылка.Дата);
Запрос.УстановитьПараметр(«ТипЦен», Справочники.ТипыЦенНоменклатуры.НайтиПоКоду(«00002»));
ТЗСумм = Запрос.Выполнить().Выгрузить();
Если ТЗСумм.Количество()>0 Тогда
ОформлениеСтроки.Ячейки.СуммаОпт.Значение = ТЗСумм.Итог(«Сумма»);
Иначе
ОформлениеСтроки.Ячейки.СуммаОпт.Значение =»»;
КонецЕсли;

Очень сильно тормозит. Что подскажите ?
Реквизит «сумма в оптовых ценах» в документе нельзя делать, т.к. цены могут меняться и все документы надо перепроводить для истинного положения дел .

Источник

8.2. Упр. форма. Как добавить вычисляемую колонку в ТЧ формы документа?

Все глобальные команды основного окна приложения объединяются в разделы. Переход между ними осуществляется при помощи
панели разделов. Состав этих разделов однозначно определяется составом подсистем верхнего уровня, для которых установлен
признак Использовать стандартные команды.
Команды текущего раздела отображаются в панели навигации и панели действий основного окна.
При отображении команд того или иного раздела в панели навигации возможно появление одного или нескольких «подразделов»,
каждый из которых – это совокупность команд, соответствующих подчиненной подсистеме (также с признаком Использовать
стандартные команды). Например, в разделе Торговый учет возможно появление подразделов Розничная торговля и Оптовая
торговля за счет существования соответствующих подчиненных подсистем.

(17) итак, кому еще интересна реализация вычисляемой колонки в ТЧ документа:

Открываем форму документа, в правой части формы, раскрываем нужную ТЧ документа и добавляем реквизит типа «строка». Затем в левой части формы документа добавляем поле и связываем его с только что созданным реквизитом. После чего ан форме появляется нужная нам колонка. Теперь осталось заполнить ее данными, но в управляемых формах в списках теперь нет события «ПриВыводеСтроки()» и «ПриПолученииДанных()», как заполнять? Во-первых необходимо написать обработчик события ПриЧтенииНаСервере():

Но этого мало, нужно еще прописать обработчик списка «ПриИзменении():

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

(26) это еще бОльший изврат.

Если ты не понимаешь разницу: в старом механизме (8.0/8.1) заполнение вычисляемой колонки происходило в обработчике «ПриВыводеСтроки()», теперь в 8.2 мне необходимо при открытии документа заполнять (причем программно) ВСЕ строки документа, а если документ, скажем инвентаризация, и содержит тысяч 10 строк?

Источник

1С 8.3 : Как добавить дополнительную вычисляемую колонку в табличной части управляемой формы

Реализация на платформе 1С: Предприятие 8.1

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

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

Реализация на платформе 1С: Предприятие 8.2

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

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

Источник

Читайте также:  Как настроить два наушника xiaomi
Оцените статью