Здравствуйте. Хочу вызвать процедуру "ПриИзмененииНоменклатуры()" для каждой строки табличной части документа. В этой процедуре используется "текущие данные". Как в цикле обойти табличную часть чтобы получить "текущие данные" для каждой строки?
---
```1c
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)

    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    ///Вот то что тут есть, переносишь в перебор, но вместо "ТекущиеДанные " используй "СТР"

    &НаКлиенте
    Процедура ОбновитьЦеныНажатие()
    Для каждого СТР из Объект.Товары цикл
    ОбновитьЦены(СТР);
    КонецЦикла;

    Конецпроцедуры
```
---
У тебя получилось решить проблему?
---
Насколько помню сделал как подсказали в (12) комментарии, то есть обход табличной части объекта без получения формы и вызвал все процедуры из обработчика "ПриИзмененииНоменклатуры()" для каждой строки табличной части.
---
Еще раз, по подробнее
---
```1c
    Для каждого стр из ТабличнаяЧасть цикл
    //стр - твои текущие данные ))
    КонецЦикла
```
---
```1c
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)

    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    ...
```

вызываю стандартную процедуру и нужно чтобы процедура отработала для каждой строки
---
опиши конкретно что хочешь сделать ,
изменить номенклатуру и данные в каждой строке ?
---
хочу обновить цены в каждой строке, чтобы ничего не упустить хотел сделать через стандартную процедуру формы
то есть вызвать процедуру ТоварыНоменклатураПриИзменении(Элемент) для каждой строки
---
ТекущиеДанные для чего текущие данные нужны ?
---
аааа понятно теперь, смотри
лучше добавить кнопку "Обновить цены" например и при нажатии такой код получится:

```1c
    &НаКлиенте
    Процедура ОбновитьЦеныНажатие(Команда)
    Для каждого строка из Объект.Товары цикл
    строка.Цена = ПолучитьЦену(строка.Номенклатура);
    КонецЦикла;
    Конецпроцедуры

    &НаСервере
    Функция ПолучитьЦену(Номенклатура)
    .....//Тут получаешь цену
    Возврат цена;
    КонецФункции
```

Правильно ?
---
неет)))
Нужно групповое обновление цен для нескольких документов.
Через Объект.Товары можно сделать, но тогда и сумму строки и общие итоги нужно пересчитать самому. Я хотел доверить это стандартной процедуре формы, а то мало ли пропущу какую то операцию (вдруг там что-то еще пересчитать нужно)
---
то есть новые цены у товаров установлены и при перевыборе номенклатуры они сами подставляются
---
Так там же при перевыборе есть процедура которая делает пересчет, вот этот перерасчет и вставляешь в цикл
---
```1c
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)

    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    ///Вот то что тут есть, переносишь в перебор, но вместо "ТекущиеДанные " используй "СТР"

    &НаКлиенте
    Процедура ОбновитьЦеныНажатие()
    Для каждого СТР из Объект.Товары цикл
    ОбновитьЦены(СТР);
    КонецЦикла;

    Конецпроцедуры
```
---
Спасибо, попробую)
---
к стати ругается на обращение к общему модулю

```1c
    Д = ДокРеализация.ПолучитьОбъект();
    Ф = Д.ПолучитьФорму("ФормаДокументаТовары");
    Для Каждого СтрТовары ИЗ Ф.Товары Цикл
    ПараметрыОбработки = РеализацияТоваровУслугФормыКлиент.ПодготовитьПараметрыОбработкиТоварыНоменклатураПриИзменении(
    Ф, СтрТовары);
```

Переменная не определена (РеализацияТоваровУслугФормыКлиент)
---
модуль оказывается доступен только на клиенте
---
На клиенте надо выполнить перебор строк ))

```1c
    &НаКлиенте
    Процедура
    .....
    Ф = ПолучитьФорму("ФормаДокументаТовары", новый структура("Ключ",ДокРеализацияСсылка));

    Для Каждого СтрТовары ИЗ Ф.Товары Цикл
    ПараметрыОбработки = РеализацияТоваровУслугФормыКлиент.ПодготовитьПараметрыОбработкиТоварыНоменклатураПриИзменении(
    Ф, СтрТовары);
    ....
```
---
Вам надо открыть процедуру при изменение нужного значения и посмотреть какие процедуры вызываются.
Далее добавить кнопку которая в цикле обойдет все строки табличной части.

```1c
    Для каждого стр из Таблицы Цикл
    //стр это будут текущие данные
    //Нужно вставить код из стандартной процедуры, подменив текущие данные значением стр
    КонецЦикла;
```
---
```1c
    Для Каждого СтрокаТЗ Из Объект.Товары Цикл
    Элементы.Товары.ТекущаяСтрока = СтрокаТЗ.ПолучитьИдентификатор();
    ТоварыНоменклатураПриИзмененииНаКлиенте();
    КонецЦикла;
```
---
Непонятно, как этот пример работает без элемента - параметра процедуры?
У меня выдаёт ошибку, что у процедуры не заполнен параметр.
У меня работает такой вариант:

```1c
    Для каждого ТекСтр Из Объект.Товары Цикл
    Элементы.Товары.ТекущаяСтрока = ТекСтр.ПолучитьИдентификатор();
    ТоварыНоменклатураПриИзменении(Элементы.Товары.ПодчиненныеЭлементы.ТоварыНоменклатура);
    ТоварыКоличествоУпаковокПриИзменении(Элементы.Товары.ПодчиненныеЭлементы.ТоварыКоличествоУпаковок);
    КонецЦикла;
    Элементы.Товары.Обновить();
```
---
без элемента - параметра процедуры
в вызываемой процедуре ПриИзменении этот параметр зачастую не используется, поэтому можно передать в качестве параметра Неопределено. У меня так сработало.