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

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 Расширения

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    2670    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    4610    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    3961    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8824    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2076    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16147    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

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