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

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С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    8250    dimanich70    77    

107

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

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

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

1 стартмани

18.03.2024    3150    4    John_d    11    

57

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

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

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

12.02.2024    6411    atdonya    22    

53

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

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

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

30.11.2023    4479    ke.92@mail.ru    16    

64

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

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

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

28.08.2023    10393    YA_418728146    7    

148

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

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

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

2 стартмани

22.08.2023    2531    35    progmaster    8    

4

Расширение: Быстрые отборы через буфер [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    16777    148    sapervodichka    112    

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