Как програмно вызвать выполнение стандартного действия формы "Сформировать"?
Я использую код для программного вывода компоновки.
Вообще то это отдельная тема, там много тонкостей.
Я изучил интернет-курс по программному формированию отчетов на компоновке данных.
Вот пример кода для программного формирования СКД
Процедура СформироватьОтчетОсновной()
ВнешнийНаборДанных = Новый Структура("РезультатЗапроса", РезультатЗапроса);
КудаДляВыводитьОтчет = ЭлементыФормы.Результат;
КудаДляВыводитьОтчет.Очистить();
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиОсновная.НастройкиПоУмолчанию);
Настройки = КомпоновщикНастроек.Настройки;
ДанныеРасшифровкиОсновная = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиОсновная, Настройки, ДанныеРасшифровкиОсновная);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных ,ДанныеРасшифровкиОсновная);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(КудаДляВыводитьОтчет);
ПроцессорВывода.НачатьВывод();
ВыведенаШапка = ложь;
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> неопределено цикл
Если не выведенашапка и элементрезультата.ЗначенияПараметров.Количество()>0 Тогда
ВыведенаШапка = истина;
КудаДляВыводитьОтчет.ФиксацияСверху = КудаДляВыводитьОтчет.ВысотаТаблицы;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВывода.УстановитьДокумент(КудаДляВыводитьОтчет);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, истина);
КонецПроцедуры
Вообще то это отдельная тема, там много тонкостей.
Я изучил интернет-курс по программному формированию отчетов на компоновке данных.
Вот пример кода для программного формирования СКД
Процедура СформироватьОтчетОсновной()
ВнешнийНаборДанных = Новый Структура("РезультатЗапроса", РезультатЗапроса);
КудаДляВыводитьОтчет = ЭлементыФормы.Результат;
КудаДляВыводитьОтчет.Очистить();
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиОсновная.НастройкиПоУмолчанию);
Настройки = КомпоновщикНастроек.Настройки;
ДанныеРасшифровкиОсновная = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиОсновная, Настройки, ДанныеРасшифровкиОсновная);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных ,ДанныеРасшифровкиОсновная);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(КудаДляВыводитьОтчет);
ПроцессорВывода.НачатьВывод();
ВыведенаШапка = ложь;
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> неопределено цикл
Если не выведенашапка и элементрезультата.ЗначенияПараметров.Количество()>0 Тогда
ВыведенаШапка = истина;
КудаДляВыводитьОтчет.ФиксацияСверху = КудаДляВыводитьОтчет.ВысотаТаблицы;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВывода.УстановитьДокумент(КудаДляВыводитьОтчет);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, истина);
КонецПроцедуры
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
А вот пример кода для заполнения параметров запроса в схеме компоновки данных:
Такой код необходим, если использовать несколько схем компоновки данных в отчете.
Процедура ЗаполнитьПараметрыКомпоновки()
СхемаКомпоновкиОсновная = ПолучитьМакет("СхемаКомпоновкиОсновная");
КоллекцияПараметровДанных = СхемаКомпоновкиОсновная.НастройкиПоУмолчанию.ПараметрыДанных.Элементы;
КоллекцияПараметровДанных. Очистить();
УстановитьПараметрыДанных( КоллекцияПараметровДанных);
КонецПроцедуры
Процедура УстановитьПараметрыДанных(КоллекцияПараметровДанных)
НовыйПараметрДанных = КоллекцияПараметровДанных.Добавить();
НовыйПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных("ДатаНачалаПериода");
НовыйПараметрДанных.Значение = ДатаНачалаПериода;
НовыйПараметрДанных.Использование = истина;
НовыйПараметрДанных = КоллекцияПараметровДанных.Добавить();
НовыйПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных("ДатаОкончанияПериода");
НовыйПараметрДанных.Значение = ДатаОкончанияПериода;
НовыйПараметрДанных.Использование = истина;
КонецПроцедуры
Такой код необходим, если использовать несколько схем компоновки данных в отчете.
Процедура ЗаполнитьПараметрыКомпоновки()
СхемаКомпоновкиОсновная = ПолучитьМакет("СхемаКомпоновкиОсновная");
КоллекцияПараметровДанных = СхемаКомпоновкиОсновная.НастройкиПоУмолчанию.ПараметрыДанных.Элементы;
КоллекцияПараметровДанных. Очистить();
УстановитьПараметрыДанных( КоллекцияПараметровДанных);
КонецПроцедуры
Процедура УстановитьПараметрыДанных(КоллекцияПараметровДанных)
НовыйПараметрДанных = КоллекцияПараметровДанных.Добавить();
НовыйПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных("ДатаНачалаПериода");
НовыйПараметрДанных.Значение = ДатаНачалаПериода;
НовыйПараметрДанных.Использование = истина;
НовыйПараметрДанных = КоллекцияПараметровДанных.Добавить();
НовыйПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных("ДатаОкончанияПериода");
НовыйПараметрДанных.Значение = ДатаОкончанияПериода;
НовыйПараметрДанных.Использование = истина;
КонецПроцедуры
Если разместить на форме (например отчета) командную панель, в качестве источника действий указать "Форма", то при добавлении Элементов панели с типом Действие в поле "Действие" можно выбрать или собственную процедуру - обработчик нажатия или одно из стандартных действий формы (например - "Сформировать").
Вопрос: как программно (в собственной процедуре модуля формы) вызвать выполнение стандартного действия формы (например "Сформировать")? При этом самой кнопки с этим действием на командной панели быть не должно.
Вопрос: как программно (в собственной процедуре модуля формы) вызвать выполнение стандартного действия формы (например "Сформировать")? При этом самой кнопки с этим действием на командной панели быть не должно.
Я не понял вопрос, но попробую на него ответить :)
Код |
---|
//Обработчик нажатия кнопки "Выполнить"
Процедура КнопкаВыполнитьНажатие(Элемент)
//что-то делает
КонецПроцедуры
//выполняем программно ;)
Процедура МояПроцедура()
КнопкаВыполнитьНажатие(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.КнопкаВыполнить);
КонецПроцедуры
Показать полностью |
Не совсем то. Попытаюсь пояснить чего бы хотелось.
1. Есть Форма отчета
2. Есть командная панель у которой в качестве источника действий стоит "Форма."
В этом случае добавляя новые кнопки на этой панели, можно выбирать какие СТАНДАРТНЫЕ действия формы будет выполнять кнопка ("Справка", "Закрыть", "Сохранить значения...", "Восстановить значения...", "Сформировать" и т.д.).
Что требуется: не размещая на форме командной панели с источником действия "Форма" програмно вызвать выполнение СТАНДАРНОГО действия, напиример "Сформировать".
1. Есть Форма отчета
2. Есть командная панель у которой в качестве источника действий стоит "Форма."
В этом случае добавляя новые кнопки на этой панели, можно выбирать какие СТАНДАРТНЫЕ действия формы будет выполнять кнопка ("Справка", "Закрыть", "Сохранить значения...", "Восстановить значения...", "Сформировать" и т.д.).
Что требуется: не размещая на форме командной панели с источником действия "Форма" програмно вызвать выполнение СТАНДАРНОГО действия, напиример "Сформировать".
Так ведь все эти действия можно вызвать.
ОткрытьСправкуФормы(), Закрыть(), СохранитьНастройкиПользователя() и др.
ОткрытьСправкуФормы(), Закрыть(), СохранитьНастройкиПользователя() и др.
Т.е. просто хотите в отчете СКД при открытии автоматически его сформировать?
ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);
ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);
Этот метод работает. Но результат не совсем одинаковый. После выполнения ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);
результат отчета формируется, но при этом не работает расшифровка.... :(
результат отчета формируется, но при этом не работает расшифровка.... :(
:)
Опять немного не то.
Вопрос не в том, как программно выполнить отчет и вывести его результат, а в том, как программно выполнить одно из стандартных действий, доступных для данного "Источника действий". У отчета, это перечисленные мной выше действия, а табличного поля - другие.
Так вот вопрос заключается в том, чтобы получить список этих стандартных действий и иметь возможность программно вызывать выполнение любого из этих действий, а не писать код, который сделает то же самое...
Опять немного не то.
Вопрос не в том, как программно выполнить отчет и вывести его результат, а в том, как программно выполнить одно из стандартных действий, доступных для данного "Источника действий". У отчета, это перечисленные мной выше действия, а табличного поля - другие.
Так вот вопрос заключается в том, чтобы получить список этих стандартных действий и иметь возможность программно вызывать выполнение любого из этих действий, а не писать код, который сделает то же самое...
Тогда другой вопрос:
а можно перехватить событие нажатия кнопку командной панели, если ей назначен один из стандартных обработчиков ?
а можно перехватить событие нажатия кнопку командной панели, если ей назначен один из стандартных обработчиков ?
СкомпоноватьРезультат(<Результат>, <Информация расшифровки>)
Параметры:
<Результат> (обязательный)
Тип: ТабличныйДокумент. Табличный документ, в который будет выводиться результат.
<Информация расшифровки> (необязательный)
Переменная, в которую будет записана информация расшифровки.
Если не указано - расшифровка заполняться не будет.
Параметры:
<Результат> (обязательный)
Тип: ТабличныйДокумент. Табличный документ, в который будет выводиться результат.
<Информация расшифровки> (необязательный)
Переменная, в которую будет записана информация расшифровки.
Если не указано - расшифровка заполняться не будет.
(19) нет такой возможности. (16) Какой смысл создавать ещё одну командную панель и прятать её.
Я так понимаю, Александр, Вы хотите извне открыть и сформировать отчет? Так и используйте метод «СкомпоноватьРезультат». Слава Богу, что хоть такая возможность предусмотрена разработчиками платформы. ЗЫ: А то ведь и заявленного в ЖКК часто нет в платформе. Ошибки, которые найдены ещё в начальных релизах 8.0, исправлены только в 8.2. И не факт, что от беты к релизу это снова не пропадёт :)
Я так понимаю, Александр, Вы хотите извне открыть и сформировать отчет? Так и используйте метод «СкомпоноватьРезультат». Слава Богу, что хоть такая возможность предусмотрена разработчиками платформы. ЗЫ: А то ведь и заявленного в ЖКК часто нет в платформе. Ошибки, которые найдены ещё в начальных релизах 8.0, исправлены только в 8.2. И не факт, что от беты к релизу это снова не пропадёт :)
//Обработчик нажатия кнопки "Выполнить"
Процедура КнопкаВыполнитьНажатие()
//что-то делает
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ДействиеПриОткрытииФормы = Новый Действие(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыВыполнить.Действие);
ЭтаФорма.УстановитьДействие("ПриОткрытии",ДействиеПриОткрытииФормы);
КонецПроцедуры
при открытии формы будет выполняться процедура Выполнить
Процедура КнопкаВыполнитьНажатие()
//что-то делает
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ДействиеПриОткрытииФормы = Новый Действие(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыВыполнить.Действие);
ЭтаФорма.УстановитьДействие("ПриОткрытии",ДействиеПриОткрытииФормы);
КонецПроцедуры
при открытии формы будет выполняться процедура Выполнить
(21) То же самое можно сделать и так:
И именно "ПРИ ОТКРЫТИИ", а не "ПЕРЕД ОТКРЫТИЕМ". Событие перед открытием происходит, когда далеко не все элементы формы инициализированы.
Процедура ПриОткрытии()
СкомпоноватьРезультат(ЭлементыФормы.ПолеТабличногоДокумента, инфРасшифровки);
КонецПроцедуры
И именно "ПРИ ОТКРЫТИИ", а не "ПЕРЕД ОТКРЫТИЕМ". Событие перед открытием происходит, когда далеко не все элементы формы инициализированы.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СкомпоноватьСразу();
КонецПроцедуры
&НаСервере
Процедура СкомпоноватьСразу()
ЭтотОбъект.СкомпоноватьРезультат();
КонецПроцедуры
Показать
Сохранение в TD с последующим восстановлением ПОМОГЛО!
(48)
1. необходимо вручную его сформировать. Потому как "ЭтотОбъект.СкомпоноватьРезультат()" это как будто на кнопку сформировать нажали;
2. Каким образом результат отсылается куда-то? Он ДОЛЖЕН СОХРАНИТЬСЯ куда-то перед этим, если это вложенный файл. Необходимо временный файл, в который по идее идёт сохранение, посмотреть, перед тем, как он удалится с файловой системы. Хотя временные файлы удаляются при закрытии программы, если их явно программно не удалять;
3. Если это отчёт "свой", то посмотреть что делают и куда сохраняют отчёт в 1С уже...
Я бы действовал так.
Удачи!
(48)
1. необходимо вручную его сформировать. Потому как "ЭтотОбъект.СкомпоноватьРезультат()" это как будто на кнопку сформировать нажали;
2. Каким образом результат отсылается куда-то? Он ДОЛЖЕН СОХРАНИТЬСЯ куда-то перед этим, если это вложенный файл. Необходимо временный файл, в который по идее идёт сохранение, посмотреть, перед тем, как он удалится с файловой системы. Хотя временные файлы удаляются при закрытии программы, если их явно программно не удалять;
3. Если это отчёт "свой", то посмотреть что делают и куда сохраняют отчёт в 1С уже...
Я бы действовал так.
Удачи!
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот