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 = '" + Форма.СинонимОтчета + "'") + БухгалтерскиеОтчетыКлиентСервер.ПолучитьПредставлениеПериода(Отчет.НачалоПериода, Отчет.КонецПериода);

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

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

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

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

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

См. также

Быстрое создание наполненных коллекций

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Разберем самые частые способы создания коллекции, значения которой известны заранее. И сравним скорость их выполнения.

28.10.2019    10250    SeiOkami    69    

69

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования

Универсальные функции Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

24.10.2019    25101    kraspila    33    

63

Обертка функций Excel на русском. Ускорение процесса разработки.

Загрузка и выгрузка в Excel Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

24.10.2019    9340    DmitryKotov    6    

57

Вывод QR-кода типовыми средствами.

Сканер штрих-кода Универсальные функции Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Абонемент ($m)

Вывод QR-кода типовыми средствами. На данный момент очень часто нужно вывести в печатную форму QR-код. Показываю как на примере типового кода из УТ11 это сделать. Можно использовать в любых конфигурациях с обычными формами.

1 стартмани

21.10.2019    73576    160    Емельянов Алексей    58    

55

Методика независимой системы "Подписки на события"

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

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

17.10.2019    21646    aximo    35    

75

Полезные процедуры и функции для программиста

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

07.10.2019    52044    HostHost    41    

287

Документ на документ. Автоматическое создание связанных документов

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример решения простой и распространенной задачи - автоматическое создание документа на основании другого документа.

16.09.2019    24222    Infostart    36    

78

"Хочу универсально!" [Часть 1]

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

02.09.2019    12338    SeiOkami    35    

81
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1715 19.03.15 14:32 Сейчас в теме
Полезно - именно как "готовый собранный текст для памятки и экономии времени"!
Ketzalkoatl; Varozh; user689379_di_ang; MonteCriZto; necrowarr; KazanKokos; AleksandrLeshkov; Lacoste4life; Yan_Malyakov; Antonov.AV; Мах; kraynev-navi; +12 Ответить
2. ivarga 3 07.06.17 10:06 Сейчас в теме
Для склеротиков типа меня очень выручает
wolder; Varozh; JasonT; KazanKokos; AleksandrLeshkov; unknown181538; Eillecho; DeFunes; user1034201; Мах; 2C_prog; Antonov.AV; +12 Ответить
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 111 03.10.19 11:18 Сейчас в теме
Рекомендую эту памятку привести к стандартам БСП.

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

и т.д.
_Penek_; SagittariusA; user892609; romankoav; kossmatiy; serg__k; user1208443; Мах; +8 Ответить
10. unknown181538 153 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}"));
	
	Возврат РегистрационныеДанные;
                                       
КонецФункции
Показать
debuger; wolder; usalteam; _Penek_; e9504100606; Melefaro; madbone; Krotov_Valery; Огонек; svetanik; user1147832; johnyb2002; buy_sale; Ponommax; romankoav; Jesdva; +16 Ответить
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";
	ПараметрыРегистрации.Наименование = Синоним;
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	ПараметрыРегистрации.Информация = Комментарий;
	
	Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = Синоним;
    Команда.Идентификатор = ИмяОбработки;
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    Команда.ПоказыватьОповещение = Истина;

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