Улучшайзер - как одна внешняя обработка может улучшать другие внешние обработки

08.07.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?]
Улучшайзер - обработка для улучшения обработок
.epf 430,61Kb
41
41
0 SM
Скачать
ОбработкаДляУлучшения - это тестовая обработка, которая и будет улучшаться
.epf 6,63Kb
25
25
0 SM
Скачать
Это файл с улучшением, которое будет установлено на улучшаемую обработку
.061022 1,68Kb
25
25
0 SM
Скачать

Бывает так, разработал внешнюю обработку, она успешно скачивается и используется большим количеством пользователей в своей работе. Но ты как разработчик не стоишь на месте и создаёшь более новую, продвинутую и функциональную версию этой самой разработки. Но пользователи, почему-то, не спешат скачивать новую версию обработки, а продолжают использовать старую. Возможно, из всех новшеств новой версии пользователям для работы в конкретном случае нужны буквально одно-два улучшения, или банально не хватает бюджета на покупку полной новой версии, т.к. старая тоже была куплена «и ещё не окупилась». Часть пользователей готовы у вас «приобрести» только часть улучшений, причём каждому пользователю нужен свой уникальный набор таких улучшений. Что делать? Как создать для каждого пользователя свою новую версию обработки? Решение есть – создать специальную обработку «Улучшайзер» и сделать для него список всех возможных улучшений. Пользователь, составив для себя уникальный набор улучшений из этого списка, с помощью «Улучшайзера» сможет автоматически модифицировать (улучшать) свою версию обработки до необходимого ему уровня возможностей.

 

Кому это может быть интересно
Это может быть интересно тем разработчикам, кто создаёт внешние обработки для большого количества пользователей (например, для маркетплейса на Инфостарте), поддерживает и выпускает новые версии, но хочет, чтобы старые версии также можно было улучшить (обновить) без непосредственного вмешательства как самого разработчика, так и программиста 1С.

Доклад написан в поддержку предложенного на «INFOSTART EVENT 2022 Saint Petersburg» мастер-класса «Как сделать свой собственный Улучшайзер, или как одна внешняя обработка может автоматически улучшать другие обработки». Если вам понравится данная публикация, то вы можете проголосовать за мастер-класс по ссылке.

 

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

 

Общие рекомендации и условные обозначения
1. Изначально понимать и закладывать в обработку то, что она может в будущем быть улучшена.
2. Вести порядковый учёт улучшений. В описании технологии данный реквизит будет обозначаться как <ПорядковыйНомерУлучшения>.
3. Обязательно указывать дату улучшения в формате ГГГГММДД (такой формат позволяет сравнивать даты уже установленного и вновь устанавливаемой версий улучшения). В описании технологии данный реквизит будет обозначаться как <ДатаУлучшения>.
4. Все улучшения (программный код на 1С) необходимо делать областями, заключенными в операторные скобки #Область Улучшение<ПорядковыйНомерУлучшения> и #КонецОбласти.
5. Использовать свой собственный идентификатор (желательно для каждой обработки свой), который будет постоянно использоваться в описании всех улучшений обработки. В описании технологии данный идентификатор будет обозначаться как <ВашИндентификатор>.
6. В модуле объекта внешней обработки обязательно должна быть хотя бы одна процедура (хотя бы пустая).
7. В модуле формы внешней обработки обязательно должна быть процедура «ПриСозданииНаСервере» (хотя бы пустая).

 

Описание технологии

Если описывать технологию кратко, то необходимо:
1. При создании любой внешней обработки учитывать вышеописанные рекомендации №1, №6 и №7.
2. Разработать улучшения и поместить их в файл с улучшениями.
3. Создать обработку-улучшайзер, которая:
3.1. Откроет файл улучшаемой обработки и файл с улучшениями.
3.2. Автоматически сравнит уже установленные улучшения в улучшаемой обработке с улучшениями из файла с улучшениями.
3.3. Автоматически обновит (при необходимости) уже  установленные улучшения в улучшаемой обработке и добавит новые ранее не установленные улучшения.
3.4. Сохранит улучшаемую обработку.

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

 

Описание технологии: 1. Файл с улучшениями

Файл с улучшениями – это текстовый файл, содержащий инструкции для Улучшайзера и программный код, который будет встроен в улучшаемую обработку. Лучше всего в его названии указывать порядковый номер улучшения и кратко предназначение улучшения. В качестве расширения файла можно указывать <ВашИндентификатор> - это позволит в Улучшайзере при открытии отражать только ваши файлы, содержащие улучшения.

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

1-й блок: Область кодов улучшений – содержит названия областей, которые будут внесены в улучшаемую обработку
Блок ОТКРЫВАЕТСЯ тегом: ВашИндентификатор_improvement
Блок ЗАКРЫВАЕТСЯ тегом: /ВашИндентификатор _improvement

В самом блоке прописываются названия областей с теми улучшениями, которые содержатся в файле с улучшениями. Названия областей берутся прямо из программного кода. Каждая область начинается с новой строки. Рекомендуется в названии каждой области отражать предназначение улучшения, ваш идентификатор,  порядковый номер улучшения его дату:
#Область <НазваниеОбласти>_<ПорядковыйНомерУлучшения>_<ДатаУлучшения>

Пример 1-го блока блока:

061022_improvement
#Область НовоеПоле_1_20220706
/061022_improvement

 

2-й блок: Область для процедуры «ПриСозданииНаСервере» – содержит программный код, который будет внесён в процедуру ПриСозданииНаСервере улучшаемой обработки
Блок ОТКРЫВАЕТСЯ тегом: ВашИндентификатор _procedure
Блок ЗАКРЫВАЕТСЯ тегом: /ВашИндентификатор _procedure

В данном блоке между открывающим и закрывающим его тегами необходимо на языке 1С прописать названия процедур, которые инициируют улучшения. Данные процедуры должны находиться в тех областях, названия которых были прописаны в 1-м блоке. Рекомендуется название каждой процедуры начинать и заканчивать комментариями, обозначающими начало и конец. В этих комментариях следует отразить ваш идентификатор, порядковый номер улучшения, его дату и служебные операторные скобки НАЧАЛО и КОНЕЦ:
//<ВашИндентификатор>imp_<ПорядковыйНомерУлучшения>_<ДатаУлучшения> НАЧАЛО

//<ВашИндентификатор>imp_<ПорядковыйНомерУлучшения>_<ДатаУлучшения> КОНЕЦ

Пример 2-го блока:

061022_procedure
    
//061022imp_1_20220706 НАЧАЛО
ДобавлениеНовогоПоля();
//061022imp_1_20220706 КОНЕЦ

/061022_procedure


3-й блок: Программный код, который будет именно в таком виде вставлен в улучшаемую обработку.
Данный блок находится в конце файла с улучшениями и начинается с названия первой области после окончания 2-го блока (то есть после тега /ВашИндентификатор _procedure).

Как уже было сказано ранее, все улучшения необходимо делать областями, заключенными в операторные скобки:
#Область <НазваниеОбласти>_<ПорядковыйНомерУлучшения>_<ДатаУлучшения>

//программный код улучшения на языке 1С

#КонецОбласти

Пример 3-го блока:

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

#КонецОбласти

Примечание к 3-му блоку:
Части текста программного кода, находящиеся в кавычках, в файле с улучшениями должны быть в двойных кавычках. Например, если в коде обработки должна быть строка:

нЭлемент.ПутьКДанным = "Объект.Покупки.Контрагент";

то в файле с улучшениями она должна быть в следующем виде:

нЭлемент.ПутьКДанным = ""Объект.Покупки.Контрагент"";

 

Описание технологии: 2. Обработка-улучшайзер

За основу "Улучшайзера" взята и доработана обработка из публикации "Замена текстов модулей внешних обработок" и ряда связанных с ней публикаций. Основная часть технологии доработка выполнена в процедуре V8UnpackЗаменитьТекстМодуляУправляемойФормы. Общий порядок работы данной функции следующий:
1 - Открываем файл модуля формы изменяемой обработки.
2 - Открываем файл с улучшением.
3 - Читаем из файла с улучшением сами улучшения.
4 - Анализируем даты улучшений по сравнению с уже установленными в обработке улучшениями.
5 - Сохраняем улучшения (более новые по дате и те, которых ещё не было в обработке) в новую модифицированную обработку.

Ниже приведён программный код данной функции с комментариями, которые призваны помочь в понимании механизма работы (более подробно со программным кодом "Улучшайзера" вы сможете познакомиться в размещенных к данной публикации бесплатных материалах (также будут приложены к первому комментарию данной публикации) или на мастер-классе «Как сделать свой собственный Улучшайзер, или как одна внешняя обработка может автоматически улучшать другие обработки»):

Функция V8UnpackЗаменитьТекстМодуляУправляемойФормы(Каталог, ИдентификаторФормы, ФлагИзменения = Ложь)
	
	ИмяФайла = ПолучитьПолноеИмяФайла(Каталог, ИдентификаторФормы + ".0");
	
	ФайлМодуля = Новый Файл(ИмяФайла);
	Если ФайлМодуля.Существует() Тогда
		
		ТекстовыйДокумент = Новый ТекстовыйДокумент;
		ТекстовыйДокумент.Вывод = ИспользованиеВывода.Разрешить;
		
		ТекстовыйДокумент.Прочитать(ИмяФайла);
		
		СодержимоеДокумента = ТекстовыйДокумент.ПолучитьТекст();
		
		ОбластьДанных = ОбластьСлужебногоФайла(СодержимоеДокумента, "1"); // весь файл
		ЭлементыОбласти = ЭлементыОбластиСлужебногоФайла(ОбластьДанных);
		
		ЭлементТекстМодуля = ЗначениеЭлементаОбластиСлужебногоФайла(ЭлементыОбласти, 3); // текст модуля управляемой формы
		
		Если ЗначениеЗаполнено(ЭлементТекстМодуля.Текст) Тогда
			//получаем программный код модуля формы
			ТекстМодуля = ЭлементТекстМодуля.Текст; // текст модуля в кавычках 
			ТекстМодуля = Сред(ТекстМодуля, 2, СтрДлина(ТекстМодуля)-2); // "чистый" текст модуля без кавычек
			
			//1 - Открываем файл модуля формы изменяемой обработки
			//2 - Открываем файл с улучшением
			//3 - Читаем из файла с улучшением сами улучшения
			//4 - Анализируем даты улучшений по сравнению с уже установленными в обработке улучшениями
			//5 - Сохраняем улучшения (более новые по дате и те, которых ещё не было в обработке) в новую модифицированную обработку
			
			ТекстовыйДокументУлучшений = Новый ТекстовыйДокумент;
			ТекстовыйДокументУлучшений.Вывод = ИспользованиеВывода.Разрешить;
			ТекстовыйДокументУлучшений.Прочитать(ПутьКФайлуСУлучшениями);
			СодержимоеФайлаСУлучшениями = ТекстовыйДокументУлучшений.ПолучитьТекст();
			
			//пример 1-го блока файла с улучшениями
			//061022_improvement
			//#Область НовоеПоле_1_20220706
			///061022_improvement
			
			//работа с 1-м блоком файла с улучшениями
			НачалоБлокаОписанияУлучшений = СтрНайти(СодержимоеФайлаСУлучшениями,"061022_improvement") + 19;
			КонецБлокаОписанияУлучшений = СтрНайти(СодержимоеФайлаСУлучшениями,"/061022_improvement") - 47;
			БлокДляАнализа = Сред(СодержимоеФайлаСУлучшениями,НачалоБлокаОписанияУлучшений,КонецБлокаОписанияУлучшений);
			
			МассивУлучшений = СтрРазделить(БлокДляАнализа,Символы.ПС);
			
			//надо массив улучшений преобразовать в таблицу значений
			ТабУлучшенийДляУстановки = Новый ТаблицаЗначений;
			ТабУлучшенийДляУстановки.Колонки.Добавить("ИмяУлучшенияПолностью");
			ТабУлучшенийДляУстановки.Колонки.Добавить("ДлинаИмениУлучшенияБезДаты");
			ТабУлучшенийДляУстановки.Колонки.Добавить("ИмяУлучшенияБезДаты");
			ТабУлучшенийДляУстановки.Колонки.Добавить("ДатаУлучшения");//преобразуем в число
			ТабУлучшенийДляУстановки.Колонки.Добавить("НадоОбновить");//Истина - надо обновить, Ложь - пропускаем, Неопределено - ставим в конце, т.к. такое улучшение ещё не установлено
			ТабУлучшенийДляУстановки.Колонки.Добавить("НачалоУстановленногоУлучшения");
			ТабУлучшенийДляУстановки.Колонки.Добавить("ОкончаниеУстановленногоУлучшения");
			Для Ном = 0 По МассивУлучшений.Количество()-1 Цикл
				ТекСтрокаУлучшения = СокрЛП(МассивУлучшений[Ном]);
				НовСтрока = ТабУлучшенийДляУстановки.Добавить();
				НовСтрока.ИмяУлучшенияПолностью = ТекСтрокаУлучшения;
				НовСтрока.ДлинаИмениУлучшенияБезДаты = СтрДлина(ТекСтрокаУлучшения) - 8;
				НовСтрока.ИмяУлучшенияБезДаты = Лев(ТекСтрокаУлучшения,НовСтрока.ДлинаИмениУлучшенияБезДаты - 1);
				НовСтрока.ДатаУлучшения = Число(Прав(ТекСтрокаУлучшения,8));
			КонецЦикла;
			
			//работа со 2-м блоком файла с улучшениями
			НачалоБлокаДляВставки = СтрНайти(СодержимоеФайлаСУлучшениями,"061022_procedure") + 16;
			КонецБлокаДляВставки = СтрНайти(СодержимоеФайлаСУлучшениями,"/061022_procedure") - 17;
			БлокДляПриСозданииНаСервере = Сред(СодержимоеФайлаСУлучшениями,НачалоБлокаДляВставки,КонецБлокаДляВставки - НачалоБлокаДляВставки + 16);
			
			//проверим сколько пар 061022imp будет в БлокДляПриСозданииНаСервере 
			Число061022imp = СтрЧислоВхождений(БлокДляПриСозданииНаСервере,"//061022imp");
			
			Для ТекЧисло061022imp = 1 По Число061022imp Цикл
				НачалоПары = СтрНайти(БлокДляПриСозданииНаСервере,"//061022imp",,,ТекЧисло061022imp);
				КонецПары = СтрНайти(БлокДляПриСозданииНаСервере,"КОНЕЦ",,НачалоПары) + 6;
				ТекстПары = СокрЛП(Сред(БлокДляПриСозданииНаСервере,НачалоПары,КонецПары - НачалоПары));
								
				НачалоУстановленнойПары = СтрНайти(ТекстМодуля,ТекстПары);
				Если НачалоУстановленнойПары > 0 Тогда
					//прямо такая пара уже есть в обработке в процедуре ПриСозданииНаСервере
					//поэтому пропустим её
				Иначе
					//модуль ПриСозданииНаСервере					
					НачалоБлокаПриСозданииНаСервере = СтрНайти(ТекстМодуля ,"Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)");
					КонецБлокаПриСозданииНаСервере = СтрНайти(ТекстМодуля ,"КонецПроцедуры",,НачалоБлокаПриСозданииНаСервере,1) - НачалоБлокаПриСозданииНаСервере + 15;
					БлокПриСозданииНаСервере = Сред(ТекстМодуля,НачалоБлокаПриСозданииНаСервере,КонецБлокаПриСозданииНаСервере);
					
					//тут два варианта:
					//1-й вариант - такой блок уже есть, но у него другая дата - её надо проверит и сравнить
					НадоПерезаписатьБлок = Ложь;
					
					//2-й вариант - такого блока нет и его необходимо встроить в конце модуля ПриСозданииНаСервере
					НадоУстановить = Ложь;
					
					//1-я строка ТекстПары содержит все необходимые для нас данные
					ПерваяСтрокаТекстПары = СтрРазделить(ТекстПары,Символы.ПС).Получить(0);
					
					//после даты будет написано слово НАЧАЛО, но мы точно не знаем, сколько пробелов будет между датой и этим словом
					//поэтому найдём самую последнюю цифру, подразумевая, что это конец даты
					МестоположениеПоследнейЦифры = НайтиМесторасположениеПоследнейЦифры(ПерваяСтрокаТекстПары);
										
					//теперь анализируем дату блока
					Попытка
						ПерваяСтрокаТекстПарыПоДату = Лев(ПерваяСтрокаТекстПары,МестоположениеПоследнейЦифры);
						ДатаУлучшенияИзФайла = Число(Прав(ПерваяСтрокаТекстПарыПоДату, 8));
						ИмяУлучшенияБезДатыИзФайла = Лев(ПерваяСтрокаТекстПары,СтрДлина(ПерваяСтрокаТекстПарыПоДату)-8);
					Исключение
						//скорее всего даты нет в конце первой строки, поэтому добавляем ТекстПары в конце модуля ПриСозданииНаСервере
						НадоУстановить = Истина;
					КонецПопытки;
					
					//здесь анализируем дату уже установленного улучшения в модуле ПриСозданииНаСервере
					Если Не НадоУстановить Тогда
						НачалоУстановленнойПары = СтрНайти(ТекстМодуля,ИмяУлучшенияБезДатыИзФайла);
						Если НачалоУстановленнойПары > 0 Тогда
							Попытка
								ДатаУстановленногоУлучшения = Число(Сред(ТекстМодуля,НачалоУстановленнойПары + СтрДлина(ИмяУлучшенияБезДатыИзФайла), 8));
								
								Если ДатаУлучшенияИзФайла > ДатаУстановленногоУлучшения Тогда
		                             НадоПерезаписатьБлок = Истина;
								КонецЕсли;
							Исключение
								//скорее всего даты нет в конце первой строки, поэтому добавляем ТекстПары в конце модуля ПриСозданииНаСервере
								НадоУстановить = Истина;
							КонецПопытки;
						Иначе
							//такого улучшения в модуле ПриСозданииНаСервере нет, поэтому добавляем ТекстПары в конце модуля ПриСозданииНаСервере
							НадоУстановить = Истина;
						КонецЕсли;
					КонецЕсли;
					
					Если НадоПерезаписатьБлок Тогда
						//необходимо перезаписать блок в модуле ПриСозданииНаСервере
						
						НачалоПары = СтрНайти(ТекстМодуля,"//061022imp",,,ТекЧисло061022imp);
						КонецПары = СтрНайти(ТекстМодуля,"КОНЕЦ",,НачалоПары) + 6;
						БлокКоторыйБудемПерезаписывать = СокрЛП(Сред(ТекстМодуля,НачалоПары,КонецПары - НачалоПары));
						
						БлокКоторымБудемЗаменять = ТекстПары;
										
						ТекстМодуля = СтрЗаменить(ТекстМодуля, БлокКоторыйБудемПерезаписывать, БлокКоторымБудемЗаменять);
					Иначе
						//необходимо добавить ТекстПары в конец модуля ПриСозданииНаСервере
						Если НадоУстановить Тогда					
							БлокПриСозданииНаСервереСУлучшением = СокрЛП(Сред(БлокПриСозданииНаСервере,1,КонецБлокаПриСозданииНаСервере - 15)) + Символы.ПС + Символы.ПС + ТекстПары + Символы.ПС + Символы.ПС + "КонецПроцедуры" + Символы.ПС + Символы.ПС;
							ТекстМодуля = СтрЗаменить(ТекстМодуля, БлокПриСозданииНаСервере, БлокПриСозданииНаСервереСУлучшением);
						КонецЕсли;
					КонецЕсли;
				
				КонецЕсли;
				
				ТекЧисло061022imp = ТекЧисло061022imp + 1;
			КонецЦикла;
			
			//работа с 3-м блоком файла с улучшениями, т.е. работа с областями
			//1-я часть работы с 3-м блоком - замена устаревших областей улучшений на более новые версии
			Для Каждого ТекСтр Из ТабУлучшенийДляУстановки Цикл 
				НачалоУстановленногоУлучшения = СтрНайти(ТекстМодуля,ТекСтр.ИмяУлучшенияБезДаты);
				Если НачалоУстановленногоУлучшения > 0 Тогда
					//теперь анализируем дату улучшения
					ДатаУстановленногоУлучшения = Число(Сред(ТекстМодуля,НачалоУстановленногоУлучшения + ТекСтр.ДлинаИмениУлучшенияБезДаты, 8));
					
					Если ТекСтр.ДатаУлучшения > ДатаУстановленногоУлучшения Тогда
						//новое улучшение новее и надо его установить вместо установленного
						ТекСтр.НадоОбновить = Истина;
						//тут надо узнать начало и конец блока для обновления
						//начало это НачалоУстановленногоУлучшения
						ТекСтр.НачалоУстановленногоУлучшения = НачалоУстановленногоУлучшения;
						//конец это ближайшее после НачалоУстановленногоУлучшения значение #КонецОбласти
						ОкончаниеУстановленногоУлучшения = СтрНайти(ТекстМодуля,"#КонецОбласти",,НачалоУстановленногоУлучшения) + 14;
						БлокДляЗамены = Сред(ТекстМодуля,НачалоУстановленногоУлучшения, ОкончаниеУстановленногоУлучшения - НачалоУстановленногоУлучшения);
						
						//готовим область улучшения из файла для замены в обработке
						НачалоУлучшенияИзФайла = СтрНайти(СодержимоеФайлаСУлучшениями,ТекСтр.ИмяУлучшенияПолностью,,КонецБлокаДляВставки);
						КонецУлучшенияИзФайла = СтрНайти(СодержимоеФайлаСУлучшениями,"#КонецОбласти",,НачалоУлучшенияИзФайла) + 14;
						БлокДляВставки = Сред(СодержимоеФайлаСУлучшениями,НачалоУлучшенияИзФайла,КонецУлучшенияИзФайла - НачалоУлучшенияИзФайла);

						//заменяем в модуле формы устаревшую область улучшения на более новую
						ТекстМодуля = СтрЗаменить(ТекстМодуля, БлокДляЗамены, БлокДляВставки);
						
					Иначе
						//уже установленное улучшение имеет такую же или более позднюю дату
						ТекСтр.НадоОбновить = Ложь;
					КонецЕсли;
										
				КонецЕсли;
			КонецЦикла;
						
			//2-я часть работы с 3-м блоком - таких улучшений в обработке нет, поэтому код просто вставляется в конце модуля формы
			Для Каждого ТекСтр Из ТабУлучшенийДляУстановки Цикл
				Если ТекСтр.НадоОбновить = Неопределено Тогда
					
					НачалоУлучшенияИзФайла = СтрНайти(СодержимоеФайлаСУлучшениями,ТекСтр.ИмяУлучшенияПолностью,,КонецБлокаДляВставки);
					КонецУлучшенияИзФайла = СтрНайти(СодержимоеФайлаСУлучшениями,"#КонецОбласти",,НачалоУлучшенияИзФайла) + 14;
					БлокДляВставкиВКонце = Сред(СодержимоеФайлаСУлучшениями,НачалоУлучшенияИзФайла,КонецУлучшенияИзФайла - НачалоУлучшенияИзФайла);
					ТекстМодуля = ТекстМодуля + Символы.ПС + Символы.ПС + БлокДляВставкиВКонце;

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

 

Описание технологии: 3. Практический пример (+порядок работы с приложенными материалами)

К данной публикации приложены бесплатные материалы (также будут приложены к первому комментарию данной публикации), на базе которых вы можете практически изучить предложенную технологию.

Примечания к рассматриваемому примеру:
- Работаем (улучшаем) с простой обработкой, у которой есть только одна управляемая форма.
- Улучшаем только процедуры модуля управляемой формы.
- Все улучшения интерфейса реализуем с помощью динамического интерфейса.
- В обработке «24083-2022 - Улучшайзер - обработка для улучшения обработок.epf» есть определённые ограничения: настроен фильтр на открытие файлов с улучшениями с расширением «.061022» и на работу с обработкой, содержащей текст «ОбработкаДляУлучшения». Поэтому, если вы хотите поработать со своими обработками, то вам необходимо соответствующим образом скорректировать файл «Улучшайзера». Вы можете это сделать самостоятельно или поучаствовать в вышеописанном мастер-классе.


Как работать с приложенными к публикации материалами:
1. Скачайте файлы (скаченные файлы желательно поместить в один каталог):
- «24083-2022 - Улучшайзер - обработка для улучшения обработок.epf» - это сам Улучшайзер
- «ОбработкаДляУлучшения.epf» - это тестовая обработка, которая и будет улучшаться.
- «2022-07-06 - улучшение 1.061022» - это улучшение, которое будет установлено на улучшаемую обработку. Вы можете его открыть (и при необходимо изменить) с помощью любого текстового редактора.

 

2. В любой управляемой базе в режиме «Предприятие» откройте файл «ОбработкаДляУлучшения.epf» и убедитесь, что обработка выглядит вот так:

Закройте эту обработку.
Если вы обладаете опытом работы с программным кодом «1С» в «Конфигураторе», то можете открыть в «Конфигураторе» файл «ОбработкаДляУлучшения.epf» и в модуле формы «Форма» увидеть следующий программный код:

 

3. В любой управляемой базе в режиме «Предприятие» откройте файл «24083-2022 - Улучшайзер - обработка для улучшения обработок.epf». В открывшейся обработке:
- в 1-м поле выберите файл «ОбработкаДляУлучшения.epf»
- во 2-м поле выберите файл «2022-07-06 - улучшение 1.061022»
- в 3-м поле выберите каталог, куда будет сохранена улучшенная обработка «ОбработкаДляУлучшения.epf»
- нажмите кнопку «Улучшить обработку»
- если всё прошло штатно, то внизу появится соответствующая надпись

Закройте «Улучшайзер».

 

4. В любой управляемой базе в режиме «Предприятие» откройте файл «ОбработкаДляУлучшения.epf» из того каталога, который вы указали в предыдущем пункте для сохранения улучшенной обработки. Убедитесь, что после улучшения обработка стала выглядеть вот так:

Если вы обладаете опытом работы с программным кодом «1С» в «Конфигураторе», то можете открыть в «Конфигураторе» файл «ОбработкаДляУлучшения.epf» и в модуле формы «Форма» увидеть изменённый программный код:

 

Где эта технология уже используется

Данная технология используется в публикации «Загрузка кассовых чеков из бесплатного мобильного приложения ФНС (налоговой) в документы "Авансовый отчет" и "Расходы предпринимателя"» в части возможности улучшения ранее приобретенных за денежные средства обработок по загрузке кассовых чеков. Представлен каталог улучшений, из которого можно самостоятельно сформировать индивидуальный набор улучшений, так и выбрать сразу одно комбо-улучшение, которое включает в себя все возможные улучшения.
Также технология работы с "Улучшайзером" применяется в публикации «Загрузка всех онлайн-чеков с сервиса проверки чеков ФНС (налоговой) – обработка для получения данных о покупках по чекам онлайн-касс с загрузкой в Авансовый отчет» в части возможности улучшения ранее приобретенных за стартмани обработок по загрузке кассовых чеков.
Общее число скачиваний и установок улучшений на момент данной публикации составляет 8.

 

Разработка и тестирование "Улучшайзера" и "Обработки для улучшения" осуществлялись на типовой конфигурации «1С:Бухгалтерия предприятия, редакция 3.0 (3.0.115.19)» и платформе 1С:Предприятие 8.3 (8.3.19.1229). Работать данная обработка должна практически на любой управляемой конфигурации 1С на любой современной платформе 1С 8, поддерживающей работу с v8unpack и функцией СтрНайти со структурой параметров (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>).

Если у вас получилось скачать приложенные к обработке файлы и поработать в рамках предложенной технологии, то поставьте плюсик - мне будет понятно (и приятно), что данный подход имеет право на существование. Если у вас не получилось применить данную технологию, но публикация понравилось, то ваш плюс будет не менее приятным :-) Как уже было сказано выше, доклад написан в поддержку предложенного на «INFOSTART EVENT 2022 Saint Petersburg» мастер-класса по данной теме, поэтому если вы сочли интересной публикацию, то вы можете проголосовать за неё по ссылке.

Улучшайзер автоматическая установка улучшений модификация улучшение

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    140291    770    391    

801

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

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

18000 руб.

06.10.2023    11498    31    6    

60

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    7227    27    4    

50

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

5400 руб.

17.05.2024    13622    30    27    

75

SALE! 50%

Кассовые операции Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

В публикации размещены специализированные обработки для загрузки кассовых чеков в базах 1С (для локальных баз): '1С:Бухгалтерия предприятия, ред. 3.0', '1С:Управление нашей фирмой 8, ред. 3.0', '1С:Комплексная автоматизация, ред. 2.5', ‘1С:ERP Управление предприятием, ред. 2’ и ‘1С:Управление торговлей, ред. 11.5’. Вы просто сканируете QR коды с бумажных и электронных чеков c помощью мобильного приложения ФНС и чеки автоматически (без ручного ввода) загружаются в документы 'Авансовый отчет', 'Расходы предпринимателя', 'Путевой лист', 'Приходная накладная', 'Поступление (акты, накладные, УПД)', 'Приобретение товаров и услуг', 'Отчет о розничных продажах' и 'Поступление денежных документов'.

12960 9720 руб.

19.08.2020    66705    317    73    

215

Тестирование QA DevOps и автоматизация разработки Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.16.115.

2220 руб.

04.07.2022    7576    38    1    

25

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2880 руб.

14.01.2013    181793    1103    0    

876

DevOps для 1С DevOps и автоматизация разработки Программист Стажер Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

9000 руб.

20.06.2023    17387    1    3    

254
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. delta 680 08.07.22 10:15 Сейчас в теме
Как и написано в публикации, здесь приложены файлы с описываемым примером.
Прикрепленные файлы:
24083-2022 - Улучшайзер - обработка для улучшения обработок.epf
ОбработкаДляУлучшения.epf
2022-07-06 - улучшение 1.061022
2. Lapitskiy 1060 31.07.22 07:18 Сейчас в теме
раньше такое "плагин" называли.
Оставьте свое сообщение