Модуль формы документа:

#Область КлючСвязиСтрок

&НаКлиенте
Процедура СоставПриИзменении(Элемент)
	УстановитьКлючиСтрокНоменклатура();
	УстановитьКлючиСтрокСостав();
КонецПроцедуры

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

&НаКлиенте
Процедура УстановитьВидимостьСтрок()
	СоставИндексСтроки = Объект.Номенклатура.Индекс(Элементы.Номенклатура.ТекущиеДанные);
	Если СоставИндексСтроки >= 0 Тогда
		ВыделеннаяСтрока = Объект.Номенклатура.Получить(СоставИндексСтроки);
		КлючСтроки = ВыделеннаяСтрока.КлючСтроки;
		
		СтруктураПоиска = Новый Структура;
		СтруктураПоиска.Вставить("КлючСтроки", КлючСтроки);
		Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура(СтруктураПоиска);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура УстановитьКлючиСтрокСостав()
	
	ИндексСтрокиСостав = Объект.Номенклатура.Индекс(Элементы.Номенклатура.ТекущиеДанные);
	ВыделеннаяСтрока = Объект.Номенклатура.Получить(ИндексСтрокиСостав);
	КлючСтроки = ВыделеннаяСтрока.КлючСтроки;
	
	Для каждого Стр Из Объект.Состав Цикл
		Если Не ЗначениеЗаполнено(Стр.КлючСтроки) Тогда
			Стр.КлючСтроки = КлючСтроки;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура НоменклатураПриАктивизацииСтроки(Элемент)
	УстановитьВидимостьСтрок();
КонецПроцедуры

&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
	УстановитьВидимостьСтрок();
КонецПроцедуры

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

&НаКлиенте
Процедура НоменклатураПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	Если НоваяСтрока Тогда
		Объект.Номенклатура[Объект.Номенклатура.Количество()-1].КлючСтроки = ПолучитьМаксимальныйКлючСтроки() + 1;
	КонецЕсли;
	УстановитьВидимостьСтрок();
КонецПроцедуры

&НаКлиенте
Функция ПолучитьМаксимальныйКлючСтроки()
	МаксимальныйКлючСтроки = 1;
	Для каждого Стр Из Объект.Номенклатура Цикл
		Попытка
			МаксимальныйКлючСтроки = Макс(МаксимальныйКлючСтроки, Число(Стр.КлючСтроки));
		Исключение
			МаксимальныйКлючСтроки = МаксимальныйКлючСтроки;
		КонецПопытки;
	КонецЦикла;
	Возврат МаксимальныйКлючСтроки;
КонецФункции

&НаКлиенте
Процедура СоставПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	Попытка
		ИндексСтрокиСостав = Объект.Номенклатура.Индекс(Элементы.Номенклатура.ТекущиеДанные);
		ВыделеннаяСтрока = Объект.Номенклатура.Получить(ИндексСтрокиСостав);
	Исключение
		Сообщить("Сначала выделите строку из табличной части ""Номенклатура""");
		Отказ = Истина;
	КонецПопытки;
КонецПроцедуры

#КонецОбласти