---
title: Пакетная обработка табличной части сервер
slug: erp-uh/пакетная-обработка-табличной-части-сервер
---


## ОбработатьСтрокуТЧВЦикле
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Выполняет обработку строк коллекции в соответствии с операциями, перечисленными в структуре действий.
// При выполнении метода происходит предварительное получение данных, необходимых для обработки одним запросом.
// Вызов метода должен производиться в цикле обхода коллекции, предварительно нужно определить КэшированныеЗначения.
//
// Параметры:
//	ТекущаяСтрока - Структура, ДанныеФормыКоллекция - Приемник действий обработки строки.
//	Действия - Структура - Действия, которые нужно произвести над строкой. В ключах хранится наименование действия,
//					в значениях - произвольные данные, необходимые для обработки.
//	КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения
//	КоллекцияСтрок - ДанныеФормыКоллекция, Массив из Структура, ТаблицаЗначений - Коллекция, которая обходится в цикле
//					и является источником данных для обработки, на основании этой коллекция сформируется временная
//					таблица втИсточникДанных. Данные полученной временной таблицы следует использовать, для описания
//					текстов запроса получения данных, необходимых для обработки всех обрабатываемых строк в методе
//					ДополнитьТекстыЗапросовИсточниковДанных.
//	ТекущаяСтрокаВКоллекции - ДанныеФормыЭлементКоллекции, СтрокаТаблицыЗначений, Структура - Итератор обхода коллекции
//					КоллекцияСтрок, этот параметр требуется для получения данных через метод ДанныеДляОбработкиСтроки.
//					ТекущаяСтрокаВКоллекции может не совпадать с параметром ТекущаяСтрока, например в тех случаях, когда
//					обходится массив добавляемых номенклатур в ТЧ Товары, в этом примере ТекущаяСтрока это новая строка
//					табличной части, а ТекущаяСтрокаВКоллекции это элемент массива из элементов справочника Номенклатура.
//
// Пример:
//
//  1. Для обработки всех строк табличной части с дополнительной обработкой прикладным кодом без создания промежуточной
//  структуры:
//
//  КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
//
//  СтруктураДействий = Новый Структура();
//  СтруктураДействий.Вставить("ЗаполнитьКодТНВЭД", Объект.НалогообложениеНДС);
//
//  Для Каждого СтрокаТЧ Из Объект.Товары Цикл
//
//  	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧВЦикле(
//  		СтрокаТЧ,
//  		СтруктураДействий,
//  		КэшированныеЗначения,
//  		Объект.Товары,
//  		СтрокаТЧ);
//  	//Доп обработка строки
//  	СтрокаТЧ.ЗаполнятьВозвратнуюТару = Истина;
//
//  КонецЕсли;
//
//  2. Для обработки всех строк табличной части с созданием промежуточной структуры:
//
//  КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
//
//  СтруктураДействий = Новый Структура();
//  СтруктураДействий.Вставить("ЗаполнитьКоэффициентПоНоменклатуре");
//
//  Для Каждого СтрокаТЧ Из Объект.Товары Цикл
//
//   	ДанныеДляОбработки = Новый Структура();
//   	ДанныеДляОбработки.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
//   	ДанныеДляОбработки.Вставить("Коэффициент", Объект.Коэффициент);
//
//  	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧВЦикле(
//  		ДанныеДляОбработки,
//  		СтруктураДействий,
//  		КэшированныеЗначения,
//  		Объект.Товары,
//  		СтрокаТЧ);
//
//  	ЗаполнитьЗначенияСвойств(СтрокаТЧ, ДанныеДляОбработки);
//
//  КонецЕсли;
//
//  3. Для дополнения табличной части по входящей коллекции, примером может служить подбор товаров:
//
//  ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
//
//  КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
//
//  СтруктураДействий = Новый Структура();
//  СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС");
//
//  Для Каждого ПодобранныйТовар Из ТаблицаТоваров Цикл
//
//   	НоваяСтрокаТЧ = Объект.Товары.Добавить();
//  	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧВЦикле(
//  		НоваяСтрокаТЧ,
//  		СтруктураДействий,
//  		КэшированныеЗначения,
//  		ТаблицаТоваров,
//  		ПодобранныйТовар);
//
//  КонецЕсли;
//
//  Случаи некорректного использования:
//   1. Для обработки одной строки табличной части, например при изменения номенклатуры в строке, следует использовать ОбработатьСтрокуТЧ
//   2. При наличии в структуре действий зависимых обработчиков, см . ПриОписанииЗависимостейОбработчиков, следует
//   	использовать метод ОбработатьСтрокиТЧ. Если требуется обработать не все строки, то требуется сформировать массив
//   	строк табличной части, подлежащих обработки и передать его в параметр КоллекцияСтрок.
//
Процедура ОбработатьСтрокуТЧВЦикле(ТекущаяСтрока, Действия, КэшированныеЗначения, КоллекцияСтрок, ТекущаяСтрокаВКоллекции) Экспорт
```

Пример вызова
```bsl
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧВЦикле(ТекущаяСтрока, Действия, КэшированныеЗначения, КоллекцияСтрок, ТекущаяСтрокаВКоллекции) 
```
</details>

## ОбработатьСтрокиТЧ
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Выполняет обработку нескольких строк коллекции в соответствии с операциями, перечисленными в структуре действий.
// При выполнении метода происходит предварительное получение данных, необходимых для обработки одним запросом.
// Следует использовать когда требуется обработать некоторые строки табличной части, предварительно сформировать массив
// строк табличной части и передавать его в параметр КоллекцияСтрок,
// указав в параметре ТабЧасть табличную часть, к которой относятся элементы этого массива.
// Так же метод следует использовать, когда в структуре действий присутствуют зависимые обработчики.
//
// Параметры:
//	КоллекцияСтрок - см. ОбработатьСтрокуТЧВЦикле.КоллекцияСтрок.
//	СтруктураДействий - см. ОбработатьСтрокуТЧВЦикле.Действия.
//	КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения.
//	ТабЧасть - ДанныеФормыКоллекция - Табличная часть, приемник действий над строками.
//
Процедура ОбработатьСтрокиТЧ(КоллекцияСтрок, СтруктураДействий, КэшированныеЗначения = Неопределено, ТабЧасть = Неопределено) Экспорт
```

Пример вызова
```bsl
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(КоллекцияСтрок, СтруктураДействий, КэшированныеЗначения, ТабЧасть);
```
</details>

## ОбработатьСтрокуТЧ
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Выполняет обработку одной строки коллекции в соответствии с операциями, перечисленными в структуре действий.
// При выполнении метода происходит предварительное получение данных, необходимых для обработки одним запросом.
// Следует применять в тех случаях, когда обработка происходит не в цикле, например при заполнении Ставки НДС при
// изменении номенклатуры в табличной части.
//
// Параметры:
//	СтрокаКоллекции - см. ОбработатьСтрокуТЧВЦикле.ТекущаяСтрока.
//	СтруктураДействий - см. ОбработатьСтрокуТЧВЦикле.Действия.
//	КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения.
//	Коллекция -см. ОбработатьСтрокиТЧ.ТабЧасть.
//
Процедура ОбработатьСтрокуТЧ(СтрокаКоллекции, СтруктураДействий, КэшированныеЗначения, Коллекция = Неопределено) Экспорт
```

Пример вызова
```bsl
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаКоллекции, СтруктураДействий, КэшированныеЗначения, Коллекция);
```
</details>

## ОбработатьТЧ
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Выполняет обработку всей коллекции в соответствии с операциями, перечисленными в структуре действий.
// При выполнении метода происходит предварительное получение данных, необходимых для обработки одним запросом.
//
// Параметры:
//	ТабличнаяЧасть - см. ОбработатьСтрокуТЧВЦикле.КоллекцияСтрок.
//	СтруктураДействий - см. ОбработатьСтрокуТЧВЦикле.Действия.
//	КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения.
//
Процедура ОбработатьТЧ(ТабличнаяЧасть, СтруктураДействий, КэшированныеЗначения = Неопределено) Экспорт
```

Пример вызова
```bsl
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ТабличнаяЧасть, СтруктураДействий, КэшированныеЗначения);
```
</details>

## ДобавитьИсточникДанных
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Добавляет описание текста запросов для получения всех необходимых данных, нужных для обработки строк табличной части.
//
// Параметры:
//	ОписаниеЗапроса - см. ОписаниеЗапроса
//	КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения.
//
Процедура ДобавитьИсточникДанных(ОписаниеЗапроса, КэшированныеЗначения) Экспорт
```

Пример вызова
```bsl
ПакетнаяОбработкаТабличнойЧастиСервер.ДобавитьИсточникДанных(ОписаниеЗапроса, КэшированныеЗначения) 
```
</details>

## ЕстьКолонкаВИсточникеДанных
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Проверяет наличие колонки в обрабатываемой коллекции.
//
// Параметры:
//	ИмяКолонки - Строка - Имя колонки, наличие которой требуется проверить.
//	КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения
//
// Возвращаемое значение:
//  Булево - Признак наличия колонки в обрабатываемой коллекции.
//
Функция ЕстьКолонкаВИсточникеДанных(ИмяКолонки, КэшированныеЗначения) Экспорт
```

Пример вызова
```bsl
Результат = ПакетнаяОбработкаТабличнойЧастиСервер.ЕстьКолонкаВИсточникеДанных(ИмяКолонки, КэшированныеЗначения) 
```
</details>

## ТипКолонкиВИсточникеДанных
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Возвращает тип колонки в обрабатываемой коллекции.
//
// Параметры:
//	ИмяКолонки - Строка - Имя колонки, которая будет добавлена в временную таблицу, построенную на основании всей коллекции.
//	ОписаниеЗапроса - см. ОписаниеЗапроса
//
// Возвращаемое значение:
//  ОписаниеТипов - ОписаниеТипов - Тип колонки в обрабатываемой коллекции.
//
Функция ТипКолонкиВИсточникеДанных(ИмяКолонки, ОписаниеЗапроса) Экспорт
```

Пример вызова
```bsl
Результат = ПакетнаяОбработкаТабличнойЧастиСервер.ТипКолонкиВИсточникеДанных(ИмяКолонки, ОписаниеЗапроса) 
```
</details>

## ОписаниеЗапроса
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Возвращает описание запроса, необходимое для получения необходимых данных для обработки строк коллекции.
//
// Возвращаемое значение:
//	Структура:
//		* ТекстыЗапросов - СписокЗначений из Строка - Тексты запросов, результат выполнения которых вернет
//				все необходимые данные для обработки строк. В значении следует поместить текст запроса.
//				В представлении наименование запроса, его следует передавать в параметр ИмяИсточника при использовании
//				метода ДанныеДляОбработкиСтроки.
//		* ПараметрыЗапроса - Структура - Параметры пакета запросов. В ключах структуры содержатся имена параметров,
//				которое используется в запросе, в значениях значения параметров, передаваемых в запрос.
//					* ИсточникДанных - ТаблицаЗначений - Обрабатываемая коллекция, преобразованная в таблицу значений.
//		* ДопКолонки       - Структура - Описание дополнительных колонок.
//		* ПривилегированныйРежим - Булево - Признак необходимости установки привилегированного режима перед выполнением запроса.
//
Функция ОписаниеЗапроса() Экспорт
```

Пример вызова
```bsl
Результат = ПакетнаяОбработкаТабличнойЧастиСервер.ОписаниеЗапроса() 
```
</details>

## ДанныеДляОбработкиСтроки
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Возвращает данные, необходимые для обработки текущей строки табличной части.
//
// Параметры:
//	ИмяИсточника - Строка - Имя таблицы в запросе, которая описана в методе ДополнитьТекстыЗапросовИсточниковДанных
//	КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения.
//
// Возвращаемое значение:
//	ТаблицаЗначений, Неопределено - Результат запроса с отбором по имени запроса и текущей обрабатываемой строке:
//
Функция ДанныеДляОбработкиСтроки(ИмяИсточника, КэшированныеЗначения) Экспорт
```

Пример вызова
```bsl
Результат = ПакетнаяОбработкаТабличнойЧастиСервер.ДанныеДляОбработкиСтроки(ИмяИсточника, КэшированныеЗначения) 
```
</details>

## ТребуетсяВыполнитьДействие
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Проверяет необходимость выполнения действия со строкой, исходя из наличия действия в структуре действий и зависимости
// обработчиков. Устанавливает значения переданных параметров из действия в переменную Параметр.
//
// Параметры:
//  ИмяДействия - Строка - Имя действия, которое требуется выполнить над строкой, например "ЗаполнитьСтавкуНДС".
//  СтруктураДействий - см. ОбработатьСтрокуТЧВЦикле.Действия.
//  КэшированныеЗначения - см. ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения.
//  Параметры - Произвольный - Дополнительные параметры, необходимые для обработки строки текущим действием.
//
// Возвращаемое значение:
//  Булево - Признак необходимости выполнения действия.
//
Функция ТребуетсяВыполнитьДействие(ИмяДействия, СтруктураДействий, КэшированныеЗначения, Параметры = Неопределено) Экспорт
```

Пример вызова
```bsl
Результат = ПакетнаяОбработкаТабличнойЧастиСервер.ТребуетсяВыполнитьДействие(ИмяДействия, СтруктураДействий, КэшированныеЗначения, Параметры);
```
</details>

## ДополнитьКолонкиИсточникаДанных
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Описание дополнительных колонок, которые будут заполнены программно. Данные в колонках требуется для более удобной
// обработки строк, нежели переноса логики на сторону СУБД.
//
// Параметры:
//  ОписаниеЗапроса - см. ОписаниеЗапроса
//  ИмяКолонки - Строка - Имя колонки, которую требуется добавить в временную таблицу с обрабатываемой коллекцией.
//  ОписаниеТипа - ОписаниеТипов - Тип добавляемой колонки.
//
Процедура ДополнитьКолонкиИсточникаДанных(ОписаниеЗапроса, ИмяКолонки, ОписаниеТипа) Экспорт
```

Пример вызова
```bsl
ПакетнаяОбработкаТабличнойЧастиСервер.ДополнитьКолонкиИсточникаДанных(ОписаниеЗапроса, ИмяКолонки, ОписаниеТипа) 
```
</details>

---

© 2024, **ООО 1С-Софт**  
Все права защищены. Эта программа и сопроводительные материалы предоставляются  
в соответствии с условиями лицензии [Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode).

---
