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

02.04.23

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

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

Скачать файлы

Наименование Файл Версия Размер
Собственные кнопки в отчетах на СКД, конфигурациях на БСП:
.cfe 9,08Kb
15
.cfe 9,08Kb 15 Скачать

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

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

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

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

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

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

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

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

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

6. Готово

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

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

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

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122170    670    389    

714

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7294    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3539    11    1    

34

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177752    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99347    239    97    

296

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61797    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

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

5000 руб.

14.01.2016    54403    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16698    21    4    

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

Показать


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


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

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

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

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

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

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

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

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


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

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

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