//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирКлиент Экспорт;

Перем мПлатформа Экспорт;
Перем мИмяКолонкиПометки Экспорт; // НеИзменяется
Перем мИмяКолонкиРезультатаОбработки Экспорт; // НеИзменяется
Перем мИмяКолонкиСообщенияОбработки Экспорт; // НеИзменяется
Перем мИмяКолонкиПолногоИмениТаблицы Экспорт; // НеИзменяется
Перем мИмяКолонкиОтсутствияСтрокиВБД Экспорт; // НеИзменяется
Перем мИмяПоляЧислоДвиженийСкрытое Экспорт; // НеИзменяется
Перем мЗапрос Экспорт;
Перем мРезультатЗапроса Экспорт;
Перем мСхемаКолонок Экспорт;
Перем мВопросНаОбновлениеСтрокДляОбработкиЗадавался Экспорт; //Используется на сервере
Перем мИменаВозвращаемыхСвойств Экспорт; // НеИзменяется
Перем мСоставПланаОбмена;
Перем мИмяНастройкиПоУмолчанию Экспорт;
Перем мКоличествоЗаписанныхАвтоматически;
Перем мКоличествоСтрокУспешно;
Перем мКоличествоСтрокНеуспешно;

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

#Если Клиент Тогда

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

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

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

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

#КонецЕсли

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

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

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

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

	Если Режим = "Число" Тогда
	    Возврат(ЧисловаяЧасть);
	Иначе
		Возврат(Префикс);
	КонецЕсли;

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

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

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

	Стр = СокрЛП(Стр);
	
	Если ПустаяСтрока(Длина) Тогда
		Длина = СтрДлина(Стр);
	КонецЕсли;
	
	ЧисловаяЧасть	=	"";
	Префикс			=	вПолучитьПрефиксЧислоНомера(Стр, ЧисловаяЧасть);
	Если Режим="Слева" Тогда
		Результат	=	СокрЛП(Добавок) + Префикс;
	Иначе
		Результат	=	Префикс + СокрЛП(Добавок);
	КонецЕсли;

	Пока Длина - СтрДлина(Результат) - СтрДлина(Формат(ЧисловаяЧасть, "ЧГ=0")) > 0 Цикл
	    Результат	=	Результат + "0";
	КонецЦикла;
	Результат	=	Результат + Формат(ЧисловаяЧасть, "ЧГ=0");
	
	Возврат(Результат);
	
КонецФункции // вДобавитьКПрефиксу()

// Дополняет строку указанным символом до указанной длины
//
// Параметры: 
//  Стр            - Дополняемая строка
//  Длина          - Требуемая длина результирующей строки
//  Чем            - Символ, которым дополняется строка
//
// Возвращаемое значение:
//  Строка дополненная указанным символом до указанной длины
//
Функция вДополнитьСтрокуСимволами(Стр = "", Длина, Чем = " ") Экспорт
	Результат = СокрЛП(Стр);
	Пока Длина - СтрДлина(Результат) > 0 Цикл
		Результат = Результат + Чем;
	КонецЦикла;
	Возврат(Результат);
КонецФункции

// Выполняет обработку объектов.
//
// Параметры:
//  ПараметрыОбработки - Структура, Форма
//
Функция ВыполнитьГрупповуюОбработку(Параметры) Экспорт

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

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

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

Функция ИндикаторОбработкиОбъектов(Знач КоличествоОбъектов, ФактическоеКоличествоПотоков)
	
	Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоличествоОбъектов, "*Обработка " + ФактическоеКоличествоПотоков + " потоков"); // Мультиметка84652724
	Возврат Индикатор;

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

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

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

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

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

// Функция - Обработать элементы объекта
//
// Параметры:
//  ПараметрыОбработкиОбъекта - см. НовыеПараметрыОбработкиОбъекта - 
// 
// Возвращаемое значение:
//   - 
//
Функция ОбработатьЭлементыОбъекта(ПараметрыОбработкиОбъекта) Экспорт 

	ТипТаблицы = ПараметрыОбработкиОбъекта.ТипТаблицы;
	СтруктураКлючаОбъектаСПометкой = ПараметрыОбработкиОбъекта.СтруктураКлючаОбъектаСПометкой;
	СтруктураКлючаОбъекта = ПараметрыОбработкиОбъекта.СтруктураКлючаОбъекта;
	СтруктураКлючаСтроки = ПараметрыОбработкиОбъекта.СтруктураКлючаСтроки;
	КопияСтрокОбъекта = ПараметрыОбработкиОбъекта.КопияСтрокОбъекта;
	ПараметрыОбработки = ПараметрыОбработкиОбъекта.ПараметрыОбработки;
	ЭтоПервыйОбъектБД = ПараметрыОбработкиОбъекта.ЭтоПервыйОбъектБД;
	ЭтоПоследнийОбъектБД = ПараметрыОбработкиОбъекта.ЭтоПоследнийОбъектБД;
	ИмяОбъектаОбработкиОбъекта = ПараметрыОбработкиОбъекта.ИмяОбъектаОбработкиОбъекта;
	ИмяМетодаОбработкиОбъекта = ПараметрыОбработкиОбъекта.ИмяМетодаОбработкиОбъекта;  	
	#Если Не Клиент Тогда
		ПолучитьСообщенияПользователю(Истина);
	#КонецЕсли
	ИмяПоляСсылка = ирОбщий.ПеревестиСтроку("Ссылка");
	ИмяПоляНомерСтроки = ирОбщий.ПеревестиСтроку("НомерСтроки");
	ИмяПоляПериод = ирОбщий.ПеревестиСтроку("Период");
	Если РежимОбходаДанных = "Строки" Тогда
		Если КопияСтрокОбъекта.Колонки.Найти(ИмяПоляНомерСтроки) <> Неопределено Тогда
			КопияСтрокОбъекта.Сортировать(ИмяПоляНомерСтроки + " Убыв");
		КонецЕсли; 
	КонецЕсли; 
	Если МноготабличнаяВыборка Тогда
		ПолноеИмяТаблицыСтроки = СтруктураКлючаОбъектаСПометкой[мИмяКолонкиПолногоИмениТаблицы];
	Иначе
		ПолноеИмяТаблицыСтроки = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ОбластьПоиска);
	КонецЕсли; 
	//ЭтоРегистрБухгалтерии = ирОбщий.ЛиПолноеИмяРегистраБухгалтерииЛкс(ПолноеИмяТаблицыСтроки);
	ОбъектМДОбъекта = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(ПолноеИмяТаблицыСтроки);
	КоллекцияСтрок = Неопределено;
	ЗагрузитьСтрокиПослеОбработки = Ложь;
	ЭлементыОбъекта = Новый Массив();
	ЗаписанАвтоматически = Ложь;
	Если ПараметрыОбработки.ТранзакцияОбъекта Тогда
		Если ТипТаблицы = "Внешняя" Тогда
			ВнешниеИсточникиДанных[ОбъектМДОбъекта.Родитель().Имя].НачатьТранзакцию();
		Иначе
			НачатьТранзакцию();
		КонецЕсли;
	КонецЕсли;
	Попытка
		Если Ложь
			Или ирОбщий.ЛиМетаданныеСсылочногоОбъектаЛкс(ОбъектМДОбъекта, Ложь, Истина)
			Или ирОбщий.ЛиКорневойТипЖурналаДокументовЛкс(ТипТаблицы)
		Тогда
			Если РежимОбходаДанных = "КлючиОбъектов" Тогда
				//ОбъектДляОбработки = СтрокаКлюча[ИмяПоляСсылка];
				ОбъектДляОбработки = Новый Структура;
				ОбъектДляОбработки.Вставить("Методы", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
				ОбъектДляОбработки.Вставить("Данные", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
			Иначе
				ирОбщий.ЗаблокироватьСсылкуВТранзакцииЛкс(СтруктураКлючаОбъекта[ИмяПоляСсылка], Истина);
				ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(, СтруктураКлючаОбъекта[ИмяПоляСсылка]);
			КонецЕсли; 
			ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
		ИначеЕсли ирОбщий.ЛиКорневойТипКонстантыЛкс(ТипТаблицы) Тогда
			ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(ПолноеИмяТаблицыСтроки);
			Если РежимОбходаДанных = "КлючиОбъектов" Тогда
				//
			Иначе
				ирОбщий.ЗаблокироватьКонстантуЛкс(ОбъектДляОбработки.Методы, Истина);
				ОбъектДляОбработки.Методы.Прочитать();
			КонецЕсли; 
			ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
		ИначеЕсли ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицы) Тогда
			//ОбъектДляОбработки = СтрокаКлюча[ИмяПоляСсылка];
			ОбъектДляОбработки = Новый Структура;
			ОбъектДляОбработки.Вставить("Методы", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
			ОбъектДляОбработки.Вставить("Данные", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
			ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
		ИначеЕсли ирОбщий.ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицы) Тогда
			СсылкаОбъекта = СтруктураКлючаОбъекта[ИмяПоляСсылка]; // СправочникСсылка
			ирОбщий.ЗаблокироватьСсылкуВТранзакцииЛкс(СсылкаОбъекта, Истина);
			ОбъектМДОбъекта = СсылкаОбъекта.Метаданные();
			ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(, СсылкаОбъекта);
			Если РежимОбходаДанных = "Строки" Тогда
				ИмяТЧ = ирОбщий.СтрРазделитьЛкс(ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяТаблицыСтроки))[2];
				КоллекцияСтрок = ОбъектДляОбработки.Данные[ИмяТЧ];
				Для Каждого СтрокаДляОбработки Из КопияСтрокОбъекта Цикл
					Если КоллекцияСтрок.Количество() < СтрокаДляОбработки[ИмяПоляНомерСтроки] Тогда
						ВызватьИсключение "Строка таблицы с номером " + СтрокаДляОбработки[ИмяПоляНомерСтроки] + " не найдена в объекте БД";
					КонецЕсли; 
					ЭлементыОбъекта.Добавить(КоллекцияСтрок[СтрокаДляОбработки[ИмяПоляНомерСтроки] - 1]);
				КонецЦикла;
			Иначе
				ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
			КонецЕсли; 
		ИначеЕсли ирОбщий.ЛиМетаданныеРегистраЛкс(ОбъектМДОбъекта) Тогда
			ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(ПолноеИмяТаблицыСтроки, СтруктураКлючаОбъекта,, Ложь);
			Если РежимОбходаДанных <> "КлючиОбъектов" Тогда
				КоллекцияСтрок = ирОбщий.ПрочитатьНаборЗаписейВТаблицуЛкс(ОбъектДляОбработки.Методы, РежимБлокировкиДанных.Исключительный);
			КонецЕсли;
			Если РежимОбходаДанных = "Строки" Тогда
				СтараяКоллекцияСтрок = КоллекцияСтрок.Скопировать();
				ЗагрузитьСтрокиПослеОбработки = Истина;
				Если СтруктураКлючаСтроки.Свойство(ИмяПоляНомерСтроки) Тогда
					КлючСтроки = Новый Структура(ИмяПоляНомерСтроки);
				Иначе
					КлючСтроки = СтруктураКлючаСтроки;
				КонецЕсли; 
				Для Каждого СтрокаДляОбработки Из КопияСтрокОбъекта Цикл
					Если КлючСтроки = Неопределено Тогда
						Если КоллекцияСтрок.Количество() = 0 Тогда
							ВызватьИсключение "Строка таблицы не найдена в объекте БД. Возможно она уже была удалена.";
						КонецЕсли; 
						СтрокаОбъекта = КоллекцияСтрок[0];
					Иначе
						ЗаполнитьЗначенияСвойств(КлючСтроки, СтрокаДляОбработки); 
						НайденныеСтроки = КоллекцияСтрок.НайтиСтроки(КлючСтроки);
						Если НайденныеСтроки.Количество() = 0 Тогда
							ВызватьИсключение "Строка таблицы по ключу " + ирОбщий.РасширенноеПредставлениеЛкс(КлючСтроки) + " не найдена в объекте БД";
						КонецЕсли;
						//Если ЭтоРегистрБухгалтерии Тогда
							СтрокаОбъекта = НайденныеСтроки[0];
						//Иначе
						//	ИндексСтрокиНабора = КоллекцияСтрок.Индекс(НайденныеСтроки[0]);
						//	СтрокаОбъекта = ОбъектДляЗаписи[ИндексСтрокиНабора];
						//КонецЕсли; 
					КонецЕсли; 
					ЭлементыОбъекта.Добавить(СтрокаОбъекта);
				КонецЦикла;
			Иначе
				Если Истина
					И РежимОбходаДанных <> "КлючиОбъектов"
					И ирОбщий.ЛиКорневойТипРегистраБухгалтерииЛкс(ТипТаблицы) 
				Тогда
					ОбъектДляОбработки.Методы.Загрузить(КоллекцияСтрок);
				КонецЕсли;
				ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
			КонецЕсли; 
		Иначе
			ВызватьИсключение "Неподдерживаемый тип таблицы """ + ТипТаблицы + """";
		КонецЕсли;
		//Если РежимОбходаДанных <> "КлючиОбъектов" Тогда
		//	ирОбщий.УстановитьПараметрыЗаписиОбъектаЛкс(ОбъектДляОбработки.Методы, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений);
		//КонецЕсли; 
		Если ОбъектДляОбработки = Неопределено Тогда
			РезультатОбработки = "Пропущен";
			Если ВыводитьСообщения Тогда
				ирОбщий.СообщитьЛкс("Пропущен удаленный """ + СтруктураКлючаОбъекта[ИмяПоляСсылка] + """");
			КонецЕсли;
		Иначе
			ТекстСообщенияОбОбработкеОбъекта = "Обработка объекта " + ирОбщий.XMLКлючОбъектаБДЛкс(ОбъектДляОбработки.Методы);
			Если ВыводитьСообщения Тогда
				ирОбщий.СообщитьЛкс(ТекстСообщенияОбОбработкеОбъекта);
			КонецЕсли;
			СчетчикЭлемента = 0;
			КоличествоЭлементов = ЭлементыОбъекта.Количество();
			Если ПараметрыОбработки.Свойство("ПринудительнаяЗапись") Тогда
				ПринудительнаяЗапись = ПараметрыОбработки.ПринудительнаяЗапись;
			Иначе
				ПринудительнаяЗапись = Ложь;
			КонецЕсли; 
			Для Каждого ЭлементОбъекта Из ЭлементыОбъекта Цикл
				СчетчикЭлемента = СчетчикЭлемента + 1;
				ОбщиеПараметрыЭлементов = ОбщиеПараметрыЭлементов(КоличествоЭлементов, КопияСтрокОбъекта, СчетчикЭлемента, ЭтоПервыйОбъектБД, ЭтоПоследнийОбъектБД);
				ирОбщий.СкопироватьКоллекциюЛкс(ОбщиеПараметрыЭлементов, ПараметрыОбработки);
				Выполнить(ИмяОбъектаОбработкиОбъекта + "." + ИмяМетодаОбработкиОбъекта + "(ЭлементОбъекта, КоллекцияСтрок, ОбъектДляОбработки.Данные, ПараметрыОбработки, ОбъектДляОбработки.Методы, ПринудительнаяЗапись)");
			КонецЦикла;
			Если ЗагрузитьСтрокиПослеОбработки Тогда
				Если ПринудительнаяЗапись Или Не ирОбщий.ТаблицыЗначенийРавныЛкс(СтараяКоллекцияСтрок, КоллекцияСтрок) Тогда
					ОбъектДляОбработки.Методы.Загрузить(КоллекцияСтрок);
				КонецЕсли; 
			КонецЕсли; 
			Если Истина
				И Не ирОбщий.ЛиТипСсылкиБДЛкс(ТипЗнч(ОбъектДляОбработки.Методы), Ложь)
				//И Не ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицы) // Поглощена
			Тогда
				ЭтоНовыйОбъект = Ложь;
				Если ирОбщий.ЛиКорневойТипСсылкиЛкс(ТипТаблицы, Истина) Тогда
					ЭтоНовыйОбъект = Ложь
						Или Не ЗначениеЗаполнено(ОбъектДляОбработки.Методы.Ссылка) 
						Или ОбъектДляОбработки.Методы.ЭтоНовый();  // https://www.hostedredmine.com/issues/937634
				КонецЕсли; 
				Попытка
					Модифицированность = Истина
						И Не ЭтоНовыйОбъект
						И (Ложь
							Или ОбъектДляОбработки.Методы.Модифицированность() 
							Или ПринудительнаяЗапись);
				Исключение
					// Объект мог быть удален
					Модифицированность = Ложь;
				КонецПопытки; 
				Если Модифицированность Тогда
					РежимЗаписи = Неопределено;
					Если Истина
						И ПроводитьПроведенныеДокументыПриЗаписи
						И ирОбщий.ЛиКорневойТипДокументаЛкс(ирОбщий.ПервыйФрагментЛкс(ПолноеИмяТаблицыСтроки))
						И ОбъектМДОбъекта.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
						И ОбъектДляОбработки.Данные.Проведен
					Тогда
						РежимЗаписи = РежимЗаписиДокумента.Проведение;
					КонецЕсли;
					ирОбщий.ЗаписатьОбъектЛкс(ОбъектДляОбработки.Методы,, РежимЗаписи);
					ЗаписанАвтоматически = Истина;
				КонецЕсли;
			КонецЕсли; 
			РезультатОбработки = "Успех";
			Если ВыводитьСообщения Тогда
				ирОбщий.СообщитьЛкс(Символы.Таб + РезультатОбработки);
			КонецЕсли; 
		КонецЕсли; 
		Если ПараметрыОбработки.ТранзакцияОбъекта Тогда
			Если ТипТаблицы = "Внешняя" Тогда
				ВнешниеИсточникиДанных[ОбъектМДОбъекта.Родитель().Имя].ЗафиксироватьТранзакцию();
			Иначе
				ЗафиксироватьТранзакцию();
			КонецЕсли;
		КонецЕсли;
	Исключение
		Если ПараметрыОбработки.ТранзакцияОбъекта Тогда
			Если ТипТаблицы = "Внешняя" Тогда
				ВнешниеИсточникиДанных[ОбъектМДОбъекта.Родитель().Имя].ОтменитьТранзакцию();
			Иначе
				ОтменитьТранзакцию();
			КонецЕсли;
		КонецЕсли;
		РезультатОбработки = ОписаниеОшибки();
		Если Не ВыводитьСообщения Тогда
			ирОбщий.СообщитьЛкс(ТекстСообщенияОбОбработкеОбъекта);
		КонецЕсли; 
		ирОбщий.СообщитьЛкс(Символы.Таб + РезультатОбработки, СтатусСообщения.Внимание);
		Если Не ПропускатьОшибки Или ТранзакцияАктивна() Тогда
			ВызватьИсключение;
		КонецЕсли; 
	КонецПопытки;
	Если Истина
		И РезультатОбработки = "Успех"
		И УдалятьРегистрациюНаУзлеПослеОбработкиОбъекта 
		И ЗначениеЗаполнено(УзелОтбораОбъектов)
	Тогда 
		ОбъектМД = Метаданные.НайтиПоТипу(ирОбщий.ТипОбъектаБДЛкс(ОбъектДляОбработки.Методы));
		Если мСоставПланаОбмена.Содержит(ОбъектМД) Тогда
			ирОбщий.ПланыОбменаИзменитьРегистрациюЛкс(УзелОтбораОбъектов, ОбъектДляОбработки, Ложь);
		КонецЕсли; 
	КонецЕсли; 
	ТекстСообщений = "";
	#Если Не Клиент Тогда
		СообщенияОбъекта = ПолучитьСообщенияПользователю(Истина);
		ТекстСообщений = ирОбщий.СоединитьСообщенияПользователюЛкс(СообщенияОбъекта);
	#КонецЕсли
	РезультатОбработки = Новый Структура("Результат, ТекстСообщений, ЗаписанАвтоматически", РезультатОбработки, ТекстСообщений, ЗаписанАвтоматически);
	Возврат РезультатОбработки;

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

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

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

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

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

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

Процедура Шаблон_ПередОбработкойВсех(ПараметрыОбработки, Отказ) Экспорт 
	
КонецПроцедуры

Процедура Шаблон_ПослеОбработкиВсех(ПараметрыОбработки) Экспорт 
	
КонецПроцедуры

Процедура Шаблон_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

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

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

	Если ЗначениеЗаполнено(ПараметрыОбработки.ИмяТабличнойЧасти) Тогда
		КлючПоиска = Новый Структура;
		Для Каждого РеквизитПоиска Из ПараметрыОбработки.РеквизитыДляСохранения.НайтиСтроки(Новый Структура("Пометка, КлючПоиска, ТипИзменения", Истина, Истина, "УстановитьЗначение")) Цикл
			КлючПоиска.Вставить(РеквизитПоиска.Идентификатор, РеквизитПоиска.Значение);
		КонецЦикла;
		НайденныеСтрокиТЧ = Объект[ПараметрыОбработки.ИмяТабличнойЧасти].НайтиСтроки(КлючПоиска);
		Если НайденныеСтрокиТЧ.Количество() > 1 Тогда
			ВызватьИсключение "Найдено более одной строки по реквизитам поиска";
		ИначеЕсли НайденныеСтрокиТЧ.Количество() = 0 Тогда
			Объект = Объект[ПараметрыОбработки.ИмяТабличнойЧасти].Добавить();
			ЗаполнитьЗначенияСвойств(Объект, КлючПоиска); 
		ИначеЕсли Не ПараметрыОбработки.ОбрабатыватьСуществующую Тогда 
			Возврат;
		Иначе
			Объект = НайденныеСтрокиТЧ[0];
		КонецЕсли; 
	КонецЕсли;
	ИмяПоляЭтоГруппа = ирОбщий.ПеревестиСтроку("ЭтоГруппа");
	ИмяПоляСсылка = "";
	ТипОбъектаДанных = ирОбщий.ТипОбъектаБДЛкс(ОбъектБДМетоды);
	ЭтоНаборЗаписей = ирОбщий.ЛиНаборЗаписейРегистраЛкс(ТипОбъектаДанных);
	СтарыйНаборЗаписей = Неопределено;
	ОбъектМодифицирован = Ложь;
	Если ПараметрыОбработки.Интерактивно Тогда
		МоментНачала = ирОбщий.ТекущееВремяВМиллисекундахЛкс();
		ФормаОбъекта = Объект.Ссылка.ПолучитьФорму();
		ФормаОбъекта.Открыть();
	КонецЕсли;
	Для каждого СтрокаРеквизита из ПараметрыОбработки.РеквизитыДляСохранения Цикл
		#Если Сервер И Не Сервер Тогда
			СтрокаРеквизита = Обработки.ирПодборИОбработкаОбъектов.Создать().ЗначенияРеквизитов.Добавить();
		#КонецЕсли
		Если Ложь
			Или СтрокаРеквизита.Использование = ""
			Или СтрокаРеквизита.Использование = "ДляГруппыИЭлемента"
			Или (Объект[ИмяПоляЭтоГруппа] И СтрокаРеквизита.Использование = "ДляГруппы")
			Или (Не Объект[ИмяПоляЭтоГруппа] И СтрокаРеквизита.Использование = "ДляЭлемента")
		Тогда
			ИмяРеквизита = СтрокаРеквизита.Идентификатор;
			НовоеЗначение = СтрокаРеквизита.Значение;
			ДопРеквизит = СтрокаРеквизита.ДопРеквизит;
			#Если Сервер И Не Сервер Тогда
				ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка(); // - БСП //@skip-check unknown-method-property
			#КонецЕсли
			Если СтрокаРеквизита.ТипИзменения <> "УстановитьЗначение" Тогда
				Если ЗначениеЗаполнено(ДопРеквизит) Тогда
					ТекущееЗначение = ирОбщий.ЗначениеДопРеквизитаБСПЛкс(Объект, ДопРеквизит, ИмяПоляСсылка);
				Иначе
					ТекущееЗначение = Объект[ИмяРеквизита];
				КонецЕсли; 
				Если СтрокаРеквизита.ТипИзменения = "Округлить" Тогда
					НовоеЗначение = Окр(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьЦелуюЧасть" Тогда
					НовоеЗначение = Цел(НовоеЗначение) + ТекущееЗначение - Цел(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьДробнуюЧасть" Тогда
					НовоеЗначение = НовоеЗначение - Цел(НовоеЗначение) + Цел(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьВремя" Тогда
					НовоеЗначение = Дата(Год(ТекущееЗначение), Месяц(ТекущееЗначение), День(ТекущееЗначение), Час(НовоеЗначение), Минута(НовоеЗначение), Секунда(НовоеЗначение));
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьДату" Тогда
					НовоеЗначение = Дата(Год(НовоеЗначение), Месяц(НовоеЗначение), День(НовоеЗначение), Час(ТекущееЗначение), Минута(ТекущееЗначение), Секунда(ТекущееЗначение));
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВНачалоДня" Тогда
					НовоеЗначение = НачалоДня(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВКонецДня" Тогда
					НовоеЗначение = КонецДня(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВНачалоМесяца" Тогда
					НовоеЗначение = НачалоМесяца(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВКонецМесяца" Тогда
					НовоеЗначение = КонецМесяца(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВНачалоГода" Тогда
					НовоеЗначение = НачалоГода(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВКонецГода" Тогда
					НовоеЗначение = КонецГода(ТекущееЗначение);
				ИначеЕсли СтрокаРеквизита.ТипИзменения = "ИнвертироватьЗначение" Тогда
					НовоеЗначение = Не ТекущееЗначение;
				КонецЕсли; 
			КонецЕсли; 
			Если ЗначениеЗаполнено(ДопРеквизит) Тогда
				ирОбщий.УстановитьЗначениеДопРеквизитаБСПЛкс(Объект, ДопРеквизит, НовоеЗначение, ИмяПоляСсылка);
			Иначе 
				Если ПараметрыОбработки.Интерактивно Тогда
					#Если Клиент Тогда
					Если ТипЗнч(ФормаОбъекта) = Тип("Форма") Тогда
						ПолеВвода = ФормаОбъекта.ЭлементыФормы.Найти(ИмяРеквизита);
						Если ТипЗнч(ПолеВвода) <> Тип("ПолеВвода") Тогда
							ПолеВвода = Неопределено;
						КонецЕсли;
					Иначе //!Если ТипЗнч(ФормаОбъекта) = Тип("ФормаКлиентскогоПриложения") Тогда
						ПолеВвода = ФормаОбъекта.Элементы.Найти(ИмяРеквизита);
						Если ТипЗнч(ПолеВвода) <> Тип("ПолеФормы") Тогда
							ПолеВвода = Неопределено;
						КонецЕсли;
					КонецЕсли;
					Если ПолеВвода = Неопределено Тогда
						ВызватьИсключение ирОбщий.СтрШаблонЛкс(НСтр("ru='В форме объекта не найдено поле ввода с именем ""%1""'"), ИмяРеквизита);
					КонецЕсли;
					ирКлиент.ИнтерактивноЗаписатьВПолеВводаЛкс(ПолеВвода, НовоеЗначение);
					#КонецЕсли
				Иначе
					ирОбщий.ПрисвоитьЕслиНеРавноЛкс(Объект[ИмяРеквизита], НовоеЗначение, ОбъектМодифицирован);
				КонецЕсли;
				Если Истина
					И ОбъектМодифицирован 
					И ЭтоНаборЗаписей 
					И ПараметрыОбработки.ИзменятьИзмерения 
				Тогда 
					#Если Сервер И Не Сервер Тогда
						ОбъектБДМетоды = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
					#КонецЕсли
					ЭлементОтбора = ОбъектБДМетоды.Отбор.Найти(ИмяРеквизита);
					Если ЭлементОтбора <> Неопределено Тогда 
						Если СтарыйНаборЗаписей = Неопределено Тогда
							ОбъектМД = Метаданные.НайтиПоТипу(ТипОбъектаДанных);
							ИмяТаблицыРегистра = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ОбъектМД.ПолноеИмя());
							СтруктураКлючаЗаписи = ирОбщий.СтруктураКлючаТаблицыБДЛкс(ИмяТаблицыРегистра);
							ЗаполнитьЗначенияСвойств(СтруктураКлючаЗаписи, ОбъектБДДанные[0]); 
							СтарыйНаборЗаписей = ирОбщий.ОбъектБДПоКлючуЛкс(ИмяТаблицыРегистра, СтруктураКлючаЗаписи,, Ложь);
						КонецЕсли; 
						ЭлементОтбора.Значение = НовоеЗначение;
					КонецЕсли;
				КонецЕсли; 
			КонецЕсли; 
		КонецЕсли;
	КонецЦикла;
	// Антибаг 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1034144#1034144
	Если ОбъектМодифицирован И ЭтоНаборЗаписей И ПараметрыОбработки.РеквизитыДляСохранения.Количество() > 0 Тогда
		ИмяПоляПериод = ирОбщий.ПеревестиСтроку("Период");
		ИмяПоляРегистратор = ирОбщий.ПеревестиСтроку("Регистратор");
		Попытка
			Объект[ИмяПоляПериод] = Объект[ИмяПоляПериод];
		Исключение
			Попытка
				Объект[ИмяПоляРегистратор] = Объект[ИмяПоляРегистратор];
			Исключение
			КонецПопытки; 
		КонецПопытки; 
	КонецЕсли; 
	Если СтарыйНаборЗаписей <> Неопределено Тогда
		Если Не ТранзакцияАктивна() Тогда
			ВызватьИсключение "Изменять измерения регистра можно только в транзакции";
		КонецЕсли; 
		Если Не ПараметрыОбработки.ЗаменятьСуществующие Тогда
			ирОбщий.ЗаблокироватьНаборЗаписейПоОтборуЛкс(ОбъектБДМетоды);
			ЗаполнитьЗначенияСвойств(СтруктураКлючаЗаписи, Объект); 
			НаборУдаляемыхЗаписей = ирОбщий.ОбъектБДПоКлючуЛкс(ИмяТаблицыРегистра, СтруктураКлючаЗаписи,, Истина);
			Если НаборУдаляемыхЗаписей.Методы.Количество() > 0 Тогда
				ВызватьИсключение "Уже существует строка регистра " + ирОбщий.XMLКлючОбъектаБДЛкс(НаборУдаляемыхЗаписей.Методы);
			КонецЕсли; 
		КонецЕсли; 
		ирОбщий.ЗаписатьОбъектЛкс(СтарыйНаборЗаписей.Методы);
	КонецЕсли; 
	Если ПараметрыОбработки.Интерактивно Тогда
		#Если Клиент Тогда
		Попытка
			Если ФормаОбъекта.Модифицированность Или выхПринудительнаяЗапись Тогда
				Если ТипЗнч(ФормаОбъекта) = Тип("Форма") Тогда
					ФормаОбъекта.ЗаписатьВФорме();
				Иначе
					ФормаОбъекта.Записать();
				КонецЕсли;
			КонецЕсли;
		Исключение
			ФормаОбъекта.Модифицированность = Ложь;
			ФормаОбъекта.Закрыть();
			ВызватьИсключение;
		КонецПопытки;
		ФормаОбъекта.Модифицированность = Ложь;
		ФормаОбъекта.Закрыть();
		Если ПараметрыОбработки.ЭтоПервыйОбъектБД Тогда
			ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонЛкс("Длительность обработки первого объекта %1 мс", ирОбщий.ТекущееВремяВМиллисекундахЛкс() - МоментНачала),,, Истина);
		КонецЕсли;
		выхПринудительнаяЗапись = Ложь;
		#КонецЕсли
	КонецЕсли;

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

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

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

Процедура ИзменитьРегистрациюНаУзле_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

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

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

Процедура Удалить_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

	Если КоллекцияСтрок <> Неопределено Тогда
		КоллекцияСтрок.Удалить(Объект);
	Иначе
		ирОбщий.УдалитьОбъектЛкс(ОбъектБДМетоды);
	КонецЕсли; 

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

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

	ТекстАлгоритма = ПараметрыОбработки.ТекстПроизвольногоАлгоритма;
	ТекстАлгоритма = "Объект = _П0; ОбъектБД = _П1; ОбъектБДМетоды = _П2; Параметры = _П3; ЭтоПервыйОбъектБД = _П4; ЭтоПоследнийОбъектБД = _П5; ЭтоПервыйЭлемент = _П6; ЭтоПоследнийЭлемент = _П7; ПринудительнаяЗапись = _П8; СтрокаПараметров = _П9;
	|" + ТекстАлгоритма;
	Для Каждого СтрокаПараметра Из ПараметрыОбработки.Параметры Цикл
		ТекстАлгоритма = СтрокаПараметра.Имя + " = _АлгоритмОбъект[" + ПараметрыОбработки.Параметры.Индекс(СтрокаПараметра) + "];
		|" + ТекстАлгоритма;
	КонецЦикла; 
	ТекстАлгоритма = ТекстАлгоритма + "
	|;
	|_П8 = ПринудительнаяЗапись;
	|";
	ирОбщий.ВыполнитьАлгоритм(ТекстАлгоритма, ПараметрыОбработки.Параметры.ВыгрузитьКолонку("Значение")
		, , Объект, ОбъектБДДанные, ОбъектБДМетоды, ПараметрыОбработки, ПараметрыОбработки.ЭтоПервыйОбъектБД, ПараметрыОбработки.ЭтоПоследнийОбъектБД, ПараметрыОбработки.ЭтоПервыйЭлемент,
		ПараметрыОбработки.ЭтоПоследнийЭлемент, выхПринудительнаяЗапись, ПараметрыОбработки.СтрокаПараметров);

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

Процедура ПровестиДокументы_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

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

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

Процедура ОтменитьПроведениеДокументов_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

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

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

Процедура ОчиститьДвиженияДокументов_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

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

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

Процедура ИзменитьПометкуНаУдаление_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

	ирОбщий.УстановитьПометкуУдаленияОбъектаЛкс(ОбъектБДМетоды, , ПараметрыОбработки.НовоеЗначениеПометки);
	
КонецПроцедуры

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

Процедура ЗаписатьВерсию_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт

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

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

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

Процедура ВыгрузкаВФайл_ПередОбработкойВсех(ПараметрыОбработки, Отказ) Экспорт

	ВыгрузкаЗагрузкаДанныхЧерезФайл = ирОбщий.СоздатьОбъектПоИмениМетаданныхЛкс("Обработка.ирВыгрузкаЗагрузкаДанныхЧерезФайл");
	ПараметрыОбработки.Вставить("ВыгрузкаЗагрузкаДанныхЧерезФайл", ВыгрузкаЗагрузкаДанныхЧерезФайл);
	ВыгрузкаЗагрузкаДанныхЧерезФайл.ПередВыгрузкойВсех(ПараметрыОбработки);
	
КонецПроцедуры

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

	ВыгрузкаЗагрузкаДанныхЧерезФайл = ПараметрыОбработки.ВыгрузкаЗагрузкаДанныхЧерезФайл;
	#Если Сервер И Не Сервер Тогда
		ВыгрузкаЗагрузкаДанныхЧерезФайл = Обработки.ирВыгрузкаЗагрузкаДанныхЧерезФайл.Создать();
	#КонецЕсли
	ВыгрузкаЗагрузкаДанныхЧерезФайл.ВыгрузитьОбъектВыборки(ОбъектБДМетоды, ПараметрыОбработки);
	
КонецПроцедуры

Функция ВыгрузкаВФайл_ПослеОбработкиВсех(ПараметрыОбработки) Экспорт

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

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

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

Функция ПеренумерацияОбъектов(Параметры) Экспорт 

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

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

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