Ловкое жонглирование полями в форме организации. УФ

Клиент захотел в карточке организации иметь два дополнительных флажка. Я добавил их через расширение.

Но возник вопрос с позиционированием элементов в форме.

Если это ИП, то нужно размещать справа от фамилии и имени.

Если это ООО, то нужно размещать справа от наименования сокращенного и полного.

В итоге я потратил некоторое количество времени, чтобы жонглировать полями и чтобы они конкретно отображались при смене вида ИП/ООО:

&НаСервере
Процедура доп_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    Группа = Элементы.Добавить("доп_Группа1", Тип("ГруппаФормы"));
    Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
	
    Элемент = Элементы.Добавить("доп_Поле1", Тип("ПолеФормы"), Группа);
    Элемент.Вид = ВидПоляФормы.ПолеФлажка;
	Элемент.ПутьКДанным = "Объект.доп_Поле1";
	
    Группа = Элементы.Добавить("доп_Группа2", Тип("ГруппаФормы"));
    Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
	
    Элемент = Элементы.Добавить("доп_Поле2", Тип("ПолеФормы"), Группа);
    Элемент.Вид = ВидПоляФормы.ПолеФлажка;
	Элемент.ПутьКДанным = "Объект.доп_Поле2";
	
	доп_РазместитьГруппы();
	
КонецПроцедуры


&НаСервере
Процедура доп_РазместитьГруппы() 
	
	//Восстанавливаем положение групп
	доп_ВосстановитьГруппу("ФамилияИП", "ОтчествоИП");
	доп_ВосстановитьГруппу("ИмяИП", "ФамилияИП");
	доп_ВосстановитьГруппу("НаименованиеПолное", "Наименование");
	доп_ВосстановитьГруппу("НаименованиеСокращенное", "НаименованиеПолное");
	
	//Размещаем в зависимости от физлица
	Если ЭтоФизЛицо Тогда
		доп_РазместитьГруппу("доп_Группа1", "ФамилияИП", "доп_Поле1");
		доп_РазместитьГруппу("доп_Группа2", "ИмяИП", "доп_Поле2");
	Иначе
		доп_РазместитьГруппу("доп_Группа1", "НаименованиеСокращенное", "доп_Поле1");
		доп_РазместитьГруппу("доп_Группа2", "НаименованиеПолное", "доп_Поле2");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура доп_РазместитьГруппу(ИмяГруппы, Имя1, Имя2) 
	//Размещаем группу перед элементом 1
	Элементы.Переместить(Элементы[ИмяГруппы], Элементы[Имя1].Родитель, Элементы[Имя1]);

	//Объединяем в группу элемент 1 и элемент 2
	Элементы.Переместить(Элементы[Имя1], Элементы[ИмяГруппы]);
	Элементы.Переместить(Элементы[Имя2], Элементы[ИмяГруппы]);
КонецПроцедуры

&НаСервере
Процедура доп_ВосстановитьГруппу(ИмяЭлемента, ИмяПеред) 
	//Возвращаем на стандартное место те элементы, которые двигали
	Элементы.Переместить(Элементы[ИмяЭлемента], Элементы[ИмяПеред].Родитель, Элементы[ИмяПеред]);
КонецПроцедуры


&НаСервере
&После("ИнициализироватьФорму")
Процедура доп_ИнициализироватьФорму()
	доп_РазместитьГруппы(); 
КонецПроцедуры

Но в итоге получилось, что из-за добавления новых групп поля разъезжаются:

И вообще, сложно — не есть хорошо.

Поэтому я предложил клиенту разместить оба флажка справа от поля Вид.

И да, решил что отлаживать буду не на своей базе, а на типовой, потому что в своей я не смог поменять вид у ИП на ООО, а заводить новую организацию не хочу.

Среда: БП 3.0.96.35 Объем: 1 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 6

  1. Павел:

    1 час на возню в гуе с двумя полями. Напоминает трах со слоями в 7.7. Кто придумал уф в текущем виде и пропагандирует это как хорошее средство для организации интерфейса — надо в голову гвоздь забить. Как оно себя вести будет вообще предсказать невозможно

  2. rzd:

    А не надо было «прыгать элементам», надо было контролы привязать к одному и тому же реквизиту и за счет видимости (условного оформления) показывать тот или иной

    • В итоге я так и предложил клиенту.

      • rzd:

        а клиенту не побоку как оно там реализовано, если внешне одинаково?

        • там будет ставиться во много баз это расширение.
          помимо этого хотелось бы не очень часто обновлять, а тягу 1с к переменам все знают.
          поэтому если привязаться только к одному полю, это надежнее.

Добавить комментарий для fixin Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *