Fast help. Универсальные функции для регистрации внешних отчетов/обработок в 1С 8 на управляемых формах. Использование Синонима отчета/обработки при выполнении кода &НаКлиенте

19.03.15

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

Fast-help. Ctrl+C, Ctrl+V в модуль внешнего отчета или обработки для 1С 8 УФ - и можно подключать в режиме Предприятия для запуска из Дополнительных отчетов или Дополнительных обработок.
На оригинальность не претендую - методика регистрации взята с просторов инета.
Добавлено для универсальности подсоединения любого отчета и обработки: считывание синонима и комментария отчета и использование его в параметрах регистрации.
Для новичков. Или как готовый собранный текст для памятки и экономии времени.
P.S. Показан вариант использования Синонима отчета/обработки для тех же целей универсального заполнения текста, связанного с отчетом/обработкой, но при выполнении кода в модуле формы &НаКлиенте.

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

1. Для внешнего отчета (*.erf):

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

Функция ПолучитьТаблицуКоманд()
	
	// Создадим пустую таблицу команд и колонки в ней
	Команды = Новый ТаблицаЗначений;

	// Как будет выглядеть описание печатной формы для пользователя
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 

	// Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

	// Тут задается, как должна вызваться команда обработки
	// Возможные варианты:
	// - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
	// - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
	// - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
	Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

	// Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

	// Для печатной формы должен содержать строку ПечатьMXL 
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
	Возврат Команды;
   
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ОткрытиеФормы", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
	
	// Добавляем команду в таблицу команд по переданному описанию.
	// Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры 

2. Для внешней обработки (*.epf):

/////////////////////////////////////////////////////////////////////////
// РЕГИСТРАЦИЯ ВНЕШНЕЙ ОБРАБОТКИ

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

	// Добавим команду в таблицу
	ДобавитьКоманду(ТаблицаКоманд, Синоним, "1" , "ОткрытиеФормы", Истина, );
	    
   	// Сохраним таблицу команд в параметры регистрации обработки
	РегистрационныеДанные.Вставить("Команды", ТаблицаКоманд);

	Возврат РегистрационныеДанные;

КонецФункции

Функция ПолучитьТаблицуКоманд()
	
	// Создадим пустую таблицу команд и колонки в ней
	Команды = Новый ТаблицаЗначений;

	// Как будет выглядеть описание печатной формы для пользователя
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 

	// Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

	// Тут задается, как должна вызваться команда обработки
	// Возможные варианты:
	// - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
	// - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
	// - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
	Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

	// Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

	// Для печатной формы должен содержать строку ПечатьMXL 
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
	Возврат Команды;
   
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ОткрытиеФормы", ПоказыватьОповещение = Ложь, Модификатор)
	
	// Добавляем команду в таблицу команд по переданному описанию.
	// Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры

P.S. Для использования синонима отчета/обработки при исполнении на клиенте для подобной универсальной подстановки в разные места - можно завести реквизит формы СинонимОтчета (тип Строка), заполнять его в ПриСозданииНаСервере() этой формы и потом обращаться к нему Форма.СинонимОтчета.

//***********************************************************************
&НаКлиенте
Процедура СохранитьВExcel(Команда)
	
	ИмяФайла = Форма.СинонимОтчета + " (" + 
	Строка(Формат(ТекущаяДата(),"ДФ=""дд-ММ-гггг""")) + ")" 
	+".xlsx";
	
	//.....

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьТекстЗаголовка(Форма)
	
	Отчет = Форма.Отчет;
	
	ЗаголовокОтчета = НСтр("ru = '" + Форма.СинонимОтчета + "'") + БухгалтерскиеОтчетыКлиентСервер.ПолучитьПредставлениеПериода(Отчет.НачалоПериода, Отчет.КонецПериода);

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

КонецПроцедуры

//***********************************************************************
&НаСервере
Функция ВернутьСинонимОтчета()
	
	ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	
	Возврат ОтчетОбъект.Метаданные().Синоним + " " + ОтчетОбъект.Метаданные().Комментарий;
	//Возврат ОтчетОбъект.Метаданные().Синоним;
	
КонецФункции
//***********************************************************************

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ЭтаФорма.СинонимОтчета = ВернутьСинонимОтчета();

INFOSTART TOOLKIT

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

Вступайте в нашу телеграмм-группу Инфостарт

внешние отчеты внешние обработки управляемые формы 1С 8.3 синоним отчета синоним обработки

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5406    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46313    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    6845    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    57357    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    8609    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    22762    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1782 19.03.15 14:32 Сейчас в теме
Полезно - именно как "готовый собранный текст для памятки и экономии времени"!
Ali_q; Ketzalkoatl; Varozh; user689379_di_ang; MonteCriZto; necrowarr; KazanKokos; AleksandrLeshkov; Lacoste4life; Yan_Malyakov; Antonov.AV; Мах; kraynev-navi; +13 Ответить
2. ivarga 3 07.06.17 10:06 Сейчас в теме
Для склеротиков типа меня очень выручает
ketr; wolder; Varozh; JasonT; KazanKokos; AleksandrLeshkov; unknown181538; Eillecho; DeFunes; user1034201; Мах; 2C_prog; Antonov.AV; +13 Ответить
3. bashhhh 26 16.05.19 16:01 Сейчас в теме
Не хватает информации про разрешения
4. bashhhh 26 16.05.19 16:22 Сейчас в теме
МассивРазрешений = Новый Массив;
МассивРазрешений.Добавить(РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("com.sun.star.ServiceManager","{82154420-0FBF-11d4-8313-005004526AB4}"));
МассивРазрешений.Добавить(РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("Excel.Application", "{00024500-0000-0000-C000-000000000046}"));
МассивРазрешений.Добавить(РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("ADODB.Connection", "{00000514-0000-0010-8000-00AA006D2EA4}"));
РегистрационныеДанные.Вставить("Разрешения", МассивРазрешений);
ilego; Strannik777; bugtester; +3 Ответить
5. Dipod 116 03.10.19 11:18 Сейчас в теме
Рекомендую эту памятку привести к стандартам БСП.

РегистрационныеДанные = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

и т.д.
IsKurtis; _Penek_; SagittariusA; user892609; romankoav; kossmatiy; serg__k; user1208443; Мах; +9 Ответить
10. unknown181538 163 21.06.21 03:03 Сейчас в теме
(5) да, кажется, как раз что-то такое мне завернули при аудите для облака.
6. user611975_na__svyazi 22.01.20 17:47 Сейчас в теме
7. mikki_1C 18.09.20 11:18 Сейчас в теме
копипасте - быстро и просто :)
8. bashhhh 26 30.12.20 11:13 Сейчас в теме
Не хочется для этого писать отдельный пост. Оставлю это тут.
Из БСП взято по-максимому

Функция СведенияОВнешнейОбработке() Экспорт
    
	МетаданныеОбработки = ЭтотОбъект.Метаданные();
	ИмяОтчета 	= МетаданныеОбработки.Имя; 
    Синоним 	= МетаданныеОбработки.Синоним; 
    Синоним 	= ?(ЗначениеЗаполнено(Синоним),Синоним, ИмяОтчета);         
	Комментарий = МетаданныеОбработки.Комментарий;
	
    РегистрационныеДанные = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки());
    РегистрационныеДанные.Вид 				= ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    РегистрационныеДанные.Наименование 		= Синоним;     
	РегистрационныеДанные.Версия 			= "1.0";
    РегистрационныеДанные.БезопасныйРежим 	= Истина;
    РегистрационныеДанные.Информация 		= ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка()+ " "+Синоним;
    
    // Добавим команду
	Команда = РегистрационныеДанные.Команды.Добавить();
	Команда.Идентификатор  = "ЗагрузкаНакладных";
	Команда.Представление  = Синоним + ?(ЗначениеЗаполнено(Комментарий)," " + Комментарий,"");
	Команда.Использование  = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	Команда.ПоказыватьОповещение  = Истина;
	
    // Добавим Разрешения
	МассивРазрешений = РегистрационныеДанные.Разрешения;
	МассивРазрешений.Добавить(РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("Excel.Application", "{00024500-0000-0000-C000-000000000046}"));
	
	Возврат РегистрационныеДанные;
                                       
КонецФункции
Показать
AAM94; annamol; Mattakushi; debuger; wolder; usalteam; _Penek_; e9504100606; Melefaro; madbone; Krotov_Valery; Огонек; svetanik; user1147832; johnyb2002; buy_sale; Ponommax; romankoav; Jesdva; +19 Ответить
9. ks_krasnodar 06.05.21 03:23 Сейчас в теме
Чтобы подключился внешний отчет еще необходимо добавить две процедуры в модуль отчета:

Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.ФормироватьСразу = Истина;
Настройки.События.ПриСозданииНаСервере = Истина;
КонецПроцедуры

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
ОбъектыНазначения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Форма.Параметры, "ОбъектыНазначения");
Если ОбъектыНазначения <> Неопределено Тогда
Форма.ФормаПараметры.УстановитьЗанчениеПараметра("Регистратор", ОбъектыНазначения);
КонецЕсли;
КонецПроцедуры
Melefaro; l4h; +2 Ответить
11. marshalbratsk 26.12.21 17:36 Сейчас в теме
Сложно сказать сколько эта статья мне уже времени сэкономила
12. ciddex 08.05.22 19:12 Сейчас в теме
Подскажите, почему внешние отчеты не добавляются в избранное? Кнопка звездочки есть, а при нажатии ссылка не формируется?
13. GlukAl 07.11.23 12:45 Сейчас в теме
(12) можно добавить этот отчет во внешние обработки

если в форме элемента внешних обработок нет звездочки
то из истории открытия поставить звезду на этот элемент
или нажав ctrl+F11 и кнопка "Добавить в избранное"

или скопировать ссылку на элемент внешних обработок, переслать кому надо текст ссылки
он жмет на клаве shift+F11 вставляет эту ссылку и добавляет в избранное

в конфигураторе в форме элемента внешних обработок, в событии ПриОткрытии надо анализировать ВладелецФормы

если ВладелецФормы = Неопределено то Отказ=Истина и запустить отчет из хранилища
то есть это программное открытие формы без указания владельца формы (например из избранного или истории)

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

	Возврат ПараметрыРегистрации;
	
КонецФункции // СведенияОВнешнейОбработке()
Показать
dynamicsystems; SotNick; e9504100606; +3 Ответить
Для отправки сообщения требуется регистрация/авторизация