Изменить текущую строку на Управляемой форме

Часто после каких либо манипуляций на форме, или же на сервере, требуется передать измененное состояние на клиент. В одной из предыдущих своих статей  я уже писал, про то  как можно воспользовавшись методами РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() изменять данные на сервере и передавать измененное состояние  на клиент.


Случаются также ситуации, когда нужно изменить данные текущей строки на форме. Табличная часть на форме  имеет тип ДанныеФормыКоллекция, соответственно вся задача сводится, к тому, что бы получить по уникальному идентификатору, ЭлементДанныеФормыКоллеция и изменить непосредственно его значение на клиенте. Для того чтоб найти нужную строку нужно к искомой таблице применить метод НайтиСтроки().  Далее у найденной  строки получаем Идентификатор. И при помощи идентификатора непосредственно получаем ТекущуюСтроку.

Код довольно таки простой. Оставлю его здесь, для понимания. Я использовал изменение количества товара на +1, если такой товар уже есть в табличной части документа.

&Вместо("ВнешнееСобытие")
&НаКлиенте
Процедура Расш1_ВнешнееСобытие(Источник, Событие, Данные)
	
	Если ВводДоступен() Тогда
		Если Событие = "Штрихкод" И ЗначениеЗаполнено(Данные) Тогда
			СтруктураШК = ОбработатьДанныеПоШК(Данные);
			Если СтруктураШК.Свойство("ШтрихкодНеНайден") Тогда
				Сообщить("Штрихкод не присвоен ни одному товару");
			КонецЕсли;	
				
			Если СтруктураШК.Свойство("НетНаОстатке") Тогда
				Сообщить("Товара нет на остатке либо ему не назначена цена");
			КонецЕсли;
			
			Если СтруктураШК.Свойство("ТаблицаТоваров") Тогда
				ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.Расш1_ФормаВыбораПартии", СтруктураШК, ЭтаФорма);	
			КонецЕсли;	
			
			Если СтруктураШК.Свойство("ТолькоОдинТовар") Тогда
				
				ВыбранноеЗначение = СтруктураШК.ТолькоОдинТовар[0];
				//Сначала пробуем найти строку в таблице товаров
				ПараметрыОтбора = Новый Структура;
				ПараметрыОтбора.Вставить("Номенклатура", ВыбранноеЗначение[0]);
				ПараметрыОтбора.Вставить("Характеристика", ВыбранноеЗначение[1]);
				
				НайденнаяСтрока = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
				
				Если ЗначениеЗаполнено(НайденнаяСтрока) Тогда
					Идент = НайденнаяСтрока[0].ПолучитьИдентификатор();
					СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(Идент);
					СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1;
					СтрокаТЧ.КоличествоУпаковок = СтрокаТЧ.КоличествоУпаковок + 1;
					
					//Устанавливаем фокус на текущей строке
					Элементы.Товары.ТекущаяСтрока = Идент;
					ТекущийЭлемент = Элементы.ТоварыКоличествоУпаковок;
					
				Иначе	
					стр = Объект.Товары.Добавить();
					стр.Номенклатура = ВыбранноеЗначение[0];
					стр.Характеристика = ВыбранноеЗначение[1];
					стр.Упаковка = ПредопределенноеЗначение("Справочник.УпаковкиНоменклатуры.ПустаяСсылка");
					стр.Цена = ВыбранноеЗначение[3];
					Если ВыбранноеЗначение[3] > 0 Тогда
						стр.ЦенаРозничная = РассчитатьРозничнуюЦену(ВыбранноеЗначение[3]);
					КонецЕсли;
					стр.Количество = 1;
					стр.КоличествоУпаковок = 1;
					стр.Сумма = Стр.Цена;
					Идент = стр.ПолучитьИдентификатор();
					
					ЗаполнитьРозничныеЦеныДокумента();
					//Устанавливаем фокус на текущей строке
					Элементы.Товары.ТекущаяСтрока = Идент;
					ТекущийЭлемент = Элементы.ТоварыКоличествоУпаковок;
				КонецЕсли;	
			КонецЕсли;	
			
		Иначе	
			Сообщить("Неверные данные по штрихкоду");			
		КонецЕсли;	
		//ПодключаемоеОборудованиеРТКлиент.ВнешнееСобытиеОборудования(ЭтотОбъект, Источник, Событие, Данные);
	КонецЕсли;
	
КонецПроцедуры

Вам также может понравиться

Добавить комментарий

Ваш e-mail не будет опубликован.

Яндекс.Метрика