Универсализация группировок дополнительных реквизитов на форме

06.07.20

Разработка - Универсальные функции

Упрощенный вариант универсализации работы с группировками дополнительных реквизитов.

Доброго времени суток всем. Очень давно возникла задача размещения на форме объекта его дополнительных реквизитов в определенном порядке. Каждый пользователь может настроить у себя любую структуру групп для доп реквизитов, но в данном случае считаем, что пользователей слишком много и делать они этого не будут. Настройкой группировок занимается один пользователь, настройки для всех пользователей идентичны. Захотелось сделать это более универсально, чтобы ответственный пользователь мог сам регулировать группировки, каждый раз не обращаясь к программистам .

 

Собственно вот вариант решения этой задачи:

В поле ИмяДляРазработчика храним наименование реквизита и его родительскую группу (прямо в наименовании, как это показано на скрине). Все группы создаются в исходной родительской группировке реквизита. При создании на сервере получаем имя группы, ищем ее среди элементов формы, если не нашли, то создаем новую. Заголовок группы получаем на основе имени.

Данную процедуру (текст ниже) вызываем в событии формы ПриСозданииНаСервере(). Для формы получаем список ее доп реквизитов, получаем имя для разработчика и по нему строим группировки.

&НаСервере
Процедура РазместитьДопРеквизитыНаФорме()
	Попытка
	СписокДопРеквизитов = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов;
	Для Каждого стр Из СписокДопРеквизитов Цикл
		Свойство = стр.Свойство;
		ИмяДляРазработчика = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Свойство,"Имя");
		ИмяГруппы = РаботаСГруппировками.ПолучитьИмяГруппыПоИмениДляРазработчика(ИмяДляРазработчика);
		Если ЗначениеЗаполнено(ИмяГруппы) Тогда
			ЭлементФормы 	 = Элементы[стр.ИмяРеквизитаЗначение];
			РодительЭлемента = ЭлементФормы.Родитель;
			Если Элементы.Найти(ИмяГруппы)=Неопределено Тогда
				РаботаСГруппировками.СоздатьГруппуФормы(Элементы, ИмяГруппы, РаботаСГруппировками.ПолучитьЗаголовокГруппы(ИмяГруппы), РодительЭлемента);
			КонецЕсли;			
			Элементы.Переместить(ЭлементФормы,Элементы[ИмяГруппы]);
		КонецЕсли;
	КонецЦикла;
	Исключение
	КонецПопытки;
КонецПроцедуры

Листинг модуля РаботаСГруппировками:


Функция ПолучитьИмяГруппыПоИмениДляРазработчика(ИмяДляРазработчика) Экспорт
	ИмяГруппы = Неопределено;
	Если ЗначениеЗаполнено(ИмяДляРазработчика) Тогда
		ДлинаСтроки = СтрДлина(ИмяДляРазработчика);
		СимволГруппы = Найти(ИмяДляРазработчика, "Группа");
		Если СимволГруппы<>0 Тогда
			ИмяГруппы = Сред(ИмяДляРазработчика,СимволГруппы,ДлинаСтроки-СимволГруппы+1);
		КонецЕсли;
	КонецЕсли;
	Возврат ИмяГруппы;
КонецФункции


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


Функция РазбитьСоставноеСлово(Слово)
    Рез=Лев(Слово,1);
    Для Индекс=2 по СтрДлина(Слово) цикл
        Символ=Сред(Слово,Индекс,1);
        Символ1 = ?(Индекс+1 <= СтрДлина(Слово),Сред(Слово,Индекс+1,1),Символ);
        Символ2 = ?(Индекс+2 <= СтрДлина(Слово),Сред(Слово,Индекс+2,1),Символ);
        Рез=Рез+?(ВРег(Символ)=Символ,?(ВРег(Символ1)=Символ1,Символ," "+НРег(Символ)),?(ВРег(Символ1)=Символ1 И ВРег(Символ2)=Символ2,НРег(Символ)+" ",Символ));
    КонецЦикла;
    Возврат Рез;
КонецФункции 


Функция ПолучитьЗаголовокГруппы(ИмяГруппы) Экспорт
	Заголовок = "";
	ИмяСПробелами = РазбитьСоставноеСлово(ИмяГруппы);
	ИмяБезИдентификатораГруппы = СтрЗаменить(ИмяСПробелами,"Группа ","");
	ДлинаСтроки = СтрДлина(ИмяБезИдентификатораГруппы);
	ПервыйСимвол = Лев(ИмяБезИдентификатораГруппы,1);
	ПервыйСимволЗаглавный = Врег(ПервыйСимвол);
	
	Заголовок  =ПервыйСимволЗаглавный+Сред(ИмяБезИдентификатораГруппы,2,ДлинаСтроки-1);
	Возврат Заголовок;
КонецФункции

 

Вывод: таким образом, чтобы перенести доп реквизит в другую группу, достаточно внести изменения в имя для разработчика, что упрощает работу. Минусом является невозможность указания вложенной иерархии групп и заголовка группы (заголовок строится на основе имени группы). Также при таком подходе для всех пользователей структура отображения доп реквизитов будет идентична (но в моем случае это было одним из условий задачи).

Можно перенести все это в регистр сведений, добавить возможность указания порядкового номера элемента, заголовка в группе,  родительской группы и типа группировки для группы в разрезе пользователя или групп пользователей. 

Вступайте в нашу телеграмм-группу Инфостарт

Дополнительные реквизиты управляемая форма 8.3 Расширения

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2621    Abysswalker    7    

41

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5626    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46859    dimanich70    83    

165

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6959    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    58140    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8719    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Xershi 1531 06.07.20 17:30 Сейчас в теме
Табличную часть можно без кода перенести, не объяснили клиенту?
2. triviumfan 102 16.07.20 09:28 Сейчас в теме
А где скриншот результатата?
rpgshnik; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация