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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Что требуется: не размещая на форме командной панели с источником действия "Форма" програмно вызвать выполнение СТАНДАРНОГО действия, напиример "Сформировать".
28. Душелов 4013 11.12.08 15:29 Сейчас в теме
Так ведь все эти действия можно вызвать.
ОткрытьСправкуФормы(), Закрыть(), СохранитьНастройкиПользователя() и др.
29. shurik_stud 11.12.08 16:01 Сейчас в теме
Конкретно интересует действие "Сформировать".
30. Душелов 4013 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. Душелов 4013 11.12.08 17:10 Сейчас в теме
Читайте ЖКК, метод "СкомпоноватьРезультат", описание второго параметра.
34. shurik_stud 11.12.08 17:32 Сейчас в теме
35. Душелов 4013 11.12.08 17:35 Сейчас в теме
Желто-Красные Книги
kozlovmv; SLukin; +2 Ответить
36. shurik_stud 12.12.08 10:03 Сейчас в теме
:)

Опять немного не то.
Вопрос не в том, как программно выполнить отчет и вывести его результат, а в том, как программно выполнить одно из стандартных действий, доступных для данного "Источника действий". У отчета, это перечисленные мной выше действия, а табличного поля - другие.
Так вот вопрос заключается в том, чтобы получить список этих стандартных действий и иметь возможность программно вызывать выполнение любого из этих действий, а не писать код, который сделает то же самое...
37. Душелов 4013 12.12.08 10:08 Сейчас в теме
(12) Не получится это сделать.
38. shurik_stud 12.12.08 10:34 Сейчас в теме
Тогда другой вопрос:
а можно перехватить событие нажатия кнопку командной панели, если ей назначен один из стандартных обработчиков ?
39. coder1cv8 3468 12.12.08 10:42 Сейчас в теме
40. seermak 665 12.12.08 10:45 Сейчас в теме
а что мешает сделать командную панель с нужными кнопками скрытой и использовать нажатие из кода?
41. Fuego 462 12.12.08 12:51 Сейчас в теме
СкомпоноватьРезультат(<Результат>, <Информация расшифровки>)
Параметры:
<Результат> (обязательный)
Тип: ТабличныйДокумент. Табличный документ, в который будет выводиться результат.
<Информация расшифровки> (необязательный)
Переменная, в которую будет записана информация расшифровки.
Если не указано - расшифровка заполняться не будет.
42. Душелов 4013 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)