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