#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не Параметры.Свойство("ОбъектДляСопоставления") Тогда
ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ОбъектДляСопоставления = Параметры.ОбъектДляСопоставления;
Элементы.ОбъектДляСопоставления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Объект в ""%1""'"), Параметры.Программа1);
Элементы.Шапка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Объект в ""%1""'"), Параметры.Программа2);
ПостроитьТаблицуВыбора(Параметры.МаксимальноеКоличествоПользовательскихПолей, Параметры.СписокИспользуемыхПолей,
Параметры.АдресВременногоХранилища);
УстановитьКурсорТаблицыВыбора(Параметры.НомерПоПорядкуСтрокиНачала);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаВыбора
&НаКлиенте
Процедура ТаблицаВыбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПроизвестиВыбор(ВыбраннаяСтрока);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Выбрать(Команда)
ПроизвестиВыбор(Элементы.ТаблицаВыбора.ТекущаяСтрока);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПроизвестиВыбор(Знач ИдентификаторСтрокиВыбора)
Если ИдентификаторСтрокиВыбора=Неопределено Тогда
Возврат;
КонецЕсли;
ДанныеВыбора = ТаблицаВыбора.НайтиПоИдентификатору(ИдентификаторСтрокиВыбора);
Если ДанныеВыбора<>Неопределено Тогда
ОповеститьОВыборе(ДанныеВыбора.НомерПоПорядку);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПостроитьТаблицуВыбора(Знач ВсегоПолей, Знач ИспользуемыеПоля, Знач АдресДанных)
Добавляемые = Новый Массив;
ТипСтрока = Новый ОписаниеТипов("Строка");
Для НомерПоля=1 По ВсегоПолей Цикл
Добавляемые.Добавить(Новый РеквизитФормы("ПолеСортировки" + Формат(НомерПоля, "ЧН=; ЧГ="), ТипСтрока, "ТаблицаВыбора"));
КонецЦикла;
ИзменитьРеквизиты(Добавляемые);
ГруппаКолонок = Элементы.ГруппировкаПолей;
ТипЭлемента = Тип("ПолеФормы");
РазмерСписка = ИспользуемыеПоля.Количество() - 1;
Для НомерПоля=0 По ВсегоПолей-1 Цикл
Реквизит = Добавляемые[НомерПоля];
НоваяКолонка = Элементы.Добавить("ТаблицаВыбора" + Реквизит.Имя, ТипЭлемента, ГруппаКолонок);
НоваяКолонка.ПутьКДанным = Реквизит.Путь + "." + Реквизит.Имя;
Если НомерПоля<=РазмерСписка Тогда
Поле = ИспользуемыеПоля[НомерПоля];
НоваяКолонка.Видимость = Поле.Пометка;
НоваяКолонка.Заголовок = Поле.Представление;
Иначе
НоваяКолонка.Видимость = Ложь;
КонецЕсли;
КонецЦикла;
Если Не ПустаяСтрока(АдресДанных) Тогда
ТаблицаВыбора.Загрузить( ПолучитьИзВременногоХранилища(АдресДанных) );
УдалитьИзВременногоХранилища(АдресДанных);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьКурсорТаблицыВыбора(Знач НомерПоПорядкуСтрокиНачала)
Для Каждого Строка Из ТаблицаВыбора Цикл
Если Строка.НомерПоПорядку=НомерПоПорядкуСтрокиНачала Тогда
Элементы.ТаблицаВыбора.ТекущаяСтрока = Строка.ПолучитьИдентификатор();
Прервать;
ИначеЕсли Строка.НомерПоПорядку>НомерПоПорядкуСтрокиНачала Тогда
ИндексПредыдущей = ТаблицаВыбора.Индекс(Строка) - 1;
Если ИндексПредыдущей>0 Тогда
Элементы.ТаблицаВыбора.ТекущаяСтрока = ТаблицаВыбора[ИндексПредыдущей].ПолучитьИдентификатор();
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти