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

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

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

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

Если с программным изменением управляемых форм 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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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


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

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

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

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


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

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

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


Не обижайтесь... но серьезно...
1. Посту уже больше года.
2. УПП будет поддерживаться еще до 2022 года, как и мы, многие производители до последнего будут отодвигать переход на ЕРП2, хоть его и приобрели.
3. А по поводу не меняется: наберите в гугле изменения налогового/трудового законодательства, акцизы табака (у нас), алкоголь, онлайн кассы, маркировка (будут изменения к декабрю).

А вообще каждый сам для себя решает, как вести изменения в 1С.
Я лишь делился опытом, который использовал ранее и использую сейчас.
user986734; acanta; +2 Ответить
9. ILM 239 27.10.19 18:10 Сейчас в теме
(8) У нас уникальное научно-техническое производство не имеющее аналогов в России. Таких заводов всего три в мире, а технологий всего две в Америке и в России - это к "табуреткам" если что. В УПП у нас считается налог на прибыль, и зачем нам эта ЕРП? Её дорабатывать придётся пару лет просто до уровня нашей УПП пятилетней давности.
Онлайн-кассы у нас две штуки в столовой стоит, а табак, алкоголь и т.д. это точно не к нам.
(7) Поддержка программных изменений форм и их доработка занимает в разы больше времени.
10. It-developer 20 03.03.21 13:19 Сейчас в теме
11. dima_home 130 22.03.21 18:41 Сейчас в теме
(10) Возможность расширений к сожалению появилось позже. Во всех новых проектах используем расширения конфигураций и центральный репозитарий.
Именно в УПП работаем без расширений.
Однако 99% изменений вынесли в отдельный общие модули, в стандартных объектах конфигурации добавляем только реквизиты.
Такой метод позволил сильно ускорить процесс накатки обновлений 1С для УПП.
Оставьте свое сообщение

См. также

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

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

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

19.09.2017    57377    starik-2005    71    

Реализация отборов на форме с помощью СКД

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

В статье описана практическая методика использования системы компоновки данных (СКД) для реализации отборов на любых формах конфигурации.

28.12.2021    3208    quazare    5    

Восстановление пропавшего меню в интерфейсе с обычными формами без полной чистки кеша

Работа с интерфейсом v8 Украина Бесплатно (free)

Как многим известно, пользователь в обычных формах может убрать любую панель из интерфейса так, что восстановить ее можно только чисткой кеша. Но как быть, если кеш жалко :?

21.12.2021    671    bulpi    4    

Программный интерфейс для доработки форм

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

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

25.11.2021    3863    AtamanovYS    19    

Полезности применения СКД Промо

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

Нюансы при работе из СКД на программном уровне.

11.04.2012    52925    logarifm    42    

[ПОТРАЧЕНО] Динамическая таблица формы

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

История одной разработки в далеком 2020 году.

15.10.2021    3705    rpgshnik    47    

Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".

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

Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла - так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом)... То вам - сюда.

08.10.2021    1655    e-9    13    

Прогресс-бар в поле динамического списка

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

Изображаем прогресс-бары в колонке динамического списка

23.08.2021    2952    Yashazz    12    

Идея или как сохранить ЦВЕТ, ШРИФТ, ОФОРМЛЕНИЕ пользователя Промо

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

Простой и оригинальный способ сохранять ЦВЕТОВУЮ СХЕМУ и ОФОРМЛЕНИЕ пользователей. Как сохранить ЦВЕТ

22.06.2015    25013    Tatitutu    12    

Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах

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

Долго искал решение: как при выводе строк заполнить значениями колонки, которые созданы программно, чтобы, не было тормозов при стандартном поиске. И с минимальными изменениями (легко контролируемыми, при обновлении).

07.04.2021    2161    Vlad_CK    9    

Динамический список и поиск... неприятностей

Работа с интерфейсом v8 Бесплатно (free)

Страх и ненависть в поиске по динамическому списку, или "Кое-что о неоптимальном отборе".

17.03.2021    5263    Yashazz    37    

Отображение и редактирование в дереве большого количества настроек/параметров/опций программы, конфигурации, документа, справочника - без программного создания элементов формы

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

Очень много реквизитов (настроечные опции, параметры) у справочника или документа, и их все необходимо разместить на управляемую форму - лень! Хочется - добавил в метаданные и всё! В публикации отличное, простое и олдскульное решение с открытым кодом, научимся работать с ДанныеФормыДерево, ДеревомЗначений, сделаем быстрый поиск, создадим универсальный инструмент.

11.12.2020    1150    SizovE    6    

Хранение и редактирование дополнительных параметров в регламентированном отчете. Для начинающих. Промо

Работа с интерфейсом v8 БП2.0 УПП1 БУ Бесплатно (free)

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

22.01.2014    21122    KapasMordorov    4    

Программное условное оформление динамического списка, раскраска строк списка по цветам справочника или любым другим условиям (условное оформление)

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

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

30.11.2020    7148    SizovE    4    

[mobile] Переносим HTML интерфейс на 1С

Работа с интерфейсом Мобильная разработка v8 v8::Mobile 1cv8.cf Бесплатно (free)

Разберем методы переноса HTML интерфейса на 1С на примере реализации нижнего меню для мобильного приложения. Сравним методы между собой. Данные методы можно применять не только для мобильной разработки, но и для веб-клиента и т.д

02.11.2020    9355    leobrn    80    

Цветовая схема конфигуратора в стиле OneScript

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

Цветовая схема конфигуратора 1С максимально приближенная к стандартной цветовой схеме OneScript в VS Code.

01.10.2020    1466    DmitrySinichnikov    3    

Программное генерирование кнопочек для удобного управления уровнями группировки в отчетах (версия 2a). Промо

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

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

09.04.2011    47462    mtv:)    75    

Рендеринг элементов управляемого интерфейса

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

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

22.09.2020    4018    kalyaka    5    

Переопределение представления ссылочного значения

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

Переопределение представления ссылочного значения

17.09.2020    5421    sam441    15    

Хитрости компоновки данных: программное формирование заголовков отчета и колонок без использования макетов. Промо

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

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

27.07.2012    33032    milkers    9    

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

Работа с интерфейсом v8::УФ Бесплатно (free)

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

14.08.2020    4408    DrZombi    15    

Использование флажков в динамических списках

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

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

04.08.2020    13284    nekit_rdx    37    

Медленно формируются отчеты в БП 3, способ исправления

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

При формировании любых отчетов, но в особенности оборотно-сальдовой ведомости в бухгалтерии 3, очень долго формировался отчет, ПОЯВЛЯЛСЯ ЖЕЛТЫЙ КОТ, разумеется у бухгалтера невроз, да и у меня тоже. Что только ни делал: тестирование и исправление с пересчетом итогов, настройка SQL, отключение фоновых заданий, обновление платформы и конфигурации, а толку нет, регламентные операции по скулю тоже сделал. И что же сделал, а вот что:

21.07.2020    3265    VID1234    8    

Рабочее место кассира для touch-screen и программируемой клавиатуры продавца в «1С: Розница» Промо

Работа с интерфейсом v8 Розница Бесплатно (free)

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

29.11.2012    48568    aavolkoff    50    

Обработка нажатия клавиши

Работа с интерфейсом v8::УФ Бесплатно (free)

Один из способов обработки события нажатия клавиши.

10.06.2020    5690    RotaninV    7    

Регистр сведений как дополнение объекта

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

Подключаем регистры сведений к формам связанных с ними объектов, быстро и надежно.

19.05.2020    5562    Infector    14    

Перенос инструкций из word во встроенную справку 1С с сохранением картинок и форматирования

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

Делюсь простым и удобным способом переноса справки/инструкций из ворда (и не только) во встроенную справку 1С с сохранением картинок и форматирования.

22.04.2020    5723    77dream77    21    

Бухгалтерия предприятия 3.0 интерфейс, аналогичный 1С:Бухгалтерии 7.7; Промо

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

Бухгалтерия предприятия, редакция 3.0, версия 3.0.14. Добавлена возможность использовать интерфейс, аналогичный 1С:Бухгалтерии 7.7;

20.09.2012    38072    dour-dead    18    

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

Работа с интерфейсом v8 Бесплатно (free)

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

24.03.2020    2198    Evilgrym    2    

Форма выбора для реквизита с составным типом данных

Работа с интерфейсом v8 Бесплатно (free)

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

11.03.2020    6634    rule_2    4    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

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

18.02.2020    6756    randomus    20    

Выбор вариантов отчета в "Управление торговлей" ред. 11 Промо

Работа с интерфейсом Склад и ТМЦ Склад и ТМЦ v8 УТ10 Россия БУ Бесплатно (free)

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

27.05.2012    48981    1cUserAndrew    25    

[Шпаргалка] Предустановка типа для составного реквизита

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

Для реквизита составного типа необходимо ограничить список выбора типов.

18.02.2020    5951    rpgshnik    6    

СКД. Шаг 3. Используем макеты для оформления отчета

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

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

13.01.2020    41621    aximo    19    

Добавление собственного поля и состояния в настройки доступности по состоянию в 1С:Документооборот

Работа с интерфейсом v8 ДО Бесплатно (free)

В данной публикации я хочу описать процесс добавления собственного поля и состояния в функционал настройки доступности по состоянию в 1С:Документооборот.

30.12.2019    7074    pavelpribytkin96    2    

Практика регулярных выражений в 1С или "парсим неудобные форматы" Промо

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

В продолжение статьи Использование регулярных выражений (RegExp) в 1С8.х. Углубляемся в практику использования регулярных выражений в 1С. Основы работы с регулярными выражениями хорошо описаны в указанной публикации. А я попробую ответить на вопрос "почему именно регулярные выражения?" на примере конкретной рабочей задачи.

26.10.2011    30768    1cspecialist    33    

[СКД] Вывод картинки в результат любого отчета на СКД

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

Если у вас в справочнике Номенклатура (или другом справочнике) заполнена картинка, то ее можно легко вывести для наглядности отчета.

09.12.2019    12994    John_d    16    

Лайфхаки 1С. Настройка списков (Часть 3)

Работа с интерфейсом v8 Бесплатно (free)

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

03.12.2019    23623    VachKirp    14    

В новой платформе пропала кнопка "Печать". Имитируем БСП

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

"Приятным" сюрпризом для многих пользователей 1С стало то, что при обновлении платформы (начиная с 8.3.15) полностью поменялся интерфейс. Можно долго спорить о целесообразности этого новшества, но самым главным минусом стало то, что пропали стандартные кнопки на панели инструментов. Разработчики предполагают повсеместное использование БСП, но что делать тем, кто давно и успешно использует самописные конфигурации, в которых формирование печатной формы происходит по ТабДок.Показать(), и не желает их "утяжелять"? Добавим общую форму с нужными нам кнопками.

03.12.2019    10585    Vlan    44    

Допиливаем форму выбора серий номенклатуры для отображения остатков Промо

Работа с интерфейсом Практика программирования v8 КА1 УТ10 УПП1 Россия Бесплатно (free)

В этой статье я хочу рассмотреть задачу, которая довольно часто возникает у начинающих (и не только) разработчиков, адаптирующих типовые конфигурации (УТ, КА, УПП) на предприятиях торговли. Речь пойдет про отображение остатков в форме выбора серий номенклатуры при подборе в документы. Это актуально в тех случаях, когда не ведется партионный учет по сериям, либо когда документы вводятся неоперативно и нет возможности воспользоваться волшебной кнопкой "Заполнить и провести". На первый взгляд задача банальна, но я хочу показать некоторые "грабли", на которые часто наступают новички в процессе ее реализации, а также сопоставлю алгоритмы решения на платформе 8.1 и 8.2.

20.01.2011    33452    practik1c    19    

Управляемые формы. Изменение формы списка или формы объекта без внесения изменений в типовые формы (без использования расширений)

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

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

12.11.2019    16538    John_d    25    

Локализация интерфейсов конфигураций. Практика и инструментарий 1Ci

Работа с интерфейсом Локализация решений v8 Бесплатно (free)

В последнее время компания 1С International все увереннее заявляет о себе на международном рынке. Но для успешного продвижения в этом направлении необходима локализация интерфейсов конфигураций 1С. О том, как выглядит процесс перевода, какие инструменты для этого есть, где брать переводчиков и как проверять их работу, на конференции Infostart Event 2018 Education рассказал руководитель группы локализации компании 1Ci Сергей Поликарпов.

05.11.2019    6326    user1069006    1    

ELK. Время изумительных историй!

Журнал регистрации Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Всем привет! Сегодня хочу рассказать вам несколько полезных историй про то как нам помог Elastic search в связке с Kibana. Про сам Elastic рассказывать не буду, уже все давным давно описали и до меня. Все обычно говорят что это полезно, это классно. В то же время, очень мало кто рассказывает про практические ситуации: когда и как помог Elastic. Итак, начнем.

31.10.2019    10053    slozhenikin_com    28    

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

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

Советы по настройке интерфейса Такси и особенности работы в этой среде.

24.10.2019    16847    VachKirp    10    

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

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

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

16.10.2019    14814    YPermitin    19    

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

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

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

06.10.2019    13413    YPermitin    31    

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

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

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

02.10.2019    17242    VachKirp    10    

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

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

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

25.09.2019    10005    Sergey_Borisovi4    3    

[Шпаргалка] Программное создание элементов формы

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

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

06.09.2019    111719    rpgshnik    77    

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

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

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

26.08.2019    11335    rpgshnik    36