Процедура ВыполнитьЭкспорт()

	Попытка
		О=СоздатьОбъект("Chronograf.ATimeTable");
		БазаСоздана=1;
	Исключение
		БазаСоздана=0;
		Предупреждение("Невозможно произвести экспорт данных в Хронограф. Для данной операции необходимо поставить Хронограф версии 2.75 или более позднюю.");
	КонецПопытки;
	ФайлВыбран=0;
	Если БазаСоздана=1 тогда
		пока ФайлВыбран=0 цикл
			Файл=О.RunSaveDialog;
			Если Файл="" тогда
				ФайлВыбран=-1;
			Иначе
				ФайлВыбран=1;
			КонецЕсли;
			Если файлВыбран=1 тогда
				зюзю=СоздатьОбъект("ФС");
				если зюзю.СуществуетФайл(Файл)=1 тогда
					попытка
						зюзю.УдалитьФайл(Файл);
					Исключение
						Предупреждение("Невозможно удалить файл "+файл+". Попробуйте выбрать другое имя файла.");
						ФайлВыбран=0;
					КонецПопытки;
				КонецЕсли;
				если зюзю.СуществуетФайл(Файл)=1 тогда
					Предупреждение("Невозможно удалить файл "+файл+". Попробуйте выбрать другое имя файла.");
					ФайлВыбран=0;
				КонецЕсли;
			КонецЕсли;		
		КонецЦикла;
	КонецЕсли;
	
	если ФайлВыбран=1 тогда
		РспНгр=СоздатьОбъект("Справочник.РаспределениеНагрузки");
	    РУП=СоздатьОбъект("Справочник.РазделыУчебногоПлана");
		МоиКлассы=СоздатьОбъект("Справочник.Классы");
		РаздПрд=СоздатьОбъект("Справочник.РазделыПредметов");
		МоиПредметы=СоздатьОбъект ("Справочник.Предметы");
		МоиПрепы=СоздатьОбъект ("Справочник.Сотрудники");
		МоиКабинеты=СоздатьОбъект ("Справочник.Кабинеты");
		СпрПредСотр = СоздатьОбъект("Справочник.ПредметыСотрудника");
		СпрКабСотр = СоздатьОбъект("Справочник.КабинетыСотрудника");
		УчПл=СоздатьОбъект("Справочник.УчебныйПлан");

		О.SchoolName=СокрЛП(Константа.к1);
		О.SchoolAddress=СокрЛП(Константа.к2);
		О.SchoolPhone=СокрЛП(Константа.к3);
		О.SchoolDirector=СокрЛП(Константа.к4);

		МоиКлассы.ВыбратьЭлементы();
		пока МоиКлассы.ПолучитьЭлемент()>0 цикл
			ц=Лев(МоиКлассы.Наименование,СтрДлина(МоиКлассы.Наименование)-1);
			Попытка
				Пар=О.FindParallel(Число(ц));
			Исключение
				Пар=О.AddParallel(Число(ц));
			КонецПопытки;
			к=Пар.AddCls(МоиКлассы.Наименование);
			к.Man=МоиКлассы.Мальчики;
			к.Woman=МоиКлассы.Девочки;
		КонецЦикла;
	
		МоиПредметы.ПорядокРеквизита("ОбластьЗнания");
		МоиПредметы.ВыбратьЭлементы();
		пока МоиПредметы.ПолучитьЭлемент()>0 цикл
			РУП.ИспользоватьВладельца(МоиПредметы.ТекущийЭлемент());
			РУП.ВыбратьЭлементы();
			СтатусПоиска=1;
			пока (СтатусПоиска=1) цикл
				СтатусПоиска=РУП.ПолучитьЭлемент();
				Если (СтатусПоиска=1) и (РУП.Наименование="Базовый") тогда
					СтатусПоиска=0;
					ц=О.AddSubject(МоиПредметы.Наименование,МоиПредметы.Сокр,0);
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
	
		МоиКабинеты.ВыбратьЭлементы();
		пока МоиКабинеты.ПолучитьЭлемент()>0 цикл
			ц=О.AddCabinet(МоиКабинеты.Наименование,МоиКабинеты.Этаж,МоиКабинеты.Вместимость);
		КонецЦикла;
	    
		КлассПрепа=СоздатьОбъект("Справочник.КлассыСотрудника");
		
		МоиПрепы.ВыбратьЭлементы();
		пока МоиПрепы.ПолучитьЭлемент()>0 цикл
			СпрПредСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
			СпрПредСотр.ВыбратьЭлементы();
			если СпрПредСотр.ПолучитьЭлемент()>0 тогда
				ц=О.AddTeacher(МоиПрепы.Фамилия+" "+Лев(МоиПрепы.Имя,1)+"."+Лев(МоиПрепы.Отчество,1)+".");
				ц.Tag=МоиПрепы.Код;
	
				КлассПрепа.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
				КлассПрепа.ВыбратьЭлементы();
				Если КлассПрепа.ПолучитьЭлемент()>0 тогда
					ц.SetMyClsN(КлассПрепа.Класс.Наименование);
				КонецЕсли;
	
	
				ы=О.FindSubject(СпрПредСотр.Предмет.Наименование);
				зю=ы.AddSubjTeacherN(ц.Name);
				пока СпрПредСотр.ПолучитьЭлемент()>0 цикл
					Зю=О.FindSubject(СпрПредСотр.Предмет.Наименование);
					зюзю=Зю.AddSubjTeacherN(ц.Name);
				КонецЦикла;
				СпрКабСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
				СпрКабСотр.ВыбратьЭлементы();
				Если СпрКабСотр.ПолучитьЭлемент()>0 тогда
					ц.Cabinet=О.FindCabinet(СпрКабСотр.Кабинет.Наименование);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	    
	
		УчПл.ВыбратьЭлементы();
		Пока УчПл.ПолучитьЭлемент()>0 Цикл
			Если УчПл.Раздел.Наименование="Базовый" тогда
				О.FindSubject(УчПл.Предмет.Наименование).AddSubjClsN(УчПл.Класс.Наименование).Nagr=УчПл.Нагрузка;
			КонецЕсли;
		КонецЦикла;
		
		О.AssignSpecialClassesAutomatically();
		О.SaveToFile(Файл);
	КонецЕсли;

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




//*******************************************
Процедура ВыполнитьИмпорт()
	РаздУчПл="Базовый";
	
	СпрРаспНагр=СоздатьОбъект("Справочник.РаспределениеНагрузки");

	попытка
		База=СоздатьОбъект("Chronograf.ATimeTable");
		Дальше=1;
	Исключение
		Дальше=0;
		Предупреждение("Невозможно произвести импорт данных из Хронографа. Для данной операции необходимо поставить Хронограф версии 2.75 или более позднюю.");
	КонецПопытки;
	
	Если Дальше=1 тогда
		Попытка
			База.LoadFromFileUsingOpenDialog();
		Исключение
			Дальше=0;
		КонецПопытки;
	КонецЕсли;

	Если Дальше=1 тогда
	
		НачатьТранзакцию();

		Константа.к1=База.SchoolName;
		Константа.к2=База.SchoolAddress;
		Константа.к3=База.SchoolPhone;
		Константа.к4=База.SchoolDirector;
		
		для и1=0 по База.ClsCount-1 цикл
			База.GetCls(и1).Tag=-1;
		КонецЦикла;
		
//	Грохаются все классы, которых нет в хронографе и добавляются новые
        
		СпециализацииКласса=СоздатьОбъект("Справочник.Специализации");
		СпециализацииКласса.НайтиПоКоду(1);
		
        КлсКод=1;
		УдалКлс=СоздатьОбъект("СписокЗначений");
		МоиКлассы=СоздатьОбъект("Справочник.Классы");
		МоиКлассы.выбратьэлементы(0);
		пока МоиКлассы.получитьэлемент()<>0 цикл
			Попытка
				кл=База.FindCls(МоиКлассы.Наименование);
				кл.Tag=МоиКлассы.Код;
				Если Число(МоиКлассы.Код)>КлсКод тогда
					КлсКод=Число(МоиКлассы.Код);
				КонецЕсли;
				МоиКлассы.Мальчики=кл.Man;
				МоиКлассы.Девочки=кл.Woman;
				МоиКлассы.Численность=кл.Man+кл.Woman;
				
				Если кл.SpCls=0 Тогда
					МоиКлассы.Специализация=СпециализацииКласса.ТекущийЭлемент();
				Иначе
					МоиКлассы.Специализация="";
				КонецЕсли;
				
				МоиКлассы.Записать();
			Исключение
				УдалКлс.ДобавитьЗначение(МоиКлассы.Код);
//				УдаЛитьКласс(МоиКлассы.Код);
//				МоиКлассы.Удалить();
			КонецПопытки
		конеццикла;
		
		для а=1 по УдалКлс.РазмерСписка() цикл
			УдаЛитьКласс(УдалКлс.ПолучитьЗначение(а));	
		КонецЦикла;
		для а=0 по База.ClsCount-1 цикл
			к=База.GetClsUseClsOrder(а);
			Если к.Tag=-1 тогда
		        МоиКлассы.Новый();
				МоиКлассы.Наименование=к.Name;
				МоиКлассы.Мальчики=к.Man;
				МоиКлассы.Девочки=к.Woman;
				МоиКлассы.Численность=к.Man+к.Woman;
				Если к.SpCls=0 Тогда
					МоиКлассы.Специализация=СпециализацииКласса.ТекущийЭлемент();
				КонецЕсли;
				клсКод=КлсКод+1;
				МоиКлассы.Код=КлсКод;
				МоиКлассы.Записать();
				к.Tag=Число(МоиКлассы.Код);
				УчебныйПлан_ДобавитьКласс(МоиКлассы.ТекущийЭлемент());
			КонецЕсли;
		КонецЦикла;

// Добавляется если надо раздел учебного плана

		РУП=СоздатьОбъект("Справочник.РазделыУчебногоПлана");
		Если РУП.НайтиПоКоду(1)=0 тогда
			РУП.Новый();
			РУП.Наименование=РаздУчПл;
			РУП.Записать();
		КонецЕсли;
		РаздУчПлКод=РУП.Код;
		БазовыйРазделУчПл=РУП.ТекущийЭлемент();
        
		для и1=0 по База.SubjectCount-1 цикл
			База.Getsubject(и1).tag=-1;
		КонецЦикла;
		
// предметы: лишние предметы удаляются из Базового учебного плана.
// Если предмет был только в базовом учебном плане, то он удаляется совсем.
// Новые предметы добавляются в базовый учебный план

		УдалПрд=СоздатьОбъект("СписокЗначений");
		УдалРПРазд=СоздатьОбъект("СписокЗначений");
		УдалРППред=СоздатьОбъект("СписокЗначений");

		РаздПрд=СоздатьОбъект("Справочник.РазделыПредметов");
		МоиПредметы=СоздатьОбъект ("Справочник.Предметы");
		а=0;
		МоиПредметы.выбратьэлементы(1);
		пока МоиПредметы.получитьэлемент()=1 цикл
			РаздПрд.ИспользоватьВладельца(МоиПредметы.ТекущийЭлемент());
			РаздПрд.выбратьэлементы(1);
			зю=0;
			попытка
				с=База.FindSubject(МоиПредметы.Наименование);
				ПредмЕсть=1;
			Исключение
				ПредмЕсть=0;
				пока (зю=0) и (РаздПрд.ПолучитьЭлемент()=1) цикл
					если РаздПрд.Раздел<>РУП.ТекущийЭлемент() тогда
						зю=1
					иначе
//						УдалитьРазделПредмета(МоиПредметы.Код,РаздПрд.Код);
						УдалРПРазд.ДобавитьЗначение(РаздПрд.Код);
						УдалРППред.ДобавитьЗначение(МоиПредметы.Код);
							//			РаздПрд.Удалить();
					КонецЕсли;
				КонецЦикла;
				Если зю=0 тогда
//					УдалитьПредмет(МоиПредметы.Код);
					УдалПрд.ДобавитьЗначение(МоиПредметы.Код);
				КонецЕсли;
			КонецПопытки;

			Если ПредмЕсть=1 тогда
				если МоиПредметы.Сокр<>с.ShortName тогда
					МоиПредметы.Сокр=с.ShortName;
					МоиПредметы.Записать();
				КонецЕсли;
				с.Tag=Число(МоиПредметы.Код);
				пока (зю=0) и (РаздПрд.ПолучитьЭлемент()=1) цикл
					если РаздПрд.Раздел=РУП.ТекущийЭлемент() тогда
						зю=1;
					КонецЕсли;
				КонецЦикла;
				Если зю=0 тогда
					УчебныйПлан_ДобавитьРазделПредмета(МоиПредметы.ТекущийЭлемент(),РУП.ТекущийЭлемент());
				КонецЕсли;
				зю=1;
			КонецЕсли;
			Если (зю>0) и (Число(МоиПредметы.Код)>а) тогда
				а=Число(МоиПредметы.Код);
			КонецЕсли;
		конеццикла;
		
		для б=1 по УдалРПРазд.РазмерСписка() цикл
			УдалитьРазделПредмета(УдалРППред.получитьЗначение(б),УдалРПРазд.получитьЗначение(б));
		КонецЦикла;

		для б=1 по УдалПрд.РазмерСписка() цикл
			УдалитьПредмет(УдалПрд.получитьЗначение(б));
		КонецЦикла;


		а=а+1;
		для б=0 по База.SubjectCount-1 цикл
			к=База.Getsubject(б);
			Если к.Tag=-1 тогда
		        МоиПредметы.Новый();
				МоиПредметы.Наименование=к.Name;
				МоиПредметы.Сокр=к.ShortName;
				МоиПредметы.Код=а;
				МоиПредметы.Разделы=РУП.Наименование;
				МоиПредметы.Записать();
				РаздПрд.ИспользоватьВладельца(МоиПредметы.ТекущийЭлемент());
				РаздПрд.Новый();
				РаздПрд.Раздел=РУП.ТекущийЭлемент();
				РаздПрд.Записать();
				к.Tag=а;
				а=а+1;
				УчебныйПлан_ДобавитьРазделПредмета(МоиПредметы.ТекущийЭлемент(),РУП.ТекущийЭлемент());
			КонецЕсли;
		КонецЦикла;

// Добавляются новые кабинеты. Старые НЕ УДАЛЯЮТСЯ.
		
		для и1=0 по База.CabinetCount-1 цикл
			База.GetCabinet(и1).tag=-1;
		КонецЦикла;

		МоиКабинеты=СоздатьОбъект ("Справочник.Кабинеты");
		МоиКабинеты.выбратьэлементы(1);
		пока МоиКабинеты.получитьэлемент()=1 цикл
			попытка
				к=База.FindCabinet(МоиКабинеты.Наименование);
				КабЕсть=1;
			Исключение
				КабЕсть=0;
			Конецпопытки;
			Если КабЕсть=1 тогда
				к.Tag=Число(МоиКабинеты.Код);
				если МоиКабинеты.Вместимость<>к.Capacity тогда
					МоиКабинеты.Вместимость=к.Capacity;
					МоиКабинеты.Записать();
				КонецЕсли;

				если МоиКабинеты.Этаж<>к.Floor тогда
					МоиКабинеты.Этаж=к.Floor;
					МоиКабинеты.Записать();
				КонецЕсли
			КонецЕсли;
		конеццикла;

		для а=0 по База.CabinetCount-1 цикл
			к=База.GetCabinet(а);
			Если к.tag=-1 тогда
		        МоиКабинеты.Новый();
				МоиКабинеты.Наименование=к.Name;
				МоиКабинеты.Вместимость=к.Capacity;
				МоиКабинеты.Этаж=к.Floor;
				МоиКабинеты.Записать();
				к.tag=Число(МоиКабинеты.код);
			КонецЕсли;
		КонецЦикла;
	
		МоиПрепы=СоздатьОбъект ("Справочник.Сотрудники");
		СпрПредСотр = СоздатьОбъект("Справочник.ПредметыСотрудника");
		СпрКабСотр = СоздатьОбъект("Справочник.КабинетыСотрудника");

// Добавляются новые препы. старые не удаляются. Если старого препода нет в 
// хронографе, то у него сносятся все предметы. Кабинеты назначаются только новым и только в том случае
// если этот кабинет еще ни за кем не закреплен.


		для и1=0 по База.TeacherCount-1 цикл
			База.GetTeacher(и1).tag=-1;
		КонецЦикла;

		для и1=0 по База.CabinetCount-1 цикл
			База.GetCabinet(и1).tag=0;
		КонецЦикла;
        
		КлассыСотр=СоздатьОбъект("Справочник.КлассыСотрудника");
		
		МоиПрепы.выбратьэлементы(1);
		пока МоиПрепы.получитьэлемент()=1 цикл
			КлассыСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
			КлассыСотр.ВыбратьЭлементы(1);
			СпрКабСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
			СпрКабСотр.ВыбратьЭлементы(1);
			пока СпрКабСотр.ПолучитьЭлемент()=1 цикл
				попытка
					врем=База.GetCabinet(СпрКабСотр.Наименование);
					Врем.tag=Врем.Tag+1;
				исключение
				КонецПопытки;
			КонецЦикла;
			попытка
				Преп=МоиПрепы.Фамилия+" "+Лев(МоиПрепы.Имя,1)+"."+Лев(МоиПрепы.Отчество,1)+".";
				пр=База.FindTeacher(Преп);
				ПрепЕсть=1;
			Исключение
				ПрепЕсть=0;
				пока КлассыСотр.ПолучитьЭлемент()>0 цикл
					Клс=База.FindCls(КлассыСотр.Класс.Наименование);
					Попытка
						з=Клс.ClsRuk;
						КлассыСотр.Удалить();
					Исключение
					Конецпопытки;
				КонецЦикла;
				СпрПредСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
				СпрПредСотр.ВыбратьЭлементы(1);
				пока СпрПредСотр.ПолучитьЭлемент()=1 цикл
					СпрПредСотр.Удалить();
				КонецЦикла;
			КонецПопытки;
			
			Если ПрепЕсть=1 тогда
				МоиПрепы.Кабинеты=пр.CabinetName;                                
				МоиПрепы.Совместитель=пр.Sovm;
				пр.tag=МоиПрепы.Код;
				Врем2=0;
				попытка
					ИмяКласса=пр.MyCls.Name;
					КлсЕсть=1;
				Исключение
					КлсЕсть=0;
					пока КлассыСотр.ПолучитьЭлемент()>0 цикл
						КлассыСотр.Удалить();
					КонецЦикла;
				КонецПопытки;
				Если КлсЕсть=1 тогда
					пока КлассыСотр.ПолучитьЭлемент()>0 цикл
						Если ИмяКласса<>КлассыСотр.Класс.Наименование тогда
							КлассыСотр.Удалить();
						Иначе
							Врем2=1;
						КонецЕсли;
					КонецЦикла;
					Если Врем2=0 тогда
						КлассыСотр.Новый();
						МоиКлассы.НайтиПоНаименованию(ИмяКласса);
						КлассыСотр.Класс=МоиКлассы.ТекущийЭлемент();
			            КлассыСотр.Записать();
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		конеццикла;
                    
// добавляются новые препы и назначаются им кабинеты, если эти кабинеты еще не назначены

		для а=0 по База.TeacherCount-1 цикл
			к=База.GetTeacher(а);
			Если к.Tag=-1 тогда
		        МоиПрепы.Новый();
				ИмяПрепа=к.Name;
				ФамДлина=Найти(ИмяПрепа," ");
				Если ФамДлина>0 тогда
					Фамилия=Лев(ИмяПрепа,ФамДлина-1);
					ИО=Прав(Имяпрепа,СтрДлина(Имяпрепа)-ФамДлина);
					ИмяДлина=Найти(ИО,".");
					Если ИмяДлина>0 тогда
						Имя=Лев(ИО,ИмяДлина-1);
						Отчество=Прав(ИО,СтрДлина(ИО)-ИмяДлина);	
					Иначе
						Имя=ИО;
						Отчество="";
					КонецЕсли;
				Иначе
					Фамилия=ИмяПрепа;
					Имя="";
					Отчество="";
				КонецЕсли;
				МоиПрепы.Фамилия=Фамилия;
				МоиПрепы.Наименование=Фамилия;
				МоиПрепы.Имя=Имя;
				МоиПрепы.Отчество=Отчество;
				МоиПрепы.Совместитель=к.Sovm;
				к.Tag=Число(МоиПрепы.Код);
		        МоиПрепы.Записать();
 				
				СпрКабСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
				попытка
					Врем=к.Cabinet;
					КабЕсть=1;
				Исключение
					КабЕсть=0;
				КонецПопытки;
				Если КабЕсть=1 тогда
					Если Врем.tag=0 тогда
						СпрКабСотр.Новый();
						МоиКабинеты.НайтиПоНаименованию(к.CabinetName);
						СпрКабСотр.Кабинет=МоиКабинеты.ТекущийЭлемент();
			            СпрКабСотр.Записать();
						МоиПрепы.Кабинеты=к.CabinetName;
					КонецЕсли;
				КонецЕсли;
				
				КлассыСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());
				попытка
					Врем3=к.MyCls;
					КлсЕсть=1;
				Исключение
					КлсЕсть=0;
				КонецПопытки;
				Если КлсЕсть=1 тогда
					КлассыСотр.Новый();
					МоиКлассы.НайтиПоНаименованию(Врем3.Name);
					КлассыСотр.Класс=МоиКлассы.ТекущийЭлемент();
		            КлассыСотр.Записать();
				КонецЕсли;
			Иначе
				МоиПрепы.НайтиПоКоду(к.Tag);
			КонецЕсли;

			для б=0 по к.SubjTeacherCount-1 цикл
				к.GetSubjTeacher(б).Tag=-1;
			КонецЦикла;
			
			СпрПредСотр.ИспользоватьВладельца(МоиПрепы.ТекущийЭлемент());

			СпрПредСотр.ВыбратьЭлементы(1);
			Пока СпрПредСотр.ПолучитьЭлемент()=1 цикл
				попытка
					Прд=База.FindSubject(СпрПредСотр.Предмет.Наименование);
					СТ=Прд.GetSubjTeacherN(к.Name);
					СТ.Tag=1;
				Исключение;
				КонецПопытки;										
			КонецЦикла;

			для б=0 по к.SubjTeacherCount-1 цикл
				ц=к.GetSubjTeacher(б);
				Если ц.Tag=-1 тогда
					СпрПредСотр.Новый();
					п=ц.Subject;
					Предмет=п.Name;
					МоиПредметы.НайтиПоНаименованию(Предмет);
					СпрПредСотр.Предмет=МоиПредметы.ТекущийЭлемент();
					СпрПредСотр.Записать();
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
        
		УчПл=СоздатьОбъект("Справочник.УчебныйПлан");
		УчПл.ВыбратьЭлементы(1);
		Пока УчПл.получитьЭлемент()=1 Цикл
			Попытка
				Клс=База.FindCls(УчПл.Класс.Наименование);
				Если УчПл.Раздел.Код=РаздУчПлКод тогда
					Предм=База.FindSubject(УчПл.Предмет.Наименование);
					попытка
						СубжКлс=Предм.GetSubjClsN(УчПл.Класс.Наименование);
						СКЕсть=1;
					исключение
						СКЕсть=0;
						если УчПл.Нагрузка<>0 тогда
							УчПл.Нагрузка=0;
							УчПл.Записать();
						КонецЕсли;
					КонецПопытки;
					
					Если СКЕсть=1 тогда
						если УчПл.Нагрузка<>СубжКлс.Nagr тогда
							УчПл.Нагрузка=СубжКлс.Nagr;
							УчПл.Записать();
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			Исключение
				Сообщить("Ошибка остался элемент учебного плана с некорректным классом или предметом");
			КонецПопытки;
		КонецЦикла;

// изменяем существующие записи распределения нагрузки и удаляем лишние.
		
		для и1=0 по База.clsGrpCount-1 Цикл
			База.GetclsGrp(и1).Tag=-1;
		КонецЦикла;
		
		РаспНагр=СоздатьОбъект("Справочник.РаспределениеНагрузки");
		РаспНагр.ВыбратьЭлементы(1);
		пока РаспНагр.ПолучитьЭлемент()=1 цикл
			Если РаспНагр.Раздел.Код=РаздУчПлКод тогда
				попытка
					Предм=База.FindSubject(РаспНагр.Предмет.Наименование);
					Клс=База.FindCls(РаспНагр.Класс.Наименование);
					ПиКЕсть=1;
				Исключение
					ПиКЕсть=0;
				КонецПопытки;
				
				Если ПиКЕсть=1 тогда
					попытка
						ПредмКлс=Предм.GetSubjClsN(Клс.Name);
						ПКЕсть=1;
					Исключение
						ПКЕсть=0;
						РаспНагр.Удалить(1);
					Конецпопытки;
					
					Если ПКЕсть=1 тогда
						Группа=РаспНагр.НомГр;
						колво=ПредмКлс.ClsGrpCount;
						ГруппаЕсть=-1;
						для и1=0 по КолВо-1 цикл
							Если (ГруппаЕсть=-1) и (ПредмКлс.GetClsGrp(и1).Group=Группа) тогда
								ГруппаЕсть=и1;
							конецЕсли;
						КонецЦикла;
						и1=ГруппаЕсть;
						Если и1>-1 тогда
							ЗаписатьРаспНагр=0;
							КлсГрп=ПредмКлс.GetClsGrp(и1);

							ПредмКлсБазы=КлсГрп.SubjCls;
							ЧислГрупп=0;
							для НКГ=0 по ПредмКлсБазы.ClsGrpcount-1 цикл
								ЧислГрупп=ЧислГрупп+ПредмКлсБазы.GetClsGrp(НКГ).AmountGr;
							КонецЦикла;
							
							КлсГрп.tag=РаспНагр.код;
							попытка
								ПрепИзБазы=КлсГрп.Teacher;
								ПизЕсть=1;
							исключение
								ПиЗЕсть=0;
								Если РаспНагр.Преподаватель<>"" тогда
									РаспНагр.Преподаватель="";
									ЗаписатьРаспНагр=1;
								КонецЕсли;
							Конецпопытки; 
							Если ПиЗЕсть=1 тогда
								Если ПрепИзБазы.tag<>РаспНагр.Преподаватель.Код тогда
									МоиПрепы.НайтиПоКоду(ПрепИзБазы.tag);
									РаспНагр.Преподаватель=МоиПрепы.ТекущийЭлемент();
									ЗаписатьРаспНагр=1;
								КонецЕсли;
							КонецЕсли;
							Если РаспНагр.Нагрузка<>КлсГрп.Nagr тогда
								РаспНагр.Нагрузка=КлсГрп.Nagr;
								ЗаписатьРаспНагр=1;
							конецЕсли;
							Если РаспНагр.Численность<>КлсГрп.amountGr тогда
								РаспНагр.ЧислГрупп=РаспНагр.ЧислГрупп-РаспНагр.Численность+КлсГрп.amountGr;
								ЗаписатьРаспНагр=1;
							КонецЕсли;
							Если РаспНагр.ЧислГрупп<>ЧислГрупп тогда
								РаспНагр.ЧислГрупп=ЧислГрупп;
								ЗаписатьРаспНагр=1;
							КонецЕсли;
							Если ЗаписатьРаспНагр=1 тогда
								РаспНагр.Записать();
							КонецЕсли;
						Иначе
							РаспНагр.Удалить(1);
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;

		для НомерПредмета=0 по База.SubjectCount-1 цикл
			ПредмБазы=База.GetSubject(НомерПредмета);
			МоиПредметы.НайтиПоКоду(ПредмБазы.Tag);
			Предм=МоиПредметы.ТекущийЭлемент();
			для НомерПредмКлс=0 по ПредмБазы.SubjClsCount-1 Цикл
				ПредмКлсБазы=ПредмБазы.GetSubjClsI(НомерПредмКлс);
				КлсБазы=ПредмКлсБазы.Cls;
				МоиКлассы.НайтипоКоду(КлсБазы.Tag);
				Клс=МоиКлассы.ТекущийЭлемент();
				ЧислГрупп=0;
				для номерКГ=0 по ПредмКлсБазы.ClsGrpCount-1 цикл
					ЧислГрупп=ЧислГрупп+ПредмКлсБазы.GetClsGrp(НомерКГ).amountGr;	
				КонецЦикла;
				для номерКГ=0 по ПредмКлсБазы.ClsGrpCount-1 цикл
					КГ=ПредмКлсБазы.GetClsGrp(НомерКГ);
					Если КГ.Tag=-1 тогда
						РаспНагр.новый();
						РаспНагр.Предмет=Предм;
						РаспНагр.Класс=Клс;
						РаспНагр.ЧислГрупп=ЧислГрупп;
						РаспНагр.Раздел=БазовыйРазделУчПл;
						РаспНагр.НомГр=КГ.Group;
						Попытка
							МоиПрепы.НайтиПоКоду(КГ.Teacher.Tag);
							РаспНагр.Преподаватель=МоиПрепы.ТекущийЭлемент();	
						исключение
							РаспНагр.Преподаватель="";
						КонецПопытки;
						РаспНагр.Нагрузка=КГ.Nagr;
						РаспНагр.Численность=КГ.amountGr;
						РаспНагр.ПроцПровТетр=0;
						РаспНагр.СортКласс = ПравильныйКод(Строка(МоиКлассы.Код))+ПравильныйКод(Строка(РаздУчПл))+ПравильныйКод(Строка(МоиПредметы.Код))+"0";
						РаспНагр.СортПред = ПравильныйКод(Строка(МоиПредметы.Код))+ПравильныйКод(Строка(МоиКлассы.Код))+ПравильныйКод(Строка(РаздУчПл))+"0";
						РаспНагр.Записать();
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
		КонецЦикла;

	 	ЗафиксироватьТранзакцию();
	 КонецЕсли;
КонецПроцедуры
