Собственные кнопки в отчетах на СКД, конфигурациях на БСП

02.04.23

Разработка - Инструментарий разработчика

Расширение, которое позволит добавлять свои собственные кнопки в отчеты СКД и обрабатывать результат отчета, своими собственными алгоритмами.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Собственные кнопки в отчетах на СКД, конфигурациях на БСП:
.cfe 9,08Kb
17
17 Скачать (1 SM) Купить за 1 850 руб.

Идея данной разработки в том, чтобы сформировав какой либо отчет пользователь смог сразу же выполнить ряд определенных функций. В данном конкретном примере была задача, чтобы можно было перепровести документы полученные в расшифровке отчета. В целом задача показать как добавить свою кнопку в зависимости от вида отчета и как с помощью нее обработать результат отчета. Разработка велась на УТ 11.4.14.176, но будет работать на любой конфигурации где используется БСП (может быть с небольшими отклонениями из-за разности версий БСП, но принцип одинаковый).

1. Добавляем расширение в базу

2. Заимствуем в него общие модули "ОтчетыПереопределяемый" и "ОтчетыКлиентПереопределяемый", и создаем свой модуль для написания своих процедур обработки (у меня называется АУ_Сервер)  

3. В модуле ОтчетыПереопределяемый идет инициализация формы отчета - тут считываем какой отчет открывается и добавляем свою кнопку на форме. Соответственно для разных отчетов можно создать разные команды.

&После("ПриСозданииНаСервере")
Процедура АУ_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт   
	ИмяОтчета="";
	Если Форма.Параметры.Свойство("ИмяОтчета",ИмяОтчета) тогда 
	Иначе  
		ИмяОтчета=Форма.КлючТекущегоВарианта;
	КонецЕсли;	
	Если ИмяОтчета="ВедомостьПоТоварамНаСкладах" тогда 
		ТвояКоманда = Форма.Команды.Добавить("ПерепровестиДокументы");  
		ТвояКоманда.Действие  = "Подключаемый_Команда";
		ТвояКоманда.заголовок = "Перепровести документы";
		Форма.ПостоянныеКоманды.Добавить(ТвояКоманда.Имя);
		
		ТвояКнопка= Форма.Элементы.Добавить(ТвояКоманда .Имя, Тип("КнопкаФормы"), Форма.Элементы.ГруппаПрограммныйИнтерфейс);
         //При добавлении элемента на форму, надо убедиться что на ней есть такая группа ГруппаПрограммныйИнтерфейс - в зависимости от версии БСП она может отсутствовать или называться иначе
		ТвояКнопка.ИмяКоманды = ТвояКоманда .Имя;
		ТвояКнопка.ТолькоВоВсехДействиях = Ложь;
		
	КонецЕсли;	
		
КонецПроцедуры

4. В модуле ОтчетыКлиентПереопределяемый перехватываем процедуру ОбработчикКоманды, и если все таки нажата наша кнопка вызываем процедуру из нашего модуля. 
 

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

5. Собственно в нашем модуле пишем обработчик нашей команды, в моем случае процедура ищет все документы в результате отчета и перепроводит их.

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

6. Готово

Результат работы на скрине, пример готового расширения прилагается.

Разработка велась на платформе 8.3.22, УТ 11.4.14 

СКД отчет кнопка

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    184693    1029    403    

968

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    24727    163    86    

161

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    20422    52    19    

86

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    13731    57    33    

77

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    30643    105    48    

148

Работа с интерфейсом Анализ учета Мониторинг Платформа 1С v8.3 8.3.14 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Платные (руб)

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

9600 руб.

27.03.2025    840    3    5    

8

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    19144    7    32    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. glek 119 03.04.23 07:36 Сейчас в теме
Имя отчета как ключ текущего варианта наверное лучше обработать: может возвращать, например
Отчет.ВыручкаИСебестоимостьПродаж/КлючВарианта.efda2283-7b13-4c15-a1b1-992d8de4db87
или
Отчет.УсловияПродаж2_5/КлючВарианта.ОбщиеПараметры
Светлый ум; +1 Ответить
2. KVIKS 449 03.04.23 11:54 Сейчас в теме
(1)Это лучше в отладке смотреть как форма или имя отчета называется, если отчет внешний там имя формы другое может быть.
3. ixijixi 2005 03.04.23 12:17 Сейчас в теме
Всё это и даже больше доступно без расширений в функционале БСП
#Область ПрограммныйИнтерфейс

// Для общей формы "Форма отчета" подсистемы "Варианты отчетов".
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
	
	
КонецПроцедуры


// В данной процедуре следует описать дополнительные зависимости объектов метаданных
//   конфигурации, которые будут использоваться для связи настроек отчетов.
//
// Параметры:
//   СвязиОбъектовМетаданных - ТаблицаЗначений - таблица связей.
//       * ПодчиненныйРеквизит - Строка - имя реквизита подчиненного объекта метаданных.
//       * ПодчиненныйТип      - Тип    - тип подчиненного объекта метаданных.
//       * ВедущийТип          - Тип    - тип ведущего объекта метаданных.
//
Процедура ДополнитьСвязиОбъектовМетаданных(СвязиОбъектовМетаданных) Экспорт
	
КонецПроцедуры

// Вызывается в обработчике одноименного события формы отчета и формы настройки отчета.
// См. "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике.
//
// Параметры:
//   Форма - УправляемаяФорма - форма отчета или настроек отчета.
//   НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек.
//
Процедура ПередЗагрузкойВариантаНаСервере(Форма, Настройки) Экспорт
	
КонецПроцедуры

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

// Вызывается до перезаполнения панели настроек формы отчета.
//
// Параметры:
//   Форма - УправляемаяФорма - форма отчета.
//   ПараметрыЗаполнения - Структура - параметры, которые будут загружены в отчет.
//
Процедура ПередЗаполнениемПанелиБыстрыхНастроек(ОтчетОбъект, ПараметрыЗаполнения) Экспорт
	
КонецПроцедуры

// Вызывается после перезаполнения панели настроек формы отчета.
//
// Параметры:
//   Форма - УправляемаяФорма - Форма отчета.
//   ПараметрыЗаполнения - Структура - параметры, которые будут загружены в отчет.
//
Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыОбновления) Экспорт
	
КонецПроцедуры

// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
//
// Параметры:
//   Форма - УправляемаяФорма - форма отчета.
//   НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек.
//
// См. синтакс-помощник "Расширение управляемой формы для отчета.ПриЗагрузкеВариантаНаСервере" в синтакс-помощнике.
//
Процедура ПриЗагрузкеВариантаНаСервере(Форма, Настройки) Экспорт
	
КонецПроцедуры

// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
//
// Параметры:
//   Форма - УправляемаяФорма - форма отчета.
//   НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных -
//       Пользовательские настройки для загрузки в компоновщик настроек.
//
// См. синтакс-помощник "Расширение управляемой формы для отчета.ПриЗагрузкеПользовательскихНастроекНаСервере"
//    в синтакс-помощнике.
//
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, ПользовательскиеНастройки) Экспорт
	
КонецПроцедуры

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

// Вызывается в форме отчета и в форме настройки отчета перед выводом настройки 
// для указания дополнительных параметров выбора.
//
// Параметры:
//  Форма - УправляемаяФорма, Неопределено - форма отчета.
//  СвойстваНастройки - Структура - описание настройки отчета, которая будет выведена в форме отчета.
//      * ПолеКД - ПолеКомпоновкиДанных - выводимая настройка.
//      * ОписаниеТипов - ОписаниеТипов - тип выводимой настройки.
//      * ЗначенияДляВыбора - СписокЗначений - указать объекты, которые будут предложены пользователю в списке выбора.
//                            Дополняет список объектов, уже выбранных пользователем ранее.
//                            При этом не следует присваивать в этот параметр новый список значений.
//      * ЗапросЗначенийВыбора - Запрос - указать запрос для выборки объектов, которыми необходимо дополнить 
//                               ЗначенияДляВыбора. Первой колонкой (с индексом 0) должен выбираться объект,
//                               который следует добавить в ЗначенияДляВыбора.Значение.
//                               Для отключения автозаполнения в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку.
//      * ОграничиватьВыборУказаннымиЗначениями - Булево - указать Истина, чтобы ограничить выбор пользователя
//                                                значениями, указанными в ЗначенияДляВыбора (его конечным состоянием).
//      * Тип - Строка - краткий идентификатор типа свойства настроек компоновщика настроек компоновки данных.
//              См. ОтчетыСервер.ТипНастройкиСтрокой.
//
// Пример:
//   1. Для всех настроек типа СправочникСсылка.Пользователи скрыть и не разрешать выбирать помеченных на удаление, 
//   недействительных и служебных пользователей.
//
//   Если СвойстваНастройки.ОписаниеТипов.СодержитТип(Тип("СправочникСсылка.Пользователи")) Тогда
//     СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина;
//     СвойстваНастройки.ЗначенияДляВыбора.Очистить();
//     СвойстваНастройки.ЗапросЗначенийВыбора.Текст =
//       "ВЫБРАТЬ Ссылка ИЗ Справочник.Пользователи
//       |ГДЕ НЕ ПометкаУдаления И НЕ Недействителен И НЕ Служебный";
//   КонецЕсли;
//
//   2. Для настройки "Размер" предусмотреть дополнительное значение для выбора.
//
//   Если СвойстваНастройки.ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных.Размер") Тогда
//     СвойстваНастройки.ЗначенияДляВыбора.Добавить(10000000, НСтр("ru = 'Больше 10 Мб'"));
//   КонецЕсли;
//
Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт
	
КонецПроцедуры

// Вызывается после определения свойств элементов формы, связанных с пользовательскими настройками.
// См. ОтчетыСервер.СвойстваЭлементовФормыНастроек()
// Позволяет переопределить свойства, для целей персонализации отчета.
//
// Параметры:
//  ТипФормы - ТипФормыОтчета - см. Синтакс-помощник.
//  СвойстваЭлементов - Структура - см. ОтчетыСервер.СвойстваЭлементовФормыНастроек().
//  ПользовательскиеНастройки - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных - элементы актуальных
//                              пользовательских настроек, влияющих на создание связанных элементов формы.
//
Процедура ПриОпределенииСвойствЭлементовФормыНастроек(ТипФормы, СвойстваЭлементов, ПользовательскиеНастройки) Экспорт
	
КонецПроцедуры

// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
// См. "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике и ОтчетыКлиентПереопределяемый.ОбработчикКоманды.
//
// Параметры:
//   Форма - УправляемаяФорма - форма отчета.
//   Отказ - Булево - признак отказа от создания формы.
//   СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события.
//
// Пример:
//	//Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды:
//	Команда = ФормаОтчета.Команды.Добавить("МояОсобеннаяКоманда");
//	Команда.Действие  = "Подключаемый_Команда";
//	Команда.Заголовок = НСтр("ru = 'Моя команда...'");
//	
//	Кнопка = ФормаОтчета.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), ФормаОтчета.Элементы.<ИмяПодменю>);
//	Кнопка.ИмяКоманды = Команда.Имя;
//	
//	ФормаОтчета.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя);
//
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
	
КонецПроцедуры

#КонецОбласти

Показать
Izumov; =Kollega=; Kawarimi; DmitryKSL; user1050439; Andreyyy; SagittariusA; ONLYTILT; starponyx; chernoff; JohnyDeath; creatermc; FuJluH; Dach; unichkin; ZOMI; KVIKS; Sodrugestvo; 0x00; siamagic; G.Shatrov; SP2000; +22 Ответить
4. 0x00 03.04.23 14:09 Сейчас в теме
(3)
в функционале БСП
Этот код где надо разместить?
5. ixijixi 2005 03.04.23 14:17 Сейчас в теме
(4) В модуле объекта внешнего отчета, к нему Подсистема "Варианты отчетов" обращается.
12. mikl79 120 05.04.23 06:52 Сейчас в теме
(3), не подскажите - где можно примеры посмотреть?
14. ixijixi 2005 10.04.23 12:04 Сейчас в теме
6. KVIKS 449 03.04.23 14:21 Сейчас в теме
(3) Говорила мне мама: "Учи БСП" )))
SagittariusA; starponyx; neyasytyf; Efimoff; +4 1 Ответить
7. unichkin 1605 03.04.23 19:11 Сейчас в теме
(3) Хочется дополнить - это будет работать только для встроенных. Но можно сделать небольшой бесшовный допил в ОтчетыКлиентПереопределяемый.ОбработчикКоманды:

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


Дальше в любом отчете - внешнем или встроенном в модуле объекта:


// Настройки общей формы отчета подсистемы "Варианты отчетов".
//
// Параметры:
//   Форма - Форма, Неопределено - Форма отчета или форма настроек отчета.
//       Неопределено когда вызов без контекста.
//   КлючВарианта - Строка, Неопределено - Имя предопределенного
//       или уникальный идентификатор пользовательского варианта отчета.
//       Неопределено когда вызов без контекста.
//   Настройки - Структура - см. возвращаемое значение
//       ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию().
//
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

	Настройки = ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию();
	Настройки.События.ПриСозданииНаСервере = Истина;

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

// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
//
// Параметры:
//   Форма - ФормаКлиентскогоПриложения - форма отчета.
//   Отказ - Булево - признак отказа от создания формы.
//      См. описание одноименного параметра "ФормаКлиентскогоПриложения.ПриСозданииНаСервере" в синтакс-помощнике.
//   СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события.
//      См. описание одноименного параметра "ФормаКлиентскогоПриложения.ПриСозданииНаСервере" в синтакс-помощнике.
//
// См. также:
//   Процедура для вывода добавленных команд в форму: ОтчетыСервер.ВывестиКоманду().
//   Глобальный обработчик этого события: ОтчетыПереопределяемый.ПриСозданииНаСервере().
//
// Пример добавления команды:
//	Команда = Форма.Команды.Добавить("<ИмяКоманды>");
//	Команда.Действие  = "Подключаемый_Команда";
//	Команда.Заголовок = НСтр("ru = '<Представление команды...>'");
//	ОтчетыСервер.ВывестиКоманду(Форма, Команда, "<ВидГруппы>");
// Обработчик команды пишется в см. ОтчетыКлиентПереопределяемый.ОбработчикКоманды
//
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт

	Форма.ФормаПараметры.Вставить("ИмяФормыОбработчикаКоманд", "ОбработчикКоманд");

	Команда = Форма.Команды.Добавить("ВыгрузитьВXLSX");
	Команда.Действие  = "Подключаемый_Команда";
	Команда.Заголовок = "Выгрузить в XLSX...";
	Команда.Картинка = БиблиотекаКартинок.ФорматExcel2007;
	Команда.Отображение = ОтображениеКнопки.КартинкаИТекст;

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

Показать


И в отчет добавляем произвольную форму, называем ее "ОбработчикКоманд". В ней экспортный метод "ВыполнитьКоманду":


#Область СлужебныйПрограммныйИнтерфейс

&НаКлиенте
Процедура ВыполнитьКоманду(ФормаОтчета, Команда, Результат) Экспорт
        
// здесь команда одна, поэтому нет условия. Иначе - проверить если Команда.Имя = "ВыгрузитьВXLSX"...

	Результат = Истина;

	ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	ВыборФайла.МножественныйВыбор = Ложь;
	ВыборФайла.Заголовок = "Укажите файл выгрузки";
	ВыборФайла.Фильтр = "xlsx|*.xlsx";

	Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайлаXLSX", ЭтотОбъект, Неопределено);
	ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, ВыборФайла);

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

#КонецОбласти

Показать
DmitryKSL; twiny; Созинов; busy1; TimkoNzt; starponyx; JohnyDeath; СергейК; rozer; Dach; +10 Ответить
8. ixijixi 2005 03.04.23 22:10 Сейчас в теме
(7)
будет работать только для встроенных
Прекрасной работает и для внешних безо всяких допилов
starponyx; +1 Ответить
9. unichkin 1605 04.04.23 12:44 Сейчас в теме
(8)
Прекрасной работает и для внешних безо всяких допилов


Для внешних - где пишется обработчик команды, можно пример? Я не победил, возможно упустил что-то.
11. unichkin 1605 04.04.23 14:43 Сейчас в теме
(10) Так обработчик команды на клиенте должен быть. При чем тут модуль объекта? Надо к примеру пересохранить данные отчета в какой-нибудь иной формат, в dbf к примеру. Надо сначала на клиенте выбрать папку, или файл куда оно будет записано.

На всякий, уточню вопрос - где во внешнем отчете разместить клиентский обработчик команды, при программном добавлении кнопки?
13. ixijixi 2005 06.04.23 22:02 Сейчас в теме
(11) Сорян за долгий ответ, почему-то не всегда уведомления приходят в колокольчик =(

Да, тут мой косяк, невнимательно прочел. Клиентский обработчик из модуля отчета конечно не вызвать.
Как вариант в отчет скопировать общую форму и там шаманить с клиентскими методами, но это не то уже конечно, Ваш метод интереснее.
15. ОператорПК 24.03.25 19:16 Сейчас в теме
а В БП 3.0 это должно работать?
Оставьте свое сообщение