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

31.10.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Программные формы (файл конфигурации и демобаза)
.zip 99,81Kb ver:1.0.0.5
2
2 Скачать (2 SM) Купить за 2 150 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

События

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

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

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

 

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

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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159743    876    399    

862

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7912    59    23    

70

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

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

9360 руб.

17.05.2024    23523    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10481    36    25    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15450    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    188088    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17323    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7726    8    35    

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

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

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