Внешняя обработка. Свертка строк табличной части.

1. user618695_ka 24.05.17 17:47 Сейчас в теме
Не соображу, как во внешней обработке организовать свертку строк табличной части в документе инвентаризации в БП 3.0..

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПОбъект) Экспорт
	
	ТЗ = ВладелецФормы.Объект.Товары;
	ПеречитатьТаблЧастьНаСервере(ТЗ);
	
КонецПроцедуры

&НаСервере
Процедура ПеречитатьТаблЧастьНаСервере(ТЗ)
	
	ТЗ.Выгрузить();
	ТЗ.Свернуть("ТоварыНоменклатураАртикул, ТоварыНоменклатура", "Количество, Сумма, Всего"); 
	ВладелецФормы.Объект.Товары.Загрузить(ТЗ);
	
КонецПроцедуры
Показать


Запутался совсем в "НаСервере/НаКлиенте", то там ругается, то тут..
Прикрепленные файлы:
РАНЖ_инвентаризация_удаление_строк_3.epf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. user618695_ka 24.05.17 22:18 Сейчас в теме +0.55 $m
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПОбъект) Экспорт
	
	Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл
	
		СтруктураДляПоиска = Новый Структура;
		
		СтруктураДляПоиска.Вставить("Номенклатура", ТекущаяСтрока.Номенклатура);
		СтруктураДляПоиска.Вставить("Артикул", ТекущаяСтрока.Артикул);
		
		
	    МассивСтрок = ВладелецФормы.Объект.Товары.НайтиСтроки(СтруктураДляПоиска); 
		
		Количество = 0;
		ПерваяСтрока = Истина;
		
	    Для каждого Строка Из МассивСтрок Цикл 
			
			Количество = Количество + Строка.Количество;
			
			Если Не ПерваяСтрока Тогда
				
				ВладелецФормы.Объект.Товары.Удалить(Строка);
				Сообщить("Сгруппирована номенклатура " + ТекущаяСтрока.Номенклатура);
				
			КонецЕсли;
			
			ПерваяСтрока = Ложь;
			
		КонецЦикла;
		
		ТекущаяСтрока.Количество = Количество;
		
	КонецЦикла;
		
КонецПроцедуры
Показать


Всё оказалось куда проще.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. fromtomike 48 24.05.17 19:24 Сейчас в теме
1. Таблицу значений с клиента на сервер гнать нельзя
Она вообще на клиенте не существует (только как реквизит т.е. данные формы)
Нужно использовать: ДанныеФормыВЗначение, РеквизитФормыВЗначение, КопироватьДанныеФормы и обратные к ним

2. Не совсем понятно почему в дополнительной обработке использовано использование "ВызовКлиентскогоМетода"
	ДобавитьКоманду(ТаблицаКоманд, "Удалить строки", "Удалить строки", "ВызовКлиентскогоМетода", Истина);	

Здесь вроде бы форму обработки открывать не нужно, наверное можно использовать вызов серверного. Иначе в комеаде нужно Использование = "ОткрытиеФормы"
3. user618695_ka 24.05.17 22:18 Сейчас в теме +0.55 $m
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПОбъект) Экспорт
	
	Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл
	
		СтруктураДляПоиска = Новый Структура;
		
		СтруктураДляПоиска.Вставить("Номенклатура", ТекущаяСтрока.Номенклатура);
		СтруктураДляПоиска.Вставить("Артикул", ТекущаяСтрока.Артикул);
		
		
	    МассивСтрок = ВладелецФормы.Объект.Товары.НайтиСтроки(СтруктураДляПоиска); 
		
		Количество = 0;
		ПерваяСтрока = Истина;
		
	    Для каждого Строка Из МассивСтрок Цикл 
			
			Количество = Количество + Строка.Количество;
			
			Если Не ПерваяСтрока Тогда
				
				ВладелецФормы.Объект.Товары.Удалить(Строка);
				Сообщить("Сгруппирована номенклатура " + ТекущаяСтрока.Номенклатура);
				
			КонецЕсли;
			
			ПерваяСтрока = Ложь;
			
		КонецЦикла;
		
		ТекущаяСтрока.Количество = Количество;
		
	КонецЦикла;
		
КонецПроцедуры
Показать


Всё оказалось куда проще.
4. Rain88 373 25.05.17 08:38 Сейчас в теме
(3) Еще можно было сделать так:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПОбъект) Экспорт

	ЗаполнитьДанными(ПОбъект[0]);
	
	ОбъектСсылка = ВыполнитьКомандуНаСервере();
	
	ПараметрыДок = Новый Структура("Ключ",ОбъектСсылка);
	ФормаДок = ПолучитьФорму("Документ.НужныйНамДокумент.Форма.ФормаДокумента",ПараметрыДок);
	ФормаДок.Прочитать(); //Возможно, что обновить данные на форме можно каким-то другим способом, но я его не знаю)

КонецПроцедуры


Процедура ЗаполнитьДанными(ОбъектНазначения)
	НашДокумент = ОбъектНазначения; //НашДокумент - реквизит на форме
КонецПроцедуры

Процедура ВыполнитьКомандуНаСервере()
    НашДокументОбъект = НашДокумент.ПолучитьОбъект();
    ТЗ = НашДокументОбъект .Товары.Выгрузить();
    ТЗ.Свернуть("ТоварыНоменклатураАртикул, ТоварыНоменклатура", "Количество, Сумма, Всего"); 
    НашДокументОбъект.Товары.Загрузить(ТЗ);
    Возврат НашДокументОбъект.Ссылка;
КонецПроцедуры
Показать


А вообще в данном случае лучше было использовать ВызовСерверногоМетода, если конечно вы не захотите добавить, например, вопрос пользователю.
user618695_ka; +1 Ответить
Оставьте свое сообщение

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