новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Фрагмент из реализованной программы для управления продажами жилого комплекса. Обработка 1с 8.2 "Визард заполнения структуры жил

  • Добавить свою публикацию
  • для этого требуется регистрация

Изображение

Процедура ЗаполнитьСправочникиСтруктурыНедвижимости()
	
	ТаблицаКвартир 				= Новый ТаблицаЗначений;
	ОписаниеТиповСпрКвартиры 	= Новый ОписаниеТипов("СправочникСсылка.Квартиры");
	ОписаниеТиповПеречисление 	= Новый ОписаниеТипов("ПеречислениеСсылка.СтатусСделки");
	ТаблицаКвартир.Колонки.Добавить("Квартира",ОписаниеТиповСпрКвартиры);
	ТаблицаКвартир.Колонки.Добавить("СтатусСделки",ОписаниеТиповПеречисление);
	
	
	ПроектЗдания 	= Справочники.ПроектЗданий;
	ТекущийПроект 	= ПроектЗдания.НайтиПоНаименованию(Проект,Истина);
	Если (ТекущийПроект.Ссылка.Пустая()) Тогда
		ТекущийПроект 				= Справочники.ПроектЗданий.СоздатьЭлемент();
		ТекущийПроект.Наименование 	= Проект;
		Попытка
			ТекущийПроект.Записать(); 
		Исключение
			Сообщить(" Проект  ' "+Проект+" ' не записан в справочник 'Проект' ."+ОписаниеОшибки());
		КонецПопытки;
	Иначе
		ТекущийПроект 				= ТекущийПроект.ПолучитьОбъект();
		Попытка
			ТекущийПроект.Записать(); 
		Исключение
			Сообщить(" Проект ' "+ТекущийПроект.ПолучитьОбъект()+" ' не записан в справочник 'Проект'. "+ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;
	
	Здания 	= Справочники.Здания;
	Этажи 	= Справочники.Этажи;
	
	Квартиры = Справочники.Квартиры;
	
	Для Каждого ТекущаяСтрока Из СписокЗданий Цикл 						//если добавили новое здание
		НовоеЗдание 						= Здания.СоздатьЭлемент();
		НовоеЗдание.Владелец 			 	= ТекущийПроект.Ссылка;
		НовоеЗдание.Наименование 			= ТекущаяСтрока.НаименованиеЗдания;
		НовоеЗдание.УсловноеОбозначение 	= ТекущаяСтрока.УсловноеОбозначение;
		НовоеЗдание.СерияЗдания		 		= ТекущаяСтрока.СерияЗдания;
		НовоеЗдание.Адрес				 	= ТекущаяСтрока.Адрес;
		НовоеЗдание.GUID					= Новый УникальныйИдентификатор;
		Попытка
			НовоеЗдание.Записать();
		Исключение
			Сообщить(" Корпус ' "+ТекущаяСтрока.НаименованиеЗдания+" ' не записан в справочник 'Здания '. "+ОписаниеОшибки());
		КонецПопытки;
		
		//Уникальность "условного обозначения" здания проверили на этапе ввода зданий.
		ПараметрыПоиска = Новый Структура;
		ПараметрыПоиска.Вставить("УсловноеОбозначениеЗдания",НовоеЗдание.УсловноеОбозначение);		
		НайденныеСтроки = СписокЭтажей.НайтиСтроки(ПараметрыПоиска);
		Если НайденныеСтроки.Количество()>0 Тогда   //в новое здание добавили новые этажи
			Для Каждого ТекущийЭтаж Из НайденныеСтроки Цикл
				НовыйЭтаж 						= Этажи.СоздатьЭлемент();
				НовыйЭтаж.НомерЭтажа 			= ТекущийЭтаж.НомерЭтажа;
				НовыйЭтаж.УсловноеОбозначение 	= ТекущийЭтаж.УсловноеОбозначение;
				НовыйЭтаж.Наименование 			= ТекущийЭтаж.Наименование;
				//НовыйЭтаж.Видовой 				= ТекущийЭтаж.Видовой;
				НовыйЭтаж.Владелец 				= НовоеЗдание.Ссылка;
				Попытка
					НовыйЭтаж.Записать();
				Исключение
					Сообщить(" Этаж ' "+ТекущийЭтаж.УсловноеОбозначение+" ' для корпуса "+НовоеЗдание.Ссылка+" не записан в справочник 'Этажи' . "+ОписаниеОшибки());
				КонецПопытки;
				//Уникальность "условного обозначения этажа" в рамках здания проверили на этапе ввода этажей.
				ПараметрыПоискаКв = Новый Структура;
				ПараметрыПоискаКв.Вставить("УсловноеОбозначениеЗдания",НовоеЗдание.УсловноеОбозначение);		
				ПараметрыПоискаКв.Вставить("УсловноеОбозначениеЭтажа",НовыйЭтаж.УсловноеОбозначение);		
				НайденныеСтрокиКв = СоставКвартиры.НайтиСтроки(ПараметрыПоискаКв);      //в новое здание добавили и на новые этажи добавили новые квартиры
				Если НайденныеСтрокиКв.Количество()>0 Тогда
					Для Каждого ТекущаяКвартира Из НайденныеСтрокиКв Цикл
						НоваяКвартира 						= Квартиры.СоздатьЭлемент();
						НоваяКвартира.Наименование 			= ТекущаяКвартира.Наименование;
						НоваяКвартира.УсловноеОбозначение	= ТекущаяКвартира.УсловноеОбозначение;
						НоваяКвартира.КоличествоКомнат 		= ТекущаяКвартира.КоличествоКомнат;
						НоваяКвартира.ОбщаяПлощадь 			= ТекущаяКвартира.ОбщаяПлощадьКвартиры;		
						НоваяКвартира.ВидовыеХарактеристики	= ТекущаяКвартира.ВидовыеХарактеристики;
						НоваяКвартира.Владелец 				= НовыйЭтаж.Ссылка;
						Попытка
							НоваяКвартира.Записать();
							Сообщить(" Для проекта ' "+ТекущийПроект+" ' в корпус ' "+НовоеЗдание.Наименование+" ' на ' "+НовыйЭтаж.Ссылка+" ' добавлена новая квартира - ' "+НоваяКвартира.Ссылка+" '.");
						Исключение
							Сообщить(" Квартира "+ТекущаяКвартира.Наименование+" в справочник 'Квартиры ' не записана . "+ОписаниеОшибки());
						КонецПопытки;
						//ЗаполнитьВводНачальныхОстатков(НоваяКвартира);
						Если  НЕ НоваяКвартира.Ссылка.Пустая() Тогда
							НоваяСтрока 				= ТаблицаКвартир.Добавить();
							НоваяСтрока.Квартира 		= НоваяКвартира.Ссылка;	
							НоваяСтрока.СтатусСделки 	= Перечисления.СтатусСделки.Свободен;
						КонецЕсли;
						СоставКвартиры.Удалить(ТекущаяКвартира);
					КонецЦикла;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
	//Уникальность "условного обозначения" здания проверили на этапе ввода зданий.
	Для Каждого             ТекущийЭтаж Из  СписокЭтажей Цикл
		Если ТекущийЭтаж.Здание <> Справочники.Здания.ПустаяСсылка()  Тогда
			НовыйЭтаж 						= Этажи.СоздатьЭлемент();
			НовыйЭтаж.НомерЭтажа 			= ТекущийЭтаж.НомерЭтажа;
			НовыйЭтаж.УсловноеОбозначение 	= ТекущийЭтаж.УсловноеОбозначение;
			НовыйЭтаж.Наименование 			= ТекущийЭтаж.Наименование;
			//НовыйЭтаж.Видовой 				= ТекущийЭтаж.Видовой;
			НовыйЭтаж.Владелец 				= ТекущийЭтаж.Здание;
			НовыйЭтаж.Записать();
			//Уникальность "условного обозначения этажа" в рамках здания проверили на этапе ввода этажей.
			ПараметрыПоискаКв = Новый Структура;
			ПараметрыПоискаКв.Вставить("УсловноеОбозначениеЗдания",НовыйЭтаж.Владелец.УсловноеОбозначение);		
			ПараметрыПоискаКв.Вставить("УсловноеОбозначениеЭтажа",НовыйЭтаж.УсловноеОбозначение);		
			НайденныеСтрокиКв = СоставКвартиры.НайтиСтроки(ПараметрыПоискаКв);
			Если НайденныеСтрокиКв.Количество()>0 Тогда  //если добавляли этажи и квартиру внесли на новый этаж
				Для Каждого ТекущаяКвартира Из НайденныеСтрокиКв Цикл
					НоваяКвартира 						= Квартиры.СоздатьЭлемент();
					НоваяКвартира.Наименование 			= ТекущаяКвартира.Наименование;
					НоваяКвартира.УсловноеОбозначение	= ТекущаяКвартира.УсловноеОбозначение;
					НоваяКвартира.КоличествоКомнат 		= ТекущаяКвартира.КоличествоКомнат;
					НоваяКвартира.ВидовыеХарактеристики	= ТекущаяКвартира.ВидовыеХарактеристики;
					НоваяКвартира.ОбщаяПлощадь 			= ТекущаяКвартира.ОбщаяПлощадьКвартиры;		
					НоваяКвартира.Владелец 				= НовыйЭтаж.Ссылка;	
					Попытка
						НоваяКвартира.Записать();
						Сообщить(" Для проекта ' "+ТекущийПроект+" ' в корпус ' "+ТекущийЭтаж.Здание+" ' на ' "+НовыйЭтаж.Ссылка+" ' добавлена новая квартира - '"+НоваяКвартира.Ссылка+" '.");
					Исключение
						Сообщить(" Квартира "+ТекущаяКвартира.Наименование+" в справочник 'Квартиры ' не записана . "+ОписаниеОшибки());
					КонецПопытки;
				//ЗаполнитьВводНачальныхОстатков(НоваяКвартира);
				Если  НЕ НоваяКвартира.Ссылка.Пустая() Тогда
					НоваяСтрока 				= ТаблицаКвартир.Добавить();
					НоваяСтрока.Квартира 		= НоваяКвартира.Ссылка;	
					НоваяСтрока.СтатусСделки 	= Перечисления.СтатусСделки.Свободен;
				КонецЕсли;
					СоставКвартиры.Удалить(ТекущаяКвартира);
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
		Для Каждого ТекущаяКвартира Из СоставКвартиры Цикл
			НоваяКвартира 						= Квартиры.СоздатьЭлемент();
			НоваяКвартира.Наименование 			= ТекущаяКвартира.Наименование;
			НоваяКвартира.УсловноеОбозначение	= ТекущаяКвартира.УсловноеОбозначение;
			НоваяКвартира.КоличествоКомнат 		= ТекущаяКвартира.КоличествоКомнат;
			НоваяКвартира.ОбщаяПлощадь 			= ТекущаяКвартира.ОбщаяПлощадьКвартиры;		
			НоваяКвартира.ВидовыеХарактеристики	= ТекущаяКвартира.ВидовыеХарактеристики;
			Запрос = Новый Запрос;
			Запрос.Текст = 
			"ВЫБРАТЬ
			|	Этажи.Ссылка КАК Этаж,
			|	Этажи.УсловноеОбозначение КАК УсловноеОбозначение
			|ИЗ
			|	Справочник.Этажи КАК Этажи
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Здания КАК Здания
			|		ПО Этажи.Владелец = Здания.Ссылка
			|ГДЕ
			|	Этажи.Владелец = &Здание
			|	И Этажи.УсловноеОбозначение = &УсловноеОбозначение";
			Запрос.УстановитьПараметр("УсловноеОбозначение",ТекущаяКвартира.УсловноеОбозначениеЭтажа);
			Запрос.УстановитьПараметр("Здание",ТекущаяКвартира.Здание);
			Результат 	= Запрос.Выполнить();
			Выборка 	= Результат.Выбрать();
			Если Не Результат.Пустой() Тогда
				Если Выборка.Следующий() Тогда
					ТекущийЭтаж = Выборка.Этаж;
					НоваяКвартира.Владелец 	= Выборка.Этаж;	
				КонецЕсли;
			КонецЕсли;
			
			Попытка
				НоваяКвартира.Записать();
				Сообщить(" Для проекта ' "+ТекущийПроект+" ' в корпус ' "+ТекущаяКвартира.Здание+" ' на ' "+ТекущийЭтаж+"' добавлена новая квартира - ' "+НоваяКвартира.Ссылка+" '.");
			Исключение
				Сообщить(" Квартира "+ТекущаяКвартира.Наименование+" в справочник 'Квартиры ' не записана . "+ОписаниеОшибки());
			КонецПопытки;
			
			Если  НЕ НоваяКвартира.Ссылка.Пустая() Тогда
				НоваяСтрока 				= ТаблицаКвартир.Добавить();
				НоваяСтрока.Квартира 		= НоваяКвартира.Ссылка;	
				НоваяСтрока.СтатусСделки 	= Перечисления.СтатусСделки.Свободен;
			КонецЕсли;
			//ЗаполнитьВводНачальныхОстатков(НоваяКвартира);
		КонецЦикла;
	//КонецЕсли;
	ЗаполнитьВводНачальныхОстатков(ТаблицаКвартир);
КонецПроцедуры
 

 

 

 

 
0
≡ к списку статей