В данной статье будет рассмотрен процесс открытия(и формирования) внешнего отчета подключенного к базе. Пример будет рассмотрен для конфигурации 1С:Управление торговлей 11.1.

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

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

  • Создадим реквизит формы МойОтчет типа СправочникСсылка.ДополнительныеОтчетыИОбработки.
  • Создадим реквизит формы ВидОтчет типа ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок

Так как процедура открытия отчета будет происходить НаКлиенте, а заполнить описанные выше реквизиты можно только на сервере(если не делать дополнительный ввод данных на форме), то сделаем это в процедуре формы ПриСозданииНаСервере.

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

Далее создадим процедуру в которой будем открывать наш отчет, в параметрах передадим даты начала и окончания, которые необходимы для заполнения параметра Период, а также Организацию и Номенклатуру для отбора:

&НаКлиенте
Процедура ЗапускМоегоОтчета(ДатаНач, ДатаКон, Организация, Номенклатура)
КонецПроцедуры

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

&НаСервере
Функция ПолучитьПараметрыКомандыВнешнегоОтчета(Ссылка)
    Запрос = новый Запрос;
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ТаблицаКоманды.Ссылка,
    |   ТаблицаКоманды.Идентификатор,
    |   ТаблицаКоманды.ВариантЗапуска,
    |   ТаблицаКоманды.Представление КАК Представление,
    |   ТаблицаКоманды.ПоказыватьОповещение,
    |   ТаблицаКоманды.Модификатор
    |ИЗ
    |   Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды
    |ГДЕ
    |   ТаблицаКоманды.Скрыть = ЛОЖЬ
    |   И ТаблицаКоманды.Ссылка = &Ссылка
    |
    |УПОРЯДОЧИТЬ ПО
    |   Представление";

    Результат = Запрос.Выполнить().Выбрать();

    Если Результат.Количество() = 0 Тогда
        возврат Неопределено;
    Иначе
        Результат.Следующий();
        ВыполняемаяКоманда = Новый Структура(
        "Ссылка, Представление,
        |Идентификатор, ВариантЗапуска, ПоказыватьОповещение,
        |Модификатор, ОбъектыНазначения, ЭтоОтчет, Вид");

        ЗаполнитьЗначенияСвойств(ВыполняемаяКоманда,Результат);

        Возврат ВыполняемаяКоманда;
    КонецЕсли;
Конецфункции

В процедуре ЗапускМоегоОтчета заполним переменную с выполняемой командой при помощи описанной процедуры:

ВыполняемаяКоманда = ПолучитьПараметрыКомандыВнешнегоОтчета(МойОтчет);

Теперь заполним недостающие поля команды:

ВыполняемаяКоманда.ЭтоОтчет = Истина;
ВыполняемаяКоманда.Вид      = ВидОтчет;

Создадим структуру с параметрами запуска нашего отчета:

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

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

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

Для этого используем типовую процедуру УТ 11.1 ПодключитьВнешнююОбработку.

ИмяОбработки_ = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.Ссылка);

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

Форма = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки_ +".Форма");
КомпоновщикНастроекКомпоновкиДанных = Форма.Отчет.КомпоновщикНастроек;
ПользовательскиеНастройки = КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки;

Заполним параметры схемы компоновки(в нашем случае имеется один параметр Период) для этого нам понадобится функция поиска параметра в пользовательских настройках отчета, добавим ее в модуль обработки:

Функция ПолучитьПараметрПользовательскойНастройки(ПользовательскиеНастройки, ИмяНастройки)

    ПолеКомпановкиПараметр = Новый ПараметрКомпоновкиДанных(ИмяНастройки);
    ЭлементОтбора = Неопределено;

    Для Каждого Элемент Из ПользовательскиеНастройки.Элементы Цикл
        Если ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") и Элемент.Параметр = ПолеКомпановкиПараметр Тогда
            Возврат Новый Структура("Значение, Использование",Элемент.Значение, Элемент.Использование);
            Прервать;
        КонецЕсли;
    КонецЦикла;

КонецФункции

И процедура установки параметра пользовательской настройки:

&НаКлиенте
Процедура УстановитьПараметрПользовательскойНастройки(ПользовательскиеНастройки, ИмяНастройки, Параметр)

    ПолеКомпановкиПараметр = Новый ПараметрКомпоновкиДанных(ИмяНастройки);
    ЭлементОтбора = Неопределено;

    Для Каждого Элемент Из ПользовательскиеНастройки.Элементы Цикл
        Если ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") и Элемент.Параметр = ПолеКомпановкиПараметр Тогда
            Элемент.Значение = Параметр.Значение;
            Элемент.Использование = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;

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

Код для поиска и заполнения параметра в процедуре ЗапускМоегоОтчета:

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

Перейдем к заполнению отборов отчета. Нам понадобится процедура поиска отбора в пользовательской настройке:

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

    ИдентификаторОтбора = Неопределено;
    Для Каждого Элемент из Компоновщик.Настройки.Отбор.Элементы Цикл
        Если Элемент.ЛевоеЗначение = Поле Тогда
            ИдентификаторОтбора = Элемент.ИдентификаторПользовательскойНастройки;
        КонецЕсли;
    КонецЦикла;

    возврат ПользовательскиеНастройки.Элементы.Найти(ИдентификаторОтбора);
КонецФункции

Код для поиска и заполнения отбора по номенклатуре *в процедуре *ЗапускМоегоОтчета:

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

И для отбора по организации:

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

На этом работа с настройками отчета завершена, осталось добавить их в параметры обработки:

ПараметрыОбработки.ПользовательскиеНастройки          = ПользовательскиеНастройки;

Получим форму отчета с учетом параметров и откроем ее:

Форма = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки_ +".Форма",ПараметрыОбработки);
ОткрытьФорму(Форма);

На этом все, отчет откроется и сформируется.

Полный код процедуры ЗапускМоегоОтчета:

&НаКлиенте
Процедура ЗапускМоегоОтчета(ДатаНач, ДатаКон, Организация, Номенклатура)

    ВыполняемаяКоманда = ПолучитьПараметрыКомандыВнешнегоОтчета(МойОтчет);

    ВыполняемаяКоманда.ЭтоОтчет = Истина;
    ВыполняемаяКоманда.Вид      = ВидОтчет;

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

    ИмяОбработки_ = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.Ссылка);

    Форма = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки_ +".Форма");
    КомпоновщикНастроекКомпоновкиДанных = Форма.Отчет.КомпоновщикНастроек;
    ПользовательскиеНастройки = КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки;

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

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

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

    ПараметрыОбработки.ПользовательскиеНастройки          = ПользовательскиеНастройки;

    Форма = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки_ +".Форма",ПараметрыОбработки);
    ОткрытьФорму(Форма);

КонецПроцедуры
0 8294 12
ДобавленоVital695 дней назад
Последняя активность32 дня назад


Добавить комментарий

Аноним написал:575 дней назад0

Можно такую же статью, но для внешних печатных форм?

Ответить

Аноним написал:425 дней назад0

Спасибо большое! Очень помогло! Ваш способ вызова внешних отчетов прекрасно работает! Еще раз огромное спасибо! Перерыл кучу форумов, везде пишут много способов, которые просто не работают для 1с 8.3 Управляемых форм.

Ответить

Аноним написал:210 дней назад0

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

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

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

ИдентификаторОтбора = Неопределено;
Для Каждого Элемент из Компоновщик.Настройки.Отбор.Элементы Цикл
    Если Элемент.ЛевоеЗначение = Поле Тогда
        ИдентификаторОтбора = Элемент.ИдентификаторПользовательскойНастройки;
    КонецЕсли;
КонецЦикла;

возврат ПользовательскиеНастройки.Элементы.Найти(ИдентификаторОтбора);

КонецФункции

вместо Компоновщик.Настройки.Отбор.Элементы надо брать: Компоновщик.Настройки.Структура[0].Настройки.Отбор.Элементы

у просто компановщика отсутствуют элементы отбора.

Ответить

Аноним написал:198 дней назад0

Спасибо автору, что не поленился все подробно расписать! Следовала инструкциям и все отлично заработало.

Ответить

Аноним написал:180 дней назад0

Огромное человеческое спасибо. Просто нереально помогло!

Ответить

Аноним написал:164 дня назад0

Огромная благодарность! 2 дня искал информацию на различных форумах.

Ответить

Аноним написал:102 дня назад0

Спасибо большое, на всех форумах одни и те же ответы, которые никак не помогали. Не надеялась и на ваш вариант, но попробовала, работает! Премного благодарна!

Ответить

Аноним написал:88 дней назад0

Хвала автору. Ты спас мой зад)) Знал бы ты сколько я перерыл пока нашел твою статью! Огромное человеческое спасибо!

Ответить

Аноним написал:64 дня назад0

Автор, спасибо!

Ответить

Аноним написал:49 дней назад0

Все замечательно, но как запустить в ЗУП 2.5?

Ответить

BG2000 написал:49 дней назад0

А как добавить в ЗУП 25. Справочник поменять на Справочник.Сохраненные настройки, а ДополнительныеОтчетыИОбработкиВызовСервера

Ответить

Аноним написал:32 дня назад0

Подскажите пожалуйста а как написать помаду, которая просто откроет форму внешнего отчета, никак не подтягивая в него данные?….

Ответить

Добавить комментарий

Добавить статью!

Наш канал на Youtube

Изучаете 1С? Скачайте 200 видео по 1С бесплатно:

Похожее

Создание обработки заполнения табличной части 1С 8

1. Постановка задачи В этой статье рассмотрим процесс написания простейшей внеш...

Создание печатной формы в 1с 8

1. Задача Рассмотрим написание простейшей печатной формы в 1с 8.1 - 8.2 на прим...

Создание простого отчета на 1С

Рассмотрим процесс написание простого отчета с использованием Системы компоновки...

Создание внешнего отчета в 1с 8

Рассмотрим создание внешнего отчета в 1с 8 без использования системы компоновки ...

Создание печатной формы для управляемого приложения в 1с 8.3

1. Задача Рассмотрим написание простейшей печатной формы в 1с 8.2 - 8.3 для упр...

Новое

Скачать печатные формы документа "Реализация товаров и услуг" 1С 8.2

Печатные формы из релиза 1C:Бухгалтерия 2.0.64.5 Скачать бесплатно печатную фор...

Как снять и поставить конфигурацию 1С на поддержку

В этой статье я расскажу как снять конфигурацию 1С 8 частично или полностью с по...

Как сделать резервную копию 1С

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

Настройка двухстороннего обмена данными между конфигурациями "Управление торговлей 10.3" и "Бухгалтерия предприятия 2.0" в 1С 8

В этой статье мы рассмотрим как настроить двухсторонний обмен данными между конф...

Тестирование и исправление информационной базы 1С 8

Тестирование и исправление информационной базы 1С 8 необходимо выполнять в случа...