Автоматическое добавление новых реквизитов на форму (УФ)

31.08.16

Разработка - Работа с интерфейсом

Идея такая: Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец. слово (можно не матерное). На форму объекта новый реквизит далее попадает автоматом в спец. группу "Дополнительно".

Столкнулся давеча с проблемой: при добавлении реквизита в типовую конфу принято на форму его выводить программно. Сие упрощает дальнейшее обновление, поэтому разработчиками БСП для подобных целей заведён специальный ОМ "МодификацияКонфигурацииПереопределяемый". А в нашем случае нужен конкретный его метод

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт

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

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

Идея такая:

Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец слово (можно не матерное).

На форму объекта новый реквизит далее попадает автоматом в спец группу "Дополнительно".

Для этого в процедуру МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере нужно добавить вызов нижеследующей процедуры, смысл которой понятен из её комментария и текста.

Такой подход особенно подходит к концепции, когда добавляемые на типовую форму реквизиты намеренно выводятся на отдельную закладку.

//Добавляет нетиповые доп реквизиты на форму
//1. реквизит считается дополнительным, если его комментарий начинается со строки "+доп"
//(смысловая нагрузка: "+" = добавить, "доп" = на закладку "Дополнительно")
//2. реквизит добавляется на форму, только если в ней используется механизм доп реквизитов БСП
//(а он используется почти во всех формах элемента)
//определяется это по наличию в элементах формы группы "ГруппаДополнительныеРеквизиты"
//
//Автор: Патриот 2016_07
Процедура _ДобавитьНетиповыеРеквизиты(Форма)
	Попытка
		ВсеРеквизиты = Метаданные.НайтиПоПолномуИмени(Форма.ИмяФормы).Родитель().Реквизиты;
	Исключение
		//значит у объекта нет коллекции "Реквизиты" (например у "Журналы документов")
		Возврат;
	КонецПопытки;
	
	Реквизиты = Новый Массив;
	Для Каждого Реквизит Из ВсеРеквизиты Цикл
		Если ВРег(Лев(Реквизит.Комментарий, 4)) = "+ДОП" Тогда
			Реквизиты.Добавить(Реквизит);
		КонецЕсли;
	КонецЦикла;
	
	Если Реквизиты.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	//Добавляем страницу с Доп реквизитами следом за типовой страницей ГруппаДополнительныеРеквизиты
	ТиповаяГруппа = Форма.Элементы.Найти("ГруппаДополнительныеРеквизиты");
	
	Если ТиповаяГруппа = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	_грДопРеквизиты = Форма.Элементы.Добавить("_грДопРеквизиты", Тип("ГруппаФормы"), ТиповаяГруппа.Родитель);
	_грДопРеквизиты.Заголовок = "Доп реквизиты";
	//копируем свойства новой группы из типовой
	//именно копируем, а не задаём константно, т.к. в разных формах эти свойства м.б. разными
	_грДопРеквизиты.Вид = ТиповаяГруппа.Вид;
	_грДопРеквизиты.Группировка = ТиповаяГруппа.Группировка;
	_грДопРеквизиты.ОтображатьЗаголовок = ТиповаяГруппа.ОтображатьЗаголовок;
	_грДопРеквизиты.Отображение = ТиповаяГруппа.Отображение;
	
	Для Каждого Реквизит Из Реквизиты Цикл
		НовыйЭлемент = Форма.Элементы.Добавить(Реквизит.Имя, Тип("ПолеФормы"), _грДопРеквизиты);
		НовыйЭлемент.ПутьКДанным = "Объект." + Реквизит.Имя;
		НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
	КонецЦикла;
КонецПроцедуры

ОпосляСкриптум:

1. При необходимости, можно сделать так же и для ТЧ.

2. Можно добавлять группу "_грДопРеквизиты" и при отсутствии группы "ГруппаДополнительныеРеквизиты", например в корень формы или искать группу с типом "страницы" и добавлять в неё в качестве последней страницы, но мне пока такого не требовалось.

ОпосляОпосляСкриптум:
В какой-то мере идея подсмотрена из механизма доп реквизитов БСП, поэтому укажу здесь также на плюсы и минусы этого механизма относительно изложенного в статье.

плюсы доп. реквизитов БСП:

  • для добавления доп реквизита БСП не нужен программист
  • пользователь может задать условие видимости реквизита
  • не требуется обновление БД (а в случае добавления реквизита обновиться динамически нельзя - надо гнать всех пользователей из базы)

плюсы обычных реквизитов:

  • работа в запросе (для выбора каждого доп реквизита надо делать соединение с ТЧ доп реквизиты)
  • обращение в коде (доп реквизит придётся либо искать по наименованию, чего никому бы не посоветовал, либо хранить на него ссылку в некоем соответствии (в ПВХ или РС) в базе)
  • возможность задавать любые свойства реквизита, например, связь по типу или параметры выбора

------------------------------------
ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61797    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54403    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    16698    21    4    

35

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

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

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

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Модель состояния для MVC

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

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

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

6000 руб.

18.01.2022    8810    1    2    

6
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alex-l19041 8 03.08.16 17:48 Сейчас в теме
Если "Программист добавил реквизит в объект", то что ТАК сложно добавить на форму ???
2. Патриот 450 03.08.16 20:42 Сейчас в теме
(1) alex-l19041, в статье всё написано
при добавлении реквизита в типовую конфу принято на форму его выводить программно. Сие упрощает дальнейшее обновление, поэтому разработчиками БСП для подобных целей заведён специальный ОМ "МодификацияКонфигурацииПереопределяемый"
21. nickVZ 10 25.09.16 14:38 Сейчас в теме
(2) Вообще-то, ныне стало модно Расширение (начиная с 8.3.7, сейчас 8.3.8 ,на которой, в частности, работает актуальный релиз БП3).. И модифицировать формы стало намного легче.
Еще: в упомянутой БП3 нет Общего модуля "МодификацияКонфигурацииПереопределяемый". Извините.
Но проблему общие модули не создают. При обновлении, имеется ввиду. Как и обработчики (подписки на события.
22. Патриот 450 04.10.16 17:12 Сейчас в теме
(21) nickVZ, ваш коммент не связан со статьёй.
3. roofless 23 04.08.16 14:24 Сейчас в теме
на вид гениально, будет рабочая задача - проверим
4. Yashazz 4709 04.08.16 15:19 Сейчас в теме
(3) roofless, где тут гениальность? Азы и трюизмы, баян баяном.

Автор, а если нужно не поле ввода? А если доп.реквизиты вырублены функ.опцией?
Cthulhu; spy-83; ret-Phoenix; h00k; Spacer; +5 1 Ответить
5. Патриот 450 04.08.16 17:45 Сейчас в теме
(4) Yashazz,
баян баяном
может ещё и аргументы на сей счёт есть?
а если нужно не поле ввода?
А если то, а если сё... Вы, вроде, матёрый автор и д.б. в курсе, что у каждого решения есть своя область применения. Пересекается ли она с областью ваших задач или нет -- это другой вопрос, и, если нет, то просто нужен другой инструмент (!!) =))
А если доп.реквизиты вырублены функ.опцией?
не тестил, но не думаю, что в данном случае с формы удаляется группа "ГруппаДополнительныеРеквизиты", так что всё д.б. ок.
10. Yashazz 4709 07.08.16 13:05 Сейчас в теме
(5) аргументы есть - этот элементарный код встречается во множестве типовых конфигураций, а маркировка задач реквизита в его комментарии служебной строкой (в т.ч., кстати, xml со всеми нужными данными или строкой для НСтр) во множестве оригинальных и допиленных, и сам юзаю ещё с 8.0

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

Насчёт "ГруппаДополнительныеРеквизиты" - вы что, правда думаете, что БСП и вообще механика типовых стабильно соблюдает нотацию имён и принцип построения форм? Вы можете быть гарантированы, что есть подобная группа? Наивно. Гарантированы мы можем быть, только что есть сама форма.

11. Патриот 450 07.08.16 15:43 Сейчас в теме
(10) Yashazz,
этот элементарный код встречается во множестве типовых конфигураций
может не этот и не во множестве? Работаю с ЗУП, УТ, ЕРП, ДО и, каюсь, но похожего подхода не встречал. Ну и стоит ли говорить, что этот код был написан мной и с нуля, поэтому я буду воистину удивлён, если вы видели его в типовых))))))))))
Насчёт
универсальность
и завязке на механизмы БСП. Статья не такая длинная, и если бы вы читали, то заметили, что я коснулся момента, как расширить её универсальность.
12. Yashazz 4709 09.08.16 18:31 Сейчас в теме
(11) если Вы не видели, как в типовых конфах динамически создаются реквизиты на формах, то что я могу поделать... А если вы не видели, как ещё в 7.7 в комментариях к реквизитам писали служебные обозначения - тем более.
13. Патриот 450 10.08.16 10:47 Сейчас в теме
(12) Yashazz, полно вам уже. Ну я же в первых строках статьи написал о том, что в БСП, а значит и
в типовых конфах динамически создаются реквизиты на формах
а далее идёт рассказ о предлагаемой модификации этого процесса
6. roofless 23 05.08.16 08:08 Сейчас в теме
(4) Yashazz, когда зашел в этот модуль в нашей бухии 3.0, то увидел километры однотипных строк кода по добавлению нетипового функционала.
никто и не задумывался, что это можно упростить, тк копипастить было быстрее.
на универсальность этот метод не претендует, но как идея для развития вполне пойдет.
при крике "баяяян!" в народе принято бросать ссылкой)))
json; AzagTot; +2 Ответить
7. Alias 176 05.08.16 11:57 Сейчас в теме
Как замена типовому механизму "доп.реквизитов", но избавленная от нескольких его минусов -- очень даже неплохая идея.

Если нужно не поле ввода (один из вопросов) -- можно ведь и расширить функционал. Например, реализовать гораздо более сложную чем просто "+доп" нотацию описания реквизита. представьте себе нотацию типа "+доп(ПолеВвода="Новый заголовок")" (обычное поле ввода с заголовком) или "+доп(ПолеВыбора[1="вариант 1",2="вариант 2",3="вариант 3"]="Выберите вариант"", который сделает радиобатон на три варианта.

Конечно, идея не предназначена конкурировать с механизмом создания расширений для формы, и понятно что гибкость расширения ей недоступна.

Зато она простыми силами быстро решает простые задачи, и точно уж может конкурировать (а иногда и превосходить!) типовой механизм "доп.реквизитов" в БСП.
Патриот; roofless; +2 Ответить
8. monkbest 115 05.08.16 15:24 Сейчас в теме
(7) Alias, расширения не везде доступны, если у конфы выставлен режим совместимости то не будет расширений, а УТ 11 с режимом совместимости
9. Alias 176 05.08.16 17:30 Сейчас в теме
(8) monkbest, Ваш довод подтверждает что предложенная автором идея имеет место быть, а в случае невозможности пользоваться расширениями -- даже очень выигрышно смотрится.

Однако наряду с этим не могу не отметить, что Ваши данные несколько устарели, и УТ11 уже вполне себе работает с расширениями, т.к. имеет режим совместимости "Версия 8.3.6" уже с октября 2015 года.
14. PrinzOfMunchen 83 08.09.16 21:01 Сейчас в теме
Вы серьёзно? АВТОМАТИЗАЦИЯ и УНИВЕРСАЛЬНОСТЬ через строковый комментарий в виде "спец слова"? Всего лишь добавить реквизит в КОНФИГУРАТОРЕ и НЕ нужен программист? Пускать обычных пользователей в конфигуратор? Я бы ещё хотя бы просто по улыбался и мимо прошёл, если бы тут был очередной супер-универсальный регистр-сведений, в котором просто указывалась привязка через метаданные, какой реквизит выводить в доп. реквизиты, но это......
А когда один пользователь должен только видеть реквизит, второй редактировать, а третий ни того ни другого? Спец-слово для каждого случая? И потом снова километры ненужного кода, да ещё и недокументированного....
Может , чтобы обойтись без программиста, хоть для управления выводом реквизитов, дать возможность пользователю это делать на стороне предприятия?
Если вы уж добавляете реквизит в типовой объект, то и тот же "левый" (свой) примитивный регистр сведений погоды не сделает.
Ну а если хотите чтобы прям автоматизация и универсальность, то может и подсистемку свою?
Я, в своё время, делал для управляемого приложения подсистему конструктора управляемых форм в режиме предприятия. То есть, всё как в конфигураторе, только в предприятии. Для любого объекта, накидал свою сборку элементов, можешь даже отчет с СКД привинтить, сохранить как элемент своего справочника, например, "Дополнительные элементы формы для договора контрагента". Привязал конкретному пользователю. Только я делал динамический рабочий стол. А в принципе-то, взял и запилил бы регистр сведений, в котором к элементу справочника "ИдентификаторыОбъектовМетаданных" привязывались бы по пользователям элементы моего справочника. С указанием, в какую форму и в какую группу выводить.
Ну как вариант. Тут хоть какая-то универсальность...Можно вообще без конфигуратора обойтись. Создал доп. реквизит типовой, а вывод его уже свой сделал, так же в предприятии.... Чуть универсальнее, не правда ли?
15. Патриот 450 08.09.16 23:20 Сейчас в теме
(14) PrinzOfMunchen, вы как-то криво читали и в голове всё перемешалось у вас. Пересказывать вышеописанную статью мне лень и это бессмысленно. Во первых, потому, что если всё разжёвывать каждому, то больше ни на что времени не останется, а всё равно найдутся те, кто не воспримет разжёвывания. Во вторых, потому, что разжёвывание провоцируют у читающих лень, и, вместо того, чтобы разобраться самостоятельно и читать хоть сколько-нибудь внимательно, они будут постоянно надеяться на разжёвывания.
Но всё же одну подсказку я сделаю:
Всего лишь добавить реквизит в КОНФИГУРАТОРЕ и НЕ нужен программист?
вот это ваше ошибочное высказывание является следствием того, что вы читали через слово и скорее всего в произвольном порядке
16. PrinzOfMunchen 83 09.09.16 05:15 Сейчас в теме
(15) а разница? Это-то мелочь. Ключевое что в статье? "В комментарии этого реквизита прописал некое спец слово (можно не матерное).".
Это вот вообще не комильфо.
Сама идея не нова. Да и реализация могла быть универсальнее. Притензия к этому.
17. Патриот 450 09.09.16 09:36 Сейчас в теме
(16) PrinzOfMunchen,
  • Так если нет разницы, зачем вы эту "мелочь" в комментарии пишете?
  • Если вам надо универсальности, пишите универсальный код, благо разработчики БСП предоставили для этого удобную возможность, и в статье описано, где это делать.
  • Если же у вас возникает задача, к которой подходит удобный "молоток" предложенный в статье, то и пользуйтесь на здоровье. Но не стоит тратить своё и моё время на то, чтобы рассказать мне, как много есть случаев, где "молоток" не подходит, а нужен "трактор" (на который я сослался в статье, как уже упомянул во втором пункте).
  • То, что класс задач, решаемых предложенным "молотком", существует, доказано моим опытом, но главное - существованием механизма доп реквизитов БСП. С которым я и сравнил достоинства и недостатки своего "молотка".
18. PrinzOfMunchen 83 09.09.16 16:40 Сейчас в теме
(17) в том-то и дело, что это не молоток, а телевизор, для забивки гвоздей. Забить конечно можно, и всё будет ок,, с этим никто не спорит. Но это что-то вроде: "когда вам лень потратить 30 минут и сходить за молотком, или собрать свой, возьмите мой телевизор и забейте гвозди им!". Вот только таких телевизионщиков уже тоже целый вагон.
19. Патриот 450 09.09.16 16:49 Сейчас в теме
(18) PrinzOfMunchen, это ваше мнение. Почему я считаю его неправильным вытекает из статьи и комментов под ней. Но я бы рекомендовал потратить ваш напор на статьи про пере нумераторы, печатные формы и прочую лабуду, которой кишит ИС, а не докапываться к разработкам по принципу "мне этот инструмент не нужен - значит фигня".
20. PrinzOfMunchen 83 11.09.16 15:50 Сейчас в теме
(19) я не говорю, что идея плоха. Нормальная, адекватная идея, да ещё и с кодом написанным в подходящем месте. Но подход... Не собираюсь вступать в дальнейшую бессмысленную полемику. Со временем сами придёте к более системному подходу и осознаете, чем плоха зависимость от "специальной строки". Просто вас же и не окрепшие умы читают. ))) Решат, что это верх автоматизации, а потом и докажи, что язык 1С не "козёл". ))
Оставьте свое сообщение