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

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    20124    dimanich70    81    

144

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

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

1 стартмани

18.03.2024    4091    3    John_d    11    

57

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

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

12.02.2024    18059    atdonya    24    

56

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

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

30.11.2023    5502    ke.92@mail.ru    16    

65

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

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

28.08.2023    14730    YA_418728146    7    

166

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

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

2 стартмани

22.08.2023    3580    56    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 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    18478    171    sapervodichka    112    

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