1с программно обратиться к внешнему отчету
В версии 8.2 и старше: приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.
Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:
- Передать файл внешней обработки на сервер
- Подключить внешнюю обработку
- Открыть форму внешней обработки
Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, методом глобального контекста ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.
В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.
При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища, мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.
Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище - АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, - ИмяОбработки, - которое мы используем для того, чтобы открыть форму этой обработки.
Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму(), в который передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма". В приведенном варианте открывается основная форма обработки.
При работе с внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.
Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика, Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы.
Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции работы с файлами.
Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.
У объекта ВнешняяОбработкаОбъект, есть свойство ИспользуемоеИмяФайла, доступное в контексте сервера - может пригодиться.
Жизненный пример
Форма с деревом значений, в котором перечислены обработки из каталога на сервере:
При двойном щелчке по названию файла - происходит его программное открытие:
Дано: конфигурация на платформе 1С 8.3. В "Дополнительные отчеты и обработки" загружен отчет или обработка.
Задача: открыть данный отчет/обработку программно в коде, например, по кнопке.
Далее рассмотрим пример кода, который будет срабатывать по нажатию кнопки и открывать внешний отчет.
В сети интернет много примеров, как открыть внешний отчет или обработку. Большинство из них содержит код загрузки из файла, если это внешний файл отчета.
Здесь же мы будем использовать готовую функцию загрузки, которая содержится в библиотеке стандартных подсистем (БСП - имеется почти во всех популярных конфигурациях, будь то бухгалтерия, зарплата, торговля и т.п., поэтому можно смело ей пользоваться).
Итак, в БСП есть модуль работы со справочником "Дополнительные отчеты и обработки" (ДополнительныеОтчетыИОбработки), в частности есть процедура открытия отчета и функция подключения внешнего отчета:
- Процедура ВыполнитьОткрытиеФормыОбработки
- Функция ПодключитьВнешнююОбработку
Вторая вызывается из первой, но ее также можно вызвать и отдельно (что и будет сделано ниже).
Один из вариантов использовать первую процедуру, но он мне не понравился из-за необходимости излишних действий, чтобы заполнить переменную ВыполняемаяКоманда, а также тем, что передать параметры в отчет можно только массивом (ОбъектыНазначения).
Поэтому решила использовать функцию под номером 2, что подключает нужный отчет/обработку, который затем можно открыть по имени, возвращаемому данной функцией.
Итак, сам пример (полный код):
- ОткрытьВнешнююОбработку - пример обработки команды запуска внешней обработки без передачи параметров.
- ОткрытьВнешнююОбработкуСПараметром - пример обработки команды запуска внешней обработки с передачей одного параметра.
- ОткрытьВнешнийОтчетСКД - пример обработки команды запуска СКД отчета без передачи параметров.
- ОткрытьВнешнийОтчетСКДсПараметром - пример обработки команды запуска СКД отчета с передачей параметров отбора.
- ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере - служебная функция, выполняемая на сервере, получающая ссылку на экземпляр отчета (обработки) по имени, заданном в "Дополнительные отчеты и обработки".
- ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами - общая процедура, непосредственно осуществляющая открытие. Внутри нее как раз строка кода вызывающая стандартную функцию из БСП (выгружает вызываемый отчет/обработку и передает ее наименование, чтобы к нему можно было обратиться по имени при открытии формы):
Пример формы с кнопками, вызывающими эти процедуры:
Если вызывается отчет на СКД, то нужно создать для него типовую форму. Подробнее см. Как добавить типовую форму для СКД
Примечание: создавать форму, как оказалось, не обязательно. См. вариант вызова СКД без создания формы
Чтобы сработал код передачи параметров в СКД (ОткрытьВнешнийОтчетСКДсПараметром), нужно в модуле объекта СКД добавить код, принимающий эти параметры:
Также пробовала передавать параметры в СКД вот так:
Однако возникала ошибка: Невозможно применить фиксированные настройки. Пересекаются элементы отбора.
Поэтому выше описала, как передавала параметры отбора в отчет СКД при котором такой ошибки не было.
Обработки тестировались на демо-базе БСП версии 2.4.5.
- _TestОткрытиеВнешнихОтчетовОбработок.epf - обработка, содержащая форму с примерами кнопок вызова других отчетов и обработок. Можно открывать просто через Файл-Открыть.
- ВнешняяОбработкаПример.epf - пример внешней обработки, принимающей параметр. Нужно загрузить в"Дополнительные отчеты и обработки" (задать имя ВнешняяОбработкаПример)
- ВнешнийОтчетСКДПример.erf - пример внешнего отчета на СКД, принимающего параметры. Нужно загрузить в "Дополнительные отчеты и обработки" (задать имя ВнешнийОтчетСКДПример)
См. также Как в СКД по щелчку на какой-либо ячейке в отчете получить значение другой ячейки (там применяется метод, описанный в статье для вызова внешней обработки в качестве расшифровки ячейки СКД)
Зачем, спрашивается, помещать обработку во внешние обработки, когда ее можно включить в конфигурацию?
Чем обоснована эта необходимость?
Да и зачем изгаляться с внешними обработками, когда ее можно разместить на диске и по такой же схеме открывать, указав путь к файлу на диске.
Тем что база с включенным режимом редактирования будет дольше обновляться. А если его не включать то в обновление пройдёт автоматическом режиме.
Да и зачем изгаляться с внешними обработками, когда ее можно разместить на диске и по такой же схеме открывать, указав путь к файлу на диске.
Для того что бы обработка выгружалась в резервную копию вместе с базой. То есть хранилась в самой базе данных.
Да и зачем изгаляться с внешними обработками, когда ее можно разместить на диске и по такой же схеме открывать, указав путь к файлу на диске.
Ну ка, расскажите нам не сведущим, как обработку/ отчет размещенную на диске подключить к конфигурации, добавив команды открытия в нужные разделы интерфейса, указав конкретного пользователя/ группу имеющую право запускать эту обработку или просто настроить запуск по расписанию.
(5) TODD22, на мой взгляд удобное назначение права доступа более веская причина, хотя да, хранение обработки в базе тоже причина достаточно важная.
(3) acapulco, собственно задачка простенькая, особенно я так понимаю для Вас. Нужно формировать отчет с разными настройками для менеджеров. Менеджеров 50 настроек тоже. Если можно расскажите как бы Вы это реализовали.
(8) Вот я не понимаю, отчет ведь для какой-то конфигурации, правильно?
Неужели в этой конфигурации нет ни одного объекта/ формы сохраняющего свои настройки?!
Поищите в этой конфигурации либо в синтаксис помощнике
Метод работает как для объектов в составе конфигурации, так и для внешних отчетов/обработок хранящихся на диске, главное не промахнуться с ключами объекта и настроек.
П.С.: Ну и незнание некоторых методов - это не повод писать "мусорные статьи" в надежде получить ответ в комментариях, лучше просто задать вопрос на форуме.
(0) Круто. Теперь ждем цикл статей как подключить обработку из справочника без создания временного файла на диске.
(12) acapulco, Ок ! Спасибо! У меня просто стояла задачка брать обработки сохраненные во внешних в 1с предприятии.
А так тоже надо было, но не смог найти. А оказалось точно просто набираешь в поиске на итс "открыть внешнюю обработку" и на тебе пожалуйста.
Сколько раз уже на эти грабли натыкался, ищешь часами в нет, нет что бы просто в синтакспомощник заглянуть :))
(13) а еще можно в конфигураторе найти справочник "ВнешниеОбработки" и глянуть как в форме списка открываются внешние обработки. Обработчик события при выборе:
Но наверное это было сложно сделать.
P.S. Нет возможности заглянуть в синтакс-помощник, зато есть время такое публиковать.
(14) karpik666, Ты добрый малый! А если не секрет что тебя так задевает? Ну опубликовал такую фигню. Тебе от этого плохо? Или я тебе чем-то помешал. Вообще не слишком ли много чести,зачем ты потратил стока своего драгоценного времени?
(23) vasyak319, о эко тебя, но ты то, что здесь искал если не секрет. Еще поражает столь сильное Ваше внимание к столь не нужной теме. А может ты просто так зарабатываешь:) тогда ок!
(14) karpik666, А собственно. Вопрос все равно остался. Пусть обработка или отчет есть в конфе. У отчета есть n-ное количество пользовательских настроек. Нужно программно вызывать все эти настройки, и формировать отчеты.
(16) Извини, если мои комментарии были грубые, но меня задевает, что нет премодерации по содержанию, а только по оформление, что инфостарт уже какая-то свалка, чтобы найти что-то стоящее нужно часами копаться. И в данном случае твоя статья не содержит в себе ничего, с таким же успехом можно было справку из синтакс-помощника здесь разместить. А хотелось бы, чтобы инфостарт был похож на хабр, какой он сейчас, где каждая статья содержит в себе ценность.
(16) в типовых конфигурациях на обычных формах есть регистр сведений "сохраненные настройки", если отчет был сделан на универсальном отчете, то настройки попадают туда, чтобы посмотреть как эти настройки загружаются из этого регистра нужно открыть "универсальный отчет" модуль объекта процедура "восстановить настройки". Если на скд, то настройки попадают в "хранилище общих настроек", но тут я не смогу подсказать, потому как сам не знаю.
то настройки попадают в "хранилище общих настроек", но тут я не смогу подсказать, потому как сам не знаю.
В (17) я показал "как они туда попадают", остается только посмотреть в синтаксис помощнике методы объекта ХранилищеОбщихНастроек и воспользоваться ими.
А теперь еще сделаем одну обработку для открытия описанной в публикации обработки с тем же кодом и так далее - по циклу. бесконечно. Похоже, что автор просто хотел поделиться наработкой.
(25) apostal86, ну да именно так запускаем обработку и выполняем отчеты. Для Вас задачка я так понимаю простенькая. Может подскажите как выполнять отчет для n-ного количества сотрудников, соответственно каждому с его настройкой и отправлять на мыло?
Эта задачка для любого "простенькая". Или начните пользоваться головой по назначению или наймите программиста.
короче, у вас есть решение хотите продать? Или я у Вас хлеб отнимаю, от того такая неприязнь? Чем Вам я конкретно мешаю? Может Вы хотите чтобы я оценил Ваши публикации? Ну так прямо бы и сказали. Каждый конечно выживает по своему.
Вам уже отвечали на этот вопрос. Вы загаживаете сайт нашего сообщества мусором, плюс начинаете юродствовать, когда вам на это указывают, отсюда и отношение.
(29) vasyak319, Дорогой мой человек! Спасибо за столь внимательное отношение к теме. Но наверно есть более простые способы удалять не нужные публикации. Вы являетесь модератором? Просто удалите её. Или может если не являетесь, то обратитесь к модератору и он удалит. Может быть есть публикация и я повторил её, укажите это модератору. А Вы настолько уверены в себе, что можете утверждать, что Ваши публикации ничего не засоряют? Или может у Вас их нет? Не знаю, что Вы имеете ввиду говоря "юродствовать" , объяснитесь. Но на самом деле не допускаете ли мысли, что это и есть тот случай?
В данной статье будет рассмотрен процесс открытия(и формирования) внешнего отчета подключенного к базе. Пример будет рассмотрен для конфигурации 1С:Управление торговлей 11.1.
Допустим у нас есть внешняя обработка, на ее форме расположена кнопка при нажатии на которую должен открываться внешний отчет, который подключен в к базе при помощи справочника ДополнительныеОтчетыИОбработки. В данном справочнике он имеет имя “Мой внешний отчет”, также при запуске отчета следует заполнить параметр его схемы компоновки данных — Период(тип СтандартныйПериод) и установить отборы по полям Организация и Номенклатура.
Подготовим некоторые данные для запуска отчета:
- Создадим реквизит формы МойОтчет типа СправочникСсылка.ДополнительныеОтчетыИОбработки.
- Создадим реквизит формы ВидОтчет типа ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок
Так как процедура открытия отчета будет происходить НаКлиенте, а заполнить описанные выше реквизиты можно только на сервере(если не делать дополнительный ввод данных на форме), то сделаем это в процедуре формы ПриСозданииНаСервере.
Далее создадим процедуру в которой будем открывать наш отчет, в параметрах передадим даты начала и окончания, которые необходимы для заполнения параметра Период, а также Организацию и Номенклатурудля отбора:
В самом начале данной процедуры нам следует определить, какую из команд дополнительного отчета мы будем использовать. Возьмем простейший вариант, и выберем первую из команд(к примеру мы знаем, что команда точно одна). Создадим в модуле формы следующую процедуру(которая будет возвращать нам структуру команды):
В процедуре ЗапускМоегоОтчета заполним переменную с выполняемой командой при помощи описанной процедуры:
Теперь заполним недостающие поля команды:
Создадим структуру с параметрами запуска нашего отчета:
Обратите внимание на параметр СформироватьПриОткрытии, если установить там значение Истина, то отчет будет автоматически сформирован после открытия.
Для дальнейшей работы с отчетом его необходимо подключить(временное подключение для работы в текущей сессии). После подключения отчет или обработка регистрируется в программе под определенным именем, используя которое можно создавать объект или открывать формы отчета или обработки.
Получите понятные самоучители по 1С бесплатно:
Для этого используем типовую процедуру УТ 11.1 ПодключитьВнешнююОбработку.
После получения имени подключенного отчета можно получить его форму, компоновщик настроек и пользовательские настройки.
Заполним параметры схемы компоновки(в нашем случае имеется один параметр Период) для этого нам понадобится функция поиска параметра в пользовательских настройках отчета, добавим ее в модуль обработки:
И процедура установки параметра пользовательской настройки:
Код для поиска и заполнения параметра в процедуре ЗапускМоегоОтчета:
Перейдем к заполнению отборов отчета. Нам понадобится процедура поиска отбора в пользовательской настройке:
Код для поиска и заполнения отбора по номенклатуре *в процедуре *ЗапускМоегоОтчета:
И для отбора по организации:
На этом работа с настройками отчета завершена, осталось добавить их в параметры обработки:
В любой программе 1С изначально заложено много разных отчетов. Но их количества не всегда хватает или имеющиеся отчеты не до конца подходят.
Прежде чем обращаться к программистам с просьбой доработать отчет, следует рассмотреть одну полезную возможность в 1С — это “Универсальный отчет”.
Этот отчет позволяет из различных объектов программы создать свой собственный отчет.
Где находится универсальный отчет?
Универсальный отчет есть во многих программах 1С 8.3, мы рассмотрим его возможности на примере “1С: Бухгалтерия предприятия”.
Отчет находится в разделе “Отчеты — Стандартные отчеты — Универсальный отчет”:
В других программах он может находиться в другом месте. Чтобы быстро найти отчет, можно воспользоваться либо стандартным поиском, либо открыть отчет через меню “Все функции”.
Выбор объекта для формирования отчета
После открытия отчета в первую очередь нужно определить, из какого типа объектов мы будем выводить информацию. Например, это могут быть справочники, документы, регистры сведений и другие.
После выбора типа объекта нужно выбрать конкретный объект. Для быстрого поиска можно просто начать вводить его название, программа предоставит подходящие варианты:
Получите понятные самоучители по 1С бесплатно:
Рассмотрим настройки отчета на примере справочника “Контрагенты”.
Настройки отчета
Если сразу сформировать отчет, то он нам может не подойти:
В отчете могут быть выведены лишние колонки, либо порядок колонок будет неподходящим.
Отчет необходимо настроить, для этого нажимаем кнопку “Настройки”. Откроется форма с несколькими закладками. Рассмотрим основные.
Поля и сортировки
На этой закладке мы можем управлять составом полей отчета и сортировкой полей. Для добавления нового поля нужно нажать “Добавить” и выбрать нужное поле. Для удаления поля можно либо нажать “Удалить” (красный крестик), либо снять флажок напротив лишнего поля. Удалим поля и оставим несколько для примера:
Сформируем повторно отчет по кнопке “Закрыть и сформировать”:
Отчет стал более наглядным, но в отчете помимо контрагентов выводятся и папки.
Отборы
На этой закладке задаются условия. Для исключения папок нажимаем “Добавить отбор” и выполняем настройку “Это группа — Равно — Нет”:
После этого папки не будут выводиться в отчете. Можно делать и другие отборы, все зависит от конкретного отчета.
Оформление
Отчет можно оформить так, как мы захотим. Например, выделим контрагентов, которые являются физическими лицами, красным цветом. Нажимаем “Добавить”. Откроется форма настроек, на первой вкладке укажем стиль оформления:
Зададим условие для физических лиц:
В результате отчет будет выглядеть так:
Сохранение отчета
После настройки отчета самое главное не совершить ошибку — не закрывать отчет без сохранения. Если отчет закрыть, при повторном открытии все сделанное придется выполнять заново.
Для сохранения отчета нажимаем “Сохранить вариант отчета”:
Вводим название отчета, а также кому он будет доступен:
Можно разрешить отчетом только тому пользователю, который его создал, либо выбрать нужных пользователей.
Читайте также: