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