Каталог решений - Ускорение отладки управляемых форм

Ускорение отладки управляемых форм

Ускорение отладки управляемых форм

В наличии

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

Категория:

Описание

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

1. В конфигурацию надо добавить:

1.1. Константа.РежимВнешнихФорм (тип Число 1.0)
1.2. Константа.КаталогИБ (тип Строка 0)

КаталогИБ нужен только для серверного варианта работы БД, в файловом варианте он не используется. В этой константе должен быть расшаренный сетевой каталог доступный как для программиста, так и для пользователя, который тестирует форму.

1.3. ОбщийМодуль.ВнешниеФормы (Сервер,Вызов сервера)
 

код общего модуля:

// Используется для запуска и отладки внешних форм

Функция КаталогИБ() Экспорт
	
	Результат = НСтр(СтрокаСоединенияИнформационнойБазы(), "File") + "\";
	Если (Результат="\") Тогда
		Результат = СокрЛП(Константы.КаталогИБ.Получить());
	КонецЕсли;
	Возврат Результат;
	
КонецФункции

Функция РежимВнешнихФорм(ПолноеИмяФормы) Экспорт
	
	Если (Найти(ПолноеИмяФормы,"Внешн")=1) Тогда Возврат 0; КонецЕсли; // вызов из самой внешней формы, защита от зацикливания 
	Возврат Константы.РежимВнешнихФорм.Получить();
	
КонецФункции

Функция ВернутьИмяФайлаВнешнейФормы(ПолноеИмяФормы) Экспорт
	
	// Преобразуем имя формы в полный путь к внешней обработке с формами
	// здесь ПолноеИмяФормы = Документ.АвансовыйОтчет.Форма.ФормаДокумента
	Результат = "";
	Если (РежимВнешнихФорм(ПолноеИмяФормы)=1) Тогда
		ИмяМетаданных = Лев(ПолноеИмяФормы,Найти(ПолноеИмяФормы,".Форма")-1);
		Префикс  = "";
		Если      (Найти(ИмяМетаданных,"Документ")=1)   Тогда Результат = "МФД\"; Префикс = "Документ.";
		ИначеЕсли (Найти(ИмяМетаданных,"Справочник")=1) Тогда Результат = "МФС\"; Префикс = "Справочник.";
		КонецЕсли;
		Если (Префикс<>"") Тогда
			Результат = КаталогИБ() + "Epfs\" + Результат + СтрЗаменить(ИмяМетаданных,Префикс,"") + ".epf";
		КонецЕсли;
	КонецЕсли;
	Возврат Результат;
	
КонецФункции

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

2. Открываем Форму элемента справочника (покажу на примере справочника Контрагенты) , и добавляем немного кода в начало двух процедур. Если процедур нет, то их надо создать.

В начало процедуры ПриСозданииНаСервере добавляем:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// вставка для режима отладки с помощью внешних форм
	Если (ВнешниеФормы.РежимВнешнихФорм(ИмяФормы)=1) Тогда Возврат; КонецЕсли;

В начало процедуры ПриОткрытии добавляем:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// вставка для режима отладки с помощью внешних форм
	ИмяФайла = ВнешниеФормы.ВернутьИмяФайлаВнешнейФормы(ИмяФормы);
	Если (ИмяФайла<>"") Тогда
	    мАдресХранилища   = ""; ПоместитьФайл(мАдресХранилища, ИмяФайла, , Ложь, Новый УникальныйИдентификатор);
	    ПутьКВнешнейФорме = ВнешниеФормы.ПодключитьВнешнююОбработку(мАдресХранилища,ИмяФормы);
		ПараметрыФормы    = Новый Структура("Ключ", Объект.Ссылка);
		ОткрытьФорму(ПутьКВнешнейФорме, ПараметрыФормы,,Истина);
		Отказ = 1;
		Возврат;
	КонецЕсли;


3. Создаем новую внешнюю обработку, сохраняем ее так как изображено на первом рисунке к публикации.

Копируем форму элемента в обработку так как изображено на втором рисунке к публикации. Сохраняем обработку и конфигурацию.

4. Теперь программист с помощью константы РежимВнешнихФорм может подменять запуск формы для пользователя и для себя.

Если РежимВнешнихФорм=1 , то при открытии элемента справочника будет запускаться форма из внешней обработки.

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

5. Хочу обратить ваше внимание на работу с отладчиком при данном подходе. Отладчик не будет срабатывать, т.к. на клиенте запускается обработка из хранилища. Для решения данной проблемы я запускаю обработку через файл-открыть и точки останова работают. Но форма элемента будет запускаться как для нового объекта. Чтобы открытие формы сработало с тестируемым элементом справочника или определенным документм надо добавить такой код:

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

6. В ходе эксплуатации данного подхода выявлено два важных момента:

   а.) «РежимОткрытияОкна» должен быть равен «Независимый», иначе не будет открываться форма из внешней обработки.

   б.) Событие «ПриЧтенииНаСервере» не срабатывает при запуске формы из внешней обработке.

 

Вот и весь метод ускорения отладки управляемых форм.
Аналогично можно тестировать и формы списов и другие формы. Главное, чтобы имя формы в конфигурации совпадало именем формы в обработке.

Спасибо за внимание.

Надеюсь, данный метод поможет программистам 1С в наших рутинных делах. 🙂

has been added to your cart:
Оформление заказа