Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 фев 2024, 01:29

Как обратиться к ячейке Таблицы Формы

Автор paa66, 19 янв 2024, 16:49

0 Пользователей и 1 гость просматривают эту тему.

paa66

На Форме документа размещена Таблица, она в основном содержит реквизиты табличной части документа. В Таблице создал три поля (колонки), которые должны заполняться РезультатомЗапроса.
Как известно, у Документов есть реквизиты документа и реквизиты табличной части. Получается, что созданные мной колонки Таблицы Формы не имеют реквизитов документа.
Допустим, реквизит Номенклатура табчасти Товары имеет значение Сахар, мне надо в мою колонку ТоварВПути (ТоварВПути не является реквизитом табчасти Товары) записать 3. Следующая строка реквизита Номенклатура имеет значение Соль, в ТоварВПути надо записать 4 и т.д. Как обратиться к ТоварВПути?
Надо типа:
ЭлементыФормы.Товары.Колонки.ТоварВПути.ЭлементУправления.Значение = 3;
На скрине обвёл ТабЧасть Товары документа, показал, как добавил колонку в Таблицу на Форме. 

fruitella

Через цикл или по индексу строки

Цикл
Для Каждого ТекТовар Из Товары Цикл
   ТекТовар.ТоварВПути = ПишемсюдаВашеЗначение;
конецЦикла;

Индекс
Товары[НомерИндекса].ТоварВПути = ПишемсюдаВашеЗначение;

paa66

Если сделаю:
Для Каждого ТекТовар Из Товары Цикл
   ТекТовар.ТоварВПути = ПишемсюдаВашеЗначение;
конецЦикла;
то обращусь к реквизиту табличной части документа. Мне надо обратиться к колонке Таблицы Формы.

paa66

Добрые люди дали такую ссылку по моей проблеме: https://capitally.ru/1c-development/dopolnitelnaya-vychislyaemaya-kolonka-v-tablichnoj-chasti/

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

Иногда возникает необходимость вывода в табличное поле документа (или любого другого объекта, имеющего табличную часть) дополнительных колонок с данными, которые не содержатся непосредственно в табличной части. Реализовать это на платформе 1С: Предприятие 8.1 или 8.2 в режиме обычного приложения (без использования управляемых форм) было достаточно просто, чего не скажешь об управляемых формах в 1С 8.2.

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

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

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

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

// обработчик события «ПриПолученииДанных» табличного поля «Товары»
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Номенклатура = ОформлениеСтроки.ДанныеСтроки.Номенклатура;
Если ЗначениеЗаполнено(Номенклатура) Тогда
ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
ОформлениеСтроки.Ячейки.Цена.Текст = Формат(Номенклатура.Цена,«ЧЦ=15; ЧДЦ=2»);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

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

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

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

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

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

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

kontargentinn-dobalvenie-v-polya-tablitsy

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

// служебная функция получения значения реквизита объекта (выполняется на сервере)
&НаСервере
Функция ЗначениеРеквизита(Объект,ИмяРеквизита);
Возврат Объект[ИмяРеквизита];
КонецФункции

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

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

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

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ОбновитьДанныеКолонкиИНН();
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ОбновитьДанныеКолонкиИНН();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОбновитьДанныеКолонкиИНН();
КонецПроцедуры

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

primer-dopolnitelnoj-kolonki-v-spiske

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

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

dobavit-rekvizit-obekta-v-spisok-tablitsy-formy

Любые издержки на рекламную кампанию:
- больше, чем может позволить себе клиент;
- меньше, чем ожидали люди из творческого отдела;
- примерно такие, которых с ужасом опасались бухгалтеры.


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск