Программное размещение элементов формы

Опубликовал AlexBar (AlexBar) в раздел Программирование - Практика программирования

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

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

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

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

Возможно что с переходом на управляемые формы острота проблемы снижается, но пока существуют обычные формы, проблема всегда будет существовать.

Я конечно не исключение, и так же разработал для себя некоторый механизм, которым успешно пользуюсь уже несколько лет.

Нового ничего не изобрел, все старо как мир и просто в реализации.

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

Далее добавляем в типовой справочник или документ нужный нам реквизит (реквизит табличной части), табличную часть. В свойстве реквизита "Комментарий" описываем свои "свойства" реквизита. Все, на этом работу можно считать законченной. При открытии формы (справочника,  документа) форма передается в модуль обработки, там происходит перебор всех реквизитов объектов и "разбор свойств" каждого из них. Если модуль найдет нужный реквизит (отличительной особенностью является префикс в комментарии, который располагается на первом месте "свойств"), он прочитает его "свойства" и расположит его согласно указанным "свойствам".

Что же может механизм авторазмешения реквизитов: разместить колонку в табличной части (в заданной позиции), заменить типовой реквизит в табличной части. Разместить новую табличную часть на отдельной странице. Разместить реквизит (ы) на форме на отдельной странице или заменить типовой реквизит на форме. Вывести подвал табличной чисти с отображением итогов колонки. Скрыть видимость типового реквизита. Для создаваемой страницы указать заголовок и картинку. Сгруппировать реквизиты на новой странице.

При желании каждый из вас может расширять возможности авторазмешения настолько, насколько хватит фантазии.

Текст модуля фо вложении. Описание свойств, обрабатываемых модулем, расположено в функции "ПолучитьСвойстваРеквизита".

Для управления типовыми реквизитами используется макет с именем "Форма_Реквизиты", его описание вы найдете в процедуре "ИзменитьСвойстваТиповыхЭлементовФормы".

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

Скачать файлы

Наименование Файл Версия Размер
Текст общего модуля
.txt 68,08Kb
10.02.12
153
.txt 68,08Kb 153 Скачать

См. также

Комментарии
1. Александр Капустин (kapustinag) 11.02.12 18:02 Сейчас в теме
Да, пожалуй, если бы 5 лет назад при начале внедрения УПП (тогда еще 8.0) остановились бы и придумали что-то подобное - сейчас было бы легче.
2. Алексей Захаров (almas) 183 15.02.12 09:02 Сейчас в теме
(1) kapustinag, Применить подобные наработки никогда не поздно. После перехода на ЗуП 2.5 при помощи франча. Еще с год мучились с обновлениями. Потом это надоело и переделали на подобные разработки. В результате к отчетности обновления занимают чуть более 30 минут против 1дня+1дня тестирования пользователями. Стоит Задуматься?
Автору респект!
3. Валерий Дубовой (Valerich) 1615 15.02.12 11:51 Сейчас в теме
идея интересная, главное не запутаться в этих запятых при написании комментария...

я бы предложил макет с определенной структурой и именем добавлять в объект. Вот там можно в удобной форме все расписывать. И тут вообще полет фантазии - используй либо набор параметров либо программный код туда записывай.
leshiy26; igormiro; Сергей Осипенко; i132; +4 Ответить
4. AlexBar (AlexBar) 50 15.02.12 14:16 Сейчас в теме
Реализация механизма может быть любой. Когда я разрабатывал механизм, меня устроил вариант именно с комментарием, чтобы не добавлять новых объектов метаданных, свойств сначала было не много, прибавлялись по мере развития. Указание всех свойств не является обязательным, т.е. если нужно отобразить элемент по-умолчанию то достаточно написать в комментарии Префикс, Истина.
Конечно же можно выполнить реализацию и через макеты, как это сделано для модификациии типовых реквизитов, тут все зависит от полета фантазии. Я преподнес саму идею.
5. Игорь Дзеса (Kamikadze) 44 15.02.12 17:28 Сейчас в теме
В управляемых формах есть опция "Изменить форму", только вот настройки не сохраняются. если доделать сохранение настроек - проблема будет решена на раз
6. Александр Гуляев (gavrikprog) 103 15.02.12 18:22 Сейчас в теме
Подсистема дополнительные реквизиты в БСП гораздо красивее.
Надо только научиться ей пользоваться
7. AlexBar (AlexBar) 50 15.02.12 18:25 Сейчас в теме
Кто же спорит что в БСП красивее и что можно настроить управляемые формы? Речь в моем предложении идет об обычных формах, о чем я явно вроде написал. Конкурировать с управляемыми формами и с БСМ не было моей целью.
9. Осипов Сергей (fixin) 3467 15.02.12 19:41 Сейчас в теме
ничто не ново под луной.
Мы делали так - формочка отдельная и код, который ее размещает в заданном месте (более-менее универсальный).
Действительно, тексты обновлять проще чем формы. Респект за популяризацию
10. Алексей Новиков (Новиков) 286 15.02.12 21:08 Сейчас в теме
Грамотный подход. Плюсую.
11. AlexBar (AlexBar) 50 15.02.12 21:30 Сейчас в теме
В совокупности с механизмом переопределения событий http://kb.mista.ru/article.php?id=268, который я активно использую, можно достичь гораздо больших результатов и в итоге обновлять формы в автоматическом режиме. С помощью механизма авторазмещения элементов расставлять их в форме, с помощью переопределения событий подвешивать обработчики событий. Если в модуле формы ввести универсальную процедуру обработки команд, с передачей в общий модуль формы и имени команды, то можно с легкостью на форме и кнопки располагать.
12. Дмитрий Веселов (Veduin) 16.02.12 04:48 Сейчас в теме
Хорошо так сказано!
Наверно пора переходить с 1С на SUP!!!
13. Владимир Гусев (adhocprog) 1077 16.02.12 09:50 Сейчас в теме
Круто! Спасибо! Очень полезная инфа.
14. Сергей Семенов (cerg110) 3 16.02.12 09:57 Сейчас в теме
спасибо за интересную статью.
15. Антон Лапот (kievanton) 16.02.12 22:24 Сейчас в теме
Давно думал о таком подходе. Особенно во время обновлений =)
Спасибо!
16. Владимир Водин (BalVlad) 19.02.12 15:01 Сейчас в теме
Спасибо за статью. Буду пробовать. Плюс.
17. Сергей Клевакин (tulaka) 28.02.12 11:24 Сейчас в теме
18. Andrey Dyak (electronik) 26.03.12 18:27 Сейчас в теме
19. Andrey Dyak (electronik) 26.03.12 18:27 Сейчас в теме
20. Сергей Кокшаров (kokscharov) 46 08.06.12 11:45 Сейчас в теме
при добавление табличной части, в которой есть колонка с типом булево. Ошибка. Проверка только на заполненость данных: ЗначениеЗаполнено(Элемент.Данные). Нуна еще ЗначениеЗаполнено(Элемент.ДанныеФлажка)
21. AlexBar (AlexBar) 50 10.06.12 13:51 Сейчас в теме
(20) kokscharov,
Спасибо за замечание. Добавление табличной части целиком практически не использовал, поэтому и не нарвался на эту ошибку. В любом случаем огромное спасибо за замечание.
22. aleksei (alekseies) 12.07.12 14:06 Сейчас в теме
В совокупности с механизмом переопределения событий http://kb.mista.ru/article.php?id=268, который я активно использую, можно достичь гораздо больших результатов и в итоге обновлять формы в автоматическом режиме. С помощью механизма авторазмещения элементов расставлять их в форме, с помощью переопределения событий подвешивать обработчики событий. Если в модуле формы ввести универсальную процедуру обработки команд, с передачей в общий модуль формы и имени команды, то можно с легкостью на форме и кнопки располагать.

Анологично используем ...
23. Константин (briz) 67 31.07.12 13:12 Сейчас в теме
Если на форме нет ни одной панели с заклдаками , то форму всё-таки придеться изменить. При добавлении 2-х реквизитов с типом Дата в группу (в одной строке) вылетает ошибка : строка 809: Деление на 0
ШиринаПоля = (ШиринаПанели-ОбщаяШирина)/КоличествоПолей;
24. AlexBar (AlexBar) 50 31.07.12 21:55 Сейчас в теме
(23) briz,
>Если на форме нет ни одной панели с заклдаками , то форму всё-таки придеться изменить.
Совершенно верно, такое ограничение есть. Механизм не изменяет форму целиком, а только использует имеющиеся элементы формы. Как я писал ранее, каждый волен развивать механизм в любом направлении, если ему понравилась сама идея.
>При добавлении 2-х реквизитов с типом Дата в группу (в одной строке) вылетает ошибка : строка 809: Деление на 0
Это конечно неприятность. Проанализирую, исправлю.

Коллеги, если у кого-то есть предложения по развитию данного механизма или имеются уже собственные доработки, не стесняйтесь делиться, включим их в общий функционал.
25. Галина Ивлева (galinka1c8) 25.09.12 12:53 Сейчас в теме
Замечательный подход. Трудовых затрат в принципе не очень много, а результат(скорость и качество обновления) себя оправдывают. А размещать удобно в общий модуль работасдиалогами в процедуру УстановитьЗаголовокФормыДокумента.
26. Sabfir Sabfir (Sabfir) 08.08.13 16:02 Сейчас в теме
Почему именно так пошли?
Почему не создать регистр сведений и не хранить всю эту информацию в нем, а не в комментариях.
Добавить обработку, которая поможет безошибочно заполнить Р.Св.
27. AlexBar (AlexBar) 50 10.08.13 00:23 Сейчас в теме
(26)Вы вправе реализовать так, как Вам удобнее. Последняя версия используемого мною механизма работает через макеты. Если у объекта есть соответствующий макет, то идет построение элементов (конкретных), в противном случае ничего не обрабатывается. Это несколько ускорило работу механизма.