{UI/UX} Свой всплывающий информер у элемента формы
Разработка - Работа с интерфейсом
Коллеги, добрый день!
Продолжаю эксперименты с интерфейсом на досуге. Принимайте питничную фантазию на суд инфостартовский 😊
Причина
А что, если, мне нужно вывести сообщение пользователю с указанием на элемент формы, с предупреждением о возможном отклонении от задуманного сценария или просто с информацией. Текущая возможность платформы позволяет вызвать окно с заголовком «Ошибка», но мне не нужен пугающий заголовок и особенно красный фон.
Идея
Будем использовать Всплывающее поведение группы элементов формы. Идея заключается в оборачивании элемента формы в Обычную группу без отображения и вставки уже туда Группы с поведением «Всплывающая». Так же мы можем что угодно разместить на эту группу, даже пункт инструкции (в ПолеHTML) и ссылку на инструкцию, если решили тыкнуть носом пользователя окончательно. Конечно, он читать не будет, но всё же, как идея.
Реализация
//////////////////////////////////////////////////////////////////////////////////
//
// Модуль Динамического Формирования Информера
// Начало разработки 01.08.2022 года
//
// Автор и разработчик: Котов Дмитрий Вадимович
// GIT: https://github.com/KotovDima1C
// Инфостарт: //infostart.ru/profile/564942/
// telegram: @KotovDima
//
// Алгоритм формирования информера:
// 1. Элемент формы оборачивается в Обычную группу, с горизонтальной группировкой
// 2. Добавляется всплывающая группа
// 3. В всплывающую группу добавляются необходимые элементы формы для создания псевдо подсказки
// при желание можно добавить хоть поле HTML
//
// !!!Требования для работы наличия Библиотеки ДФИ, скачать можно здесь: https://github.com/KotovDima1C/DFI
//
//////////////////////////////////////////////////////////////////////////////////
#Область ФормированиеИнформера
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы
// Элемент - Строка - достаточно указать название элемента формы
// - Элементы - но иожно передать элемент формы
// СвойстваИнформера - Структура - Перечень требуемых настроек информера:
//
//
Процедура СформироватьИнформер(Форма, Элемент, СвойстваИнформера) Экспорт
ПроверитьСвойстваИнформера(СвойстваИнформера);
ОпределитьЗначенияПоУмолчанию(СвойстваИнформера);
ОпределитьРеквизитСозданныхЭлементов(Форма);
ОпределитьЭлементФормы(Форма, Элемент);
ШифрИмениЭлементов = ПолучитьШифрИмениЭлементов(Элемент);
ДобавитьШифрИмениЭлементовВСписок(Форма, ШифрИмениЭлементов);
ИнформерНайден = ПроверитьНаличиеИнформера(Форма, ШифрИмениЭлементов);
// Если ранее уже создали группу элементов, то следует её сделать видимой
Если ИнформерНайден <> Неопределено Тогда
УстановитьЦветАкцента(Элемент,СвойстваИнформера.ЦветАкцента);
УправлениеВидимостьюИнформера(Форма, ШифрИмениЭлементов, ИСТИНА);
// Если нету группы, создаем новые элементы
Иначе
СформироватьЭлементы(Форма, Элемент, ШифрИмениЭлементов, СвойстваИнформера);
КонецЕсли;
УстановитьЗаголовокИнформера(Форма, ШифрИмениЭлементов, СвойстваИнформера.ЗаголовокИнформера);
УстановитьТекстИнформера(Форма, ШифрИмениЭлементов,СвойстваИнформера.ТекстИнформера);
ЭлементИнформера = ПолучитьИмяГруппыИнформера(ШифрИмениЭлементов);
ОпределитьЭлементФормы(Форма, ЭлементИнформера);
ЭлементИнформера.Показать();
КонецПроцедуры
Процедура ПроверитьНеобходимостьСкрытьИнформеры(Форма) Экспорт
ИмяРеквизита = ПолучитьИмяРеквизитаСозданныхИнформеров();
Для Каждого текЭлемент Из Форма[ИмяРеквизита] Цикл
СкрытьИнформер(Форма,,текЭлемент.Значение);
КонецЦикла;
КонецПроцедуры
Процедура СкрытьИнформер(Форма, Элемент = Неопределено, ШифрИмениЭлементов = "") Экспорт
Если ШифрИмениЭлементов = "" И Элемент <> Неопределено Тогда
Возврат;
ИначеЕсли ШифрИмениЭлементов = "" Тогда
ШифрИмениЭлементов = ПолучитьШифрИмениЭлементов(Элемент);
КонецЕсли;
УправлениеВидимостьюИнформера(Форма, ШифрИмениЭлементов, ЛОЖЬ);
ВосстановитьЦветАкцента(Форма, ШифрИмениЭлементов);
КонецПроцедуры
#Область ВспомогательныеФункции
Процедура СформироватьЭлементы(Форма, Элемент, ШифрИмениЭлементов, СвойстваИнформера)
УстановитьЦветАкцента(Элемент, СвойстваИнформера.ЦветАкцента);
ЭлементПеред = ОпределитьЭлементПеред(Форма, Элемент);
ЭлементРодитель = ПолучитьИмяРодителяЭлемента(Элемент);
ИмяГруппыОбертка = ПолучитьИмяГруппыОбертки(ШифрИмениЭлементов);
ГруппаОбертка = кот_ДФИ.СздГруппаОбычнаяБезОтображения(Форма,ИмяГруппыОбертка,ЭлементРодитель,3,,,,ЭлементПеред);
Форма.Элементы.Переместить(Элемент,ГруппаОбертка);
// Способ отображения информера
ЭлементПеред = Неопределено;
ЗаголовокИнформера = "i";
ОпределитьСпособОтображения(Форма,СвойстваИнформера.СпособОтображения,Элемент,ЭлементПеред,ЗаголовокИнформера);
СвойстваГруппыИнформеры = Новый Структура;
СвойстваГруппыИнформеры.Вставить("Поведение", ПоведениеОбычнойГруппы.Всплывающая);
СвойстваГруппыИнформеры.Вставить("ЦветФона", СвойстваИнформера.ЦветФона);
Если НЕ (СвойстваИнформера.ЦветАкцента = "" ИЛИ СвойстваИнформера.ЦветАкцента = Неопределено) Тогда
СвойстваГруппыИнформеры.Вставить("ЦветТекстаЗаголовка", СвойстваИнформера.ЦветАкцента);
КонецЕсли;
ИмяГруппыИнформера = ПолучитьИмяГруппыИнформера(ШифрИмениЭлементов);
ГруппаИнформер = кот_ДФИ.СздГруппаОбычная(Форма,ИмяГруппыИнформера,ГруппаОбертка,ЗаголовокИнформера,1,2,2,СвойстваГруппыИнформеры,ЭлементПеред);
ИмяГруппыШапки = ИмяГруппыИнформера + "Шапка";
ГруппаШапка = кот_ДФИ.СздГруппаОбычнаяБезОтображения(Форма,ИмяГруппыШапки,ГруппаИнформер,3,2,2);
ИмяДекорации = ИмяГруппыИнформера + "Картинка";
кот_ДФИ.СздДекорацияКартинка(Форма,ИмяДекорации,ГруппаШапка,"Информация");
ИмяЗаголовок = ПолучитьИмяНадписиЗаголовка(ШифрИмениЭлементов);
кот_ДФИ.СздДекорацияНадпись(Форма,ИмяЗаголовок,ГруппаШапка,"Информация",ЛОЖЬ);
ИмяТекст = ПолучитьИмяНадписиТекст(ШифрИмениЭлементов);
кот_ДФИ.СздДекорацияНадпись(Форма,ИмяТекст,ГруппаИнформер,"Текст информации",ЛОЖЬ);
КонецПроцедуры
Функция СформироватьЦветСтиля(ЦветRGB)
ЦветRGB = СтрЗаменить(ЦветRGB," ","");
Разделитель1 = Найти(ЦветRGB, ",");
R = Лев(ЦветRGB, Разделитель1-1);
GB = Прав(ЦветRGB, СтрДлина(ЦветRGB)-Разделитель1);
Разделитель2 = Найти(GB, ",");
G = Лев(GB, Разделитель2-1);
B = Прав(GB, СтрДлина(GB) - Разделитель2);
СтильЦвет = Новый Цвет(R,G,B);
Возврат СтильЦвет;
КонецФункции
// Функция возвращает элемент перед которым находится искомый элемент, добавлю позже её в библиотеку ДФИ
Функция ОпределитьЭлементПеред(Форма, Элемент)
ЭлементРодитель = ПолучитьИмяРодителяЭлемента(Элемент);
ОпределитьЭлементФормы(Форма, ЭлементРодитель);
ЭлементПослеНайден = ЛОЖЬ;
ЭлементПосле = Неопределено;
Для Каждого текЭлемент Из ЭлементРодитель.ПодчиненныеЭлементы Цикл
Если ЭлементПослеНайден = ИСТИНА Тогда
ЭлементПосле = текЭлемент;
Прервать;
КонецЕсли;
Если Элемент = текЭлемент Тогда
ЭлементПослеНайден = ИСТИНА;
КонецЕсли;
КонецЦикла;
Возврат ЭлементПосле;
КонецФункции
Процедура ОпределитьЭлементФормы(Форма, Элемент)
Если ТипЗнч(Элемент) = Тип("Строка") Тогда
Элемент = Форма.Элементы[Элемент];
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьЦветФонаПоУмолчанию(ЦветФона)
Если ЦветФона = Неопределено ИЛИ ЦветФона = "" Тогда
ЦветФона = ЦветаСтиля.ЦветФонаПодсказки;
ИначеЕсли ТипЗнч(ЦветФона) = Тип("Строка") Тогда
ЦветФона = ОпределитьЦвет(ЦветФона);
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьЦветАкцентаПоУмолчанию(ЦветРамки)
Если ЦветРамки = Неопределено ИЛИ ЦветРамки = "" Тогда
ЦветРамки = ЦветаСтиля.ЦветАкцента;
ИначеЕсли ТипЗнч(ЦветРамки) = Тип("Строка") Тогда
ЦветРамки = ОпределитьЦвет(ЦветРамки);
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьРеквизитСозданныхЭлементов(Форма)
ИмяРеквизита = ПолучитьИмяРеквизитаСозданныхИнформеров();
РеквизитСоздан = ЕстьРеквизитИлиСвойствоОбъекта(Форма,ИмяРеквизита);
Если РеквизитСоздан = ЛОЖЬ Тогда
кот_ДФИ.СоздатьРеквизит(Форма,ИмяРеквизита,Новый ОписаниеТипов("СписокЗначений"));
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьЗначенияПоУмолчанию(СвойстваИнформера)
ОпределитьЗаголовокПоУмолчанию(СвойстваИнформера.ЗаголовокИнформера);
ОпределитьТекстПоУмолчанию(СвойстваИнформера.ТекстИнформера);
ОпределитьЦветФонаПоУмолчанию(СвойстваИнформера.ЦветФона);
ОпределитьЦветАкцентаПоУмолчанию(СвойстваИнформера.ЦветАкцента);
ОпределитьСпособОтображенияПоУмолчанию(СвойстваИнформера.СпособОтображения);
КонецПроцедуры
Процедура ОпределитьСпособОтображенияПоУмолчанию(СпособОтображения)
Если СпособОтображения = 0 или СпособОтображения = Неопределено Тогда
СпособОтображения = 1;
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьЗаголовокПоУмолчанию(ЗаголовокИнформера)
Если ЗаголовокИнформера = "" ИЛИ ЗаголовокИнформера = Неопределено Тогда
ЗаголовокИнформера = "Информация";
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьТекстПоУмолчанию(ТекстИнформера)
Если ТекстИнформера = "" ИЛИ ТекстИнформера = Неопределено Тогда
ТекстИнформера = "Обратите внимание на данный реквизит";
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьСпособОтображения(Форма,СпособОтображения,Элемент,ЭлементПеред,ЗаголовокИнформера)
// Способ отображения 1 - Выводить после реквизита Информер с заголовком "i"
// Способ отображения 2 - Выводить перед реквизитом, вместо заголовка слева
Если СпособОтображения = 2 И (Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево ИЛИ Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто) Тогда
ЗаголовокИнформера = ПолучитьЗаголовокЭлементаФормы(Форма,Элемент);
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элемент.Заголовок = ПолучитьШифрИмениЭлементов(Элемент);
ЭлементПеред = Элемент;
КонецЕсли;
КонецПроцедуры
Функция ОпределитьЦвет(тЦвет)
Если ТипЗнч(тЦвет) = Тип("Строка") Тогда
тЦвет = СформироватьЦветСтиля(тЦвет)
Иначе
тЦвет = Неопределено;
КонецЕсли;
Возврат тЦвет;
КонецФункции
Процедура ДобавитьШифрИмениЭлементовВСписок(Форма, ШифрИмениЭлементов)
ИмяРеквизита = ПолучитьИмяРеквизитаСозданныхИнформеров();
Форма[ИмяРеквизита].Добавить(ШифрИмениЭлементов);
КонецПроцедуры
Процедура ВосстановитьЦветАкцента(Форма, ШифрИмениЭлементов)
Элемент = ПолучитьИмяЭлемента(ШифрИмениЭлементов);
ОпределитьЭлементФормы(Форма, Элемент);
Элемент.ЦветРамки = Новый Цвет();
КонецПроцедуры
// Подробнее о функции и назначение написанно в моей статье - //infostart.ru/1c/articles/1112550/
Функция ПолучитьЦветПоЦветуСтиля(ЦветСтиля) Экспорт
ТекстХТМЛДокумента = "";
ФорматированныйДокумент = Новый ФорматированныйДокумент;
ФорматированныйДокумент.Добавить("ОпределениеЦвета", Тип("ТекстФорматированногоДокумента"));
ФорматированныйДокумент.Элементы[0].Элементы[0].ЦветФона = ЦветСтиля; //Не устанавливается хз почему, но если убрать, то и в ЦветТекста не встанет
ФорматированныйДокумент.Элементы[0].Элементы[0].ЦветТекста = ЦветСтиля; //Устанавливается :)
ФорматированныйДокумент.ПолучитьHTML(ТекстХТМЛДокумента, Новый Структура);
ФорматированныйДокумент.УстановитьHTML(ТекстХТМЛДокумента, Новый Структура);
Возврат ФорматированныйДокумент.Элементы[0].Элементы[0].ЦветТекста;
КонецФункции
// TODO Надо поправить получение заголовка если это будет Объект или путь через точку
Функция ПолучитьЗаголовокЭлементаФормы(Объект,Элемент)
ЗаголовокЭлемента = Элемент.Заголовок;
ПутьКДаннымЭлемента = Элемент.ПутьКДанным; // todo
Если ЗаголовокЭлемента = "" Тогда
//ЗаголовокЭлемента = Форма[Элемент.ПутьКДанным].Заголовок;
МассивРеквизитов = Объект.ПолучитьРеквизиты();
Для Каждого текЭлемент Из МассивРеквизитов Цикл
Если текЭлемент.Имя = ПутьКДаннымЭлемента Тогда
ЗаголовокЭлемента = текЭлемент.Заголовок;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЗаголовокЭлемента = "" Тогда
ЗаголовокЭлемента = ПутьКДаннымЭлемента;
КонецЕсли;
Возврат ЗаголовокЭлемента + ":";
КонецФункции
Функция ПолучитьИмяРодителяЭлемента(Элемент)
Возврат Элемент.Родитель.Имя;
КонецФункции
Функция ПолучитьИмяГруппыИнформера(ШифрИмениЭлементов)
Возврат ШифрИмениЭлементов + "Группа";
КонецФункции
Функция ПолучитьИмяГруппыОбертки(ШифрИмениЭлементов)
Возврат ШифрИмениЭлементов + "Обертка";
КонецФункции
Функция ПолучитьИмяНадписиЗаголовка(ШифрИмениЭлементов)
Возврат ШифрИмениЭлементов + "Заголовок";
КонецФункции
Функция ПолучитьИмяНадписиТекст(ШифрИмениЭлементов)
Возврат ШифрИмениЭлементов + "Текст";
КонецФункции
Функция ПолучитьИмяРеквизитаСозданныхИнформеров()
Возврат ПолучитьПрефиксШифра() + "СоданныеРеквизиты";
КонецФункции
Функция ПолучитьПрефиксШифра()
Возврат "ФормированиеИнформера";
КонецФункции
Функция ПолучитьИмяЭлемента(ШифрИмениЭлементов)
ИмяПрефикса = ПолучитьПрефиксШифра();
ИмяЭлемента = СтрЗаменить(ШифрИмениЭлементов,ИмяПрефикса,"");
Возврат ИмяЭлемента;
КонецФункции
Функция ПолучитьШифрИмениЭлементов(Элемент)
Возврат ПолучитьПрефиксШифра() + Элемент.Имя;
КонецФункции
Функция ПолучитьПараметрыСвойствИнформера() Экспорт
НаборПараметров = "ЗаголовокИнформера, ТекстИнформера, ЦветФона, ЦветАкцента, СпособОтображения";
МассивПараметров = СтрРазделить(НаборПараметров,",",ЛОЖЬ);
Возврат МассивПараметров;
КонецФункции
Функция ПолучитьПараметрыСвойствИнформераНеобязательные()
НаборПараметров = "ЗаголовокИнформера, ТекстИнформера, ЦветФона, ЦветАкцента, СпособОтображения";
МассивПараметров = СтрРазделить(НаборПараметров,",",ЛОЖЬ);
Возврат МассивПараметров;
КонецФункции
Процедура УстановитьЦветАкцента(Элемент, ЦветАкцента)
Элемент.ЦветРамки = ЦветАкцента;
КонецПроцедуры
Процедура УстановитьЗаголовокИнформера(Форма, ШифрИмениЭлементов, ЗаголовокИнформера)
ЭлементЗаголовка = ПолучитьИмяНадписиЗаголовка(ШифрИмениЭлементов);
ОпределитьЭлементФормы(Форма, ЭлементЗаголовка);
ЭлементЗаголовка.Заголовок = ЗаголовокИнформера;
КонецПроцедуры
Процедура УстановитьТекстИнформера(Форма, ШифрИмениЭлементов, ТекстИнформера)
ЭлементТекста = ПолучитьИмяНадписиТекст(ШифрИмениЭлементов);
ОпределитьЭлементФормы(Форма, ЭлементТекста);
ЭлементТекста.Заголовок = ТекстИнформера;
КонецПроцедуры
Процедура УправлениеВидимостьюИнформера(Форма, ШифрИмениЭлементов,СостояниеВидимости)
Перем Заголовок;
// Отображенние информера
ЭлементИнформера = ПолучитьИмяГруппыИнформера(ШифрИмениЭлементов);
ОпределитьЭлементФормы(Форма, ЭлементИнформера);
ЭлементИнформера.Видимость = СостояниеВидимости;
// Обработка Способа отображения = 2, возращаем заголовок
Элемент = СтрЗаменить(ШифрИмениЭлементов,ПолучитьПрефиксШифра(),"");
ОпределитьЭлементФормы(Форма,Элемент);
Если СостояниеВидимости = ЛОЖЬ И Элемент.Заголовок = ШифрИмениЭлементов Тогда
Заголовок = ЭлементИнформера.Заголовок;
ЭлементИнформера.Заголовок = ШифрИмениЭлементов;
Элемент.Заголовок = Заголовок;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ИначеЕсли СостояниеВидимости = ИСТИНА И ЭлементИнформера.Заголовок = ШифрИмениЭлементов Тогда
Заголовок = Элемент.Заголовок;
Элемент.Заголовок = ШифрИмениЭлементов;
ЭлементИнформера.Заголовок = Заголовок;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;
КонецЕсли;
КонецПроцедуры
Функция ПроверитьНаличиеИнформера(Форма, ШифрИмениЭлементов)
Возврат Форма.Элементы.Найти(ПолучитьИмяГруппыОбертки(ШифрИмениЭлементов));
КонецФункции
Процедура ПроверитьСвойстваИнформера(СвойстваИнформера)
// Добавляем все необязательные к заполнению свойства, если они не были указаны
НеобязательныеПараметры = ПолучитьПараметрыСвойствИнформераНеобязательные();
Для Каждого текЭлемент Из НеобязательныеПараметры Цикл
Если СвойстваИнформера.Свойство(текЭлемент) = ЛОЖЬ Тогда
СвойстваИнформера.Вставить(текЭлемент,Неопределено);
КонецЕсли;
КонецЦикла;
// Проверяем обязательные свойства
ВсеПараметры = ПолучитьПараметрыСвойствИнформера();
ОтсутствующиеПараметры = "";
Для Каждого текЭлемент Из ВсеПараметры Цикл
Если СвойстваИнформера.Свойство(текЭлемент) = ЛОЖЬ Тогда
ОтсутствующиеПараметры = ОтсутствующиеПараметры + ?(ОтсутствующиеПараметры = "","",", ") + текЭлемент;
КонецЕсли;
КонецЦикла;
Если ОтсутствующиеПараметры <> "" Тогда
ТекстОшибки = "Отсутствуют параметры в структуре свойств Информера:" + Символы.ПС + ОтсутствующиеПараметры;
Попытка
ВызватьИсключение ТекстОшибки;
Исключение
ЗаписьЖурналаРегистрации("Динамическое формирование Информера",УровеньЖурналаРегистрации.Ошибка,,,ТекстОшибки);
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт
Попытка
Проверка = Объект[ИмяРеквизита];
ЕстьРеквизит = Истина;
Исключение
ЕстьРеквизит = Ложь;
КонецПопытки;
Возврат ЕстьРеквизит;
КонецФункции
#КонецОбласти
#КонецОбласти
Ограничения кода - требуется библиотека Динамического формирования интерфейса. Да реклама :)
Возможности
Функция динамического создания информера включает следующие возможности:
- Появление вместо заголовка элемента формы слева
- Появление в виде «i» справа от элемента формы
- Возможность задать цвет фона (по умолчанию цвет подсказки)
- Возможность определить цвет выделение реквизита (по умолчанию цвет акцентирования), если выбран метод отображения вместо заголовка, то заголовок группы так же будет этого же цвета.
- Предусмотрена возможность точечного скрытия информера или массово всех.
Демонстрация
У нас есть библиотека (общий модуль) формирования информера (код выше). Будем тестировать на форме приведенной ниже.

Выводим вместо заголовка элемента наш Информер
У нас есть реквизит на форме «Партнер» и мы хотим у него вывести уведомление, формируем вызов со следующим кодом:
&НаСервере
Процедура ПоказатьИнформерНаСервере()
СвойстваИнформера = Новый Структура("ЗаголовокИнформера, ТекстИнформера, ЦветФона, ЦветАкцента, СпособОтображения");
СвойстваИнформера.ЗаголовокИнформера = "К вашему сведению!";
СвойстваИнформера.ТекстИнформера = "Данный партнер давно не получал звонок от нас! Просим вас заняться этим вопросом в ближайшее время.";
СвойстваИнформера.ЦветФона = "240,255,255";
СвойстваИнформера.ЦветАкцента = "0,140,219";
СвойстваИнформера.СпособОтображения = 2;
кот_Информер.СформироватьИнформер(ЭтотОбъект,"Партнер",СвойстваИнформера);
КонецПроцедуры

Выводим Информер после элемента
Проверяем как работает со значениями по умолчанию (вывод в виде информации справа от элемента формы с заголовком «i»). Потребуется следующий код вызова:
&НаСервере
Процедура ПоказатьИнформерСправаНаСервере()
СвойстваИнформера = Новый Структура("ЗаголовокИнформера, ТекстИнформера");
СвойстваИнформера.ЗаголовокИнформера = "Заканчивается срок.";
СвойстваИнформера.ТекстИнформера = "Обращаем ваше внимание, что по соглашению с Партнером заканчивается срок, возможно стоит его продлить.";
кот_Информер.СформироватьИнформер(ЭтотОбъект,"Соглашение",СвойстваИнформера);
КонецПроцедуры

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

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

Всем удачного котинга!
ЗЫ: Кто нашел опечатки и ошибки на скриншотах, тот молодец.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)
Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!
31720 руб.
27.03.2025 92401 69 44
Консолидация данных Работа с интерфейсом Разработчик Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)
Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.
6088 руб.
17.10.2025 3682 3 0
Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)
Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.
36600 руб.
28.08.2025 10392 2 2
Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна
20.08.2024 57487 mrXoxot 44
Работа с интерфейсом Разработчик 1С:Предприятие 8 Бесплатно (free)
Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.
27.05.2024 30028 smielka 39
Инструментарий разработчика Работа с интерфейсом Разработчик 1С 8.3 Абонемент ($m)
Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.
1 стартмани
10.04.2023 19502 190 acces969 31
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.
1 стартмани
05.07.2022 17981 kalyaka 8
Работа с интерфейсом Разработчик Пользователь 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)
Расширение для 1С, которое меняет цвет интерфейса так, что вы больше не перепутаете боевую базу с тестовой и заодно удивите всех коллег.
1 стартмани
01.07.2022 38449 554 top_1c 75
Большинство пользователей вообще ничего не читают. Не в тему, но в контексте лени пользователей вспомнил историю, как-то узнал, что есть лайфхак у пользователей некоторые принципиально не выходят, когда их просят выйти для обновления конфигурации... Почему? Потому что не нужно будет заходить через пускач 1С, т.к. система сама перезапустит клиент. Вот такие они :)
Обычно пользователь не читает предупреждающие сообщения или подсказки (информер) и реагирует только тогда, когда система не дает ему сделать привычную ему операцию. Глаз замыливается и он как, простите за сравнение, лошадь в шорах, смотрит и видит только узкий круг данных. Как мне кажется, должно быть напоминание, которое невозможно закрыть, нажав просто на крестик. ИМХО, конечно.
(13) особенно хороши при заполнении форм где много элементов ввода и выпадающих списков. Информер применять не только с точки зрения заставить пользователя что-то сделать, а больше помочь ему.
При этом самая гениальная идея это пошаговый мастер.
Но так или иначе с точки зрения UI этот механизм удобен и понятен.
Тут нужно с умом использовать, а также когда писал статью пришли идеи по развитию, которые как по мне крайне удобные и комфортные для пользователя (помощь ввода данных и помощь корректировки данных).
Мой скромный перечень хобби:
Сноуборд (15 лет уже катаю, и только в прошлом году сломал обе руки)
Велосипед (200 км за день проехал рекорд пока, ну и 100-150 км дать в удольствие всегда)
Настольные игры (такой большой выбор сейчас, правда компанию сложно найти и время, но 7 Чудес Дуэль рекомендую)
Покрас миниатюр (забавно и увлекательно, краски от цитадели... но до Вахи не дорос)
Кемпинг на Байкале (летом бывает по месяцу живу в палатках, тоже хобби)
Игровая консоль (тоже хобби!)
Программирование на 1С (ибо уже работаю аналитиком)
Блог (лайк и подписка )
Да времени на всё не хватает... а хотелось бы всё и сразу :)
Можно ли кнопкам командной панели... можно если имитировать командую панель как обычную группу, и прикрутить текущие подсказки из публикации.
Не по теме вопроса но приведу ещё один пример чек-бокса
Есть еще идея про ПоказатьОповещениеПользователя - это окно можно перемещать и оно запоминает свое положение.
При закрытии Предприятие настройка положения записывается в ХранилищеСистемныхНастроек с КлючомОбъекта "ОкноОповещения/Такси/НастройкиОкна" и значением вида:
{"#",63a2bd5a-67e3-40d1-86dd-c52a31209da2,
{3,1,"NotificationWindowRectLarge_TDI_DPI120","{1595,855,1913,1015}"}
}Где {1595,855,1913,1015} - запомненные координаты окна оповещения. Менять их можно, но повлияет это только если их изменить другому пользователю при незапущенном сеансе. Когда он откроет Предприятие, координаты возьмутся оттуда. В пределах сеанса их там менять бесполезно. Пока думаю, как их достать и изменить в сеансе.
Так можно получить разрешение и масштаб. Пожалуйста )
Нужны такие настройки: Заголовок = " ", Всплывающая, ГиперсылкаЗаголовка, ЦветТекста = ЦветФонаФормы. Тогда не будет видно элементов управления группой и сама группа съёжится до минимальных размеров.
Потом рядом размещаем Декорация =Картинка, с событием "Нажатие". В событии прописываем НашаГруппа.Показать().
И вот, мы уже имеем картинку, вместо текста заголовка группы.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1709735
Создание 12.08.22 14:00
Обновление 24.08.22 06:42
Просмотры 16989
Загрузки 0
Рейтинг
98
Комментарии 39
Код открыт Да
Рубрики Работа с интерфейсом
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)