Внесение изменения в формы с помощью расширений, без заимствования формы.

13.09.19

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

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

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

Наименование Файл Версия Размер
Расширение формы
.cfe 29,23Kb
11
.cfe 29,23Kb 11 Скачать

Статья не новая, попытку номер 1 я уже описывал, поэтому очередность в обратном порядке, возможно скоро появится и следующие попытки.

ПОПЫТКА номер 2.

В расширении в общих формах создал форму-шаблон с определенными настройками. Теперь когда мне нужно изменить форму, я добавляю объект в расширение. при необходимости реквизиты (ТЧ), копирую общую форму-шаблон в формы этого объекта, назначаю тип основному реквизиту,  настраиваю форму как мне нужно. На форме у меня нет никаких кнопок, идея такая, при редактировании реквизитов в режиме предприятия, из формы-шаблона данные основного реквизита формы переносятся в основной реквизит формы основной конфигурации, для этого я подключаю обработчик ожидания к форме-шаблону, который в свою очередь с помощью метода КопироватьДанныеФормы переносит данные (записи объекта не происходит). Вот мой код формы-шаблона

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	#Область ШаблонДополнительнойФормы
	МетаданныеОбъекта = Параметры.Ключ.Метаданные();
	ПолноеИмяОбъекта  = МетаданныеОбъекта.ПолноеИмя();
	СохраненныеНастройки     = РасширениеФорм_ОбщегоНазначения.ЗагрузитьОбщиеНастройки(ПолноеИмяОбъекта);
	ОсновнойРеквизитФормы    = РасширениеФорм_ОбщегоНазначения.ПолучитьОсновнойРеквизит(СохраненныеНастройки);	
	#КонецОбласти
	
КонецПроцедуры

#Область ШаблонДополнительнойФормы
&НаКлиенте
Процедура Настройка(Команда)
	
	ШаблонЗаголовка = НСтр("ru='Настройка расширения формы'");
	ТекстЗаголовка  = ШаблонЗаголовка;
	//ТекстЗаголовка = СтрШаблон(ШаблонЗаголовка, ПолноеИмяОбъекта);
	
	ДанныеВладельца = Неопределено;
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ПолноеИмяОбъекта",     ПолноеИмяОбъекта);
	ПараметрыФормы.Вставить("ЗаголовокФормы",       ТекстЗаголовка);
	
	ДопПараметры = РасширениеФорм_ОбщегоНазначенияКлиент.ПодготовитьПарамтрыУниверсальнойФормы(ВладелецФормы.Параметры.Ключ, ВладелецФормы);
	
	ОповещениеОВыборе = Новый ОписаниеОповещения("ФормаНастройкиПослеВыбора", ЭтаФорма, ДопПараметры);
	
	ОткрытьФорму("ОбщаяФорма.РасширениеФорм_ФормаНастройки", 
	ПараметрыФормы, 
	, 
	, 
	, 
	,
	ОповещениеОВыборе,
	РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ФормаНастройкиПослеВыбора(РезультатВыбора, ДопПараметры) Экспорт
	
	//ЗаполнитьЗначенияСвойств(Параметры, ДопПараметры);	
	Если РезультатВыбора <> Неопределено Тогда
		
		ИмяФормыРасширения = РасширениеФорм_ОбщегоНазначения.ПолучитьИмяФормы(ДопПараметры);
		
		ОткрытьФорму(ИмяФормыРасширения, 
		ДопПараметры, 
		ВладелецФормы, 
		, 
		ВладелецФормы.Окно, 
		ВладелецФормы.НавигационнаяСсылка,
		,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
	КонецЕсли;	
	            
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПодключитьОбработчикОжидания("ОбновитьДанныеФормыВладельца", 1, Ложь);
	ДопПараметры          = РасширениеФорм_ОбщегоНазначенияКлиент.ПодготовитьПарамтрыУниверсальнойФормы(ВладелецФормы.Параметры.Ключ, ВладелецФормы);
	ОсновнойРеквизитФормы = РасширениеФорм_ОбщегоНазначенияКлиент.ПодготовитьДанныеФормыВлвдельца(ДопПараметры, ВладелецФормы, ОсновнойРеквизитФормы);
		
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДанныеФормыВладельца()
	
	Если Модифицированность Тогда
		
		КопироватьДанныеФормы(Объект, ВладелецФормы[ОсновнойРеквизитФормы]);
		ВладелецФормы.Модифицированность = Истина;
		Модифицированность = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

Пример использования заимствованной формы и формы-шаблона

 

ПОПЫТКА номер 1.

Дополнения от 13.09.2019

  1. Для ТЧ добавлена возможность добавлять, удалять строки.
  2. Добавлена возможность настраивать формы для "Планы видов расчета".
  3. Настройка видимости по пользователям.
  4. Задавать Имя основного реквизита формы основной конфигурации

Краткая инструкция на примере добавленных реквизитов в документ "Поступления на расчетный счет" конфигурации "Бухгалтерия предприятия, редакция 3.0 БИТ.ФИНАНС 3.1"

  1. Добавим расширение. (не знаете как, используйте поиск по сайту)
  2. Настройка расширения под конкретную конфигурацию. Добавляем объекты в расширение и настраиваем общую команду.

в результате на панели действий формы должна появиться ссылка "Расширение формы"

 

  1. Настройка формы.  Можно добавить реквизиты, стандартные реквизиты, реквизиты ТЧ. (каждый объект настраивается отдельно, настройки сохраняются для всех пользователей)

в результате расширенная форма стала выглядеть так, 

 

При редактировании данные формы расширения переносятся в основную форму. 

Данная форма имеет ограниченный функционал и не является заменой основной формы, рекомендуется к использованию для редактирования реквизитов не отображенных на основной форме. ВНИМАНИЕ: При повторной активации навигационной ссылки "Расширение формы..." данные формы автоматически не обновляются.

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

Важно - имя основного реквизита формы объекта (формы, которую расширяем) обязательно должно быть "Объект".

Предполагаю, что должно работать на любой конфигурации (не проверял), разрабатывал на платформе 1С:Предприятие 8.3 (8.3.13.1809).

См. также

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

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

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

6000 руб.

16.01.2015    61800    43    59    

80

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

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

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

5000 руб.

14.01.2016    54407    16    21    

42

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

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

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

2400 руб.

29.06.2020    16700    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10743    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9623    151    acces969    31    

118

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

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

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

1 стартмани

05.07.2022    3669    kalyaka    2    

27

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

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

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

3600 руб.

29.04.2022    12085    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Qbik 5 27.05.20 11:04 Сейчас в теме
I. Динамически настраиваемое расширение формы.
1. При изменении данных на динамической форме - данные меняются и в основной форме!
Но при изменении данных в основной форме - на динамической форме остаются исходные данные.

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

II. Форма из конфигурации расширения
1. Не понял порядок работы и подключения:
- скопировал форма-шаблон;
- установил нужный тип основному реквизиту формы "объект"
- произведите необходимую настройку формы - не сделал. Что это?

При выборе этого режима отображается форма как в варианте I. Как увидеть отличия? и В чем суть разницы?
2. duhh 236 29.05.20 14:44 Сейчас в теме
(1)

1. Изменить процедуру
&НаКлиенте
Процедура ОбновитьДанные(Команда)

ДопПараметры = РасширениеФорм_ОбщегоНазначенияКлиент.ПодготовитьПарамтрыУниверсальнойФормы(ВладелецФормы.Параметры.Ключ, ВладелецФормы);
ОсновнойРеквизитФормы = РасширениеФорм_ОбщегоНазначенияКлиент.ПодготовитьДанныеФормыВлвдельца(ДопПараметры, ВладелецФормы, ОсновнойРеквизитФормы);
ОбновитьДанныеФормы(ДопПараметры);

КонецПроцедуры

2. Разница, в первом случае это динамически программно создаваемая форма, во втором форма настраиваемая в конфигураторе, выбор варианта использования настраивается в предприятии в форме настройки расширяемой формы.
3. lion11 143 26.06.23 10:39 Сейчас в теме
Платформа 8.3.22.1750. БП 3.0.138.25
Если доп. реквизитов много, а основная форма не большая, то доп.форма открывается укороченной, надо постоянно увеличивать пользователю, что не удобно.
Можно ее как-то увеличить изначально?

При использовании 2 варианта с настраиваемой формой не дает сохранить значения доп реквизитов. Выходит окно "Не удалось начать редактирование. Пользователь уже начал редактировать эти данные".
Это можно как-то исправить?
Оставьте свое сообщение