Программные формы

31.10.19

Разработка - Инструментарий разработчика

Подсистема предназначена для простого программного изменения форм типовых конфигураций и последующего упрощения установки обновлений на этапе слияния форм.

Скачать исходный код

Наименование Файл Версия Размер
Программные формы (файл конфигурации и демобаза)
.zip 99,81Kb
2
.zip 1.0.0.5 99,81Kb 2 Скачать

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

Эта подсистема – мой рабочий инструмент, которым я пользуюсь уже много лет и наконец-то решил поделиться им с сообществом.

Подсистема тестировалась на версии платформы 8.3.10.2667 и выше.

Кратко принцип работы подсистемы можно описать одной картинкой:

В типовую форму добавляются элементы формы-шаблона. Рассмотрим подробнее, как это реализовано.

Установка подсистемы

Вы можете добавить подсистему в свою конфигурацию сравнением/объединением.

В подсистему входят следующие объекты:

Еще необходимо в общем модуле обычного приложения прописать экспортную глобальную переменную:

Перем гл_ЮК_ПрограммныеФормы Экспорт;

В роли большой необходимости нет, главное – следите за тем, чтобы у всех пользователей были права на обработку ЮК_ПрограммныеФормы.

Добавление элементов на форму

В демобазе есть справочник "Товары". Представим, что это некий типовой справочник, в форму которого мы хотим внести изменения.

Изначально форма справочника выглядит вот так:

Предположим, мы хотим добавить новый реквизит справочника и новое поле "Страна-производитель". Чтобы быть уверенным, что новое поле не будет конфликтовать с элементами на форме, которые поставщик может добавить в будущем, сделаем это на новой вкладке "Мои свойства".

Для этого в обработке ЮК_ПрограммныеФормы добавим новую произвольную форму. Назвать ее можно как угодно, но практика показала, что в качестве имени удобно использовать полный путь к форме, для которой предназначен шаблон:

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

И добавить два реквизита формы произвольного типа: Форма и Объект (реквизит Объект для форм списков не обязателен).

В типовую форму, в событие "ПередОткрытием", добавим вызов процедуры:

ЮК_ПрограммныеФормы.ПередОткрытием("Справочники_Товары_ФормаЭлемента", ЭтаФорма, ЭтотОбъект, Отказ);

Первый параметр - имя формы шаблона. Затем передается типовая форма, объект и параметр отказа.

На этом подключение формы шаблона к типовой форме завершено.

Теперь внесем изменения.

Добавим на форму шаблона панель с таким же именем и таким же расположением, как и панель на типовой форме, назовем единственную страницу "МоиСвойства" и добавим надпись и поле "СтранаПроизводитель":

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

Если нужно изменить позицию новой вкладки, то в шаблоне, в тексте заголовка вкладки, нужно указать символ диез и номер позиции. Например:

Подсистема поддерживает НЕ ВСЕ визуальные элементы, которые могут быть размещены на форме. Информацию о том, какие типы визуальных элементов поддерживаются, можно получить из функции ЮК_ПрограммныеФормы.ПолучитьСвойстваИсключенияДляЭлемента.

Изначально подсистема создавалась именно для этих целей - добавлять новые вкладки на формы и произвольные поля с привязками на новых вкладках.

Но функционал подсистемы не ограничивается только этим.

Изменение существующих элементов

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

Давайте поменяем фон поля наименования.

Скопируем из типовой формы поле "Наименование" и разместим его в той же позиции на форме шаблона. А затем в свойствах поля поменяем цвет фона.

Обратите внимание, что вместе со свойствами элемента переносятся и его привязки. Если нужно отключить перенос привязок и оставить оригинальные привязки, которые установлены у элемента типовой формы, в подсказку элемента в шаблоне необходимо добавить ключевое слово #nolink:

События

Подсистема поддерживает трансляцию событий в шаблон.

Давайте попробуем это сделать. В шаблоне добавим полю "Наименование" кнопку открытия и создадим событие "Открытие".

Затем нужно сделать процедуру – обработчик события экспортной. И пропишем какой-то обработчик события.

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

Скопируйте предложенные процедуры "как есть" и вставьте в модуль типовой формы.

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

Внимание! Для элемента типа "Табличное поле" (особенно в расширенных для дерева или справочника версиях) поддерживаются не все события. Получить перечень поддерживаемых событий можно из функции ЮК_ПрограммныеФормы.ПолучитьПолныйПереченьСобытийЭлемента.

Для самой формы транслируется ряд событий. В модуле шаблона можно объявить экспортные процедуры – обработчики событий:

  • ПередОткрытием
  • ПриОткрытии
  • ПередЗаписью
  • ПослеЗаписи
  • ПриЗакрытии

Для их трансляции в соответствующих событиях типовой формы необходимо прописать подобный код:

ЮК_ПрограммныеФормы.ПриЗакрытии("Справочники_Товары_ФормаЭлемента", ЭтаФорма, ЭтотОбъект);

Внимание! Если в типовой форме уже существовал обработчик соответствующего события формы и вы просто добавили вызов-трансляцию в существующую процедуру, то при обновлении нужно просто проследить за тем, чтобы вызов в коде не затерся. Однако если в типовой форме вы создавали обработчик события, то при обновлении может быть очищена связь процедуры – обработчика и события формы.

Контексты исполнения

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

Таким образом, через Форма.ЭлементыФормы может быть получен доступ к элементам, размещенным на конечной форме. Например, это может быть необходимо для заполнения добавленных списков значений, получения значений полей, не привязанных к данным, и пр.

Формы списков и командные панели

Подсистема поддерживает изменение состава колонок табличных полей и добавление кнопок командных панелей.

Точно так же, как мы делали для формы элемента, сделаем шаблон для формы списка справочника Товары за одним исключением. Реквизит шаблона Объект добавлять не будем. И вызов перед открытием будет без объекта:

ЮК_ПрограммныеФормы.ПередОткрытием("Справочники_Товары_ФормаСписка", ЭтаФорма, , Отказ);

Для всех форм, где нет или не требуется объект, его можно не передавать.

Затем добавим табличное поле типа "ТаблицаЗначений" и командную панель. Имена добавленным элементам поставим такие же, как в типовой форме, тем самым сообщим подсистеме, что не нужно создавать новые элементы, а только модифицировать существующие.

И добавим в табличное поле колонку "СтранаПроизводитель", а в командную панель две кнопки и обработчики событий к ним (не забывая сделать их экспортными).

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

Так как платформа не отрабатывает сохранение настроек позиции ширины и пр. для колонок табличного поля, добавленных программно, то для тех форм, где вы хотите, чтобы у пользователей сохранялись их настройки, по событию "ПриЗакрытии" необходимо вызывать функцию ЮК_ПрограммныеФормы.ПриЗакрытии. Обработчик события в форме-шаблоне добавлять не обязательно.

Для очистки таких сохраненных настроек в подсистеме есть обработка ЮК_ПрограммныеФормы_СохраненныеНастройкиКолонокТабличныхПолей.

Примечания и известные баги

Страницы формы

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

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

Форма "плывет"

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

Если он не помогает, то внимательно посмотрите расположение, привязки и размеры изменяемых и добавляемых элементов. Это может быть сложно, так как приходится "мыслить в трех измерениях". Добавьте #nolink всем элементам у которых нет необходимости переносить привязки из шаблона в типовую форму. Это помогает в 99% случаев. В моей практике была только одна ситуация, когда форма вела себя неадекватно и я так и не смог понять почему. Пришлось добавлять на нее элементы "старым дедовским способом".

В целом, чем меньше вы в шаблоне меняете позиции и размеры уже существующих на типовой форме элементов, тем меньше вероятность, что форма "поплывет".

В конечном итоге вы всегда можете написать автору подсистемы, но гарантий, что автор сможет помочь именно с вашим случаем, нет.

Ссылки

Про обнаруженные ошибки пишите на адрес me@zfilin.org.ua или в комментарии к публикации на Infostart.

Оригинал статьи в блоге автора

 

Спасибо за интерес к подсистеме, всем хорошего дня и хорошего кода.

обычные формы программное создание обновление форм

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    125045    683    389    

732

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

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

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

18000 руб.

06.10.2023    7788    24    6    

42

Infostart УДиФ: Управление данными и формами 1С

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

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

10000 руб.

10.11.2023    4292    12    2    

36

SALE! %

PowerTools

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

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

3600 2280 руб.

14.01.2013    178674    1084    0    

862

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99648    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18402    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

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

2400 руб.

24.09.2019    23861    16    15    

33

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28331    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Darklight 32 08.10.19 17:29 Сейчас в теме
Интересное решение, причём для неуправляемых форм - где процесс обновления модифицированного интерфейса значительно более трудоёмок, чем в управляемых с расширениями.
Хорошая альтернатива кодогенерации изменений интерфейса.
У меня есть аналогичная разработка (ещё не закончена) - для управляемых форм - принцип практически тот же - разработка частей интерфейса в отдельной(ых) форме (фрейм) и их интеграция в финальную форму (программная realtime, или препроцессораная indesign)
2. zfilin 2337 08.10.19 17:31 Сейчас в теме
(1) Заканчивайте скорее, а-то я тут уже раздумываю не начать ли писать свою такую же подсистему и для управляемых форм тоже. Но пока лень побеждает. =)
3. Darklight 32 08.10.19 17:34 Сейчас в теме
(2)А меня побеждает моя необузданная фантазия и десятки открытых и незаконченных проектов - между которыми я то и дело переключаюсь :-( + всё время новые идеи лезут ;-)
4. zfilin 2337 08.10.19 17:36 Сейчас в теме
(3)
Прикрепленные файлы:
5. k1rs 10.10.19 06:27 Сейчас в теме
(3)так размещаете на гитхаб, на инфостарте статью, неравнодушные подтянутся и помогут, в компании единомышленников дело лучше пойдет.
6. Darklight 32 10.10.19 15:38 Сейчас в теме
(5)У меня сейчас и так в работе 3 статьи
7. slawa 26 17.10.19 00:47 Сейчас в теме
8. zfilin 2337 19.10.19 18:20 Сейчас в теме
Опубликована версия 1.0.0.3

Изменения в версии:
* мелкая доработка по табличному полю дереву
9. zfilin 2337 02.11.19 15:39 Сейчас в теме
Опубликована версия 1.0.0.5

Изменения в версии:
* для существующих кнопок командной панели теперь можно переопределять действие
* мелкие багфиксы
10. Vika260740 04.11.19 22:11 Сейчас в теме
Как человек, который часто использует данный функционал, могу сказать, что это очень удобно и круто! Автор молодец))
11. zfilin 2337 27.02.20 14:18 Сейчас в теме
Набросал небольшую инструкцию, которая может пригодиться вашим пользователям: https://zfilin.org.ua/link/software_forms_restore_window
Оставьте свое сообщение