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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

НовыйПараметрДанных = КоллекцияПараметровДанных.Добавить();
НовыйПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных("ДатаОкончанияПериода");
НовыйПараметрДанных.Значение = ДатаОкончанияПериода;
НовыйПараметрДанных.Использование = истина;
КонецПроцедуры
Aristo_; +1
25. shurik_stud 11.12.08 14:08 Сейчас в теме
Если разместить на форме (например отчета) командную панель, в качестве источника действий указать "Форма", то при добавлении Элементов панели с типом Действие в поле "Действие" можно выбрать или собственную процедуру - обработчик нажатия или одно из стандартных действий формы (например - "Сформировать").
Вопрос: как программно (в собственной процедуре модуля формы) вызвать выполнение стандартного действия формы (например "Сформировать")? При этом самой кнопки с этим действием на командной панели быть не должно.
+
26. Душелов 4017 11.12.08 14:18 Сейчас в теме
Я не понял вопрос, но попробую на него ответить :)

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

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

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

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

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

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

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

при открытии формы будет выполняться процедура Выполнить
rokselana; +1
46. Fuego 462 13.12.08 11:58 Сейчас в теме
(21) То же самое можно сделать и так:

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


И именно "ПРИ ОТКРЫТИИ", а не "ПЕРЕД ОТКРЫТИЕМ". Событие перед открытием происходит, когда далеко не все элементы формы инициализированы.
alex_makhnov; +1
47. ybatiaev 58 28.04.18 10:13 Сейчас в теме

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СкомпоноватьСразу();
КонецПроцедуры

&НаСервере
Процедура СкомпоноватьСразу()
	ЭтотОбъект.СкомпоноватьРезультат();
КонецПроцедуры
Показать
+
48. floodprog 23 20.09.18 15:43 Сейчас в теме
(47) Не срабатывает. Пытаюсь не свой отчет впихнуть в рассылку отчетов. Присылает только шапку. Так как при открытии не формируется. Подскажите как сделать
по проще.
+
49. ybatiaev 58 21.09.18 17:04 Сейчас в теме
Сохранение в TD с последующим восстановлением ПОМОГЛО!
(48)
1. необходимо вручную его сформировать. Потому как "ЭтотОбъект.СкомпоноватьРезультат()" это как будто на кнопку сформировать нажали;
2. Каким образом результат отсылается куда-то? Он ДОЛЖЕН СОХРАНИТЬСЯ куда-то перед этим, если это вложенный файл. Необходимо временный файл, в который по идее идёт сохранение, посмотреть, перед тем, как он удалится с файловой системы. Хотя временные файлы удаляются при закрытии программы, если их явно программно не удалять;
3. Если это отчёт "свой", то посмотреть что делают и куда сохраняют отчёт в 1С уже...

Я бы действовал так.
Удачи!
+
50. пользователь 15.11.18 16:42
Сообщение было скрыто модератором.
...
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот