gifts2017

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

я бы предложил макет с определенной структурой и именем добавлять в объект. Вот там можно в удобной форме все расписывать. И тут вообще полет фантазии - используй либо набор параметров либо программный код туда записывай.
leshiy26; igormiro; Сергей Осипенко; i132; +4 Ответить
4. AlexBar (AlexBar) 15.02.12 14:16
Реализация механизма может быть любой. Когда я разрабатывал механизм, меня устроил вариант именно с комментарием, чтобы не добавлять новых объектов метаданных, свойств сначала было не много, прибавлялись по мере развития. Указание всех свойств не является обязательным, т.е. если нужно отобразить элемент по-умолчанию то достаточно написать в комментарии Префикс, Истина.
Конечно же можно выполнить реализацию и через макеты, как это сделано для модификациии типовых реквизитов, тут все зависит от полета фантазии. Я преподнес саму идею.
5. Игорь Дзеса (Kamikadze) 15.02.12 17:28
В управляемых формах есть опция "Изменить форму", только вот настройки не сохраняются. если доделать сохранение настроек - проблема будет решена на раз
6. Александр Гуляев (gavrikprog) 15.02.12 18:22
Подсистема дополнительные реквизиты в БСП гораздо красивее.
Надо только научиться ей пользоваться
7. AlexBar (AlexBar) 15.02.12 18:25
Кто же спорит что в БСП красивее и что можно настроить управляемые формы? Речь в моем предложении идет об обычных формах, о чем я явно вроде написал. Конкурировать с управляемыми формами и с БСМ не было моей целью.
9. Осипов Сергей (fixin) 15.02.12 19:41
ничто не ново под луной.
Мы делали так - формочка отдельная и код, который ее размещает в заданном месте (более-менее универсальный).
Действительно, тексты обновлять проще чем формы. Респект за популяризацию
10. Алексей Новиков (Новиков) 15.02.12 21:08
Грамотный подход. Плюсую.
11. AlexBar (AlexBar) 15.02.12 21:30
В совокупности с механизмом переопределения событий http://kb.mista.ru/article.php?id=268, который я активно использую, можно достичь гораздо больших результатов и в итоге обновлять формы в автоматическом режиме. С помощью механизма авторазмещения элементов расставлять их в форме, с помощью переопределения событий подвешивать обработчики событий. Если в модуле формы ввести универсальную процедуру обработки команд, с передачей в общий модуль формы и имени команды, то можно с легкостью на форме и кнопки располагать.
12. Дмитрий Веселов (Veduin) 16.02.12 04:48
Хорошо так сказано!
Наверно пора переходить с 1С на SUP!!!
13. Владимир Гусев (adhocprog) 16.02.12 09:50
Круто! Спасибо! Очень полезная инфа.
14. Сергей Семенов (cerg110) 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) 08.06.12 11:45
при добавление табличной части, в которой есть колонка с типом булево. Ошибка. Проверка только на заполненость данных: ЗначениеЗаполнено(Элемент.Данные). Нуна еще ЗначениеЗаполнено(Элемент.ДанныеФлажка)
21. AlexBar (AlexBar) 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) 31.07.12 13:12
Если на форме нет ни одной панели с заклдаками , то форму всё-таки придеться изменить. При добавлении 2-х реквизитов с типом Дата в группу (в одной строке) вылетает ошибка : строка 809: Деление на 0
ШиринаПоля = (ШиринаПанели-ОбщаяШирина)/КоличествоПолей;
24. AlexBar (AlexBar) 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) 10.08.13 00:23
(26)Вы вправе реализовать так, как Вам удобнее. Последняя версия используемого мною механизма работает через макеты. Если у объекта есть соответствующий макет, то идет построение элементов (конкретных), в противном случае ничего не обрабатывается. Это несколько ускорило работу механизма.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа