Программное управление обычными формами документов и справочников в УПП/КА

Публикация № 827089

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

Обычные формы программирование форм вывод полей на форму вывод колонки на форму

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

Часть 1

Чтобы не снимать с поддержки все формы конфигурации и не вставлять свои обработчики в процедуры «ПриОткрытии», будем искать такую процедуру, которая вызывается во всех формах документах и справочников.

Для форм документов - это функция общего модуля «РаботаСДиалогами.АктивизироватьРеквизитВФорме». Она как раз вызывается из процедуры форм документов «При открытии» и двойное бинго - в конце процедуры, после стандартных процедур по изменению формы.

И так, снимаем с поддержки общий модуль «РаботаСДиалогами».
Находим функцию «АктивизироватьРеквизитВФорме» и сразу после объявления функции добавляем строку вызова нашей процедуры:

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

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

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

Все. Отделались снятием с поддержки двух модуле с добавлением в них двух строк. Обновлять будет легко.

Часть 2

Теперь самое главное.

Добавляем в конфигурацию общий модуль «ИТ_РаботаСДиалогами». В свойствах ставим галочки на использование в клиенте.

Свойства нового модуля

В модуль помещаем вызываемые функции.

//*******************************************************************************************
//*В ЭТОМ МОДУЛЕ ПРОЦЕДУРЫ И ФУНКЦИИ, СВЯЗАННЫЕ С ДИНАМИЧЕСКИМ ФОРМИРОВАНИЕМ ФОРМ ДОКУМЕНТОВ*
//*******************************************************************************************

//******************* ЗАПОЛНЕНИЕ ФОРМ ДОКУМЕНТОВ ****************************	
//Вызывается из процедуры РаботаСДиалогами.АктивизироватьРеквизитВФорме
//В свою очередь процедура "АктивизироватьРеквизитВФорме" вызывается в каждой форме документа при открытии
Процедура ДополнитьФормуДокумента(ДокументОбъект, ФормаДокумента) Экспорт
        //Пример вызова процедуры для изменения формы документа
	Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.УвольнениеИзОрганизаций") тогда 
		ПриОткрытии_УвольнениеИзОрганизаций(ДокументОбъект, ФормаДокумента);
	КонецЕсли;	
КонецПроцедуры


//******************* ЗАПОЛНЕНИЕ ФОРМ СПРАВОЧНИКОВ ****************************	
//Вызывается из процедуры МеханизмНумерацииОбъектов.УстановитьДоступностьПоляВводаНомера
//В свою очередь процедура "УстановитьДоступностьПоляВводаНомера" вызывается почти в каждой форме справочника при открытии. 

Процедура ДополнитьФормуСправочника(ОбъектМетоданных, ФормаСправочника) Экспорт
        //!ВНИМАНИЕ! Процедура вызывается и при открытии формы элемента справочника, и при открытии формы списка справочника. Отличить место вызова процедуры можно по имени формы, но имя формы у них приходится получать по разному.        
        Попытка
		ИмяФормы = ФормаСправочника.Имя;
	Исключение
		ИмяФормы = ФормаСправочника.Заголовок;
	КонецПопытки;
        //Примеры вызова процедур для изменения формы элемента справочника.
	Если  ОбъектМетоданных.ПолноеИмя()="Справочник.Склады"
		И ИмяФормы="Склады (места хранения)" Тогда
		ПриОткрытии_Склады(ОбъектМетоданных, ФормаСправочника);
	ИначеЕсли ОбъектМетоданных.ПолноеИмя()="Справочник.СтатьиДвиженияДенежныхСредств"
		И ИмяФормы="Статьи движения денежных средств" Тогда
		ПриОткрытии_СтатьиДвиженияДенежныхСредств(ОбъектМетоданных, ФормаСправочника);
	КонецЕсли;
	
КонецПроцедуры

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

 

Часть 3

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

 - Функция добавления поля ввода на форму (одна из ранних наших функций).

Эта функция позволяет разместить на форму реквизит данный как поле ввода и его заголовок как надпись.
Есть некоторые особенности использования этой функции:
- При наличии заголовка в параметрах, он отображается как надпись на форме слева от поля ввода, если поле ввода имеет флаг РастягиватьПоВысоте=Истина, то заголовок выводится слева-сверху от поля ввода.
- В параметр "ДействиеПриИзменении" можно указать название процедуры, вызываемый при изменении реквизита, добавленного на форму. !ВАЖНО! указываемая процедура должна быть размещена в модуле формы, где добавляется реквизит.

//****************** ФУНКЦИИ РИСОВАНИЯ ОБЪЕКТОВ НА ФОРМЕ *******************
Функция ДобавитьПолеВводаНаФорму(ФормаОбъекта,Заголовок="",ИмяДанных,ИмяЭлементаПривязки="",ИндексЭлемента=0,РастягиватьПоШирине=Ложь,РастягиватьПоВысоте=Ложь,ШиринаЗаголовка = 88, ДействиеПриИзменении="")
	СдвигВПраво = 0;
	ЭлементыФормы = ФормаОбъекта.ЭлементыФормы;
	МинимальнаяВысотаФормы = 5 + (ИндексЭлемента * 20)+ 19+5+ЭлементыФормы.ОсновныеДействияФормы.Высота;
        //Увеличение высоты формы и смещение нижних кнопок при недостаточности высоты формы.
	Если ФормаОбъекта.Высота < МинимальнаяВысотаФормы Тогда
		РазницаВВысоте = МинимальнаяВысотаФормы - ФормаОбъекта.Высота;
		ФормаОбъекта.Высота = ФормаОбъекта.Высота + РазницаВВысоте+2;
		ШиринаВерхКнопок =  ЭлементыФормы.ОсновныеДействияФормы.ширина;
		НовыйВерхКнопок =  ЭлементыФормы.ОсновныеДействияФормы.Верх + РазницаВВысоте;
		ЭлементыФормы.ОсновныеДействияФормы.Верх=НовыйВерхКнопок;
		Shell = Новый COMОбъект("WScript.Shell"); 
		Shell.SendKeys("%+R"); // вызов Alt+Shift+R
	КонецЕсли;
        
        //Имя панели, на которую выводится новое поле ввода. 
	Если ПустаяСтрока(ИмяЭлементаПривязки) Тогда
		ЭлементПривязки=ФормаОбъекта.ТекущийЭлемент;
		Ширина = ФормаОбъекта.Ширина;
		Высота = ФормаОбъекта.Высота;	
	Иначе
		ЭлементПривязки = ЭлементыФормы[ИмяЭлементаПривязки];
		Ширина = ЭлементПривязки.Ширина;
		Высота = ЭлементПривязки.Высота;
	КонецЕсли;
        
        //Выводим заголовок поля на форме как надпись.
	Если Не ПустаяСтрока(Заголовок) Тогда
		НоваяНадпись = ЭлементыФормы.Добавить(Тип("Надпись"),"Надпись"+ИмяДанных,,ЭлементПривязки);
		НоваяНадпись.Заголовок = Заголовок;
		НоваяНадпись.Верх = 5 + (ИндексЭлемента * 20);
		НоваяНадпись.Лево = 5;
		НоваяНадпись.Ширина = ШиринаЗаголовка; 
		НоваяНадпись.Высота = 19;
		НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементПривязки,ГраницаЭлементаУправления.Верх); 
		НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементПривязки,ГраницаЭлементаУправления.Лево); 
		ЗаголовокСверху = (РастягиватьПоВысоте И РастягиватьПоШирине);
		Если ЗаголовокСверху Тогда
			НоваяНадпись.Ширина = Ширина-10; 
			НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементПривязки,ГраницаЭлементаУправления.Право); 
			ИндексЭлемента = ИндексЭлемента + 1;
		Иначе
			СдвигВПраво = ШиринаЗаголовка;
		КонецЕсли;
	КонецЕсли;
 
        //Добавление самого поля ввода (вашего реквизита) на форму
	НовоеПолеВвода = ЭлементыФормы.Добавить(Тип("ПолеВвода"),ИмяДанных,,ЭлементПривязки);
	НовоеПолеВвода.Данные = ИмяДанных;
 	ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НовоеПолеВвода.Значение));
 	ЭтоДокумент = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(НовоеПолеВвода.Значение));
	НовоеПолеВвода.КнопкаОткрытия = ЭтоСправочник ИЛИ ЭтоДокумент;
	
	НовоеПолеВвода.Верх = 5+(ИндексЭлемента*20);
	НовоеПолеВвода.Лево = 5+СдвигВПраво;
	НовоеПолеВвода.Ширина = ?(РастягиватьПоШирине,Ширина-15-СдвигВПраво,220); 
	НовоеПолеВвода.Высота = ?(РастягиватьПоВысоте,Высота-15-(ИндексЭлемента*20),19); 
;
	НовоеПолеВвода.Подсказка = Заголовок;
	//НовоеПолеВвода.МногострочныйРежим  = Истина;
	НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементПривязки,ГраницаЭлементаУправления.Верх); 
	НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементПривязки,ГраницаЭлементаУправления.Лево); 
	Если РастягиватьПоВысоте Тогда
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементПривязки,ГраницаЭлементаУправления.Низ); 
	Иначе
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементПривязки,ГраницаЭлементаУправления.Верх); 
	КонецЕсли;			
	Если РастягиватьПоШирине Тогда
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементПривязки,ГраницаЭлементаУправления.Право); 
	Иначе
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементПривязки,ГраницаЭлементаУправления.Лево); 
	КонецЕсли;

        //Добавление события при изменении. 
	Если НЕ ПустаяСтрока(ДействиеПриИзменении) Тогда
			НовоеПолеВвода.УстановитьДействие("ПриИзменении",Новый Действие(ДействиеПриИзменении));
	КонецЕсли;
	Возврат НовоеПолеВвода;
КонецФункции

 - Функция добавления флажка на форму.

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

Код этой функции почти идентичны предыдущим, по этому убран под спойлер.

 
Функция ДобавитьФлажокНаФорму(ФормаОбъекта,Заголовок,ИмяДанных,ИмяЭлементаПривязки="",ИндексЭлемента=0,РастягиватьПоШирине=Ложь,РастягиватьПоВысоте=Ложь, ДействиеПриИзменении="", НадписьСправа=Истина)
	СдвигВПраво = 0;
	ЭлементыФормы = ФормаОбъекта.ЭлементыФормы;
	МинимальнаяВысотаФормы = 5 + (ИндексЭлемента * 20)+ 19+5+ЭлементыФормы.ОсновныеДействияФормы.Высота;
        //Увеличение высоты формы и смещение нижних кнопок при недостаточности высоты формы.
	Если ФормаОбъекта.Высота < МинимальнаяВысотаФормы Тогда
		РазницаВВысоте = МинимальнаяВысотаФормы - ФормаОбъекта.Высота;
		ФормаОбъекта.Высота = ФормаОбъекта.Высота + РазницаВВысоте+2;
		ШиринаВерхКнопок =  ЭлементыФормы.ОсновныеДействияФормы.ширина;
		НовыйВерхКнопок =  ЭлементыФормы.ОсновныеДействияФормы.Верх + РазницаВВысоте;
		ЭлементыФормы.ОсновныеДействияФормы.Верх=НовыйВерхКнопок;
		Shell = Новый COMОбъект("WScript.Shell"); 
		Shell.SendKeys("%+R"); // вызов Alt+Shift+R
	КонецЕсли;
        
        //Имя панели, на которую выводится новый флажок. 
	Если ПустаяСтрока(ИмяЭлементаПривязки) Тогда
		ЭлементПривязки=ФормаОбъекта.ТекущийЭлемент;
		Ширина = ФормаОбъекта.Ширина;
		Высота = ФормаОбъекта.Высота;	
	Иначе
		ЭлементПривязки = ЭлементыФормы[ИмяЭлементаПривязки];
		Ширина = ЭлементПривязки.Ширина;
		Высота = ЭлементПривязки.Высота;
	КонецЕсли;
 
        //Добавление самого флажка (вашего реквизита) на форму
	НовоеПолеВвода = ЭлементыФормы.Добавить(Тип("Флажок"),ИмяДанных,,ЭлементПривязки);
	НовоеПолеВвода.Данные = ИмяДанных;
 	
	НовоеПолеВвода.Верх = 5+(ИндексЭлемента*20);
	НовоеПолеВвода.Лево = 5+СдвигВПраво;
	НовоеПолеВвода.Ширина = ?(РастягиватьПоШирине,Ширина-15-СдвигВПраво,220); 
	НовоеПолеВвода.Высота = ?(РастягиватьПоВысоте,Высота-15-(ИндексЭлемента*20),19); 
	НовоеПолеВвода.Заголовок = Заголовок;
	НовоеПолеВвода.Подсказка = Заголовок;
	НовоеПолеВвода.ПоложениеЗаголовка = ?(НадписьСправа,ПоложениеЗаголовка.ЗаголовокСправа,ПоложениеЗаголовка.ЗаголовокСлева); 
	НовоеПолеВвода.ПрозрачныйФон = Истина; 
	НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементПривязки,ГраницаЭлементаУправления.Верх); 
	НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементПривязки,ГраницаЭлементаУправления.Лево); 
	Если РастягиватьПоВысоте Тогда
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементПривязки,ГраницаЭлементаУправления.Низ); 
	Иначе
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементПривязки,ГраницаЭлементаУправления.Верх); 
	КонецЕсли;			
	Если РастягиватьПоШирине Тогда
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементПривязки,ГраницаЭлементаУправления.Право); 
	Иначе
		НовоеПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементПривязки,ГраницаЭлементаУправления.Лево); 
	КонецЕсли;

        //Добавление события при изменении. 
	Если НЕ ПустаяСтрока(ДействиеПриИзменении) Тогда
			НовоеПолеВвода.УстановитьДействие("ПриИзменении",Новый Действие(ДействиеПриИзменении));
	КонецЕсли;
	Возврат НовоеПолеВвода;
КонецФункции

 

 

- Функция добавления надписи на форму.

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

Код убран под спойлер

 

Функция ДобавитьНадписьНаФорму(ФормаОбъекта,Надпись,ИмяЭлементаПривязки="",ИндексЭлемента=0,РастягиватьПоШирине=Ложь,РастягиватьПоВысоте=Ложь)
	СдвигВПраво = 0;
	ЭлементыФормы = ФормаОбъекта.ЭлементыФормы;
	МинимальнаяВысотаФормы = 5 + (ИндексЭлемента * 20)+ 19+5+ЭлементыФормы.ОсновныеДействияФормы.Высота;
	Если ФормаОбъекта.Высота < МинимальнаяВысотаФормы Тогда
		РазницаВВысоте = МинимальнаяВысотаФормы - ФормаОбъекта.Высота;
		ФормаОбъекта.Высота = ФормаОбъекта.Высота + РазницаВВысоте+2;
		ШиринаВерхКнопок =  ЭлементыФормы.ОсновныеДействияФормы.ширина;
		НовыйВерхКнопок =  ЭлементыФормы.ОсновныеДействияФормы.Верх + РазницаВВысоте;
		ЭлементыФормы.ОсновныеДействияФормы.Верх=НовыйВерхКнопок;
		Shell = Новый COMОбъект("WScript.Shell"); 
		Shell.SendKeys("%+R"); // вызов Alt+Shift+R
	КонецЕсли;
	Если ПустаяСтрока(ИмяЭлементаПривязки) Тогда
		ЭлементПривязки=ФормаОбъекта.ТекущийЭлемент;
		Ширина = ФормаОбъекта.Ширина;
		Высота = ФормаОбъекта.Высота;	
	Иначе
		ЭлементПривязки = ЭлементыФормы[ИмяЭлементаПривязки];
		Ширина = ЭлементПривязки.Ширина;
		Высота = ЭлементПривязки.Высота;
	КонецЕсли;
	Если Не ПустаяСтрока(Надпись) Тогда
		НоваяНадпись = ЭлементыФормы.Добавить(Тип("Надпись"),"Надпись"+ФОРМАТ(ИндексЭлемента,"ЧЦ=2; ЧН=00; ЧВН=; ЧГ="),,ЭлементПривязки);
		НоваяНадпись.Заголовок = Надпись;
		НоваяНадпись.Верх = 5+(ИндексЭлемента*20);
		НоваяНадпись.Лево = 5+СдвигВПраво;
		НоваяНадпись.Ширина = ?(РастягиватьПоШирине,Ширина-15-СдвигВПраво,220); 
		НоваяНадпись.Высота = ?(РастягиватьПоВысоте,Высота-15-(ИндексЭлемента*20),19); 
		НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементПривязки,ГраницаЭлементаУправления.Верх); 
		НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементПривязки,ГраницаЭлементаУправления.Лево); 
		Если РастягиватьПоВысоте Тогда
			НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементПривязки,ГраницаЭлементаУправления.Низ); 
		Иначе
			НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементПривязки,ГраницаЭлементаУправления.Верх); 
		КонецЕсли;			
		Если РастягиватьПоШирине Тогда
			НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементПривязки,ГраницаЭлементаУправления.Право); 
		Иначе
			НоваяНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементПривязки,ГраницаЭлементаУправления.Лево); 
		КонецЕсли;
	КонецЕсли;
КонецФункции

 

 

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

Эта более универсальная процедура. Появилась в нашем арсенале гораздо позже. Основное ее преимущество в том, что она может автоматически копировать оформление и привязку с других элементов на форме.
Так же можно назначить выполнение любого события, а не только "При изменении". Работает через структуру в параметрах.
Обязательные поля структуре  - "ТипПоля,ИмяПоля,Данные,ЭлементЭталон,Подсказка,ПолеСдвига". Не забывайте их заполнять при вызове этой процедуры.

//Универсальная функция добавления элементов на форму
//Параметры:
//ДокументОбъект, ФормаДокумента 
//СтруктураЗаполнения = Новый Структура("ТипПоля,ИмяПоля,Данные,ЭлементЭталон,Подсказка,ПолеСдвига") - обязательные поля в структуре.
//СтруктураЗаполнения.Вставить("Доступность",Ложь),СтруктураЗаполнения.Вставить("Видимость",истина") - не обязательные поля в структуре
// ИмяСобытие, ИмяДействия - заполняются в паре.
// Имя элемента привязки - копирует свойства с данного элемента формы
// РазмерОтступа - это отступ вниз от элемента привязки для нового элемента.
// ИмяПоляВладельца - это имя элемента владельца для подчиненных справочников.

Процедура ДобавитьЭлементНаФорму(ДокументОбъект, ФормаДокумента, СтруктураЗаполнения, ИмяСобытия="", ИмяДействия="", ИмяЭлементаПривязки="", РазмерОтступа=5, ИмяПоляВладельца = "")
				
		ЭлементЭталон = ФормаДокумента.ЭлементыФормы[СтруктураЗаполнения.ЭлементЭталон];
		ВерхПервого = ЭлементЭталон.Верх;
		Если ПустаяСтрока(ИмяЭлементаПривязки) Тогда
			НовоеПоле = ФормаДокумента.ЭлементыФормы.Добавить(Тип(СтруктураЗаполнения.ТипПоля),СтруктураЗаполнения.ИмяПоля,,);
		Иначе
			ЭлементПривязки = ФормаДокумента.ЭлементыФормы[ИмяЭлементаПривязки];
			НовоеПоле = ФормаДокумента.ЭлементыФормы.Добавить(Тип(СтруктураЗаполнения.ТипПоля),СтруктураЗаполнения.ИмяПоля,,ЭлементПривязки);
		КонецЕсли;

		НовоеПоле.Верх 	= ВерхПервого+РазмерОтступа+ЭлементЭталон.Высота;
		Если Врег(СтруктураЗаполнения.ТипПоля) = ВРег("ПолеВвода") тогда 
			НовоеПоле.Значение 	= "";
			НовоеПоле.Данные 	= СтруктураЗаполнения.Данные;
			
			Если ЗначениеЗаполнено(ИмяПоляВладельца) Тогда
				 НовоеПоле.ВыборПоВладельцу = ФормаДокумента.ЭлементыФормы[ИмяПоляВладельца].Значение;
			КонецЕсли;
			НовоеПоле.Подсказка 	= СтруктураЗаполнения.Подсказка; 
			ЗаполнитьЗначенияСвойств(НовоеПоле, ЭлементЭталон,"Ширина, Высота, Лево",);
		ИначеЕсли Врег(СтруктураЗаполнения.ТипПоля) = ВРег("Надпись") тогда 
			НовоеПоле.Заголовок 	= СтруктураЗаполнения.Подсказка; 
			ЗаполнитьЗначенияСвойств(НовоеПоле, ЭлементЭталон,,"Имя, Верх,Значение, Заголовок");
		ИначеЕсли Врег(СтруктураЗаполнения.ТипПоля) = ВРег("Флажок") тогда 
			НовоеПоле.Заголовок 	= СтруктураЗаполнения.Подсказка; 
			НовоеПоле.Данные 	    = СтруктураЗаполнения.Данные;
			НовоеПоле.Подсказка 	= СтруктураЗаполнения.Подсказка; 
			НовоеПоле.ПоложениеЗаголовка = ПоложениеЗаголовка.ЗаголовокСправа; 
			НовоеПоле.ПрозрачныйФон = Истина; 
			ЗаполнитьЗначенияСвойств(НовоеПоле, ЭлементЭталон,"Ширина, Высота, Лево",);
		КонецЕсли;	
		Если СтруктураЗаполнения.Свойство("Доступность") Тогда
			НовоеПоле.Доступность = СтруктураЗаполнения.Доступность;
		Конецесли;
		Если СтруктураЗаполнения.Свойство("Видимость") Тогда
			НовоеПоле.Видимость = СтруктураЗаполнения.Видимость;
		Конецесли;
		НовоеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементЭталон,ГраницаЭлементаУправления.Верх); 
		НовоеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементЭталон,ГраницаЭлементаУправления.Лево);
        НовоеПоле.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементЭталон,ГраницаЭлементаУправления.Право); 
       	ВысотаСдвига = РазмерОтступа + ЭлементЭталон.Высота;
		
		Если не ПустаяСтрока(СтруктураЗаполнения.ПолеСдвига) тогда 
			ФормаДокумента.ЭлементыФормы[СтруктураЗаполнения.ПолеСдвига].Верх =ФормаДокумента.ЭлементыФормы[СтруктураЗаполнения.ПолеСдвига].Верх + ВысотаСдвига;
			ФормаДокумента.Высота = ФормаДокумента.Высота + ВысотаСдвига;
		КонецЕсли;
		
		Если Не ПустаяСтрока(ИмяСобытия) и не ПустаяСтрока(ИмяДействия) тогда 
	      НовоеПоле.УстановитьДействие(ИмяСобытия, Новый Действие(ИмяДействия));
		КонецЕсли;
		
КонецПроцедуры

 

- Процедура добавления колонки в табличную часть формы.
Это универсальная процедура добавления колонки на форму.
Обязательные поля структуреколонки  - "Имя,Данные,КолонкаЭталон,Подсказка". Не забывайте их заполнять при вызове этой процедуры. Остальные свойства для новой колонки будут скопированы с колонки эталон, указанной в структуре.

Процедура ДобавитьКолонкуВТаличнуюЧасть(ДокументОбъект, ФормаДокумента,ИмяТабЧасти, СтруктураКолонки, ИмяСобытия ="", ИмяДействия =  "")
	    КолонкаЭталлон = ФормаДокумента.ЭлементыФормы[ИмяТабЧасти].Колонки[СтруктураКолонки.КолонкаЭталлон];
		НовояКолонка = ФормаДокумента.ЭлементыФормы[ИмяТабЧасти].Колонки.Добавить(СтруктураКолонки.Имя);
		НовояКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
		НовояКолонка.Данные 		= СтруктураКолонки.Данные;
		НовояКолонка.ТекстШапки 	= СтруктураКолонки.Подсказка; 
		ЗаполнитьЗначенияСвойств(НовояКолонка, КолонкаЭталлон,,"Имя, Данные, ТекстШапки");
		Если Не ПустаяСтрока(ИмяСобытия) и не ПустаяСтрока(ИмяДействия) тогда 
	      нКолонка = НовояКолонка.ЭлементУправления;
		  нКолонка.УстановитьДействие(ИмяСобытия, Новый Действие(ИмяДействия));
		КонецЕсли;	
КонецПроцедуры	

 

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

Процедура УдалитьКолонкуТабличнойЧасти(ФормаДокумента, ИмяТабЧасти, ПризнакКолонки)
    Для каждого Элемент из ФормаДокумента.ЭлементыФормы[ИмяТабЧасти].Колонки Цикл 
		Если Найти(Элемент.Имя,ПризнакКолонки ) > 0 тогда 
			 ФормаДокумента.ЭлементыФормы[ИмяТабЧасти].Колонки.Удалить(Элемент);
			 УдалитьКолонкуТабличнойЧасти(ФормаДокумента,"Товары", ПризнакКолонки);
		КонецЕсли;
	КонецЦикла;

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

- Процедура удаления элемента формы.
 

Процедура УдалитьЭлемент(ФормаДокумента, ПризнакЭлемента) 
	
   Для каждого Элемент из ФормаДокумента.ЭлементыФормы Цикл 
		Если Найти(Элемент.Имя,ПризнакЭлемента ) > 0 тогда 
			 ФормаДокумента.ЭлементыФормы.Удалить(Элемент);
			 УдалитьЭлемент(ФормаДокумента,ПризнакЭлемента);
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

 

Часть 4

Думаю надо показать несколько примеров, как мы добавляем новые реквизиты на форму.
Примеры добавления колонки на форме:

Процедура ПриОткрытии_УвольнениеИзОрганизаций(ДокументОбъект, ФормаДокумента)
	
	Если ДокументОбъект.Метаданные().ТабличныеЧасти.РаботникиОрганизации.Реквизиты.Найти("ИТ_ПричиныУвольнения") = Неопределено тогда 
		Возврат;
	КонецЕсли;
	
	Если ФормаДокумента.ЭлементыФормы.РаботникиОрганизации.Колонки.Найти("ИТ_ПричиныУвольнения") = Неопределено тогда 
		СтруктураКолонки = Новый Структура("ТипПоля, Имя, Данные, КолонкаЭталлон, Подсказка","ПолеВвода","ИТ_ПричиныУвольнения","ИТ_ПричиныУвольнения","Сотрудник","Причины увольнения");
		ДобавитьКолонкуВТаличнуюЧасть(ДокументОбъект, ФормаДокумента,"РаботникиОрганизации", СтруктураКолонки);
	КонецЕсли;
	
КонецПроцедуры

Пример добавления колонки на форму

Еще пример с добавлением полей в отдельной закладке:


Процедура ПриОтккрытии_РеализацияТоваровУслуг(ДокументОбъект, ФормаДокумента)		
	Если ДокументОбъект.Метаданные().Реквизиты.Найти("Автомобиль") = Неопределено Тогда 
		Возврат;
	КонецЕсли;	
	ЭлементыФормы=ФормаДокумента.ЭлементыФормы;
	СтараяСтраница = ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница;
	СтраницаТТН = ЭлементыФормы.ОсновнаяПанель.Страницы.Найти("ТТН");
	Если СтраницаТТН=Неопределено Тогда
		СтраницаТТН = ЭлементыФормы.ОсновнаяПанель.Страницы.Добавить("ТТН","ТТН",,);
		ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница=СтраницаТТН;
		НовоеПолеВвода = ДобавитьПолеВводаНаФорму(ФормаДокумента,"Автомобиль:","Автомобиль","ОсновнаяПанель",0,Истина,Ложь,120,"АвтомобильПриИзменении");
		НовоеПолеВвода = ДобавитьПолеВводаНаФорму(ФормаДокумента,"Водитель:","Водитель","ОсновнаяПанель",1,Истина,Ложь,120);
		НовоеПолеВвода = ДобавитьПолеВводаНаФорму(ФормаДокумента,"Транспортная компания:","ТрансКомпания","ОсновнаяПанель",2,Истина,Ложь,120);
		
		НовоеПолеВвода = ДобавитьПолеВводаНаФорму(ФормаДокумента,"Менеджер:","Менеджер","ОсновнаяПанель",4,Истина,Ложь,120);
		
	КонецЕсли;
	ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница=СтараяСтраница;
	
КонецПроцедуры	

Пример добавления реквизитов на отдельную закладку

Еще пример работы с формой справочника.


Процедура ПриОткрытии_СтатьиДвиженияДенежныхСредств(ОбъектМетоданных, ФормаСправочника);
	 //Добавляем реквезит ИТ_ИспользоватьДляМаркетинга
	 Если ОбъектМетоданных.Реквизиты.Найти("ИТ_ИспользоватьДляМаркетинга") = Неопределено Тогда 
		Возврат;
	КонецЕсли;	
	
	ЭлементыФормы=ФормаСправочника.ЭлементыФормы;
	ЭлементИТ_ИспользоватьДляМаркетинга = ЭлементыФормы.Найти("ИТ_ИспользоватьДляМаркетинга");
	Если ЭлементИТ_ИспользоватьДляМаркетинга=Неопределено Тогда
		НовоеПолеВвода = ДобавитьФлажокНаФорму(ФормаСправочника,"Использовать для маркетинга","ИТ_ИспользоватьДляМаркетинга",,5.3,Ложь,Ложь, , Истина);
	КонецЕсли;
	
	//Добавим Реквезит ИТ_НецелевойРасходМаркетинга
	Если ОбъектМетоданных.Реквизиты.Найти("ИТ_УчитыватьСкладыТП") = Неопределено Тогда 
		Возврат;
	КонецЕсли;	
	ЭлементИТ_УчитыватьСкладыТП = ЭлементыФормы.Найти("ИТ_УчитыватьСкладыТП");
	Если ЭлементИТ_УчитыватьСкладыТП = Неопределено Тогда
		НовоеПолеВвода = ДобавитьФлажокНаФорму(ФормаСправочника,"Вести учет расходов по складам ТП","ИТ_УчитыватьСкладыТП",,6.4,Ложь,Ложь, , Истина);
	КонецЕсли;
КонецПроцедуры

Пример работы с формой справочника

Часть 5

Доработки по совместимости и универсальности.

Желательно весь код модуля "ИТ_РаботаСДиалогами" обрамить в клиента
 

#Если Клиент Тогда
//…..
#КонецЕсли

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

Если ДокументОбъект.Метаданные().Реквизиты.Найти("ВидОперации") = Неопределено Тогда 
		 Возврат;
КонецЕсли;

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

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

Такие проверки позволят вам копировать общий модуль «ИТ_РаботаСДиалогами» во все ваши конфигурации УПП/КА и не бояться вызова исключений.

32

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Batman 150 10.05.18 09:54 Сейчас в теме
Доброго времени суток
Дополню своими наблюдениями
Пошел аналогичным путем, через "точку входа" - МеханизмНумерацииОбъектов.УстановитьДоступностьПоляВводаНомера

1а. Для формы списка вызываю другую процедуру, в таком виде

Процедура ФормаСпискаПриОткрытии(ЭтаФорма) Экспорт
	
	ЭлементыФормы = ЭтаФорма.ЭлементыФормы;
	
	ИмяРеквизитаСписка = "Список";		
	Если НЕ ЭлементыФормы.Найти(ИмяРеквизитаСписка) = Неопределено Тогда		
		мТип = ТипЗнч(ЭтаФорма.ЭлементыФормы[ИмяРеквизитаСписка].Значение);
		ТабличноеПолеПриОткрытии(ЭлементыФормы[ИмяРеквизитаСписка], мТип, ЭлементыФормы);
	КонецЕсли;
Показать

1б. и процедурой обрабатываю каждый тип
Процедура ТабличноеПолеПриОткрытии(мТабличноеПоле, мТип, ЭлементыФормы)
	
	Если мТип = Тип("ДокументСписок.РеализацияТоваровУслуг") Тогда 
		ДокументСписок_РеализацияТоваровУслуг(мТабличноеПоле, ЭлементыФормы);


1в. Если по колонке, добавленно программным способом. требуется будет устанавливать отбор - предусматриваем такую возможность

мОтбор = мТабличноеПоле.НастройкаОтбора.Найти("ЕстьОригиналДокумента");
	Если мОтбор = Неопределено тогда
		мОтбор = мТабличноеПоле.НастройкаОтбора.Добавить("ЕстьОригиналДокумента", Истина);
	КонецЕсли;
	мОтбор.Доступность = Истина;

2а. Для формы объектов, не забываем проверять, если это справочник и элемент является группой, то программное создание реквизитов для него вызовет ошибку

мОбъект = ЭтаФорма.ЭтотОбъект;
	
	ЭтоСправочник = Метаданные.Справочники.Содержит(мОбъект.Метаданные());
	
	Если ЭтоСправочник И мОбъект.ЭтоГруппа Тогда
		Возврат;
	КонецЕсли;


2в. После обработки формы возвращаемся (активизируем) текущую страницу панели формы

ЭлементыФормы = ЭтаФорма.ЭлементыФормы;
	
	Если ТипЗнч(мОбъект) = Тип("ДокументОбъект.ПоступлениеТоваровУслуг") Тогда				
		мТекущаяСтраница = ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница;		
		ПоступлениеТоваровУслуг(ЭлементыФормы, ЭтаФорма, мОбъект);		
		ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = мТекущаяСтраница;


P.S. Кстати, некоторое время назад от уважаемой Евгения Карук (ekaruk) была интересная статья о программном восстановлении расположения колонок в табличных частях управляемых форм, в случае, если пользователь скрыл колонки путем настройки списка
https://infostart.ru/public/259747/
dima_home; +1 Ответить
2. dima_home 107 10.05.18 18:26 Сейчас в теме
Спасибо за дополнение. Хорошо, когда можно собрать все сведения о программировании форм в одном месте.
3. script 206 10.05.18 23:55 Сейчас в теме
Все это интересно до того момента когда новому элементу, размещенному на форме программно, нужно назначить обработчик одного из событий. Вот тут все и заканчивается, потому что процедуру-обработчик нужно полюбому разместить в модуле формы. И тогда становится понятным, что самым удобным способом является подмена стандартных обработчиков событий формы на свои. Эта методика подробно описана в статье: Методика переопределения и вызова обработчиков событий формы в 1С 8 и показала свою незаменимость
ILM; dima_home; +2 Ответить
4. dima_home 107 11.05.18 11:35 Сейчас в теме
(3)
Вот тут все и заканчивается, потому что процедуру-обработчик нужно полюбому разместить в модуле формы. И тогда становится понятным, что самым удобным способом является подмена стандартных обработчиков событий формы на свои

Ну я тут с вами не могу согласиться.

Исходя из личной практики:
Более 50% добавленных реквизитов на формы документов и справочников во всех используемых нами конфигураций, это просто недостающие дополнительные реквизиты объекта, не требующие моментальной реакции формы на их изменение. По-этому снимать форму с поддержки по таким случаям не нужно, и прикреплять какие либо события тоже.
Более того, незначительная часть событий "ПриИзменении" можно привязать к стандартным процедурам, вызываемым из других стандартных реквизитов на форме, когда там и так выполняются те действия, которые вам надо проделать ( например "ПриИзмененииТабличнойЧасти")

Если все таки реакция формы на изменение программно добавленного реквизита нужна незамедлительно и вам не удалось свести реакцию на вызов уже имеющихся процедур в форме, то на мой взгляд, для обновления, легче добавить в конец модуля объявление процедуры:
Процедура ПриИзмененииНовогоРеквизита(Элемент)
ИТ_РаботаСФормой.ПриИзмененииНовогоРеквизита(Элемент, ЭлементыФормы);
КонецПроцедуры


чем городить предложенную методологию.
Хотя, как говориться, на вкус и цвет...

Тоже касается, когда приходится добавлять на форму новые кнопки.
5. pm74 132 11.05.18 11:54 Сейчас в теме
(3) можно по принципу "чтобы купить что-то полезное нужно продать нужно продать что-то бесполезное " , другими словами в типовых любят делать вызовы общих модулей на команды формы , которые можно слегка подправить
6. dima_home 107 11.05.18 12:52 Сейчас в теме
(5)
которые можно слегка подправить

В каждом случае решение индивидуально - что выгоднее, то и надо делать. Только рассматривая выгоду, всегда нужно учитывать удобство дальнейшего обновления.
Уверен, что во многих случаях может быть выгоден вариант, указанный в (3).
7. ILM 237 08.10.19 18:35 Сейчас в теме
Так и хочется написать: - Господя, а ЭТО то тут зачем?
В УПП и КА 5 лет уже ничего не меняется. Куча форм переделаны на сто рядов и проблем с обновлением нет совсем никаких. А тут на тебе откровение свыше. Программное добавление элементов на форму. Я бы умер поддерживать такими "программными средствами" нашу УПП с доработками по ТОС, планированию спроса, управлению качеством, раздельным учетом, требованиями ГОЗ и т.д. в одно лицо
Оставьте свое сообщение

См. также

Создание асинхронных виджетов 59

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Описание нескольких способов создания асинхронных виджетов для 1С:Предприятия. Рассматриваются способы с использованием HTTP-сервисов и фоновых заданий.

16.10.2019    868    YPermitin    9       

Формы. Трудности программной работы 68

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Бесплатно (free) Работа с интерфейсом

Рассматриваем основные подводные камни, с которыми приходится сталкиваться при программной работе с формами, а также способы обхода самых частых проблем.

06.10.2019    3236    YPermitin    20       

Лайфхаки 1С (часть 1). Настройки отчетов и печатных форм 1С 33

Статья Программист Пользователь Стажер Нет файла v8 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

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

02.10.2019    3882    VachKirp    8       

Добавляем виджет "Задачи от меня" в Документооборот 2.1 22

Статья Программист Нет файла v8 v8::Бизнес-процессы ДО Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Небольшая доработка Документооборота 2.1 для возможности добавления виджета "Задачи от меня" в обработку Текущие дела.

25.09.2019    1496    Sergey_Borisovi4    2       

[Механизм интерфейса] Часы 54

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом Практика программирования Разработка

Добавляем цифровые часы на форму, как бонус рассмотрим вариант и с аналоговыми.

26.08.2019    3049    rpgshnik    33       

Произвольная начальная страница через расширение (программно) 41

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Установка своей формы произвольному пользователю на начальную страницу.

14.08.2019    2483    nagaitseff    11       

Подходы, методы и инструменты UX/UI для разработки эффективных интерфейсов на 1С 31

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Интерфейсам в 1С обычно уделяют мало внимания. Это в итоге снижает востребованность платформы, делает ее неконкурентной, лишает большой доли рынка. Как не потерять старых клиентов и привлекать новых с помощью интерфейсов, а главное – как сделать «правильный» интерфейс, рассказал участникам конференции Infostart Event 2018 Education управляющий партнер и основатель консалтинговой группы WiseAdvice Иван Тягунов.

07.08.2019    4475    IvanAT1981    14       

Пользовательские настройки системы компоновки данных 82

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом

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

09.07.2019    6034    ids79    0       

Подсистема "Варианты отчетов". Используете ли Вы ее правильно? 208

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом БСП (Библиотека стандартных подсистем)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    14047    YPermitin    49       

Расшифровка отчета на СКД с детализацией по выбранному полю на основе БСП 91

Статья Программист Нет файла v8 v8::УФ v8::СКД 1cv8.cf Россия Бесплатно (free) Практика программирования Работа с интерфейсом Разработка

В данной статье рассмотрим механизм работы с расшифровкой отчета, созданного при помощи системы компоновки данных, в управляемом приложении. Показывать буду на примере реальной задачи. Условие: использовать имеющиеся в конфигурации механизмы БСП, с минимальными и "правильными" изменениями. Расшифровка должны быть двух видов на каждом поле: 1. Открывать ссылочный объект 2. Открывать новую форму с детализацией табличной части документа. Собственно ради второго пункта и писалась статья, в основном для себя, чтобы не забыть.

14.05.2019    7274    Viktor_Ermakov    6       

Свой макет оформления отчета 33

Статья Программист Нет файла v8 v8::СКД Россия Windows Бесплатно (free) Работа с интерфейсом

Пример создания и оформления и применения своего (пользовательского ) макета оформления для СКД.

24.04.2019    4461    olegpkc    5       

Раздельный вывод частей даты на форму без программирования 71

Статья Программист Нет файла v8::УФ 1cv8.cf Бесплатно (free) Работа с интерфейсом

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

12.01.2019    5665    drmaxart    20       

Динамический вывод таблицы значений на форму 35

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Вывести на форму таблицу значений, а потом на её место другую, третью, четвёртую? Не вопрос.

11.01.2019    5616    Vlad1917    26       

Тот самый Рабочий стол. Возрождение легенды 76

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Работа с интерфейсом

Невероятный инструмент построения адаптивных интерфейсов.

30.11.2018    9881    1c-intelligence    23       

Подсчёт и отображение количества строк в динамическом списке 20

Статья Программист Нет файла v8::УФ Бесплатно (free) Работа с интерфейсом

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

28.11.2018    5611    sano    22       

Прикладной пример переработки стандартной формы РМК - Розница 74

Статья Программист Нет файла v8 Розница УУ Кассовые операции Розничная торговля Бесплатно (free) Работа с интерфейсом

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

04.10.2018    10771    asdfgcom    56       

Доплата до оклада при командировках. ЗУП 2.5 7

Статья Программист Нет файла v8::СПР ЗУП2.5 Россия БУ Зарплата Бесплатно (free) Практика программирования

Продолжаю серию статей. Сегодня речь пойдет о внесении изменений в конфигурации ЗУП 2.5/УПП/КА1.1, для организации ДОПЛАТЫ ДО ОКЛАДА при расчете командировки сотруднику.

09.06.2018    6978    dima_home    10       

Cправочная информация. Картинки. 16

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Справочную информацию мало кто любит писать, но вот захотелось. И что с этим делать?

06.06.2018    6361    aspirator23    2       

Бодаемся с отображением отборов на управляемых формах 82

Статья Программист Нет файла v8::УФ 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

Рассмотрим в статье, как настроить отображение пользовательских отборов на форме по своему желанию.

30.05.2018    14453    lemz    14       

Итоги в динамическом списке 47

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

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

28.05.2018    8933    CXY    16       

Решение проблемы отображения интерфейса Такси на экранах с маленьким разрешением 26

Статья Программист Нет файла v8 v8::УФ Беларусь Windows Бесплатно (free) Работа с интерфейсом

Решение возникшей проблемы при переходе с интерфейса 8.2 на интерфейс Такси на экранах с маленьким разрешением.

06.04.2018    9729    Drak87    18       

Красивые графики. Пошаговая инструкция (Highstock) 122

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Данный подход опробован на библиотеках: Нighcharts и Highstock. Для работы будет необходима 1С и браузер Google Chrome. Чукча не писатель (первая публикация).

22.11.2017    14147    Degrement    20       

Меняем стандартную форму выбора для реквизита формы на свою форму с запросом 51

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

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

30.09.2017    15737    ah7777777    24       

Подбор в управляемой форме - что может быть проще? 119

Статья Программист Нет файла v8::УФ 1cv8.cf Бесплатно (free) Работа с интерфейсом

Технологии модальности сейчас меняются на технологии асинхронности, многопоточности и прочие дивные вещи, что, в свою очередь, заставляет людей еще чаще спрашивать о том, что да как в этой новой нелегкой жизни. Разбираемся!

19.09.2017    27778    starik-2005    51       

"Мигаем" интерфейсом, или цепочки асинхронных вызовов 71

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

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

06.09.2017    12569    Chrizt    13       

Создание динамически подгружаемых печатных форм на 8.2, как это было реализовано в 1С:7.7 13

Статья Программист Нет файла v8::УФ Россия Windows Бесплатно (free) Работа с интерфейсом Практика программирования

При создании собственной, легкой, автономной конфигурации для филиалов на управляемых формах необходимо было решить одну задачу: «БЕЗ обновления конфигураций необходимо легко и быстро обновлять/добавлять печатные формы для любого документа в 1С». Очень понравилось ранее существовавшее решение по динамической подгрузке внешних печатных форм в 1С 7.7. Его и реализуем.

28.07.2017    12454    dima_home    8       

"Восстановить положение окна" - не помогает. Как я решил проблему. 28

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Как получилось решить проблему глюков отображения формы документа.

28.05.2017    46405    niko11s    44       

Как добавить/убрать кота в отчет? 78

Статья Программист Нет файла v8 БП3.0 Бесплатно (free) Работа с интерфейсом

Кот в отчете: кому-то нравится, кого-то жутко бесит. Как избавиться, заменить, оставить (нужное подчеркнуть)?

12.05.2017    23053    starik-2005    16       

Итоги в динамическом списке 46

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

Как быстро посчитать итоги в динамическом списке

03.04.2017    20902    Восьмой    34       

Кнопки управления группировками табличного документа для управляемых форм (через подменю командной панели) 30

Статья Программист Нет файла v8::УФ v8::СКД Бесплатно (free) Работа с интерфейсом

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

02.03.2017    13038    dj_serega    0       

Таблицы на управляемых формах: создание, расширение, управление. 91

Статья Программист Нет файла v8::УФ Бесплатно (free) Работа с интерфейсом

Как вывести результат запроса в таблицу на управляемую форму, ведь здесь нет метода "СоздатьКолонки()"? Как добавить поле ввода в табличную часть документа, если нет желания менять документ? Разбираемся...

10.01.2017    45708    starik-2005    24       

Возвращение старого поиска в новых релизах Бухгалтерии предприятия 3.0 35

Статья Программист Нет файла v8::БУ v8::УФ БП3.0 Бесплатно (free) Работа с интерфейсом

В последних релизах Бухгалтерии предприятия 3.0 почти во всех списках разработчики включили полнотекстовый поиск. Эта статья предназначена для тех, кто воспринимает "в штыки" такие нововведения, я расскажу, как вернуть старый поиск.

13.12.2016    17820    ardn    34       

Как "перемотать" динамический список в начало при открытии? (или некоторые нюансы получения данных динамического списка) 57

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

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

03.11.2016    19037    Fragster    25       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом Универсальные функции

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

27.09.2016    16860    serg_infostart    15       

Автоматическое добавление новых реквизитов на форму (УФ) 38

Статья Программист Нет файла v8 v8::УФ Бесплатно (free) Работа с интерфейсом Универсальные функции

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

03.08.2016    16189    Патриот    23       

Управляемые формы: Поле HTML Документа и веб-клиент 56

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Взаимодействие javascript и интерфейса 1С дает огромные возможности для реализации нестандартных функций. Раньше можно было напрямую вызывать функции JavaScript через DOM объект document Поля HTML документа. В современных браузерах эта возможность ушла. Более того, в веб-клиенте появляется тип ВнешнийОбъект, который вообще нигде не описан. На Инфостарте были предложения вызывать JavaScript через fireEvent, но это очень неудобно. Предлагаю свой вариант решения.

18.07.2016    24101    compguru    10       

Как вывести динамическое представление для пустого значения (в таблице)? 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

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

29.03.2016    9697    weissfeuer    9       

Выделение документов в динамическом списке 20

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

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

01.02.2016    15759    Sardukar    7       

Три приёма, позволяющие сделать интерфейс конфигураций 1С на управляемых формах удобнее при большом шрифте 52

Статья Программист Нет файла v8 УНФ ERP2 БП3.0 Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

С появлением управляемых форм вообще и БП 3.0 в частности пользователи, которые не хотят портить своё зрение рассматриванием мелкого шрифта, оказались в невыгодном положении. Многих элементов на экране в "тяжёлых" документах вообще оказалось не видно. Все попытки решить вопрос штатными средствами настройки предприятия оказались неэффективны. Вот несколько приёмов, которые буквально в два щелчка мышкой и парой строк кода помогут решить проблему.

05.11.2015    14983    H-Labs    11       

Как скрыть "пустые группы" в списке выбора справочника при отборе 46

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

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

29.10.2015    25554    shevelyov    25       

Открытие форм нескольких новых документов в тонком и толстом клиенте, УФ 23

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

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

1 стартмани

29.09.2015    18010    Wezoowy    13       

Параметры сеанса. 47

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Параметры сеанса - это объекты метаданных конфигурации. Поговорим об их назначении и принципах работы с ними.

06.09.2015    55341    niko11s    8       

Шкала в строке состояния 51

Статья Программист Нет файла v8 Windows Бесплатно (free) Работа с интерфейсом

Простая шкала, не требующая дополнительных форм и элементов управления

31.08.2015    13430    Ivon    26       

Назначение сочетания клавиш для кнопок командной панели (Обычные формы) 13

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Назначение сочетания клавиш кнопкам командной панели Формы списка/выбора для любой конфигурации (Обычные формы)

07.08.2015    15078    bld    7       

Развитие управляемого интерфейса в 1С 8.2 - 1С 8.3 55

Статья Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Математика и алгоритмы Работа с интерфейсом

К управляемым формам, которые появились в 8.2, я до сих пор относился презрительно. Считал это неудачной попыткой 1С следовать модным тенденциям в разработке интерфейсов и прогибом для возможности работать через браузер. Я считал, что 1С пожертвовала простотой разработки в угоду веб-доступу. Но после курсов Арутюнова Сергея по управляемому интерфейсу в июле 2015 года в УЦ1 я поменял ненависть на любовь. Звучит парадоксально, но это так. А теперь подробнее…

27.07.2015    35013    fixin    103