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

20.06.15

Разработка - Универсальные функции

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

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

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С в наших рутинных делах. :)

Отладка управляемые формы

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2669    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4606    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    8817    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

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

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. jobkostya1c_ERP 100 25.05.15 07:49 Сейчас в теме
Что-то новенькое и интересное. Все-таки хотелось бы спросить знающих людей имеет ли смысл на практическое применение подобной методики.
Пока вот ерундой занят, а не крупным проектом с использованием хранилища значений. УПП мельком попадалось, но там что-то встраивать, думаю, еще дороже по времени.
3. moolex 906 25.05.15 10:14 Сейчас в теме
(1) kostyaomsk, У нас в одной компании все пользователи работают на внешних обработках в реальной базе (правда там 8.1 обычные формы, но зато даже проведение вынесено во внешние обработки). При таком подходе обновления проходит быстро, пользователю просто надо переоткрыть конкретную форму (что им удобно), изменения именно в конфигурации бывают редко, а вот изменения в формах (особенно отчетов) происходит постоянно.
А вообще работа с большим количество внешних файлов - так работают многие IDE.
Думаю и 1С наконец-то это скоро поймет при их планах скрещивания 1С с Eclipse.
4. Зеленоград 13.07.15 17:30 Сейчас в теме
(1) kostyaomsk, в УПП (минимум на 90%) используются нормальные формы. УФ если и есть, то редко.
2. vitaliy1911 38 25.05.15 09:53 Сейчас в теме
Если речь идет только о разработке, без обновления основной рабочей базы, то мне кажется удобнее использовать просто внешнюю обработку. Добавляем форму в обработку и в обработчике формы ПриСозданииНаСервере пишем:
ЗначениеВРеквизитФормы(Документы.Документ1.НайтиПоНомеру("<Номер>").ПолучитьОбъект(), "Объект");

Просто и сердито, без единой строки в самой конфигурации. Разрабатываем, тестируем, отлаживаем. Потом перед помещением формы в конфу главное не забыть эту строчку удалить :)
А предложенный метод хорошо подойдет если требуется проанализировать работу пользователей в новой форме. Например можно сделать AB тест - часть пользователей будет работать в новой форме, а часть - в старой (или в другой новой). Далее собирать статистику и принимать решение какую форму использовать
Serg2000mr; budunovmv; ffgnebel; Marik; sanja; RomanMartynenko; +6 Ответить
5. triviumfan 92 27.01.23 00:28 Сейчас в теме
Теперь не актуально, ведь гораздо проще с помощью расширения отлаживать, т.к. оно не обновляет основную конфигурацию, а ставится поверх, тем самым экономя кучу времени разработки при частой отладке таких флагманов как УП/УХ.
6. moolex 906 27.01.23 07:21 Сейчас в теме
(5) Данная статья старая. После появления расширений я пользусь другим подходом (смотри мою публикацию - ВнешниеКоманды).
Там я расписал подробно, чем использование внешних команд лучше, чем просто расширения.
При постоянных иттерациях разработки, кучу времени экономит как раз использование внешних файлов на сервере.
Стандартный механизм расширений экономит время, но не много.
Оставьте свое сообщение