Выгрузка стандартных обработок

Опубликовал Серега (SerVer1C) в раздел Программирование - Инструментарий

Задумывались ли вы над тем, чтобы подправить логику работы встроенных в платформу обработок из меню "Все функции"?
Если "Да" - то вам сюда!

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

Идея взята из публикации "Недокументированное использование стандартных обработок из меню "Все функции" //infostart.ru/public/369487

Ничего нового своего я сюда не вносил, просто материализовал статью Wink

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

 

Код модуля обычной формы:

Перем СоответствияОФ, РазделительОФ;




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




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




Функция РасширениеФайла(Путь)
	Расширение = "";
	Буфер      = "";
	ДлинаПути  = СтрДлина(Путь);
	
	Для й = 1 По ДлинаПути Цикл
		ТекСимвол = Сред(Путь, ДлинаПути - й + 1, 1);
		
		Если ТекСимвол = "\" Или ТекСимвол = "/" Тогда
			Прервать;
		КонецЕсли;
		
		Если ТекСимвол = "." Тогда
			Расширение = Буфер;
			Прервать;
		КонецЕсли;
		
		Буфер = ТекСимвол + Буфер;
	КонецЦикла;
	
	Возврат Расширение;
КонецФункции




Процедура ПриОткрытии()
	СисИнфо = Новый СистемнаяИнформация;
	ТекПлатформа = СисИнфо.ТипПлатформы;
	            
	Если ТекПлатформа = ТипПлатформы.Windows_x86 Или ТекПлатформа = ТипПлатформы.Windows_x86_64 Тогда 
		РазделительОФ = "\";
		ПутьВыгрузки = "C:\";
	Иначе 
		РазделительОФ = "/";
		ПутьВыгрузки = "/home";
	КонецЕсли;
КонецПроцедуры




СоответствияОФ = Новый Соответствие;
СоответствияОФ.Вставить("Активные пользователи"                     , "v8res://mngbase/StandardActiveUsers.epf");
СоответствияОФ.Вставить("Журнал регистрации"                        , "v8res://mngbase/StandardEventLog.epf");
СоответствияОФ.Вставить("Поиск ссылок на объект"                    , "v8res://mngbase/StandardFindByRef.epf");
СоответствияОФ.Вставить("Проведение документов"                     , "v8res://mngbase/StandardDocumentsPosting.epf");
СоответствияОФ.Вставить("Удаление помеченных объектов"              , "v8res://mngbase/StandardDeleteMarkedObjects.epf");
СоответствияОФ.Вставить("Управление внешними источниками данных"    , "v8res://mngbase/StandardExternalDataSourcesManagement.epf");
СоответствияОФ.Вставить("Управление итогами"                        , "v8res://mngbase/StandardTotalsManagement.epf");
СоответствияОФ.Вставить("Управление полнотекстовым поиском"         , "v8res://mngbase/StandardFullTextSearchManagement.epf");
СоответствияОФ.Вставить("Управление расширениями конфигурации"      , "v8res://mngbase/StandardExtensionsManagement.epf");
СоответствияОФ.Вставить("Конструктор запросов на управляемых формах", "v8res://mngbase/QueryWizard.epf");

 

Код модуля управляемой формы:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПриОткрытииНаСервере();
КонецПроцедуры




&НаСервере
Процедура ПриОткрытииНаСервере()
	СисИнфо = Новый СистемнаяИнформация;
	ТекПлатформа = СисИнфо.ТипПлатформы;
	
	Если ТекПлатформа = ТипПлатформы.Windows_x86 Или ТекПлатформа = ТипПлатформы.Windows_x86_64 Тогда 
		Объект.Разделитель = "\";
		ПутьВыгрузки = "C:\";
	Иначе 
		Объект.Разделитель = "/";
		ПутьВыгрузки = "/home";
	КонецЕсли;
	
	
	Соответствия = Новый Соответствие;
	Соответствия.Вставить("Активные пользователи"                     , "v8res://mngbase/StandardActiveUsers.epf");
	Соответствия.Вставить("Журнал регистрации"                        , "v8res://mngbase/StandardEventLog.epf");
	Соответствия.Вставить("Поиск ссылок на объект"                    , "v8res://mngbase/StandardFindByRef.epf");
	Соответствия.Вставить("Проведение документов"                     , "v8res://mngbase/StandardDocumentsPosting.epf");
	Соответствия.Вставить("Удаление помеченных объектов"              , "v8res://mngbase/StandardDeleteMarkedObjects.epf");
	Соответствия.Вставить("Управление внешними источниками данных"    , "v8res://mngbase/StandardExternalDataSourcesManagement.epf");
	Соответствия.Вставить("Управление итогами"                        , "v8res://mngbase/StandardTotalsManagement.epf");
	Соответствия.Вставить("Управление полнотекстовым поиском"         , "v8res://mngbase/StandardFullTextSearchManagement.epf");
	Соответствия.Вставить("Управление расширениями конфигурации"      , "v8res://mngbase/StandardExtensionsManagement.epf");
	Соответствия.Вставить("Конструктор запросов на управляемых формах", "v8res://mngbase/QueryWizard.epf");


	
	Объект.Соответствия = Новый СписокЗначений;
	Объект.Соответствия.Добавить(Соответствия);
КонецПроцедуры




&НаСервере
Функция РасширениеФайла(Путь)
	Расширение = "";
	Буфер      = "";
	ДлинаПути  = СтрДлина(Путь);
	
	Для й = 1 По ДлинаПути Цикл
		ТекСимвол = Сред(Путь, ДлинаПути - й + 1, 1);
		
		Если ТекСимвол = "\" Или ТекСимвол = "/" Тогда
			Прервать;
		КонецЕсли;
		
		Если ТекСимвол = "." Тогда
			Расширение = Буфер;
			Прервать;
		КонецЕсли;
		
		Буфер = ТекСимвол + Буфер;
	КонецЦикла;
	
	Возврат Расширение;
КонецФункции




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




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




&НаКлиенте
Процедура ВыполнитьДействие(Команда)
	ВыполнитьНаСервере();
КонецПроцедуры

 

Для совсем ленивых прилагаю обработку.

Обработка для выгрузки работает и в управляемых, и в обычных формах. Проверено на платформах 8.2.19 - 8.3.6. (В 8.2 есть не все обработки, что имеются в 8.3).

Скачать файлы

Наименование Файл Версия Размер
Выгрузка стандартных обработок
.epf 12,29Kb
18.09.15
25
.epf 1.0 12,29Kb 25 Скачать

См. также

Комментарии
1. Марина Чирина (chmv) 21.09.15 14:54 Сейчас в теме
2. Серега (SerVer1C) 48 22.09.15 08:50 Сейчас в теме
(1) chmv, суть в том, что вы можете сохранить (выгрузить во внешние файлы) зашитые в платформу стандартные обработки и использовать их там, где вам удобно. Или доработать (допилить) их под свои нужды. Еще один из вариантов использования - когда у пользователя закрыт доступ к меню "Все функции", а ему нужно использовать, например, одну из тех обработок - вы можете разместить ее в разделе внешних обработок.
3. Алексей Ермилов (Alex_E) 1532 22.09.15 09:07 Сейчас в теме
(2) SerVer1C, Да уж, про одну обработку из меню Все функции...кто мешает сохранить как внешнюю в конфигураторе и использовать не понятно... Да и закрыто меню "Все функции" - это сильно.... Вообще, ИМХО,то этот "инструмент" не для пользователя, а для того, кто не знает интерфейс - т.к. всё, что нужно именно для работы пользователя есть именно в интерфейсе пользователя, но никак не во всех функциях :-)
4. Серега (SerVer1C) 48 22.09.15 10:21 Сейчас в теме
(3) Alex_E, или я не знаю интерфейс, или кто-то из нас двоих...
Создаю новую конфу, создаю 2 роли - "ПолныеПрава" и "ТолькоЧтение". Создаю 2 пользователя - один с полными правами, другой - только чтение. Внимание: Вопрос1: как мне из конфигуратора сохранить внешнюю обработку (которая есть в стандартных), например, "Поиск ссылок на объекты"?; Вопрос 2: как второму пользователю с правами только на чтение предоставить доступ к обработке (которая есть в стандартных), например, "Поиск ссылок на объекты"?
5. Алексей Ермилов (Alex_E) 1532 22.09.15 10:44 Сейчас в теме
(4) SerVer1C, Конечно я. И ещё, я даже представить не могу, зачем пользователю с правами Только чтение разрешать что то делать, например сохранять и запускать внешние обработки, если из названия прав он может только смотреть?
И таки да, если Вы создаёте самописную конфу, в которой доступ к части объектов будет только через все функции, то интерфейс в принципе не нужен вовсе - всё и так доступно во всех функциях.
6. Серега (SerVer1C) 48 22.09.15 11:01 Сейчас в теме
(5) Alex_E, набор прав "ТолькоЧтение" я привел в качестве примера, в "продакшн" все сложнее. Цель данной статьи не показать, как строить интерфейсы, а в том, что данные обработки (для 8.3 - в количестве 10 штук) зашиты в саму платформу и их можно оттуда заполучить, а что с ними делать, когда они окажутся внешними - каждый решает сам.
7. Алексей Ермилов (Alex_E) 1532 22.09.15 12:29 Сейчас в теме
(6) SerVer1C, Получить из конфигуратора - не айс? Тогда - ценно. Я Вас понял, что это нужно для того, чтобы тот, кому "не положено" мог получить, другого применения не придумать..... Ну да ладно, сразу сказал, что это ИМХО))))))))))))))))
8. Vladimir Glumov (Vovan58) 5 03.07.16 16:13 Сейчас в теме
(7) Alex_E, А что , разве возможно обработку Удаление помеченных получить из конфигуратора? Это в какой ветке Конфигуратора?
9. Алексей Ермилов (Alex_E) 1532 04.07.16 09:39 Сейчас в теме
(8) Vovan58, Ветка обработки, правой кнопкой - сохранить как внешний отчет (обработку)...
Оставьте свое сообщение