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)

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

21.05.2024    12260    dimanich70    81    

126

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

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

1 стартмани

18.03.2024    3420    3    John_d    11    

57

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

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

12.02.2024    8696    atdonya    22    

55

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

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

30.11.2023    4794    ke.92@mail.ru    16    

65

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

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

28.08.2023    11682    YA_418728146    7    

157

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2873    43    progmaster    8    

4

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

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    17295    152    sapervodichka    112    

134
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1733 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 114 03.10.19 11:18 Сейчас в теме
Рекомендую эту памятку привести к стандартам БСП.

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

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

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