Управление платформенными обработками (расширение для типовых) [update 8.3.23]

0. SeiOkami 2849 07.10.21 16:30 Сейчас в теме
Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".

Перейти к публикации

Отзывы
10. SeiOkami 2849 08.10.21 07:46 Сейчас в теме
Почему вообще возможна подмена легче понять, если заглянуть "под капот" в обработку "все функции".

	If AccessRight("ActiveUsers", Metadata) Then
		ActiveUsers = Undefined;
		Try
			ActiveUsers = New("ExternalDataProcessorObject.StandardActiveUsers");
		Except
			Try
				ExternalDataProcessors.Connect("v8res://mngbase/StandardActiveUsers.epf", "StandardActiveUsers", false);
				ActiveUsers = New("ExternalDataProcessorObject.StandardActiveUsers");
			Except
            	Message(ErrorDescription());
			EndTry;
		EndTry;
		If ActiveUsers <> Undefined Then
			SubString = Table.Rows.Add();	
			SubString.Name = NStr("ru = 'Активные пользователи'; SYS = 'AllFunctions.ActiveUsers'", "ru");
			SubString.Form = "ExternalDataProcessor.StandardActiveUsers.Form";
			SubString.Picture = PictureLib.Form;
			SubString.Type = "ExternalForm";
		EndIf;
	EndIf;
Показать


Сначала "все функции" пытается создать внешнюю обработку с именем StandardActiveUsers
Если не удалось, значит, что такая обработка ещё не была подключена. И тогда происходит подключение этой самой обработки по адресу внутреннего ресурса.

Выходит, что если подменяемая обработка будет вызывать ошибку при создании, то 1С её заменит на стандартную
Прикрепленные файлы:
Artem-B; BaphoBush; nsirotkin@mail.ru; JohnyDeath; DrAku1a; artbear; +6 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1654 07.10.21 18:35 Сейчас в теме
(0) как всегда что-то неординарное :)
shoy; CyberCerber; SeiOkami; +3 Ответить
2. Yashazz 4481 07.10.21 20:08 Сейчас в теме
А как технически происходит подмена, если не секрет? Я ещё понимаю выдрать их и как внешки юзать, но обратно как пихнуть? Или это и есть внешки?
3. SeiOkami 2849 07.10.21 20:13 Сейчас в теме
(2) по этой ссылке рассказывается.
Там всё просто. Например:

ДвоичныеДанные = Новый ДвоичныеДанные("C:\ВнешняяОбработка.epf");
АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные); 
ВнешниеОбработки.Подключить(АдресХранилища, "StandardFindByRef", false);


В расширении при старте сеанса используется такой способ указания адреса:


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

Здесь в качестве адреса берется навигационная ссылка на реквизит. Но принцип тот же.
mitia.mackarevich; +1 Ответить
4. SeiOkami 2849 07.10.21 20:15 Сейчас в теме
(2) смысл в том, что каждая вшитая обработка имеет свое "ключевое" имя. По которому можно подключить любую другую обработку и платформа будет юзать уже её
13. Yashazz 4481 08.10.21 10:16 Сейчас в теме
(4) Чёрт, а у меня в своё время не получилось ((
Спасибо.
5. ixijixi 1426 07.10.21 21:11 Сейчас в теме
Коллеги, кто-нибудь нашел платформенную форму "Избранное"?
6. SeiOkami 2849 07.10.21 21:18 Сейчас в теме
(5)

ОткрытьФорму("sysForm:FavoritesDlg", Новый Структура("alias", 1));
Прикрепленные файлы:
FavoritesDlg.lf.epf
Artem-B; mitia.mackarevich; RustIG; ixijixi; +4 Ответить
7. Malfarion 226 08.10.21 02:19 Сейчас в теме
(6) Не получается ее подменить, у кого-то получилось?
9. SeiOkami 2849 08.10.21 06:13 Сейчас в теме
(7) нет, это только как-то менять файлы платформы. Но это уже точно попахивает нарушением лицензии)

Я использую только доступные из кода возможности
8. cleaner_it 216 08.10.21 04:15 Сейчас в теме
Потрясающее решение) Порой - да что там, частенько - задумывался о неудобстве типовых платформенных обработок
10. SeiOkami 2849 08.10.21 07:46 Сейчас в теме
Почему вообще возможна подмена легче понять, если заглянуть "под капот" в обработку "все функции".

	If AccessRight("ActiveUsers", Metadata) Then
		ActiveUsers = Undefined;
		Try
			ActiveUsers = New("ExternalDataProcessorObject.StandardActiveUsers");
		Except
			Try
				ExternalDataProcessors.Connect("v8res://mngbase/StandardActiveUsers.epf", "StandardActiveUsers", false);
				ActiveUsers = New("ExternalDataProcessorObject.StandardActiveUsers");
			Except
            	Message(ErrorDescription());
			EndTry;
		EndTry;
		If ActiveUsers <> Undefined Then
			SubString = Table.Rows.Add();	
			SubString.Name = NStr("ru = 'Активные пользователи'; SYS = 'AllFunctions.ActiveUsers'", "ru");
			SubString.Form = "ExternalDataProcessor.StandardActiveUsers.Form";
			SubString.Picture = PictureLib.Form;
			SubString.Type = "ExternalForm";
		EndIf;
	EndIf;
Показать


Сначала "все функции" пытается создать внешнюю обработку с именем StandardActiveUsers
Если не удалось, значит, что такая обработка ещё не была подключена. И тогда происходит подключение этой самой обработки по адресу внутреннего ресурса.

Выходит, что если подменяемая обработка будет вызывать ошибку при создании, то 1С её заменит на стандартную
Прикрепленные файлы:
Artem-B; BaphoBush; nsirotkin@mail.ru; JohnyDeath; DrAku1a; artbear; +6 Ответить
11. RustIG 1654 08.10.21 09:12 Сейчас в теме
(10) да ты просто 1с-хакер! :) думаю, скоро, некоторые модули конфигураций начнут закрывать от глаз и анализа 1с-разработчиков-внедренцев...
12. SeiOkami 2849 08.10.21 09:15 Сейчас в теме
(11) на самом деле, на Инфостарте уже писалось это всё по несколько раз. Там куча прикольных внутренностей можно посмотреть. Но, к сожалению, "переподключить" можно только тот список обработок, что я вписал в расширение. Или мы пока чего-то ещё не знаем 😁
14. Yashazz 4481 08.10.21 10:17 Сейчас в теме
(11) Всё это Евгения Карук давным-давно расписала. А вот как подцепить - это да, круто сделано, автору респект.
Дмитрий74Чел; +1 Ответить
16. Evil Beaver 7831 08.10.21 10:18 Сейчас в теме
(14) Коллективное творчество и общественный прогресс налицо. Для того мы тут и собрались
15. Evil Beaver 7831 08.10.21 10:18 Сейчас в теме
О, ВсеФункции сама по себе тоже обработка! Реквестирую тогда в ней сортировку по "последним открытым" и поиск. Кто бы сделал такое... Бесит при отладке многократно заходить в один и тот же объект через ВсеФункции и там его искать
Evg-Lylyk; artbear; +2 Ответить
17. SeiOkami 2849 08.10.21 10:21 Сейчас в теме
(15) если точнее, то ВсеФункции - это форма.
В платформе есть зашитые обработки - это те, что указаны в публикации.
А есть формы. Их намного больше. Например, та же "О программе" - это форма.
Но как их подменить пока неизвестно. Точнее, есть способ - подменить его в файлах платформы. Но это уже слишком сурово и скорее всего не совсем легально 😅
18. Evil Beaver 7831 08.10.21 10:23 Сейчас в теме
(17) На ИС тоже писалось, как подменять формы, но это, если не изменяет память, правка файлов ресурсов в каталоге платформы. Там контейнерный формат, как в CF
19. ixijixi 1426 08.10.21 11:09 Сейчас в теме
22. artbear 1428 08.10.21 12:43 Сейчас в теме
(15) Так история для этого есть.
я ей пользуюсь, если помню, что не так давно открывал
20. Evg-Lylyk 4153 08.10.21 12:03 Сейчас в теме
Спасибо, хорошая работа
В 20 платформе появилось много новых обработок, хотелось бы чтобы была поддержка
Пример доработки конструктора запросов https://infostart.ru/1c/articles/1278855/
improg; artbear; +2 Ответить
21. SeiOkami 2849 08.10.21 12:14 Сейчас в теме
(20) интересно, посмотрю 20ую и добавлю новые обработки.

Но, кстати, забыл в статье упоминуть, что при появлении новых платформенных обработок, их можно вручную добавить в подсистему. Для этого просто нужно создать элемент справочника Платформенные обработки и указать ключевое имя. Далее при обновлении версии они будут учитывать и добавленную обработку
frkbvfnjh; Evg-Lylyk; artbear; +3 Ответить
23. Evg-Lylyk 4153 21.10.21 13:46 Сейчас в теме
(15) Как вариант можно добавить объект в избранное
24. SeiOkami 2849 09.12.21 17:14 Сейчас в теме
Выложил новую версию расширения по подмене "встроенных" в платформу обработок.

• Добавлены новые обработки из платформы 8.3.20 (9 шт)

• В новой версии платформы изменили внутренние имена обработок. Поэтому, теперь в расширении хранится список имен. Например, Поиск ссылок на объект: StandardFindByRef и StandardFindByReference.

• Добавлено автоматическое обновление версий обработок при старте сеанса. Происходит один раз на каждую версию платформы. Т.е. при первоначальной установке расширения и последующих обновлениях платформы
25. sasha_r 28.12.22 16:23 Сейчас в теме
"назойлевый " пишется как " назойливый "

спасибо за статью!
Оставьте свое сообщение
Вакансии
Программист 1С
Оренбург
зарплата от 120 000 руб.
Полный день

Ведущий Инженер - программист 1С
Новокузнецк
зарплата от 100 000 руб.
Полный день

Программист 1C
Москва
Полный день

Главный специалист (Программист 1с)
Подольск
зарплата от 100 000 руб. до 110 000 руб.
Полный день

Ведущий инженер по тестированию
Санкт-Петербург
зарплата от 130 000 руб.
Полный день