Процедуры для работы с ключами связи табличных частей
//Shid
// Процедура добавляет ключ связи в табличную часть.
//
// Параметры:
// ФормаДокумента - Управляемая Форма, содержит форму документа, реквизиты
// которой обрабатываются процедурой
//
Процедура ДобавитьКлючСвязиВСтрокуТабличнойЧасти(ФормаДокумента) Экспорт
СтрокаТабличнойЧасти = ФормаДокумента.Элементы[ФормаДокумента.ИмяТабличнойЧасти].ТекущиеДанные;
СтрокаТабличнойЧасти.КлючСвязи = СоздатьНовыйКлючСвязи(ФормаДокумента);
КонецПроцедуры // ДобавитьКлючСвязиВСтрокуТабличнойЧасти()
// Процедура добавляет ключ связи в подчиненную табличную часть.
//
// Параметры:
// ФормаДокумента - Управляемая Форма, содержит форму документа, реквизиты
// которой обрабатываются процедурой
// ИмяПодчиненнойТабличнойЧасти - Строка, содержащая имя подчиненной табличной
// части.
//
Процедура ДобавитьКлючСвязиВСтрокуПодчиненнойТабличнойЧасти(ФормаДокумента, ИмяПодчиненнойТабличнойЧасти) Экспорт
ПодчиненнаяТабличнаяЧасть = ФормаДокумента.Элементы[ИмяПодчиненнойТабличнойЧасти];
СтрокаПодчиненнойТабличнойЧасти = ПодчиненнаяТабличнаяЧасть.ТекущиеДанные;
СтрокаПодчиненнойТабличнойЧасти.КлючСвязи = ПодчиненнаяТабличнаяЧасть.ОтборСтрок["КлючСвязи"];
СтрОтбора = Новый ФиксированнаяСтруктура("КлючСвязи", ПодчиненнаяТабличнаяЧасть.ОтборСтрок["КлючСвязи"]);
ФормаДокумента.Элементы[ИмяПодчиненнойТабличнойЧасти].ОтборСтрок = СтрОтбора;
КонецПроцедуры // ДобавитьКлючСвязиВСтрокуПодчиненнойТабличнойЧасти()
// Функция запрещает добавление новой строки, если не выбрана строка в основной табличной части.
//
// Параметры:
// ФормаДокумента - УправляемаяФорма, содержит форму документа, реквизиты
// которой обрабатываются процедурой
// ИмяПодчиненнойТабличнойЧасти - Строка, содержащая имя подчиненной табличной
// части.
//
// Возвращаемое значение:
// признак.
Функция ПередНачаломДобавленияВПодчиненнуюТабличнуюЧасть(ФормаДокумента, ИмяПодчиненнойТабличнойЧасти) Экспорт
Если ФормаДокумента.Элементы[ФормаДокумента.ИмяТабличнойЧасти].ТекущиеДанные = Неопределено Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru = 'Не выбрана строка основной табличной части!'");
Сообщение.Сообщить();
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // ПередНачаломДобавленияВПодчиненнуюТабличнуюЧасть()
// Процедура удаляет строки из подчиненной табличной части.
//
// Параметры:
// ФормаДокумента - УправляемаяФорма, содержит форму документа, реквизиты
// которой обрабатываются процедурой
// ИмяПодчиненнойТабличнойЧасти - Строка, содержащая имя подчиненной табличной
// части.
//
Процедура УдалитьСтрокиПодчиненнойТабличнойЧасти(ФормаДокумента, ИмяПодчиненнойТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти = ФормаДокумента.Элементы[ФормаДокумента.ИмяТабличнойЧасти].ТекущиеДанные;
ПодчиненнаяТабличнаяЧасть = ФормаДокумента.Объект[ИмяПодчиненнойТабличнойЧасти];
РезультатПоиска = ПодчиненнаяТабличнаяЧасть.НайтиСтроки(Новый Структура("КлючСвязи", СтрокаТабличнойЧасти.КлючСвязи));
Для каждого СтрокаПоиска Из РезультатПоиска Цикл
ИндексУдаления = ПодчиненнаяТабличнаяЧасть.Индекс(СтрокаПоиска);
ПодчиненнаяТабличнаяЧасть.Удалить(ИндексУдаления);
КонецЦикла;
КонецПроцедуры // УдалитьСтрокиПодчиненнойТабличнойЧасти()
// Процедура удаляет строки из подчиненной табличной части.
//
// Параметры:
// ФормаДокумента - УправляемаяФорма, содержит форму документа, реквизиты
// которой обрабатываются процедурой
// ИмяПодчиненнойТабличнойЧасти - Строка, содержащая имя подчиненной табличной
// части.
//
Процедура УдалитьСтрокиПодчиненнойТабличнойЧастиБезРодителя(ФормаДокумента, ИмяПодчиненнойТабличнойЧасти) Экспорт
ПодчиненнаяТабличнаяЧасть = ФормаДокумента.Объект[ИмяПодчиненнойТабличнойЧасти];
Для каждого СтрокаТабличнойЧасти Из ПодчиненнаяТабличнаяЧасть Цикл
РезультатПоиска = ФормаДокумента.Объект[ФормаДокумента.ИмяТабличнойЧасти].НайтиСтроки(Новый Структура("КлючСвязи", СтрокаТабличнойЧасти.КлючСвязи));
Если РезультатПоиска.Количество() = 0 Тогда
ИндексУдаления = ПодчиненнаяТабличнаяЧасть.Индекс(СтрокаТабличнойЧасти);
ПодчиненнаяТабличнаяЧасть.Удалить(ИндексУдаления);
КонецЕсли;
КонецЦикла;
//
КонецПроцедуры // УдалитьСтрокиПодчиненнойТабличнойЧасти()
// Процедура создает новый ключ связи для таблиц.
//
// Параметры:
// ФормаДокумента - УправляемаяФорма, содержит форму документа, реквизиты
// которой обрабатываются процедурой.
//
// Возвращаемое значение:
// Новый Ключ Связи.
//
Функция СоздатьНовыйКлючСвязи(ФормаДокумента) Экспорт
СписокЗначений = Новый СписокЗначений;
ТабличнаяЧасть = ФормаДокумента.Объект[ФормаДокумента.ИмяТабличнойЧасти];
Для каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
СписокЗначений.Добавить(СтрокаТЧ.КлючСвязи);
КонецЦикла;
Если СписокЗначений.Количество() = 0 Тогда
КлючСвязи = 1;
Иначе
СписокЗначений.СортироватьПоЗначению();
КлючСвязи = СписокЗначений.Получить(СписокЗначений.Количество() - 1).Значение + 1;
КонецЕсли;
Возврат КлючСвязи;
КонецФункции // СоздатьНовыйКлючСвязи()
// Процедура устанавливает отбор на подчиненную табличную часть.
//
// Параметры:
// ФормаДокумента - УправляемаяФорма, содержит форму документа, реквизиты
// которой обрабатываются процедурой
// ИмяПодчиненнойТабличнойЧасти - Строка, содержащая имя подчиненной табличной
// части.
//
Процедура УстановитьОтборНаПодчиненнуюТабличнуюЧасть(ФормаДокумента, ИмяПодчиненнойТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти = ФормаДокумента.Элементы[ФормаДокумента.ИмяТабличнойЧасти].ТекущиеДанные;
Если СтрокаТабличнойЧасти = Неопределено Тогда
Возврат;
КонецЕсли;
СтрОтбора = Новый ФиксированнаяСтруктура("КлючСвязи",
ФормаДокумента.Элементы[ФормаДокумента.ИмяТабличнойЧасти].ТекущиеДанные.КлючСвязи);
ФормаДокумента.Элементы[ИмяПодчиненнойТабличнойЧасти].ОтборСтрок = СтрОтбора;
КонецПроцедуры //УстановитьОтборНаПодчиненнуюТабличнуюЧасть()
//Shi e