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