1с открыть форму отчета с параметрами

1С СКД. Программный запуск отчета с открытием и настройкой.

Одна из задач автоматизации — ускорение работы пользователя, что во многом достигается путем сокращения повторяющихся рутинных действий. У многих пользователей есть постоянные отчеты, для открытия которых они находят команду в меню, вводят отборы и параметры в открывшейся форме, нажимают «сформировать». В таких случаях разработчик 1С может создать команды программного запуска отчета с открытием и настройкой, что позволит сразу получить готовый отчет, а механизм системы компоновки данных, называемый в сокращении СКД, представляет ему для этого обширный инструментарий. В этой статье мы познакомимся с несколькими методами программного запуска отчета с открытием и различной настройкой, из которых каждый сможет выбрать наиболее подходящий.

Открытие формы отчета с помощью ПолучитьФорму и расширения формы отчета.

Сначала получаем форму.

Если отчет хранится в базе тогда выполняем на клиенте код:

Если нужен не «вариант по умолчанию»

Далее получаем настройки:

Через серверный вызов получаем настройки и если нужно заполняем параметры Компоновщика в отдельной процедуре.

Загружаем измененные настройки в компоновщик

Открытие формы отчета с помощью ОткрытьФорму и расширения формы отчета.

Код выполняется на клиенте, сначала мы формируем структуру с необходимыми параметрами формы, а потом вызываем процедуру открытия. Часто используемые параметры в данном случае это:

Программный вывод СКД в табличный документ и таблицу значений.

Сначала получаем схему компоновки данных. Схема может быть получена из разных источников: общий макет, макет прикладного объекта, такого как справочник или отчет, макет из внешней обработки.

Код выполняется на сервере.

Получение локального макета

Получение макета произвольного отчета

Получение макета во внешней обработке

Получение макета из внешней обработки или отчета

Далее мы получаем настройки. Настройки СКД могут быть взяты из разных источников. Мы можем их получить из самой СКД:

Мы можем создать новый компоновщик настроек на основе схемы и получить настройки из него.

Мы можем получить настройки с отдельного компоновщика настроек, добавленного на произвольную форму.

И когда будем формировать

Объявляем создаем необходимые объекты:

Создаем макет компоновки с помощью компоновщика макета:

Если результат выполнения СКД нужно вывести в таблицу значений то соответствующий тип генератора нужно указать в параметрах:

Инициализируем процессор компоновки данных

Создаем процессор вывода:

Для вывода в таблицу значений используется другой процессор вывода:

Запускаем процесс вывода:

Теперь мы можем проводить нужные операции с полученными данными.

Если вывод в таблицу значений завершился ошибкой “Не поддерживается вывод таблиц и диаграмм в универсальную коллекцию значений” значит настройки СКД не подходят для такой выгрузки, и нужно их изменить, об этом ниже.

Возможности настройки Схемы Компоновки Данных и Компоновщика Настроек СКД при программном формировании.

При программном формировании СКД как в пункте 2 у нас есть огромное количество возможностей по управлению отчетом. Опишем самые часто используемые из них.

Или если с добавлением нового параметра

Также при получении настроек можно выбрать не «настройки по умолчанию», а один из вариантов настроек.

Переменная Настройки содержит в себе всю палитру настроек которая доступна в редакторе СКД в разделе “Настройки”. Наиболее часто из них программно редактируются отборы, параметры и структура, в случае когда отчет с табличной структурой надо вывести в таблицу значений. Рассмотрим их подробнее.

Параметры

Все параметры создаются при создании исходного отчета, исключение если параметр был добавлен при редактировании запроса. Значение существующего параметра устанавливается следующим образом:

Добавление параметра делается следующим образом

Отбор

У отборов нет специальных функций по установке значений. Поэтому нужно перебирать коллекцию циклом.

Этот код установит значение для отбора, а если такого отбора нет в настройках, то добавит. В случае если точно известно, есть или нет такой отбор — то код можно упростить.

Структура

Для адаптации отчета к выводу в таблицу значений нужно очистить структуру группировок отчета и создать поле группировки “Детальные записи”.

Резюме

Система компоновки данных была создана для ускорения разработки отчетов и упрощения работы пользователей. Программные изменения помогают усилить этот эффект. Программист может создать выгрузки и по сути свои отчеты на основании типовых отчетов. К примеру, выгрузка заработной платы в управленческую базу. Структура базы может сильно изменена, но поля в отчете “Расчетная ведомость Т-51” будут называться так же, и сам отчет вряд ли переименуется. Да и если что-то переименуется — выгрузку исправить будет очень просто.

Программист может упростить работу пользователя по вводу параметров и отборов если есть некоторая закономерность в них, но они всё таки не фиксированы. К примеру, сравнительный отчет по продажам за этот месяц этого года и аналогичные месяца трех предыдущих годов.

Приведенные примеры кода были протестированы на платформе 1С:Предприятие 8.3 (8.3.13.1690).

Источник

Расширение управляемой формы для отчета. Несколько действий с параметром «Отбор».

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

Если мы откроем синтакс-помощник и введём на закладке «Индекс» слово «УправляемаяФорма», то увидим в разделе её свойств свойство «Параметры». Если перейти по гиперссылке к описанию свойства получим следующий текст:

Тип: ДанныеФормыСтруктура.
Содержит коллекцию параметров формы.

Тонкий клиент, веб-клиент, сервер, толстый клиент.

Конструктором движений сформируем движения по регистру «ОстаткиНоменклатуры» для документа «ПриходнаяНакладная», создадим обычный отчет с использованием данного регистра накопления, назовём его «ОстаткиНоменклатуры». В пользовательском режиме отчеты по умолчанию помещаются в панель «Сервис», поэтому от регистра накопления мы его отличим всегда. В конструкторе запроса будем использовать виртуальную таблицу «ОстаткиНоменклатуры.Остатки» и выберем все 2 поля данного регистра: //infostart.ru/upload/iblock/9f8/2.JPG. На закладке условия наложем фильтр по ссылке на текущий документ.

Не забудем в командном интерфейсе рабочего стола конфигурации указать видимость для регистра «Остатки номенклатуры».

В пользовательском режиме из номенклатуры мы будем использовать «Холодильники», введём 2 документа «приходная накладная»//infostart.ru/upload/iblock/c63/3.JPG

Теперь создаём форму для документа «приходная накладная» и в контейнеры «Командный интерфес» в разделе «Перейти» укажем галочку «видимость» у регистра «остатки номенклатуры».

Далее создадим команду и назовём её «ОткрытьОтчет» //infostart.ru/upload/iblock/5d9/1.JPG и установим действие для данной команды.

После этого сгенерируем событие «УстановитьДействие» команды и получим в модуле формы процедуру:

В клиентской процедуре мы попробуем открыть данный отчет без параметра №2:

Теперь давайте поработаем с параметром «Параметры».

&НаКлиенте
Процедура ОткрытьОтчет(Команда)
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);
КонецПроцедуры

Ну давайте попробуем сформировать отчет по активному товару. Код процедуры примет вид:

&НаКлиенте
Процедура ОткрытьОтчет(Команда)
ТекДанные= Элементы.СписокНоменклатуры.ТекущиеДанные; //Получаем текущую позицию
Отбор = Новый Структура(); //Создаём отбор
Отбор.Вставить(«Номенклатура», ТекДанные.Номенклатура); //По полю «Номенклатура» в отчете, а в значение отбора передаём текущую номенклатуру
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ПараметрыФормы.Вставить(«Отбор», Отбор); //Вставляем наш параметр
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);
КонецПроцедуры

ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«Отбор», Отбор);
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);

Теперь давайте попробуем сформировать отчет по всем товарам в документе, то есть отбор должен накладываться на все товары.

Можно конечно обходить элементы формы, но, я считаю, это не очень оптимально, мы создадим функцию и обратимся запросом к базе данных, выгрузим результат запроса в Таблицу значений и загрузим колонку «Номенклатура» в массив.

В итоге получился код:

Отбор = Новый Структура();
Отбор.Вставить(«Номенклатура», СписокНоменклатуры);
Отбор.Вставить(«Период», Объект.Дата);

ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«Отбор», Отбор);
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура
|ИЗ
| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка»;

Передадим полученный список в структуру «ПараметрыФормы». И если мы обратимся к синтакс-помощнику (расширение отчета), то увидим Параметр Формы «Отбор» фразу внизу: «..Если значение является массивом или списком значений с не одним элементом, то отбор будет применяться с видом сравнения ВСписке».

В итоге мы немного поработали с параметром формы отчета «Отбор». Увидели несколько приемов по его использованию. На самом деле аналогичные отборы можно накладывать не только на форму отчета и пользователь не будет видеть данную настройку отбора, иногда это является плюсом.

Источник

Программное открытие отчета

=== Для толстого клиента ===

1. В любой встроенный в конфигурацию Отчет, у которого не назначена основная схема компоновки данных (можно обойтись без назначения макета основной схемой, но тогда чуть больше кода писать) добавляем конструкторами а) Макет типа СхемаКомпоновкиДанных и б) форму Отчета

Форму не назначаем отчету. Форма нужна только для работы события расшифровки элемента формы Результат. В примере расшифровка документа ПоступлениеТоваровУслуг

Это все правки в Отчете, т.е. в будущем его будет очень легко обновлять, если это типовая конфигурация.

2. В том месте, где нужно вызвать Отчет программно, пишем вызов отчета.

За счет того, что макет СКД назначен как основная схема СКД сразу после создания отчета можно вызывать КомпоновщикНастроек.ПолучитьНастройки(), наложить нужные отборы.

Чтобы работала расшифровка передаем ДанныеРасшифровкиКомпоновкиДанных в СкомпоноватьРезультат(). При этом создавать/править для простых случаев процедуру ПриКомпоновкеРезультата() в модуле объекта Отчета не требуется.

Пример будет работать в любой конфигурации на любой версии платформы 8.3.* под толстым клиентом.

=== Для тонкого клиента ===

Для полноты описания: в случае с УФ под тонкого клиента действия намного проще.

Создаем как раньше конструкторами а) макет СКД и назначаем его как основную схему компоновки данных, б) управляемую форму отчета. При создании Формы отчета достаточно только поставить галочку использовать СКД.

b06308b3f41ca1261e037ec17095dd5f

С формой больше в принципе можно ничего не делать. В месте вызова отчета пишется следующий код, где Отбор накладывается по желанию на нужные поля.

Расшифровка будет работать для выбранных полей ссылочного типа.

Источник

Как программно открыть внешний отчет из «Дополнительных отчетов и обработок» и передать параметры (при помощи БСП)

Дано: конфигурация на платформе 1С 8.3. В «Дополнительные отчеты и обработки» загружен отчет или обработка.

Задача: открыть данный отчет/обработку программно в коде, например, по кнопке.

В моем случае нужно было на одну из форм документа в конфигурации добавить кнопку, которая бы открывала внешний отчет (зарегистрированный через дополнительные отчеты и обработки), с фильтром по данному документу. Чтобы не изменять саму конфигурацию, было сделано расширение к данному документу (расширения здесь не будут рассматриваться, данное описание только в качестве примера), которое добавляло кнопку на форму документа.

Далее рассмотрим пример кода, который будет срабатывать по нажатию кнопки и открывать внешний отчет.

В сети интернет много примеров, как открыть внешний отчет или обработку. Большинство из них содержит код загрузки из файла, если это внешний файл отчета.

Итак, в БСП есть модуль работы со справочником «Дополнительные отчеты и обработки» (ДополнительныеОтчетыИОбработки), в частности есть процедура открытия отчета и функция подключения внешнего отчета:

Вторая вызывается из первой, но ее также можно вызвать и отдельно (что и будет сделано ниже).

Один из вариантов использовать первую процедуру, но он мне не понравился из-за необходимости излишних действий, чтобы заполнить переменную ВыполняемаяКоманда, а также тем, что передать параметры в отчет можно только массивом (ОбъектыНазначения).

Поэтому решила использовать функцию под номером 2, что подключает нужный отчет/обработку, который затем можно открыть по имени, возвращаемому данной функцией.

Итак, сам пример (полный код):

Пример формы с кнопками, вызывающими эти процедуры:

4b41344d712bfaf79d0a74833de955d6

Скачать пример данной формы можно в файлах к статье.

Если вызывается отчет на СКД, то нужно создать для него типовую форму. Подробнее см. Как добавить типовую форму для СКД

Примечание: создавать форму, как оказалось, не обязательно. См. вариант вызова СКД без создания формы

Чтобы сработал код передачи параметров в СКД (ОткрытьВнешнийОтчетСКДсПараметром), нужно в модуле объекта СКД добавить код, принимающий эти параметры:

Скачать пример данного СКД отчета можно в файлах к статье.

Также пробовала передавать параметры в СКД вот так:

Однако возникала ошибка: Невозможно применить фиксированные настройки. Пересекаются элементы отбора.

64c7828a2e0175459c59ac6578d4021b

Поэтому выше описала, как передавала параметры отбора в отчет СКД при котором такой ошибки не было.

Обработки тестировались на демо-базе БСП версии 2.4.5.

См. также Как в СКД по щелчку на какой-либо ячейке в отчете получить значение другой ячейки (там применяется метод, описанный в статье для вызова внешней обработки в качестве расшифровки ячейки СКД)

Источник

Открытие форм

Область применения: управляемое приложение, мобильное приложение.

Рекомендация обусловлена соображениями

2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.

Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).

3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия.
Например, вместо

ФормаПутеводитель = Форма.ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме»);
ФормаПутеводитель.Элементы.ГруппаШаг.ТекущаяСтраница = ФормаПутеводитель.Элементы.ГруппаШаг.Страницы.Приветствие;

следует по той же причине использовать параметры формы:

ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»));

4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы

ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»);
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …

следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:

Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект);
ОткрытьФорму(«ОбщаяФорма.ФормаВопроса». Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.

&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт

Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;

Если БольшеНеПоказыватьНапоминание Тогда
// …

5. Другие ограничения:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;

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

6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с открыть форму описаниеоповещения
  • 1с открыть форму объекта по ссылке