Обход элементов формы табличной части УФ

1. PhilippR 12 01.07.20 14:19 Сейчас в теме
Здравствуйте. Хочу вызвать процедуру "ПриИзмененииНоменклатуры()" для каждой строки табличной части документа. В этой процедуре используется "текущие данные". Как в цикле обойти табличную часть чтобы получить "текущие данные" для каждой строки?
По теме из базы знаний
Найденные решения
12. user5300 1043 01.07.20 15:26 Сейчас в теме
(10)
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)

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


&НаКлиенте
Процедура ОбновитьЦеныНажатие()
   Для каждого СТР из Объект.Товары цикл
        ОбновитьЦены(СТР);
    КонецЦикла;
    
Конецпроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
18. Satoshi_Nakamoto 20.10.21 15:00 Сейчас в теме
(1)У тебя получилось решить проблему?
19. PhilippR 12 20.10.21 15:44 Сейчас в теме
(18) Насколько помню сделал как подсказали в (12) комментарии, то есть обход табличной части объекта без получения формы и вызвал все процедуры из обработчика "ПриИзмененииНоменклатуры()" для каждой строки табличной части.
2. user5300 1043 01.07.20 14:22 Сейчас в теме
3. user5300 1043 01.07.20 14:26 Сейчас в теме
Для каждого стр из ТабличнаяЧасть цикл
    //стр - твои текущие данные ))
КонецЦикла
EvgeniyOlxovskiy; +1 Ответить
4. PhilippR 12 01.07.20 14:59 Сейчас в теме
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)

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

вызываю стандартную процедуру и нужно чтобы процедура отработала для каждой строки
5. user5300 1043 01.07.20 15:00 Сейчас в теме
(4) опиши конкретно что хочешь сделать ,
изменить номенклатуру и данные в каждой строке ?
7. PhilippR 12 01.07.20 15:06 Сейчас в теме
(5) хочу обновить цены в каждой строке, чтобы ничего не упустить хотел сделать через стандартную процедуру формы
то есть вызвать процедуру ТоварыНоменклатураПриИзменении(Элемент) для каждой строки
6. user5300 1043 01.07.20 15:02 Сейчас в теме
(4)
ТекущиеДанные
для чего текущие данные нужны ?
8. user5300 1043 01.07.20 15:11 Сейчас в теме
аааа понятно теперь, смотри
лучше добавить кнопку "Обновить цены" например и при нажатии такой код получится:
&НаКлиенте
Процедура ОбновитьЦеныНажатие(Команда)
    Для каждого строка из Объект.Товары цикл
        строка.Цена = ПолучитьЦену(строка.Номенклатура);
    КонецЦикла;
Конецпроцедуры

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


Правильно ?
9. PhilippR 12 01.07.20 15:16 Сейчас в теме
(8) неет)))
Нужно групповое обновление цен для нескольких документов.
Через Объект.Товары можно сделать, но тогда и сумму строки и общие итоги нужно пересчитать самому. Я хотел доверить это стандартной процедуре формы, а то мало ли пропущу какую то операцию (вдруг там что-то еще пересчитать нужно)
10. PhilippR 12 01.07.20 15:21 Сейчас в теме
(9) то есть новые цены у товаров установлены и при перевыборе номенклатуры они сами подставляются
11. user5300 1043 01.07.20 15:23 Сейчас в теме
(10) Так там же при перевыборе есть процедура которая делает пересчет, вот этот перерасчет и вставляешь в цикл
12. user5300 1043 01.07.20 15:26 Сейчас в теме
(10)
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)

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


&НаКлиенте
Процедура ОбновитьЦеныНажатие()
   Для каждого СТР из Объект.Товары цикл
        ОбновитьЦены(СТР);
    КонецЦикла;
    
Конецпроцедуры
Показать
13. PhilippR 12 01.07.20 15:39 Сейчас в теме
14. PhilippR 12 01.07.20 15:46 Сейчас в теме
(12) к стати ругается на обращение к общему модулю
	
Д = ДокРеализация.ПолучитьОбъект();
Ф = Д.ПолучитьФорму("ФормаДокументаТовары");
Для Каждого СтрТовары ИЗ Ф.Товары Цикл
		ПараметрыОбработки = РеализацияТоваровУслугФормыКлиент.ПодготовитьПараметрыОбработкиТоварыНоменклатураПриИзменении(
		Ф, СтрТовары);

Переменная не определена (РеализацияТоваровУслугФормыКлиент)
15. PhilippR 12 01.07.20 15:54 Сейчас в теме
(14) модуль оказывается доступен только на клиенте
16. user5300 1043 01.07.20 15:55 Сейчас в теме
(14) На клиенте надо выполнить перебор строк ))

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

Для Каждого СтрТовары ИЗ Ф.Товары Цикл
        ПараметрыОбработки = РеализацияТоваровУслугФормыКлиент.ПодготовитьПараметрыОбработкиТоварыНоменклатураПриИзменении(
        Ф, СтрТовары);
....
Показать
17. oleg-x 27 02.07.20 10:50 Сейчас в теме
Вам надо открыть процедуру при изменение нужного значения и посмотреть какие процедуры вызываются.
Далее добавить кнопку которая в цикле обойдет все строки табличной части.
Для каждого стр из Таблицы Цикл
    //стр это будут текущие данные
    //Нужно вставить код из стандартной процедуры, подменив текущие данные значением стр
КонецЦикла;
20. dvostrikov 11.08.23 11:15 Сейчас в теме
(1)
Для Каждого СтрокаТЗ Из Объект.Товары Цикл             
	Элементы.Товары.ТекущаяСтрока = СтрокаТЗ.ПолучитьИдентификатор();
    	ТоварыНоменклатураПриИзмененииНаКлиенте();
КонецЦикла;
Matveev_VS; AnPet; +2 Ответить
21. prog2019 48 16.06.24 15:57 Сейчас в теме
(20) Непонятно, как этот пример работает без элемента - параметра процедуры?
У меня выдаёт ошибку, что у процедуры не заполнен параметр.
У меня работает такой вариант:
	Для каждого ТекСтр Из Объект.Товары Цикл
		Элементы.Товары.ТекущаяСтрока = ТекСтр.ПолучитьИдентификатор();
		ТоварыНоменклатураПриИзменении(Элементы.Товары.ПодчиненныеЭлементы.ТоварыНоменклатура);
		ТоварыКоличествоУпаковокПриИзменении(Элементы.Товары.ПодчиненныеЭлементы.ТоварыКоличествоУпаковок);
	КонецЦикла;
	Элементы.Товары.Обновить();
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот