Автоматическая регистрация внешнего отчета или обработки для управляемых форм

12.03.20

Задачи пользователя - Менеджеры внешних отчетов

Автоматическая регистрация отчёта или обработки в справочнике Дополнительные отчеты и обработки при открытии. Протестировано на: Бухгалтерия предприятия, редакция 3.0 (3.0.75.37) 1С:Предприятие 8.3 (8.3.16.1224), автоматически добавляется в раздел - "Руководителю", в быстрый доступ добавляется текущий пользователь. Поиск в интернете не дал положительных результатов. Сделал сам. Делюсь с вами. Часть кода жестко привязывает обработку к разделу / пользователи и..д. и.т.п но так и задумано. Напильником обработать под себя.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Автоматическая регистрация внешнего отчета или обработки:
.epf 10,73Kb
1
1 Скачать (1 SM) Купить за 1 850 руб.

Создаем две формы.

1. ОбновитьОбработку

2. ФормаОбработки

 

Основной выставляем - первую.

Код для процедуры при открытии:


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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПриОткрытииНаСервере();
	Отказ	= Истина;
	ОткрытьФорму("ВнешняяОбработка.АвтоРегистрацияОбработки.Форма.ФормаОбработки");
КонецПроцедуры

 

В модуле объекта пишем:

 

Перем	мВерсия;
Перем	мНаименованиеОбр;


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


&НаСервере
Процедура ОбновитьВрешнююОбработку( Адрес, ПутьКФайлу ) Экспорт
	
	ИмяФайла	= Новый Файл(ПутьКФайлу);
	ИмяФайла	= ИмяФайла.Имя;
	СведенияОбр	= СведенияОВнешнейОбработке();
	
	//Наищем нужный нам раздел
	ИспользуемыеРазделы = Новый Массив;
	//Если ВидОбр	= Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда
		ИспользуемыеРазделы = ДополнительныеОтчетыИОбработки.РазделыДополнительныхОбработок();
	//Иначе
	//	ИспользуемыеРазделы = ДополнительныеОтчетыИОбработки.РазделыДополнительныхОтчетов();
	//КонецЕсли;
	
	РабочийСтол = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы();
	Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка();
	Для Каждого Раздел Из ИспользуемыеРазделы Цикл
		ПредстРаздела 	= ДополнительныеОтчетыИОбработки.ПредставлениеРаздела(	Раздел	);
		Если ПредстРаздела = "Руководителю" ТОгда
			Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Раздел);
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	
	СпрВО	=	Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию( мНаименованиеОбр );
	
	Если СпрВО.Пустая()	Тогда
		СпрВО_О	= Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент();
		СпрВО_О.Наименование	= мНаименованиеОбр;
		СпрВО_О.БезопасныйРежим	= Ложь;
		СпрВО_О.Версия			= мВерсия;
		СпрВО_О.Вид				= Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка;
		СпрВО_О.ИмяОбъекта		= ЭтотОбъект.Метаданные().ПолноеИмя();
		СпрВО_О.ИмяФайла		= ЭтотОбъект.ИспользуемоеИмяФайла; // "SendMessage.epf";
		СпрВО_О.Информация		= мНаименованиеОбр;
		СпрВО_О.ИспользоватьДляФормыОбъекта	= Истина;
		СпрВО_О.ИспользоватьДляФормыСписка	= Истина;
		СпрВО_О.Ответственный	= ПараметрыСеанса.ТекущийПользователь;
		СпрВО_О.Публикация		= Истина;
		СпрВО_О.РежимСовместимостиРазрешений	= Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3;
		
		СпрВО_О.ОбменДанными.Загрузка	= Истина;
		СпрВО_О.Записать();
	Иначе
			СпрВО_О	= СпрВО.ПолучитьОбъект();
			Если 	СпрВО.Версия < мВерсия Тогда
				Возврат;
		КонецЕсли;
	КонецЕсли;
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища( Адрес );
	//ВремФайл	= ПолучитьИмяВременногоФайла("tmp");
	//ДвоичныеДанные.Записать( ВремФайл );	
	ХранилищеОбр				= Новый ХранилищеЗначения( ДвоичныеДанные );
	СпрВО_О.ХранилищеОбработки	= ХранилищеОбр;
	
	//Добавим раздел доступа для каждой команды - Руководителю
	СпрВО_О.Команды.Очистить();
	Для Каждого ИнфОбОбр	из СведенияОбр.Команды Цикл
		//Добавим команды
		Ком		= СпрВО_О.Команды.Добавить();
		Ком.Идентификатор	= ИнфОбОбр.Идентификатор;
		Ком.ВариантЗапуска	= Перечисления.СпособыВызоваДополнительныхОбработок[ИнфОбОбр.Использование];
		Ком.Представление	= ИнфОбОбр.Представление;
		Ком.ПоказыватьОповещение	= Ложь;
		
		
		//Добавим раздел доступа  - Руководителю
		РегДоступа = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам;
		НаборДост = РегДоступа.СоздатьНаборЗаписей();
		
		НаборДост.Отбор.ДополнительныйОтчетИлиОбработка.Установить(СпрВО_О.Ссылка);
		НаборДост.Отбор.ИдентификаторКоманды.Установить( ИнфОбОбр.Идентификатор );
		НаборДост.Отбор.Пользователь.Установить( ПараметрыСеанса.ТекущийПользователь );
		НаборДост.Прочитать();
		
		Если НаборДост.Количество() = 0 Тогда
			ДовыйДоступ = НаборДост.Добавить();
		ИначеЕсли НаборДост.Количество() = 1 Тогда
			ДовыйДоступ = НаборДост[0];
		КонецЕсли;
		ДовыйДоступ.ДополнительныйОтчетИлиОбработка		= СпрВО_О.Ссылка;
		ДовыйДоступ.ИдентификаторКоманды				= ИнфОбОбр.Идентификатор ;
		ДовыйДоступ.Пользователь						= ПараметрыСеанса.ТекущийПользователь;
		ДовыйДоступ.Доступно							= Истина;
		НаборДост.Записать();   	
		
	КонецЦикла;
	СпрВО_О.ОбменДанными.Загрузка	= Истина;
	СпрВО_О.Записать();
	
КонецПроцедуры



мВерсия				= "1.1";
мНаименованиеОбр	= "Авто регистрация обработки";

 

Автоматическая регистрация во внешних отчётах обработках

См. также

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    993    Iaskeliainen    2    

7

Менеджеры внешних отчетов Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

22.08.2024    2696    rslayer    8    

4

Менеджеры внешних отчетов Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Очень часто возникает необходимость сохранить в папку на локальном диске все дополнительные внешние отчеты и обработки из базы 1С. Данная обработка позволит сделать это быстро и с учетом внутренней иерархии и с проверкой результата выгрузки (Управляемые формы).

1 стартмани

25.04.2024    1602    18    Suker86    0    

5

Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Пример добавления отчета в расширение в типовые конфигурации на БСП на примере УТ 11.5, с добавлением в типовые меню отчетов.

1 стартмани

31.01.2024    5253    DarkPinch222    0    

17

Менеджеры внешних отчетов Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

5 стартмани

04.09.2023    1243    4    serg1234    0    

4

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

Расширение «Контрольные отчеты» для автоматизации процесса проверки ведения учета в ПП. Со списком ошибок могут работать ответственные пользователи. Помогает в процессе внедрения ПП находить нарушения в бизнес-процессах. 

12000 руб.

08.08.2023    2167    3    1    

6

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

При изменении и отладке внешней обработки приходится десятки раз заходить в Файл-Открыть и переоткрывать обработку. Данное решение значительно упрощает данную задачу.

1 стартмани

28.07.2023    5931    69    Serg2000mr    31    

61
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. platonov.e 160 12.03.20 16:11 Сейчас в теме
А при открытии этой же обработки потом из справочника? Что будет? Она опять попытается себя загрузить? Не выдаст ли ошибку на то что в ИспользуемоеИмяФайла не путь к обработки лежит?)
А что будет в двоичных данных, когда открываете вы файл на локальном компе, а база лежит на сервере? Вы ведь ДД загружаете на сервере...
3. agent00mouse 257 13.03.20 10:22 Сейчас в теме
(1) сравнивается версия. при равной ни чего не происходит и открывается форма обработки
7. platonov.e 160 13.03.20 10:53 Сейчас в теме
(3) так может на клиенте проверить?
И что с двоичными данными на сервере то? ок отрабатывает?
8. agent00mouse 257 13.03.20 13:06 Сейчас в теме
(7)Таки не только можно но и нужно. Спасибки. В Рефакторинг.
2. VmvLer 12.03.20 16:11 Сейчас в теме
не понял, для чего этой велик со сломанным рулем(
4. agent00mouse 257 13.03.20 10:24 Сейчас в теме
(2)Где сломано?
Облегчена жизнь рядовому пользователю. йуЗверь скачивает обработки и запускает оную. Вопрос интеграции закрыт не открывшись.
Понятно, что дыра в виде прав на запуск внешних отчётов и обработок присутствует.
Можно добавить вообще cmd для автоматического засасывания обработки в базу с командной строки. А в коде реализовать подбор правильных пользователей и нужных разделов.
5. VmvLer 13.03.20 10:28 Сейчас в теме
(4) не-а.
обычный юзер приобретет приключения на 5-ю точку и все, а спец будет терять время на понимание вашей уникальной логики.
6. agent00mouse 257 13.03.20 10:32 Сейчас в теме
(5) ...Каждый выбирает для себя... как и какие кактусы ему грызть
9. SlavaKron 16.06.20 08:44 Сейчас в теме
Сильно не вникал, но код:
&НаСервере
Процедура ПриОткрытииНаСервере()
	ОтчетОбъект = РеквизитФормыВЗначение("Объект");
	ПутьКФайлу = Новый ДвоичныеДанные( ОтчетОбъект.ИспользуемоеИмяФайла );
	Адрес = ПоместитьВоВременноеХранилище(ПутьКФайлу, ЭтаФорма.УникальныйИдентификатор);
	ОтчетОбъект.ОбновитьВрешнююОбработку( Адрес, ПутьКФайлу );
КонецПроцедуры
будет работать только в том случае, если у вас файловая база или 1С Предприятие вы открываете на сервере, в остальных случаях ИспользуемоеИмяФайла имеет смысл только на клиенте.
Оставьте свое сообщение