Перем РежимРедактора Экспорт;

////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

// Процедура выполняет установку реквизитов, связанных с источником данных
//
Процедура УстановитьИсточникВФорме()
	
	ОчиститьСопоставлениеКолонокБД();
	УстановитьИсточник();
	ЗагрузитьНастройкуПоУмолчанию();
	ОбновитьКолонкиТабличногоПоляТаблицыЗначений();
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура ЗагрузитьНастройкуПоУмолчанию()
	
	НастройкаПоУмолчанию = ПолучитьНастройкуПоУмолчанию(СписокСохраненныхНастроек);
	Если НастройкаПоУмолчанию <> Неопределено Тогда
		ЗагрузитьНастройкуВФорме(НастройкаПоУмолчанию);
	КонецЕсли;

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

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

// Процедура - обаботчик события "ОбновлениеОтображения" Формы
//
Процедура ОбновлениеОтображения()
	
	//ЭлементыФормы.СопоставлениеКолонокБД.Колонки.ПолеПоиска.Видимость = мЭтоСсылочныйОбъект;
	//ЭлементыФормы.СопоставлениеКолонокБД.Колонки.ПолеПоиска.ИзменятьВидимость = мЭтоСсылочныйОбъект;
	ДоступностьКнопкиВосстановитьЗначения = (СписокСохраненныхНастроек <> Неопределено) И СписокСохраненныхНастроек.Количество() <> 0;
	ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ВосстановитьЗначения.Доступность = ДоступностьКнопкиВосстановитьЗначения;
	ирОбщий.ОбновитьЗаголовкиСтраницПанелейЛкс(ЭтаФорма);
	
КонецПроцедуры

// Процедура - обаботчик события "ПриОткрытии" Формы
//
Процедура ПриОткрытии()
	
	Инициализация();
	Если Ложь
		Или ПараметрТабличныйДокумент <> Неопределено 
		Или ТаблицаЗначений.Колонки.Количество() <= 1
	Тогда
		ЭлементыФормы.ТабличныйДокумент.Очистить();
	КонецЕсли; 
	Если ПараметрТабличныйДокумент <> Неопределено Тогда
		ЭлементыФормы.ТабличныйДокумент.ВставитьОбласть(ПараметрТабличныйДокумент.Область());
	КонецЕсли;
	Если Истина
		И ТаблицаЗначений.Количество() > 0
		И ТабличныйДокумент.ВысотаТаблицы = 0
	Тогда
		ЭлементыФормы.Панель1.ТекущаяСтраница = ЭлементыФормы.Панель1.Страницы.ТаблицаЗначений;
	КонецЕсли;
	УстановитьИсточникВФорме();
	ОбновитьДоступность();
	Если Не РежимРедактора Тогда
		ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Удалить(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Применить);
	КонецЕсли; 
	
КонецПроцедуры

// Процедура - обаботчик события "ПриЗакрытии" Формы
//
Процедура ПриЗакрытии()
	
	СохранитьНастройкиФормы();
	
КонецПроцедуры

Процедура СохранитьНастройкиФормы()
	
	ирОбщий.СохранитьЗначениеЛкс("ирЗагрузкаТабличныхДанных." + ПолноеИмяТаблицы, СписокСохраненныхНастроек);

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

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

// Процедура - обаботчик события "Открытие" в: Поле выбора "ТипОбъекта"
//
Процедура ТипОбъектаОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ирОбщий.ОткрытьОбъектМетаданныхЛкс(ПолучитьМетаданныеИсточника());
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНДНЫХ ПАНЕЛЕЙ

// Процедура - обаботчик события, при нажатии на кнопку "Установить флажки" Командной панели "КоманднаяПанельСопоставлениеКолонокТЗ"
//
Процедура КоманднаяПанельЗагружаемыеРеквизитыУстановитьФлажки(Кнопка)
	
	ирОбщий.ИзменитьПометкиВыделенныхСтрокЛкс(ЭлементыФормы.СопоставлениеКолонокТЗ, , Истина);
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Снять флажки" Командной панели "КоманднаяПанельСопоставлениеКолонокТЗ"
//
Процедура КоманднаяПанельЗагружаемыеРеквизитыСнятьФлажки(Кнопка)
	
	ирОбщий.ИзменитьПометкиВыделенныхСтрокЛкс(ЭлементыФормы.СопоставлениеКолонокТЗ, , Ложь);
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
//

// Процедура - обаботчик события, при нажатии на кнопку "Контроль заполнения" Командной панели "КоманднаяПанельТабличногоДокумента"
//
Процедура КоманднаяПанельТабличногоДокументаКонтрольЗаполнения(Кнопка)
	
	//СформироватьСтруктуруКолонок();
	КонтрольЗаполнения();
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Обновить" Командной панели "КоманднаяПанельТабличногоДокумента"
//
Процедура КоманднаяПанельТабличногоДокументаОбновить(Кнопка)
	
	ОбновитьДанныеТабличногоДокумента();
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Предыдущее примечание" Командной панели "КоманднаяПанельТабличногоДокумента"
//
Процедура КоманднаяПанельТабличногоДокументаПредыдущееПримечание(Кнопка)
	
	ТабличныйДокумент = ЭлементыФормы.ТабличныйДокумент;
	
	Нашли = Ложь;
	
	Колонка = ТабличныйДокумент.ТекущаяОбласть.Лево - 1;
	Строка  = ТабличныйДокумент.ТекущаяОбласть.Верх;
	
	Пока Не Нашли и Строка > 0 Цикл
		
		Пока Не Нашли и Колонка > 0 Цикл
			
			Область = ТабличныйДокумент.Область(Строка, Колонка);
			Нашли = Не ПустаяСтрока(Область.Примечание.Текст);
			
			Колонка = Колонка - 1;
		КонецЦикла;
		Строка = Строка - 1;
		Колонка = ТабличныйДокумент.ШиринаТаблицы;
	КонецЦикла;
	
	Если Нашли Тогда
		ТабличныйДокумент.ТекущаяОбласть = Область;
	Иначе
		Предупреждение("Достигнуто начало документа");
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Следующее примечание" Командной панели "КоманднаяПанельТабличногоДокумента"
//
Процедура КоманднаяПанельТабличногоДокументаСледующееПримечание(Кнопка)
	
	ТабличныйДокумент = ЭлементыФормы.ТабличныйДокумент;
	Нашли = Ложь;
	Колонка = ТабличныйДокумент.ТекущаяОбласть.Лево + 1;
	Строка  = ТабличныйДокумент.ТекущаяОбласть.Верх;
	Пока Не Нашли и Строка <= ТабличныйДокумент.ВысотаТаблицы Цикл
		Пока Не Нашли и Колонка <=  ТабличныйДокумент.ШиринаТаблицы Цикл
			Область = ТабличныйДокумент.Область(Строка, Колонка);
			Нашли = Не ПустаяСтрока(Область.Примечание.Текст);
			Колонка = Колонка + 1;
		КонецЦикла;
		Строка = Строка + 1;
		Колонка = 1;
	КонецЦикла;
	Если Нашли Тогда
		ТабличныйДокумент.ТекущаяОбласть = Область;
	Иначе
		Предупреждение("Достигнут конец документа");
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Сохранить в файл..." Командной панели "КоманднаяПанельТабличногоДокумента"
//
Процедура КоманднаяПанельТабличногоДокументаСохранить(Кнопка)
	
	ирОбщий.СохранитьТабличныйДокументИнтерактивноЛкс(ЭлементыФормы.ТабличныйДокумент);
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Открыть файл..." Командной панели "КоманднаяПанельТабличногоДокумента"
//
Процедура КоманднаяПанельТабличногоДокументаОткрыть(Кнопка)
	
	Результат = ирОбщий.ЗагрузитьТабличныйДокументИнтерактивноЛкс(ЭлементыФормы.ТабличныйДокумент);
	Если Результат <> Неопределено Тогда
		ОбновитьФиксациюШапкиТабличногоДокумента();
	КонецЕсли; 
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
//

// Процедура - обаботчик события, при нажатии на кнопку "Выбрать значение" Командной панели "КоманднаяПанельВыбратьЗначение"
//
Процедура КоманднаяПанельВыбратьЗначениеВыбратьЗначение(Кнопка)
	
	ВыбратьЗначениеВЯчейке();
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
//

// Процедура - обаботчик события, при нажатии на кнопку "Сохранить настройки..." Командной панели "КоманднаяПанельСопоставлениеКолонокТЗ"
//
Процедура КоманднаяПанельФормыСохранитьЗначения(Кнопка)
	
	ФормаСохраненияНастройки = ПолучитьФорму("ФормаСохраненияНастройки");
	Если Не СписокСохраненныхНастроек = Неопределено Тогда
		ФормаСохраненияНастройки.СпискокНастроек = СписокСохраненныхНастроек.Скопировать();
	КонецЕсли;
	ТекущиеДанные = ФормаСохраненияНастройки.ОткрытьМодально();
	Если Не ТекущиеДанные = Неопределено Тогда
		ТекущиеДанные.Значение = ПолучитьНастройку();
		ЭтаФорма.СписокСохраненныхНастроек = ФормаСохраненияНастройки.СпискокНастроек.Скопировать();
		СохранитьНастройкиФормы();
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Восстановить настройки..." Командной панели "КоманднаяПанельСопоставлениеКолонокТЗ"
//
Процедура КоманднаяПанельФормыВосстановитьЗначения(Кнопка)
	
	ФормаВыбораНастройки = ПолучитьФорму("ФормаВыбораНастройки");
	ФормаВыбораНастройки.СпискокНастроек = СписокСохраненныхНастроек;
	ТекущиеДанные = ФормаВыбораНастройки.ОткрытьМодально();
	Если ТекущиеДанные <> Неопределено Тогда
		ЗагрузитьНастройкуВФорме(ТекущиеДанные.Значение);
	КонецЕсли;
	ЭтаФорма.СписокСохраненныхНастроек = ФормаВыбораНастройки.СпискокНастроек.Скопировать();
	СохранитьНастройкиФормы();
	
КонецПроцедуры

Процедура ЗагрузитьНастройкуВФорме(Настройка)
	
	ЗаменитьТаблицуЗначений = Истина;
	Если ТаблицаЗначений.Колонки.Количество() > 1 Тогда
		Ответ = Вопрос("Хотите заменить таблицу значений на сохраненную?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
		ЗаменитьТаблицуЗначений = Ответ = КодВозвратаДиалога.Да;
	КонецЕсли; 
	ЗагрузитьНастройку(Настройка, ЗаменитьТаблицуЗначений);
	СинхронизироватьРеквизитыОбъекта(Ложь);
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Сохранить настройки в файл..." Командной панели "КоманднаяПанельСопоставлениеКолонокТЗ"
//
Процедура КоманднаяПанельФормыСохранитьЗначенияВФайл(Кнопка)
	
	Настройки = ПолучитьНастройку();
	Если Настройки = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ирОбщий.СохранитьЗначениеВФайлИнтерактивноЛкс(Настройки, "sxl", "Настройка загрузки табличных данных", Истина);
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Восстановить настройки из файла..." Командной панели "КоманднаяПанельСопоставлениеКолонокТЗ"
//
Процедура КоманднаяПанельФормыВосстановитьЗначенияИзФайла(Кнопка)
	
	Настройка = ирОбщий.ЗагрузитьЗначениеИзФайлаИнтерактивноЛкс("sxl", "Настройка загрузки табличных данных");
	Если Настройка <> Неопределено Тогда
		ЗагрузитьНастройкуВФорме(Настройка);
	КонецЕсли; 
	
КонецПроцедуры

// Процедура - обаботчик события, при нажатии на кнопку "Перечитать " Командной панели "КоманднаяПанельСопоставлениеКолонокТЗ"
//
Процедура КоманднаяПанельФормыПеречитать(Кнопка)
	
	Ответ = Вопрос("Перечитать настройки по умолчанию? Текущие настройки будут потеряны.", РежимДиалогаВопрос.ОКОтмена);
	Если Ответ <> КодВозвратаДиалога.ОК Тогда
		Возврат;
	КонецЕсли;
	ЗагрузитьНастройкуПоУмолчанию();
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
//

// Процедура - обаботчик события, при нажатии на кнопку "Загрузить" Командной панели "ОсновныеДействияФормы"
//
Процедура ОсновныеДействияФормыКонвертировать(Кнопка = Неопределено)
	
	Если ТаблицаЗначений.Колонки.Количество() <= 1 Тогда
		КоманднаяПанельТаблицаЗначенийЗаполнитьИзТабличногоДокумента();
	КонецЕсли; 
	ЗагрузитьВТаблицуЗначенийИзТабличногоДокумента();
	ОбновитьКолонкиТабличногоПоляТаблицыЗначений();
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаЗначений;
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ЗАГРУЖАЕМЫХ РЕКВИЗИТОВ

// Процедура - обаботчик события "ПередНачаломИзменения"  табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовПередНачаломИзменения(Элемент, Отказ)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные;
	РежимЗагрузкиИскать = ТекущиеДанные.РежимКонвертации = "Искать";
	
	СписокВыбора = ПолучитьСписокИменПредставлений(ТекущиеДанные);
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ИскатьПо.ЭлементУправления.СписокВыбора = СписокВыбора;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ИскатьПо.ЭлементУправления.ТолькоПросмотр = СписокВыбора.Количество() = 0 или Не РежимЗагрузкиИскать;
	
	СписокВыбора = ПолучитьСписокСвязейПоВладельцу(ТекущиеДанные);
	Если Не ПустаяСтрока(ТекущиеДанные.СвязьПоВладельцу) И СписокВыбора.НайтиПоЗначению(ТекущиеДанные.СвязьПоВладельцу) = Неопределено Тогда
		СписокВыбора.Вставить(0,ТекущиеДанные.СвязьПоВладельцу,ТекущиеДанные.СвязьПоВладельцу);
	КонецЕсли;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоВладельцу.ЭлементУправления.СписокВыбора = СписокВыбора;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоВладельцу.ЭлементУправления.ТолькоПросмотр = СписокВыбора.Количество() = 0 или Не РежимЗагрузкиИскать;
	
	СписокВыбора = ПолучитьСписокСвязейПоТипу(ТекущиеДанные);
	Если Не ПустаяСтрока(ТекущиеДанные.СвязьПоТипу) И СписокВыбора.НайтиПоЗначению(ТекущиеДанные.СвязьПоТипу) = Неопределено Тогда
		СписокВыбора.Вставить(0,ТекущиеДанные.СвязьПоТипу,ТекущиеДанные.СвязьПоТипу);
	КонецЕсли;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоТипу.ЭлементУправления.СписокВыбора = СписокВыбора;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоТипу.ЭлементУправления.ТолькоПросмотр = СписокВыбора.Количество() = 0 или Не РежимЗагрузкиИскать;
	
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ЭлементСвязиПоТипу.ЭлементУправления.ТолькоПросмотр = СписокВыбора.Количество() = 0 или Не РежимЗагрузкиИскать;
	
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ЗначениеПоУмолчанию.ЭлементУправления.КнопкаВыбора = Не ТипЗНЧ(ТекущиеДанные.ЗначениеПоУмолчанию) = Тип("Строка");
	
КонецПроцедуры

// Процедура - обаботчик события "ПриВыводеСтроки"  табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	
	РежимЗагрузкиВычислять = ДанныеСтроки.РежимКонвертации = "Вычислять";
	Если РежимЗагрузкиВычислять Тогда
		ОформлениеСтроки.Ячейки.ИскатьПо           .Видимость = Ложь;
		ОформлениеСтроки.Ячейки.СвязьПоВладельцу   .Видимость = Ложь;
		ОформлениеСтроки.Ячейки.СвязьПоТипу        .Видимость = Ложь;
		ОформлениеСтроки.Ячейки.ЭлементСвязиПоТипу .Видимость = Ложь;
	Иначе
		ОформлениеСтроки.Ячейки.Алгоритм.Видимость = Ложь;
	КонецЕсли;
	Если ДанныеСтроки.Пометка Тогда
		Если ДанныеСтроки.РежимКонвертации <> "Искать" Тогда
			ЦветРежимЗагрузкиИскать = ирОбщий.ЦветТекстаНеактивностиЛкс();
			ОформлениеСтроки.Ячейки.ИскатьПо              .ЦветТекста = ЦветРежимЗагрузкиИскать;
			ОформлениеСтроки.Ячейки.СвязьПоВладельцу      .ЦветТекста = ЦветРежимЗагрузкиИскать;
			ОформлениеСтроки.Ячейки.СвязьПоТипу           .ЦветТекста = ЦветРежимЗагрузкиИскать;
			ОформлениеСтроки.Ячейки.ЭлементСвязиПоТипу    .ЦветТекста = ЦветРежимЗагрузкиИскать;
		КонецЕсли;
	Иначе
		ОформлениеСтроки.ЦветТекста = ирОбщий.ЦветТекстаНеактивностиЛкс();
	КонецЕсли;
	ОформлениеСтроки.Ячейки.КолонкаИсточника.Видимость = Ложь;
	ОформлениеСтроки.Ячейки.КолонкаПриемника.Видимость = Ложь;
	ирОбщий.ОформитьЯчейкуАлгоритмаВТабличномПолеЛкс(ОформлениеСтроки);
	ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки, , "ЗначениеПоУмолчанию");

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

////////////////////////////////////////////////////////////////////////////////
//

// Процедура - обаботчик события "НачалоВыбора"  колонки "ОписаниеТипов" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовОписаниеТиповНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные;
	
	Описание = ТекущиеДанные.ДоступноеОписаниеТипов;
	МассивТипов = Новый Массив;
	Для Каждого Тип Из Описание.Типы() Цикл
		МассивТипов.Добавить(Тип);
	КонецЦикла;
	
	Элемент.ДоступныеТипы = Новый ОписаниеТипов(МассивТипов, Описание.КвалификаторыЧисла, Описание.КвалификаторыСтроки, Описание.КвалификаторыДаты);
	
КонецПроцедуры

// Процедура - обаботчик события "Очистка"  колонки "ОписаниеТипов" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовОписаниеТиповОчистка(Элемент, СтандартнаяОбработка)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные;
	ТекущиеДанные.ОписаниеТипов = ТекущиеДанные.ДоступноеОписаниеТипов;
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

// Процедура - обаботчик события "ПриИзменении"  колонки "ОписаниеТипов" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовОписаниеТиповПриИзменении(Элемент)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные;
	
	ТекущиеДанные.ЗначениеПоУмолчанию = ТекущиеДанные.ОписаниеТипов.ПривестиЗначение(ТекущиеДанные.ЗначениеПоУмолчанию);
	
	СписокВыбора = ПолучитьСписокИменПредставлений(ТекущиеДанные);
	ТекущиеДанные.ИскатьПо = ?(СписокВыбора.Количество() = 0, Неопределено, СписокВыбора[0].Значение);
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ИскатьПо.ЭлементУправления.СписокВыбора = СписокВыбора;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ИскатьПо.ЭлементУправления.ТолькоПросмотр = СписокВыбора.Количество() = 0;
	
	СписокВыбора = ПолучитьСписокСвязейПоВладельцу(ТекущиеДанные);
	ТекущиеДанные.СвязьПоВладельцу = ?(СписокВыбора.Количество() = 0, Неопределено, СписокВыбора[0].Значение);
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоВладельцу.ЭлементУправления.СписокВыбора = СписокВыбора;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоВладельцу.ЭлементУправления.ТолькоПросмотр = СписокВыбора.Количество() = 0;
	
	СписокВыбора = ПолучитьСписокСвязейПоТипу(ТекущиеДанные);
	ТекущиеДанные.СвязьПоТипу = ?(СписокВыбора.Количество() = 0, Неопределено, СписокВыбора[0].Значение);
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоТипу.ЭлементУправления.СписокВыбора = СписокВыбора;
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СвязьПоТипу.ЭлементУправления.ТолькоПросмотр = СписокВыбора.Количество() = 0;
	
	ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ЗначениеПоУмолчанию.ЭлементУправления.КнопкаВыбора = Не ТипЗНЧ(ТекущиеДанные.ЗначениеПоУмолчанию) = Тип("Строка");
	
КонецПроцедуры


// Процедура - обаботчик события "НачалоВыбора"  колонки "ЗначениеПоУмолчанию" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовЗначениеПоУмолчаниюНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные;
	СвязьПоВладельцу = ТекущиеДанные.СвязьПоВладельцу;
	Если ТипЗНЧ(СвязьПоВладельцу) = Тип("Строка") Тогда
		СтрокаСвязиПоВладельцу = СопоставлениеКолонокТЗ.Найти(СвязьПоВладельцу, "ИмяРеквизита");
		
		Если Не СтрокаСвязиПоВладельцу = Неопределено Тогда
			СвязьПоВладельцу = СтрокаСвязиПоВладельцу.ЗначениеПоУмолчанию;
		Иначе
			СвязьПоВладельцу = Неопределено;
		КонецЕсли;
	КонецЕсли;
	Элемент.ВыборПоВладельцу = СвязьПоВладельцу;
	
КонецПроцедуры

// Процедура - обаботчик события "Очистка"  колонки "ЗначениеПоУмолчанию" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовЗначениеПоУмолчаниюОчистка(Элемент, СтандартнаяОбработка)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные;
	ТекущиеДанные.ЗначениеПоУмолчанию = ТекущиеДанные.ОписаниеТипов.ПривестиЗначение(Неопределено);
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

// Процедура - обаботчик события "ПриИзменении"  колонки "НомерКолонки" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура СопоставлениеКолонокТЗИмяКолонкиИсточникаПриИзменении(Элемент)
	
	КолонкиТабличногоДокумента = ПолучитьКолонкиТабличногоДокумента();
	КолонкаИсточника = КолонкиТабличногоДокумента[Элемент.Значение];
	СопоставитьКолонкуТЗ(ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущаяСтрока, КолонкаИсточника);
	ОбновитьСопоставлениеКолонокТЗ();
	
КонецПроцедуры

Процедура СопоставлениеКолонокТЗСинонимКолонкиИсточникаПриИзменении(Элемент)
	
	КолонкиТабличногоДокумента = ПолучитьКолонкиТабличногоДокумента();
	КолонкаИсточника = КолонкиТабличногоДокумента[Элемент.Значение];
	СопоставитьКолонкуТЗ(ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущаяСтрока, КолонкаИсточника);
	Если КолонкаИсточника <> Неопределено Тогда
		Элемент.Значение = КолонкаИсточника.Заголовок;
	КонецЕсли; 
	ОбновитьСопоставлениеКолонокТЗ();
	
КонецПроцедуры

// Процедура - обаботчик события "Очистка"  колонки "РежимКонвертации" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовРежимЗагрузкиОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

// Процедура - обаботчик события "ПриИзменении"  колонки "РежимКонвертации" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовРежимЗагрузкиПриИзменении(Элемент)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные;
	
	Если ПустаяСтрока(ТекущиеДанные.РежимКонвертации) Тогда
		ТекущиеДанные.РежимКонвертации = "Устанавливать";
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ТекущиеДанные.ИмяКолонкиИсточника) И ТекущиеДанные.РежимКонвертации = "Искать" Тогда
		Предупреждение("Не выбран номер колонки табличного документа");
		ТекущиеДанные.РежимКонвертации = "Устанавливать"
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события "ПриИзменении"  колонки "ИскатьПо" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовИскатьПоПриИзменении(Элемент)
	
	Если ПустаяСтрока(Элемент.Значение) И Не Элемент.СписокВыбора.Количество() = 0 Тогда
		Элемент.Значение = Элемент.СписокВыбора[0].Значение;
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события "ОбработкаВыбора"  колонки "СвязьПоВладельцу" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовСвязьПоВладельцуОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	Если ТипЗНЧ(ВыбранноеЗначение) = Тип("Строка") Тогда
		Если Не Найти(ВыбранноеЗначение, ".") = 0 Тогда
			Менеджер = ирОбщий.ПолучитьМенеджерЛкс(Тип(ВыбранноеЗначение));
			
			ФормаМенеджера = Менеджер.ПолучитьФормуВыбора(, ЭтаФорма, Элемент);
			ФормаМенеджера.НачальноеЗначениеВыбора = Элемент.Значение;
			НовоеЗначение = ФормаМенеджера.ОткрытьМодально();
			Если Не НовоеЗначение = Неопределено Тогда
				Результат = Элемент.СписокВыбора.НайтиПоЗначению(НовоеЗначение);
				Если Результат = Неопределено Тогда
					Элемент.СписокВыбора.Вставить(0,НовоеЗначение,НовоеЗначение);
				КонецЕсли;
				Элемент.Значение = НовоеЗначение;
			КонецЕсли;
			СтандартнаяОбработка = Ложь;
		Иначе
			Элемент.Значение = ВыбранноеЗначение;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события "ОбработкаВыбора"  колонки "СвязьПоТипу" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовСвязьПоТипуОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
		
	Если ТипЗНЧ(ВыбранноеЗначение) = Тип("Строка") Тогда
		Если Не Найти(ВыбранноеЗначение, ".") = 0 Тогда
			Менеджер = ирОбщий.ПолучитьМенеджерЛкс(Тип(ВыбранноеЗначение));
			ФормаМенеджера = Менеджер.ПолучитьФормуВыбора(, ЭтаФорма, Элемент);
			ФормаМенеджера.НачальноеЗначениеВыбора = Элемент.Значение;
			НовоеЗначение = ФормаМенеджера.ОткрытьМодально();
			Если Не НовоеЗначение = Неопределено Тогда
				Результат = Элемент.СписокВыбора.НайтиПоЗначению(НовоеЗначение);
				Если Результат = Неопределено Тогда
					Элемент.СписокВыбора.Вставить(0,НовоеЗначение,НовоеЗначение);
				КонецЕсли;
				Элемент.Значение = НовоеЗначение;
			КонецЕсли;
			СтандартнаяОбработка = Ложь;
		Иначе
			Элемент.Значение = ВыбранноеЗначение;
		КонецЕсли;
	КонецЕсли;

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

// Процедура - обаботчик события "НачалоВыбора"  колонки "Алгоритм" табличного поля "СопоставлениеКолонокТЗ"
//
Процедура ТаблицаЗагружаемыхРеквизитовВыражениеНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПараметрыАлгоритма = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ПолучитьМакет("АлгоритмКонвертацииЗначения"),,,, Истина);
	ПараметрыАлгоритма.Колонки.Добавить("ТаблицаСтруктурТипов");
	#Если Сервер И Не Сервер Тогда
	    мПлатформа = Обработки.ирПлатформа.Создать();
	#КонецЕсли
	Для Каждого СтрокаПараметра Из ПараметрыАлгоритма Цикл
		Если ирОбщий.СтрокиРавныЛкс(СтрокаПараметра.Имя, "ТекущиеДанные") Тогда
			ТекущиеДанные = Новый Структура;
			Для Каждого СтрокаСопоставления Из СопоставлениеКолонокТЗ Цикл
				ТекущиеДанные.Вставить(СтрокаСопоставления.ИмяКолонкиПриемника, СтрокаСопоставления.ЗначениеПоУмолчанию);
			КонецЦикла;
			СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ПолучитьТаблицуСтруктурТиповИзЗначения(ТекущиеДанные);
		КонецЕсли; 
	КонецЦикла;
	ирОбщий.РедактироватьАлгоритмЧерезСтрокуXMLЛкс(Элемент.Значение, ПараметрыАлгоритма);

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

Процедура ОсновныеДействияФормыОПодсистеме(Кнопка)
	
	ирОбщий.ОткрытьСправкуПоПодсистемеЛкс(ЭтотОбъект);
	
КонецПроцедуры

Процедура СтруктураКоманднойПанелиНажатие(Кнопка)
	
	ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка);
	
КонецПроцедуры

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	ирОбщий.ФормаОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); 

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

Процедура ТипОбъектаНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	Форма = ирОбщий.ПолучитьФормуВыбораОбъектаМетаданныхЛкс(,, Элемент.Значение,, Истина,, Истина,,, Истина);
	РезультатФормы = Форма.ОткрытьМодально();
	Если РезультатФормы <> Неопределено Тогда
		Элемент.Значение = РезультатФормы.ПолноеИмяОбъекта;
		ПолноеИмяТаблицыПриИзменении(Элемент);
	КонецЕсли; 
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

Процедура ПолноеИмяТаблицыПриИзменении(Элемент)
	
	УстановитьИсточникВФорме();
	ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма);

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

Процедура ПолноеИмяТаблицыНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

Процедура КоманднаяПанельЗагружаемыеРеквизитыВТаблицуЗначений(Кнопка)
	
	
КонецПроцедуры

Процедура ТаблицаЗначенийПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	
	ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки, ЭлементыФормы.КоманднаяПанельТаблицаЗначений.Кнопки.Идентификаторы);

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

Процедура КоманднаяПанельТаблицаЗначенийИдентификаторы(Кнопка)
	
	ирОбщий.КнопкаОтображатьПустыеИИдентификаторыНажатиеЛкс(Кнопка);
	ЭлементыФормы.ТаблицаЗначений.ОбновитьСтроки();
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаЗначенийСжатьКолонки(Кнопка)
	
	ирОбщий.СжатьКолонкиТабличногоПоляЛкс(ЭлементыФормы.ТаблицаЗначений);

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

Процедура КоманднаяПанельТаблицаЗначенийШиринаКолонок(Кнопка)
	
	ирОбщий.РасширитьКолонкиТабличногоПоляЛкс(ЭлементыФормы.ТаблицаЗначений);

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

Процедура КоманднаяПанельТаблицаЗначенийМенеджерТабличногоПоля(Кнопка)
	
	ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(ЭлементыФормы.ТаблицаЗначений, ЭтаФорма);
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаЗначенийРазличныеЗначенияКолонки(Кнопка)
	
	ирОбщий.ОткрытьРазличныеЗначенияКолонкиЛкс(ЭлементыФормы.ТаблицаБД);
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаЗначенийРедакторОбъектаБД(Кнопка)
	
	ирОбщий.ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ЭлементыФормы.ТаблицаЗначений);

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

Процедура ПослеВосстановленияЗначений()
	
	//Если Не РежимРедактора Тогда
	//	УстановитьИсточникВФорме();
	//КонецЕсли; 
	
КонецПроцедуры

Процедура ОсновныеДействияФормыЗагрузить(Кнопка)
	
	ЗагрузитьВТаблицуБДИзТаблицыЗначений();
	ЭлементыФормы.ТаблицаБД.СоздатьКолонки();
	ирОбщий.НастроитьДобавленныеКолонкиТабличногоПоляЛкс(ЭлементыФормы.ТаблицаБД,, ирОбщий.ПолучитьПоляТаблицыМДЛкс(ПолноеИмяТаблицы),, Истина);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаБД;
	
КонецПроцедуры

Процедура Панель1ПриСменеСтраницы(Элемент, ТекущаяСтраница)
	
	Если ЭлементыФормы.Панель1.ТекущаяСтраница = ЭлементыФормы.Панель1.Страницы.СопоставлениеКолонокТЗ Тогда
		ОбновитьСопоставлениеКолонокТЗВФорме();
	ИначеЕсли ЭлементыФормы.Панель1.ТекущаяСтраница = ЭлементыФормы.Панель1.Страницы.СопоставлениеКолонокБД Тогда
		ОбновитьСопоставлениеКолонокБД();
	//ИначеЕсли ЭлементыФормы.Панель1.ТекущаяСтраница = ЭлементыФормы.Панель1.Страницы.ТаблицаБД Тогда
	//	ОбновитьКолонкиТаблицыБД();
	КонецЕсли; 
	СинхронизироватьРеквизитыОбъекта();
	ОбновитьДоступность();
	
КонецПроцедуры

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

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

Процедура ОбновитьДоступность()
	
	ЭлементыФормы.Панель1.Страницы.СопоставлениеКолонокБД.Доступность = ЗначениеЗаполнено(ПолноеИмяТаблицы);
	ЭлементыФормы.Панель1.Страницы.ТаблицаБД.Доступность = ЗначениеЗаполнено(ПолноеИмяТаблицы);
	ЭлементыФормы.СопоставлениеКолонокБД.Колонки.Принадлежность.Видимость = Истина
		И СопоставлениеКолонокБД.Количество() > 0
		И ЗначениеЗаполнено(СопоставлениеКолонокБД[0].Принадлежность);
	ЭлементыФормы.НадписьНеуникальные.Гиперссылка = КоличествоНеуникально > 0;

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

Процедура ОсновныеДействияФормыСтруктураФормы(Кнопка)
	
	ирОбщий.ОткрытьСтруктуруФормыЛкс(ЭтаФорма);
	
КонецПроцедуры

Функция ПолучитьОписаниеТиповКлючейРезультатов()

	МассивТипов = Новый Массив();
	ТипКлюча = ирОбщий.ПолучитьТипКлючаЗаписиТаблицыЛкс(ПолноеИмяТаблицы);
	МассивТипов.Добавить(ТипКлюча);
	ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
	Возврат ОписаниеТипов;

КонецФункции

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

Процедура КоманднаяПанельТаблицаЗначенийОткрытьТаблицу(Кнопка)
	
	Если ирОбщий.ОткрытьЗначениеЛкс(ТаблицаЗначений, Истина,,,,, ЭлементыФормы.ТаблицаЗначений) Тогда 
		СинхронизироватьРеквизитыОбъекта();
		ОбновитьКолонкиТабличногоПоляТаблицыЗначений();
	КонецЕсли; 
	
КонецПроцедуры

Процедура ОбновитьКолонкиТабличногоПоляТаблицыЗначений()
	
	ПроверитьДобавитьКолонкуИдентификатораСтроки(ТаблицаЗначений);
	ОбновитьСопоставлениеКолонокТЗВФорме();
	ЭлементыФормы.ТаблицаЗначений.СоздатьКолонки();
	Если ЗначениеЗаполнено(ПолноеИмяТаблицы) Тогда
		ПоляТаблицыБД = ирОбщий.ПолучитьПоляТаблицыМДЛкс(ПолноеИмяТаблицы);
	КонецЕсли; 
	ирОбщий.НастроитьДобавленныеКолонкиТабличногоПоляЛкс(ЭлементыФормы.ТаблицаЗначений,, ПоляТаблицыБД);
	Если ЭлементыФормы.ТаблицаЗначений.ТекущаяСтрока = Неопределено И ТаблицаЗначений.Количество() > 0 Тогда
		ЭлементыФормы.ТаблицаЗначений.ТекущаяСтрока = ТаблицаЗначений[0];
	КонецЕсли; 
	ЭлементыФормы.ТаблицаЗначений.Колонки[мИмяКолонкиНомерСтроки].ТолькоПросмотр = Истина;

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

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

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

Процедура ОбновитьФиксациюШапкиТабличногоДокумента()
	
	ЭлементыФормы.ТабличныйДокумент.ФиксацияСверху = ПерваяСтрокаДанныхТабличногоДокумента - 1;

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

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

Процедура ПерваяСтрокаДанныхТабличногоДокументаОткрытие(Элемент, СтандартнаяОбработка)
	
	ЭлементыФормы.ТабличныйДокумент.ТекущаяОбласть = ЭлементыФормы.ТабличныйДокумент.Область(ПерваяСтрокаДанныхТабличногоДокумента, 1,
		ПерваяСтрокаДанныхТабличногоДокумента, ЭлементыФормы.ТабличныйДокумент.ШиринаТаблицы);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличныйДокумент;
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

Процедура СтрокаЗаголовковТабличногоДокументаОткрытие(Элемент, СтандартнаяОбработка)
	
	ЭлементыФормы.ТабличныйДокумент.ТекущаяОбласть = ЭлементыФормы.ТабличныйДокумент.Область(СтрокаЗаголовковТабличногоДокумента, 1,
		СтрокаЗаголовковТабличногоДокумента, ЭлементыФормы.ТабличныйДокумент.ШиринаТаблицы);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличныйДокумент;
	СтандартнаяОбработка = Ложь;

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

Процедура ПерваяСтрокаДанныхТабличногоДокументаПриИзменении(Элемент = Неопределено)
	
	Если СтрокаЗаголовковТабличногоДокумента >= ПерваяСтрокаДанныхТабличногоДокумента Тогда
		СтрокаЗаголовковТабличногоДокумента = ПерваяСтрокаДанныхТабличногоДокумента - 1;
	КонецЕсли; 
	
КонецПроцедуры

Процедура СтрокаЗаголовковТабличногоДокументаПриИзменении(Элемент = Неопределено)
	
	Если СтрокаЗаголовковТабличногоДокумента >= ПерваяСтрокаДанныхТабличногоДокумента Тогда
		ПерваяСтрокаДанныхТабличногоДокумента = СтрокаЗаголовковТабличногоДокумента + 1;
	КонецЕсли; 
	
КонецПроцедуры

Процедура КП_СопоставлениеКолонокТаблицыБДЗаполнитьПоИменам(Кнопка)
	
	СопоставлениеКолонокБДЗаполнитьПоИменамСинонимам();
	
КонецПроцедуры

Процедура КП_СопоставлениеКолонокТаблицыБДОчистить(Кнопка)
	
	ОчиститьСопоставлениеКолонокБД();
	
КонецПроцедуры

Процедура СопоставлениеКолонокТаблицыБДИмяКолонкиИсточникаПриИзменении(Элемент)
	
	КолонкаИсточника = ТаблицаЗначений.Колонки.Найти(Элемент.Значение);
	СопоставитьКолонкуБД(ЭлементыФормы.СопоставлениеКолонокБД.ТекущаяСтрока, КолонкаИсточника);
	ОбновитьСопоставлениеКолонокБД();
	
КонецПроцедуры

Процедура СопоставлениеКолонокТаблицыБДСинонимКолонкиИсточникаПриИзменении(Элемент)
	
	КолонкаИсточника = ТаблицаЗначений.Колонки[Элемент.Значение];
	СопоставитьКолонкуБД(ЭлементыФормы.СопоставлениеКолонокБД.ТекущаяСтрока, КолонкаИсточника);
	Элемент.Значение = КолонкаИсточника.Заголовок;
	ОбновитьСопоставлениеКолонокБД();

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

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

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

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

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

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

Процедура СопоставлениеКолонокБДПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	
	Если ДанныеСтроки.Ключевое Тогда
		//ОформлениеСтроки.Ячейки.ПолеПоиска.ТолькоПросмотр = Истина; // так по ссылке в ссылочной таблице нельзя было включить поиск
		ОформлениеСтроки.Ячейки.Пометка.ТолькоПросмотр = Истина;
	КонецЕсли;
	ОформлениеСтроки.Ячейки.Пометка.Видимость = ДанныеСтроки.ДоступноИзменение;
	ОформлениеСтроки.Ячейки.КолонкаИсточника.Видимость = Ложь;
	ОформлениеСтроки.Ячейки.КолонкаПриемника.Видимость = Ложь;

	Если ДанныеСтроки.Пометка Или ДанныеСтроки.ПолеПоиска Тогда
		Если Не ДанныеСтроки.ИзИсточника Тогда
			ЦветРежимЗагрузкиИскать = ирОбщий.ЦветТекстаНеактивностиЛкс();
			ОформлениеСтроки.Ячейки.СвязьПоВладельцу      .ЦветТекста = ЦветРежимЗагрузкиИскать;
			ОформлениеСтроки.Ячейки.СвязьПоТипу           .ЦветТекста = ЦветРежимЗагрузкиИскать;
			ОформлениеСтроки.Ячейки.ЭлементСвязиПоТипу    .ЦветТекста = ЦветРежимЗагрузкиИскать;
		КонецЕсли;
	Иначе
		ОформлениеСтроки.ЦветТекста = ирОбщий.ЦветТекстаНеактивностиЛкс();
	КонецЕсли;
	ОформлениеСтроки.Ячейки.КолонкаИсточника.Видимость = Ложь;
	ОформлениеСтроки.Ячейки.КолонкаПриемника.Видимость = Ложь;
	ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки, , "Значение");

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

Процедура КоманднаяПанельТаблицаЗначенийЗаполнитьИзТаблицыБД(Кнопка)
	
	Если Не ЗначениеЗаполнено(ПолноеИмяТаблицы) Тогда
		Возврат;
	КонецЕсли;
	Если ТаблицаЗначений.Колонки.Количество() > 1 Тогда
		Ответ = Вопрос("Очистить существующие колонки и строки?", РежимДиалогаВопрос.ДаНетОтмена);
		Если Ответ = КодВозвратаДиалога.Отмена Тогда
			Возврат;
		Иначе
			ОчиститьСуществующие = Ответ = КодВозвратаДиалога.Да;
		КонецЕсли;
	Иначе
		ОчиститьСуществующие = Истина;
	КонецЕсли; 
	ОбновитьКолонкиТаблицыЗначений(ОчиститьСуществующие, Истина);
	ОбновитьКолонкиТабличногоПоляТаблицыЗначений();
	Если ОчиститьСуществующие Тогда
		СопоставлениеКолонокБДЗаполнитьПоИменамСинонимам();
	КонецЕсли; 
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаЗначенийЗаполнитьИзТабличногоДокумента(Кнопка = Неопределено)
	
	Если ТаблицаЗначений.Колонки.Количество() > 2 Тогда
		Ответ = Вопрос("Очистить существующие колонки и строки?", РежимДиалогаВопрос.ДаНетОтмена);
		Если Ответ = КодВозвратаДиалога.Отмена Тогда
			Возврат;
		Иначе
			ОчиститьСуществующие = Ответ = КодВозвратаДиалога.Да;
		КонецЕсли;
	Иначе
		ОчиститьСуществующие = Истина;
	КонецЕсли; 
	ОбновитьКолонкиТаблицыЗначений(ОчиститьСуществующие, Ложь);
	ОбновитьКолонкиТабличногоПоляТаблицыЗначений();
	Если ОчиститьСуществующие Тогда
		СопоставлениеКолонокТЗЗаполнить();
	КонецЕсли; 
	
КонецПроцедуры

Процедура КоманднаяПанельСопоставлениеКолонокТЗОчистить(Кнопка)
	
	ОчиститьСопоставлениеКолонокТЗ();

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

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

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

Процедура КоманднаяПанельСопоставлениеКолонокТЗЗаполнитьПоСинонимам(Кнопка)
	
	СопоставлениеКолонокТЗЗаполнить();
	
КонецПроцедуры

// Такой странный прием позволил обойти проблему не создания колонок в таблиц значений реквизитов этой обработки (она сломана)
Процедура СинхронизироватьРеквизитыОбъекта(ИзФормыВОбъект = Истина) Экспорт 
	
	Если ИзФормыВОбъект Тогда
		ЭтотОбъект.СопоставлениеКолонокБД = ЭтаФорма.СопоставлениеКолонокБД;
		ЭтотОбъект.СопоставлениеКолонокТЗ = ЭтаФорма.СопоставлениеКолонокТЗ;
		ЭтотОбъект.КолонкиТЗ = ЭтаФорма.КолонкиТЗ;
		ЭтотОбъект.НесопоставленныеКолонкиТД = ЭтаФорма.НесопоставленныеКолонкиТД;
		ЭтотОбъект.ТаблицаЗначений = ЭтаФорма.ТаблицаЗначений;
		ЭтотОбъект.СобытияОбработкиОбъектов = ЭтаФорма.СобытияОбработкиОбъектов;
		ЭтотОбъект.ТаблицаБД = ЭтаФорма.ТаблицаБД;
		ЭтотОбъект.ТабличныйДокумент = ЭлементыФормы.ТабличныйДокумент;
	Иначе
		ЭтаФорма.СопоставлениеКолонокБД = ЭтотОбъект.СопоставлениеКолонокБД;
		ЭтаФорма.СопоставлениеКолонокТЗ = ЭтотОбъект.СопоставлениеКолонокТЗ;
		ЭтаФорма.КолонкиТЗ = ЭтотОбъект.КолонкиТЗ;
		ЭтаФорма.НесопоставленныеКолонкиТД = ЭтотОбъект.НесопоставленныеКолонкиТД;
		ЭтаФорма.ТаблицаЗначений = ЭтотОбъект.ТаблицаЗначений;
		ЭтаФорма.СобытияОбработкиОбъектов = ЭтотОбъект.СобытияОбработкиОбъектов;
		ЭтаФорма.ТаблицаБД = ЭтотОбъект.ТаблицаБД;
		ЭлементыФормы.ТабличныйДокумент.ВставитьОбласть(ЭтотОбъект.ТабличныйДокумент.Область());
	КонецЕсли; 

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

Процедура КолонкиТЗВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	ЭлементыФормы.ТаблицаЗначений.ТекущаяКолонка = ЭлементыФормы.ТаблицаЗначений.Колонки[ВыбраннаяСтрока.ИмяКолонки];
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаЗначений;
	
КонецПроцедуры

Процедура СопоставлениеКолонокТЗИмяКолонкиИсточникаОткрытие(Элемент, СтандартнаяОбработка)
	
	ОткрытьКолонкуТабличногоДокумента();
	СтандартнаяОбработка = Ложь;

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

Процедура ОткрытьКолонкуТабличногоДокумента()
	
	НомерКолонки = Число(ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные.ИмяКолонкиИсточника);
	ЭлементыФормы.ТабличныйДокумент.ТекущаяОбласть = ЭлементыФормы.ТабличныйДокумент.Область(ПерваяСтрокаДанныхТабличногоДокумента, НомерКолонки, ПерваяСтрокаДанныхТабличногоДокумента, НомерКолонки);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличныйДокумент;

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

Процедура СопоставлениеКолонокТЗСинонимКолонкиИсточникаОткрытие(Элемент, СтандартнаяОбработка)
	
	ОткрытьКолонкуТабличногоДокумента();
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

Процедура НесопоставленныеКолонкиТДВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	НомерКолонки = Число(ЭлементыФормы.НесопоставленныеКолонкиТД.ТекущиеДанные.ИмяКолонкиИсточника);
	ЭлементыФормы.ТабличныйДокумент.ТекущаяОбласть = ЭлементыФормы.ТабличныйДокумент.Область(ПерваяСтрокаДанныхТабличногоДокумента, НомерКолонки, ПерваяСтрокаДанныхТабличногоДокумента, НомерКолонки);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличныйДокумент;

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

Процедура СопоставлениеКолонокТЗВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	Если Ложь
		Или Колонка = ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.ИмяКолонкиПриемника
		Или Колонка = ЭлементыФормы.СопоставлениеКолонокТЗ.Колонки.СинонимКолонкиПриемника
	Тогда
		ЭлементыФормы.ТаблицаЗначений.ТекущаяКолонка = ЭлементыФормы.ТаблицаЗначений.Колонки[ЭлементыФормы.СопоставлениеКолонокТЗ.ТекущиеДанные.ИмяКолонкиПриемника];
		ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаЗначений;
	Иначе
		//ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(Элемент, СтандартнаяОбработка);
	КонецЕсли; 
	
КонецПроцедуры

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

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

Процедура ТаблицаЗначенийВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	//Если Колонка = ЭлементыФормы.ТаблицаЗначений.Колонки[мИмяКолонкиНомерСтроки] Тогда
	//	ПерейтиКСтрокеТабличногоДокументаИзСтрокиТаблицыЗначений();
	//КонецЕсли; 
	ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(Элемент, СтандартнаяОбработка);
	
КонецПроцедуры


Процедура КоманднаяПанельТаблицаЗначенийПерейтиКБД(Кнопка)
	
	Если ЭлементыФормы.ТаблицаЗначений.ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли; 
	Если Ложь
		Или ТаблицаЗначений.Колонки.Найти(мИмяКолонкиНомерСтроки) = Неопределено 
		Или ТаблицаБД.Колонки.Найти(мИмяКолонкиНомерСтроки) = Неопределено
	Тогда
		Возврат;
	КонецЕсли; 
	СтрокаТаблицыБД = ТаблицаБД.Найти(ЭлементыФормы.ТаблицаЗначений.ТекущаяСтрока[мИмяКолонкиНомерСтроки], мИмяКолонкиНомерСтроки);
	Если СтрокаТаблицыБД <> Неопределено Тогда
		ЭлементыФормы.ТаблицаБД.ТекущаяСтрока = СтрокаТаблицыБД;
		ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаБД;
	КонецЕсли; 
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаЗначенийПерейтиКТД(Кнопка)
	
	Если ТаблицаЗначений.Колонки.Найти(мИмяКолонкиНомерСтроки) = Неопределено Тогда
		Возврат;
	КонецЕсли; 
	ВыбраннаяСтрока = ЭлементыФормы.ТаблицаЗначений.ТекущаяСтрока;
	Если ВыбраннаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли; 
	ЭлементыФормы.ТабличныйДокумент.ТекущаяОбласть = ЭлементыФормы.ТабличныйДокумент.Область(ВыбраннаяСтрока[мИмяКолонкиНомерСтроки], 1, ВыбраннаяСтрока[мИмяКолонкиНомерСтроки], 1);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабличныйДокумент;
	
КонецПроцедуры

Процедура КоманднаяПанельТабличногоДокументаПерейтиКТЗ(Кнопка)
	
	Если ЭлементыФормы.ТабличныйДокумент.ТекущаяОбласть = Неопределено Тогда
		Возврат;
	КонецЕсли; 
	СтрокаТаблицыЗначений = ТаблицаЗначений.Найти(ЭлементыФормы.ТабличныйДокумент.ТекущаяОбласть.Верх, мИмяКолонкиНомерСтроки);
	Если СтрокаТаблицыЗначений <> Неопределено Тогда
		ЭлементыФормы.ТаблицаЗначений.ТекущаяСтрока = СтрокаТаблицыЗначений;
		ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаЗначений;
	КонецЕсли; 
	
КонецПроцедуры

Процедура ТаблицаБДВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	Если Колонка = ЭлементыФормы.ТаблицаБД.Колонки[мИмяКолонкиНомерСтроки] Тогда
		ПерейтиКСтрокеТаблицыЗначенийИзСтрокиТаблицыБД();
	КонецЕсли; 
	ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаБДПерейти(Кнопка)
	
	ПерейтиКСтрокеТаблицыЗначенийИзСтрокиТаблицыБД();
	
КонецПроцедуры

Процедура ПерейтиКСтрокеТаблицыЗначенийИзСтрокиТаблицыБД()
	
	Если ЭлементыФормы.ТаблицаБД.ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли; 
	Если Ложь
		Или ТаблицаЗначений.Колонки.Найти(мИмяКолонкиНомерСтроки) = Неопределено 
		Или ТаблицаБД.Колонки.Найти(мИмяКолонкиНомерСтроки) = Неопределено
	Тогда
		Возврат;
	КонецЕсли; 
	СтрокаТаблицыЗначений = ТаблицаЗначений.Найти(ЭлементыФормы.ТаблицаБД.ТекущаяСтрока[мИмяКолонкиНомерСтроки], мИмяКолонкиНомерСтроки);
	Если СтрокаТаблицыЗначений <> Неопределено Тогда
		ЭлементыФормы.ТаблицаЗначений.ТекущаяСтрока = СтрокаТаблицыЗначений;
		ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаЗначений;
	КонецЕсли;

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

Процедура КоманднаяПанельТаблицаЗначенийКонсольОбработки(Кнопка)
	
	ирОбщий.ОткрытьОбъектыИзВыделенныхЯчеекВПодбореИОбработкеОбъектовЛкс(ЭлементыФормы.ТаблицаЗначений);
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаБДЗагрузитьБезЗаписи(Кнопка)
	
	ЗагрузитьВТаблицуБДИзТаблицыЗначений(Ложь);
	ЭлементыФормы.ТаблицаБД.СоздатьКолонки();
	ирОбщий.НастроитьДобавленныеКолонкиТабличногоПоляЛкс(ЭлементыФормы.ТаблицаБД,, ирОбщий.ПолучитьПоляТаблицыМДЛкс(ПолноеИмяТаблицы),, Истина);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаБД;
	
КонецПроцедуры

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

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

Процедура СопоставлениеКолонокБДЗначениеОчистка(Элемент, СтандартнаяОбработка)
	
	ТекущиеДанные = ЭлементыФормы.СопоставлениеКолонокБД.ТекущиеДанные;
	ТекущиеДанные.ЗначениеПоУмолчанию = ТекущиеДанные.ОписаниеТиповПриемника.ПривестиЗначение(Неопределено);
	СтандартнаяОбработка = Ложь;	
	
КонецПроцедуры

Процедура КП_СопоставлениеКолонокТаблицыБДУстановитьФлажки(Кнопка)
	
	СопоставлениеКолонокБДУстановитьСнятьФлажки(Истина);
	
КонецПроцедуры

Процедура КП_СопоставлениеКолонокТаблицыБДСнятьФлажки(Кнопка)
	
	СопоставлениеКолонокБДУстановитьСнятьФлажки(Ложь);

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

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

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

Процедура СопоставлениеКолонокБДВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(Элемент, СтандартнаяОбработка);

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

Процедура КП_СопоставлениеКолонокТаблицыБДРедакторОбъектаБДЯчейки(Кнопка)
	
	ирОбщий.ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ЭлементыФормы.СопоставлениеКолонокБД);

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

Процедура КоманднаяПанельСопоставлениеКолонокТЗРедакторОбъектаБДЯчейки(Кнопка)
	
	ирОбщий.ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ЭлементыФормы.СопоставлениеКолонокТЗ);

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

Процедура СобытияОбработкиОбъектовАлгоритмНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	#Если Сервер И Не Сервер Тогда
	    мПлатформа = Обработки.ирПлатформа.Создать();
	#КонецЕсли
	ТекущаяСтрока = ЭлементыФормы.СобытияОбработкиОбъектов.ТекущаяСтрока;
	мОписаниеТиповСтрокиОбъектаБД = ирОбщий.ОписаниеТиповОбъектаИлиСтрокиБДПоИменамТаблицЛкс(ПолноеИмяТаблицы, Ложь);
	мОписаниеТиповОбъектаБД = ирОбщий.ОписаниеТиповОбъектаИлиСтрокиБДПоИменамТаблицЛкс(ПолноеИмяТаблицы, Истина);
	Для Каждого СтрокаПараметра Из ТекущаяСтрока.Параметры Цикл
		Если ирОбщий.СтрокиРавныЛкс(СтрокаПараметра.Имя, "ОбъектБД") Тогда
			СтрокаПараметра.ТипЗначения = мОписаниеТиповОбъектаБД;
			СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ПолучитьТаблицуСтруктурТиповИзОписанияТипов(мОписаниеТиповОбъектаБД);
		ИначеЕсли ирОбщий.СтрокиРавныЛкс(СтрокаПараметра.Имя, "СтрокаОбъектаБД") Тогда
			СтрокаПараметра.ТипЗначения = мОписаниеТиповСтрокиОбъектаБД;
			СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ПолучитьТаблицуСтруктурТиповИзОписанияТипов(мОписаниеТиповСтрокиОбъектаБД);
		ИначеЕсли ирОбщий.СтрокиРавныЛкс(СтрокаПараметра.Имя, "СтрокаТаблицыЗначений") Тогда
			СтрокаПараметра.ТипЗначения = Тип("СтрокаТаблицыЗначений");
			СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ПолучитьТаблицуСтруктурТиповИзЗначения(ТаблицаЗначений);
		//ИначеЕсли ирОбщий.СтрокиРавныЛкс(СтрокаПараметра.Имя, "СтрокаНайдена") Тогда
		//	СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ПолучитьТаблицуСтруктурТиповИзОписанияТипов(СтрокаПараметра.ТипЗначения);
		//	//СтрокаПараметра.ТипЗначения = "" + СтрокаПараметра.ТипЗначения;
		//ИначеЕсли ирОбщий.СтрокиРавныЛкс(СтрокаПараметра.Имя, "Отказ") Тогда
		//	СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ПолучитьТаблицуСтруктурТиповИзОписанияТипов(СтрокаПараметра.ТипЗначения);
		//	//СтрокаПараметра.ТипЗначения = "" + СтрокаПараметра.ТипЗначения;
		КонецЕсли; 
	КонецЦикла;
	ирОбщий.СтрокаСобытияАлгоритмНачалоВыбораЛкс(ТекущаяСтрока);
	
КонецПроцедуры

Процедура ОсновныеДействияФормыНовоеОкно(Кнопка)
	
	ирОбщий.ОткрытьНовоеОкноОбработкиЛкс(ЭтотОбъект);
	
КонецПроцедуры

Процедура СобытияОбработкиОбъектовПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	
	ирОбщий.ОформитьЯчейкуАлгоритмаВТабличномПолеЛкс(ОформлениеСтроки);
	
КонецПроцедуры

Процедура ОсновныеДействияФормыПрименить(Кнопка)
	
	Если ТаблицаЗначений.Количество() = 0 Тогда
		ОсновныеДействияФормыКонвертировать();
	КонецЕсли; 
	Закрыть(Истина);
	
КонецПроцедуры

Процедура КоманднаяПанельТабличногоДокументаОткрытьВОтдельномОкне(Кнопка)
	
	ирОбщий.ОткрытьРедакторИзПоляТабличногоДокументаЛкс(ТабличныйДокумент);
	
КонецПроцедуры

Процедура ТаблицаБДПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	
	ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки);

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

Процедура КоманднаяПанельТабличногоДокументаАвтоширина(Кнопка)
	
	ирОбщий.УстановитьАвтоширинуКолонокТабличногоДокументаЛкс(ЭлементыФормы.ТабличныйДокумент);
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаБДСжатьКолонки(Кнопка)
	
	ирОбщий.СжатьКолонкиТабличногоПоляЛкс(ЭлементыФормы.ТаблицаБД);

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

Процедура КоманднаяПанельТаблицаБДШиринаКолонок(Кнопка)
	
	ирОбщий.РасширитьКолонкиТабличногоПоляЛкс(ЭлементыФормы.ТаблицаБД);

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

Процедура НадписьНеуникальныеНажатие(Элемент)
	
	СтрокаКлючаИсточника = "";
	КлючиНеуникальные = ВыявитьНеуникальныеКлючи(СтрокаКлючаИсточника);
	ирОбщий.ВыделитьСтрокиТабличногоПоляПоКлючуЛкс(ЭлементыФормы.ТаблицаЗначений, КлючиНеуникальные[0], СтрокаКлючаИсточника);
	ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТаблицаЗначений;
	
КонецПроцедуры

Процедура КоманднаяПанельТаблицаБДУдалитьУспешныеИзИсточника(Кнопка)
	
	УспешныеСтрокиБД = ТаблицаБД.НайтиСтроки(Новый Структура(мИмяКолонкиРезультатЗаписи, "Успех"));
	ирОбщий.ДобавитьИндексВТаблицуЛкс(ТаблицаЗначений, мИмяКолонкиНомерСтроки);
	Для Каждого СтрокаТаблицыБД Из УспешныеСтрокиБД Цикл
		СтрокаТаблицы = ТаблицаЗначений.Найти(СтрокаТаблицыБД[мИмяКолонкиНомерСтроки], мИмяКолонкиНомерСтроки);
		Если СтрокаТаблицы <> Неопределено Тогда
			ТаблицаЗначений.Удалить(СтрокаТаблицы);
		КонецЕсли;
		ТаблицаБД.Удалить(СтрокаТаблицыБД);
	КонецЦикла;
	
КонецПроцедуры

Процедура КоманднаяПанельСопоставлениеКолонокТЗМенеджерТабличногоПоля(Кнопка)
	
	ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(ЭлементыФормы.СопоставлениеКолонокТЗ, ЭтаФорма);

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

Процедура КП_СопоставлениеКолонокТаблицыБДМенеджерТабличногоПоля(Кнопка)

	ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(ЭлементыФормы.СопоставлениеКолонокБД, ЭтаФорма);
	
КонецПроцедуры

Процедура ТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ирОбщий.ОткрытьЗначениеЛкс(Расшифровка, , СтандартнаяОбработка);
	
КонецПроцедуры

Процедура КоманднаяПанельТабличногоДокументаРедактирование(Кнопка)
	
	Кнопка.Пометка = Не Кнопка.Пометка;
	ЭлементыФормы.ТабличныйДокумент.ТолькоПросмотр = Не Кнопка.Пометка;
		
КонецПроцедуры

Процедура СопоставлениеКолонокТЗПриПолученииДанных(Элемент, ОформленияСтрок)
	
	ирОбщий.ПриПолученииДанныхТабличногоПоляКолонокЛкс(ОформленияСтрок, "ОписаниеТипов");
	
КонецПроцедуры

Процедура СопоставлениеКолонокБДПриПолученииДанных(Элемент, ОформленияСтрок)

	ирОбщий.ПриПолученииДанныхТабличногоПоляКолонокЛкс(ОформленияСтрок, "ОписаниеТиповПриемника");
	ирОбщий.ПриПолученииДанныхТабличногоПоляКолонокЛкс(ОформленияСтрок, "ОписаниеТиповИсточника");
	
КонецПроцедуры

Процедура КолонкиТЗПриПолученииДанных(Элемент, ОформленияСтрок)
	
	ирОбщий.ПриПолученииДанныхТабличногоПоляКолонокЛкс(ОформленияСтрок, "ОписаниеТипов");
	
КонецПроцедуры

Процедура НадписьОбщиеПараметрыЗаписиНажатие(Элемент)
	
	ирОбщий.ОткрытьОбщиеПараметрыЗаписиЛкс();
	
КонецПроцедуры

ирОбщий.ИнициализироватьФормуЛкс(ЭтаФорма, "Обработка.ирЗагрузкаТабличныхДанных.Форма.Форма");

СинхронизироватьРеквизитыОбъекта();
СобытияОбработкиОбъектов.Колонки.Добавить("Параметры");
СобытияОбработкиОбъектов.Колонки.Добавить("АлгоритмОбъект");
МассивИменСобытий = Новый Массив;
МассивИменСобытий.Добавить("АлгоритмПередОбработкойОбъекта");
МассивИменСобытий.Добавить("АлгоритмПослеЗагрузкиСтроки");
МассивИменСобытий.Добавить("АлгоритмПередЗаписьюОбъекта");
МассивИменСобытий.Добавить("АлгоритмПриЗаписиОбъекта");
Для Каждого ИмяСобытия Из МассивИменСобытий Цикл
	СтрокаСобытия = СобытияОбработкиОбъектов.Добавить();
	СтрокаСобытия.ИмяСобытия = ИмяСобытия;
	СтрокаСобытия.СинонимСобытия = Метаданные().Макеты[ИмяСобытия].Представление();
	СтрокаСобытия.Параметры = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ПолучитьМакет(ИмяСобытия),,,, Истина);
	СтрокаСобытия.Параметры.Колонки.Добавить("ТаблицаСтруктурТипов");
КонецЦикла;
мАлгоритмКонвертацииЗначенияПараметры = ирОбщий.ПолучитьТаблицуИзТабличногоДокументаЛкс(ПолучитьМакет("АлгоритмКонвертацииЗначения"),,,, Истина);
мАлгоритмКонвертацииЗначенияПараметры.Колонки.Добавить("ТаблицаСтруктурТипов");
РежимРедактора = Ложь;
//
