Бюджет Блиц для Android - Возьмите расходы под контроль

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

Страницы: 1

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


Я не понял вопрос, но попробую на него ответить :)

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

//выполняем программно ;)
Процедура МояПроцедура()
        КнопкаВыполнитьНажатие(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.КнопкаВыполнить);
КонецПроцедуры


Не совсем то. Попытаюсь пояснить чего бы хотелось.

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

Что требуется: не размещая на форме командной панели с источником действия "Форма" програмно вызвать выполнение СТАНДАРНОГО действия, напиример "Сформировать".


Так ведь все эти действия можно вызвать.
ОткрытьСправкуФормы(), Закрыть(), СохранитьНастройкиПользователя() и др.


Конкретно интересует действие "Сформировать".


Т.е. просто хотите в отчете СКД при открытии автоматически его сформировать?

ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);


Спасибо. Именно этот метод интересовал.


Этот метод работает. Но результат не совсем одинаковый. После выполнения ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);
результат отчета формируется, но при этом не работает расшифровка.... :(


Читайте ЖКК, метод "СкомпоноватьРезультат", описание второго параметра.


А что такое ЖКК ?


Желто-Красные Книги

+ 2 [ kozlovmv; SLukin; ]

:)

Опять немного не то.
Вопрос не в том, как программно выполнить отчет и вывести его результат, а в том, как программно выполнить одно из стандартных действий, доступных для данного "Источника действий". У отчета, это перечисленные мной выше действия, а табличного поля - другие.
Так вот вопрос заключается в том, чтобы получить список этих стандартных действий и иметь возможность программно вызывать выполнение любого из этих действий, а не писать код, который сделает то же самое...


(12) Не получится это сделать.


Тогда другой вопрос:
а можно перехватить событие нажатия кнопку командной панели, если ей назначен один из стандартных обработчиков ?


(14) Тоже нет.


а что мешает сделать командную панель с нужными кнопками скрытой и использовать нажатие из кода?


СкомпоноватьРезультат(<Результат>, <Информация расшифровки>)
Параметры:
<Результат> (обязательный)
Тип: ТабличныйДокумент. Табличный документ, в который будет выводиться результат.
<Информация расшифровки> (необязательный)
Переменная, в которую будет записана информация расшифровки.
Если не указано - расшифровка заполняться не будет.


(17) это и было написано в 9 посте.


(16) Как инициировать нажатие программно ?


(19) нет такой возможности. (16) Какой смысл создавать ещё одну командную панель и прятать её.
Я так понимаю, Александр, Вы хотите извне открыть и сформировать отчет? Так и используйте метод «СкомпоноватьРезультат». Слава Богу, что хоть такая возможность предусмотрена разработчиками платформы. ЗЫ: А то ведь и заявленного в ЖКК часто нет в платформе. Ошибки, которые найдены ещё в начальных релизах 8.0, исправлены только в 8.2. И не факт, что от беты к релизу это снова не пропадёт :)


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

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

при открытии формы будет выполняться процедура Выполнить

Изменено: Сергей - 13.12.08 10:28


(21) То же самое можно сделать и так:

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


И именно "ПРИ ОТКРЫТИИ", а не "ПЕРЕД ОТКРЫТИЕМ". Событие перед открытием происходит, когда далеко не все элементы формы инициализированы.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ПроцессорВывода.УстановитьДокумент(КудаДляВыводитьОтчет);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, истина);
КонецПроцедуры


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

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

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


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

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

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

Страницы: 1
Форма ответов
Логин:
Пароль:
Текст сообщения*
Прикрепить файл
Центр управления обмена данными между базами 1С
Открыть