Как програмно вызвать выполнение стандартного действия формы "Сформировать"?

. Александр (shurik_stud) 11.12.08 14:08
Если разместить на форме (например отчета) командную панель, в качестве источника действий указать "Форма", то при добавлении Элементов панели с типом Действие в поле "Действие" можно выбрать или собственную процедуру - обработчик нажатия или одно из стандартных действий формы (например - "Сформировать").
Вопрос: как программно (в собственной процедуре модуля формы) вызвать выполнение стандартного действия формы (например "Сформировать")? При этом самой кнопки с этим действием на командной панели быть не должно.
Подписаться Добавить вознаграждение

Ответы

. Василий Демидов (Душелов) 11.12.08 14:18
Я не понял вопрос, но попробую на него ответить :)

Код
//Обработчик нажатия кнопки "Выполнить"
Процедура КнопкаВыполнитьНажатие(Элемент)
        //что-то делает
КонецПроцедуры

//выполняем программно ;)
Процедура МояПроцедура()
        КнопкаВыполнитьНажатие(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.КнопкаВыполнить);
КонецПроцедуры
Показать полностью
. Александр (shurik_stud) 11.12.08 14:26
Не совсем то. Попытаюсь пояснить чего бы хотелось.

1. Есть Форма отчета
2. Есть командная панель у которой в качестве источника действий стоит "Форма."
В этом случае добавляя новые кнопки на этой панели, можно выбирать какие СТАНДАРТНЫЕ действия формы будет выполнять кнопка ("Справка", "Закрыть", "Сохранить значения...", "Восстановить значения...", "Сформировать" и т.д.).

Что требуется: не размещая на форме командной панели с источником действия "Форма" програмно вызвать выполнение СТАНДАРНОГО действия, напиример "Сформировать".
. Василий Демидов (Душелов) 11.12.08 15:29
Так ведь все эти действия можно вызвать.
ОткрытьСправкуФормы(), Закрыть(), СохранитьНастройкиПользователя() и др.
. Александр (shurik_stud) 11.12.08 16:01
Конкретно интересует действие "Сформировать".
. Василий Демидов (Душелов) 11.12.08 16:14
Т.е. просто хотите в отчете СКД при открытии автоматически его сформировать?

ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);
. Александр (shurik_stud) 11.12.08 16:26
Спасибо. Именно этот метод интересовал.
. Александр (shurik_stud) 11.12.08 17:05
Этот метод работает. Но результат не совсем одинаковый. После выполнения ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);
результат отчета формируется, но при этом не работает расшифровка.... :(
. Василий Демидов (Душелов) 11.12.08 17:10
Читайте ЖКК, метод "СкомпоноватьРезультат", описание второго параметра.
. Александр (shurik_stud) 11.12.08 17:32
. Василий Демидов (Душелов) 11.12.08 17:35
Желто-Красные Книги
kozlovmv; SLukin; +2 Ответить
. Александр (shurik_stud) 12.12.08 10:03
:)

Опять немного не то.
Вопрос не в том, как программно выполнить отчет и вывести его результат, а в том, как программно выполнить одно из стандартных действий, доступных для данного "Источника действий". У отчета, это перечисленные мной выше действия, а табличного поля - другие.
Так вот вопрос заключается в том, чтобы получить список этих стандартных действий и иметь возможность программно вызывать выполнение любого из этих действий, а не писать код, который сделает то же самое...
. Василий Демидов (Душелов) 12.12.08 10:08
(12) Не получится это сделать.
. Александр (shurik_stud) 12.12.08 10:34
Тогда другой вопрос:
а можно перехватить событие нажатия кнопку командной панели, если ей назначен один из стандартных обработчиков ?
. Андрей Скляров (coder1cv8) 12.12.08 10:42
. Сергей (seermak) 12.12.08 10:45
а что мешает сделать командную панель с нужными кнопками скрытой и использовать нажатие из кода?
. Максим (Fuego) 12.12.08 12:51
СкомпоноватьРезультат(<Результат>, <Информация расшифровки>)
Параметры:
<Результат> (обязательный)
Тип: ТабличныйДокумент. Табличный документ, в который будет выводиться результат.
<Информация расшифровки> (необязательный)
Переменная, в которую будет записана информация расшифровки.
Если не указано - расшифровка заполняться не будет.
. Василий Демидов (Душелов) 12.12.08 12:54
(17) это и было написано в 9 посте.
. Александр (shurik_stud) 12.12.08 14:51
(16) Как инициировать нажатие программно ?
. Максим (Fuego) 12.12.08 20:40
(19) нет такой возможности. (16) Какой смысл создавать ещё одну командную панель и прятать её.
Я так понимаю, Александр, Вы хотите извне открыть и сформировать отчет? Так и используйте метод «СкомпоноватьРезультат». Слава Богу, что хоть такая возможность предусмотрена разработчиками платформы. ЗЫ: А то ведь и заявленного в ЖКК часто нет в платформе. Ошибки, которые найдены ещё в начальных релизах 8.0, исправлены только в 8.2. И не факт, что от беты к релизу это снова не пропадёт :)
. Сергей (seermak) 13.12.08 10:17
//Обработчик нажатия кнопки "Выполнить"
Процедура КнопкаВыполнитьНажатие()
//что-то делает
КонецПроцедуры

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

при открытии формы будет выполняться процедура Выполнить
. Максим (Fuego) 13.12.08 11:58
(21) То же самое можно сделать и так:

Процедура ПриОткрытии() 
    СкомпоноватьРезультат(ЭлементыФормы.ПолеТабличногоДокумента, инфРасшифровки);
КонецПроцедуры


И именно "ПРИ ОТКРЫТИИ", а не "ПЕРЕД ОТКРЫТИЕМ". Событие перед открытием происходит, когда далеко не все элементы формы инициализированы.
23. Петр Лунегов (pvlunegov) 27.12.12 09:45
Я использую код для программного вывода компоновки.
Вообще то это отдельная тема, там много тонкостей.
Я изучил интернет-курс по программному формированию отчетов на компоновке данных.

Вот пример кода для программного формирования СКД

Процедура СформироватьОтчетОсновной()

ВнешнийНаборДанных = Новый Структура("РезультатЗапроса", РезультатЗапроса);

КудаДляВыводитьОтчет = ЭлементыФормы.Результат;
КудаДляВыводитьОтчет.Очистить();

КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиОсновная.НастройкиПоУмолчанию);
Настройки = КомпоновщикНастроек.Настройки;

ДанныеРасшифровкиОсновная = Новый ДанныеРасшифровкиКомпоновкиДанных;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиОсновная, Настройки, ДанныеРасшифровкиОсновная);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных ,ДанныеРасшифровкиОсновная);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(КудаДляВыводитьОтчет);

ПроцессорВывода.НачатьВывод();

ВыведенаШапка = ложь;

ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> неопределено цикл

Если не выведенашапка и элементрезультата.ЗначенияПараметров.Количество()>0 Тогда
ВыведенаШапка = истина;
КудаДляВыводитьОтчет.ФиксацияСверху = КудаДляВыводитьОтчет.ВысотаТаблицы;
КонецЕсли;

ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;

ПроцессорВывода.УстановитьДокумент(КудаДляВыводитьОтчет);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, истина);
КонецПроцедуры
24. Петр Лунегов (pvlunegov) 27.12.12 09:48
А вот пример кода для заполнения параметров запроса в схеме компоновки данных:
Такой код необходим, если использовать несколько схем компоновки данных в отчете.

Процедура ЗаполнитьПараметрыКомпоновки()
СхемаКомпоновкиОсновная = ПолучитьМакет("СхемаКомпоновкиОсновная");
КоллекцияПараметровДанных = СхемаКомпоновкиОсновная.НастройкиПоУмолчанию.ПараметрыДанных.Элементы;
КоллекцияПараметровДанных. Очистить();

УстановитьПараметрыДанных( КоллекцияПараметровДанных);


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

Процедура УстановитьПараметрыДанных(КоллекцияПараметровДанных)
НовыйПараметрДанных = КоллекцияПараметровДанных.Добавить();
НовыйПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных("ДатаНачалаПериода");
НовыйПараметрДанных.Значение = ДатаНачалаПериода;
НовыйПараметрДанных.Использование = истина;

НовыйПараметрДанных = КоллекцияПараметровДанных.Добавить();
НовыйПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных("ДатаОкончанияПериода");
НовыйПараметрДанных.Значение = ДатаОкончанияПериода;
НовыйПараметрДанных.Использование = истина;
КонецПроцедуры