1с внешний отчет в фоновом режиме
Процедура ВыполнитьСКД(ДокументРезультат) Экспорт
ДокументРезультат.Очистить();
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
После выполнения, пока по кнопке формы вручную, таблицу выводит, но при этом пишет:"Отчет не сформирован, Нажмите Сформировать для получения отчета." Что я не так делаю?
Если пользователь будет заниматься своими делами, мобыть тогда ему и запускать отчет не нужно? Пусть стартует по расписанию.
Для того чтобы длительные операции дополнительного объекта запускались в фоновом режиме, необходимо запустить выполнение команды в фоновом задании и после его завершения принять результат.
Программный интерфейс, помогающий запускать длительные операции в фоне, представлен следующими процедурами:
1. В общем модуле ДополнительныеОтчетыИОбработкиКлиент: ВыполнитьКомандуВФоне и ПоказатьРезультатВыполненияКоманды.
2. В общем модуле ДополнительныеОтчетыИОбработки: ВыполнитьКомандуИзФормыВнешнегоОбъекта и ВыполнитьКоманду.
Рассмотрим подключение по шагам:
Шаг 1. Добавить реквизит управляемой формы для хранения ссылки внешнего объекта с типом СправочникСсылка.ДополнительныеОтчетыИОбработки. Например, «ОбъектСсылка».
Шаг 2. В обработчике события управляемой формы ПриСозданииНаСервере сохранить ссылку внешнего объекта:
&НаСервере
Шаг 3. Добавить функцию для выполнения команды в файловом режиме по шаблону (в блок служебных процедур и функций):
&НаСервере
Шаг 4. В обработчике команды управляемой формы, которая инициирует длительную операцию, добавить код по шаблону:
&НаКлиенте
Шаг 5. В обработчике события управляемой формы ОбработкаВыбора добавить код для приемки результата:
&НаКлиенте
Примечание. Длительные операции могут быть только серверными.
Я правильно понял, что это только для внешних отчетов, которые подключены через ДополнительныеОтчетыИОбработки?
В узких кругах широко известна проблема, когда штатное фоновое формирование отчета СКД на управляемых формах перестает работать при выполнении нештатной компоновки (переопределении события ПриКомпоновкеРезультата). В этом случае клиент ожидает ответа сервера и сеанс 1С "висит", что жутко неудобно при формировании затратных по времени отчетов. Также нет возможности прервать такое выполнение. Когда мириться с этим стало тяжело, стал искать решения, но почему-то подходящего готового рецепта не нашел. Если плохо искал, значит, будет еще один в копилку.
С помощью штатных функций БСП по контролю выполнения длительных фоновых операций удалось получить на удивление лаконичное и достаточно универсальное решение. Опасался, что выйдет более "развесисто". Поэтому на радостях спешу поделиться.
(Важно! Как мне справедливо заметили в комментариях - при использовании подсистемы БСП "Варианты отчетов" проблемы не существует, т.к. общая форма отчетов этой подсистемы уже реализует аналогичную концепцию и "велосипедить" смысла нет. Публикация пригодится тем, кто использует выборочное внедрение подсистем БСП и подсистема "Варианты отчетов" у него, как и у меня, отсутствует. Ну или еще в каком экзотическом случае.)
Начну с недоработок (при желании - устранимых).
1) предлагаемое решение работает только для встроенных в конфигурацию отчетов. Для внешних выполняется штатная компоновка. Можно реализовать фоновое формирование и для внешнего отчета, похожую задачу я решал в другой моей публикации, но прямой необходимости пока не было и усложнять не хотелось
2) по аналогичной причине (лень) не реализована фоновая расшифровка - для этого необходимо перехватывать штатную расшифровку
Возможно, перечисленные недоработки будут устранены позднее.
Да, еще момент. Предполагается, что дорабатываемый отчет имеет стандартные наименования своих компонентов - поле табличного документа на форме называется "Результат", есть строковый реквизит формы "ДанныеРасшифровки", основной реквизит формы называется "Отчет".
Итак. Сам алгоритм, исполняемый в фоновом задании, размещается в модуле менеджера целевого отчета. Тут все просто и никакой магии:
Замечу, что выполняется штатная компоновка отчета со всем тем, что напихано в ПриКомпоновкеРезультата.
Очевидно, что для этого нужно перехватить событие компоновки на клиенте. К сожалению, человеческого способа это сделать нет. Придется подсовывать свою команду вместо стандартной. Отключаем в доступных командах отчета штатное "Сформировать", выводим на форму кнопку со своей командой. Оформляем, чтобы выглядела аналогично.
Подсказка - если кнопка появляется в панели отчета после каких-то стандартных команд типа выбора варианта - просто добавьте эти стандартные команды в панель явно - тогда их расположением можно будет управлять.
Вот в этих нескольких строчках и зарыта вся магия БСП. Этот код реализует целую кучу вещей - запускается фоновый алгоритм, открывается форма ожидания его завершения (форма с крутящимся колесиком, в которой фоновое задание можно отменить), ожидается завершение фонового задания в обработке ожидания и при завершении задания - запускается указанный обработчик для обработки результата. Все это БСП делает за нас и не переусложняет наш отчет. За что ей большое спасибо.
Остался последний штрих - обработчик результата фонового задания (замечу, что данные расшифровки уже были положены по нужному адресу еще в фоновом задании, поэтому осталось получить только табличный документ):
Это все. Как видим - благодаря БСП нужно добавить лишь небольшое количество достаточно универсального кода (тестировалось под БСП 2.3.2.45).
Принципы формирования внешнего отчета в фоновом режиме. Используя стандартную форму отчета БСП или свою. Вопросы передачи параметров от команды внешнего отчета в фоновом процессе к ожидающей завершения процедуре формы.
При доработке типового отчета БП, возник вопрос, как сделать формирование внешнего отчета в фоне. Результатами исследования захотелось поделится. Использовалась БСП версии 3.0.1.
Сразу стоит отметить, что отчет просто открытый через Файл - Открыть запустить в фоне нельзя (если только он до этого не был добавлен в справочник ДополнительныеОтчетыИОбработки)
Для дополнительного отчета (добавленного в справочник ДополнительныеОтчетыИОбработки) есть два варианта реализации:
1. Использование типовой формы отчета из БСП.
Для этого не указываем (и не создаем) основную форму отчета. Условием формирования в фоновым режиме для формы отчета БСП является его отключенный "Безопасный режим". Т.е. в функции СведенияОВнешнейОбработке указываем
Есть прекрасная статья по этому варианту Подсистема "Варианты отчетов". Используете ли Вы ее правильно? Там "Безопасный режим" в примере сброшен, написано про фоновое формирование, но не описана взаимосвязь.
2. Использование своей формы отчета
Она будет нестандартной для пользователя. В ней нужно реализовывать запуск отчета в фоновом процессе самому. Но можно запустить в фоне и безопасный отчет.
Есть статья Пример формирования внешнего отчета программно и в фоновом режиме, реализующая этот вариант. Но в ней есть ряд недоработок. Используется устаревшая процедура ДлительныеОперации.ЗапуститьВыполнениеВФоне.
К тому же БСП предоставляет готовые механизмы обмена между фоново запущеной командой дополнительного отчета/обработки и ожидающим ее процедурой формы. Нет необходимости создавать временное хранилище и даже помещать в него данные. Но остаётся вопрос, будут ли так работать будущие версии БСП. Возможно, надёжнее самостоятельно помещать данные во временное хранилище.
Привожу свою реализацию формирования отчета со своей формой в фоновом режиме. Первый вариант (с формой БСП) легко реализуем и так. Достаточно отключить основную форму от отчета.
В ней я так же уделил внимание работе со своевременным освобождением памяти хранилища. Иначе, если пользователь, не закрывая форму отчета, много раз нажмет сформировать, памяти может не хватить.
Все действия и поведение системы подробно описаны в комментариях. Понять в контексте кода проще, чем абстрактные описания.
Отчет простой, выводит версии подсистем в базе данных (версия БСП и т.п.). Для использования достаточно заменить схему компоновки данных и оставить нужную кнопку формирования.
Наверное, каждому программисту 1С 8.3 рано или поздно приходилось настраивать выполнение определенных заданий по расписанию. Ниже я дам подробное описание данных механизмов, надеюсь, это будет полезной информацией для начинающих программистов 1С. Это очень удобно, ведь не требует действий от человека, регламентное задание настраивается 1 раз и работает по Вашему расписанию.
Как настраиваются регламентные и фоновые задания в 1С 8?
Развернутую инструкцию на примере загрузки курсов валют Вы найдете далее.
Что такое регламентные и фоновые задания в 1С
- Регламентные задания — это специальный механизм 1С предприятия 8.3, предназначенный для выполнения определенного действия по заданному расписанию.
- Фоновое задание — объекты, порождаемые регламентным заданием, которые непосредственно выполняет заложенное действие без участия пользователя или программиста 1С.
Механизм регламентных и фоновых заданий работает в клиент-серверном режиме работы (SQL), благодаря функционалу СУБД . Если у вас файловая БД, то задание тоже можно настроить, но немного по другому принципу.
Настройка фоновых заданий в клиент-серверном режиме работы 1С
Для начала создадим новый объект метаданных — регламентное задание. Я назову свое задание «ЗагрузкаКурсовВалют». Рассмотрим палитру свойств данного объекта конфигурации:
- Имя метода — путь к процедуре, которая будет выполняться в фоновом задании по заданному расписанию. Процедура должна находиться в общем модуле. Рекомендуется не использовать типовые общие модули, а создать свой. Не забудьте, что фоновые задания исполняются на сервере!
- Использование — признак использования регламентного задания.
- Предопределенное — указывает, является ли регламентное задание предопределенным. Если хотите чтобы регламентное задание заработало сразу после помещения в БД, укажите этот признак. В противном случае вам необходимо будет использовать обработку «Консоль заданий» или вызывать запуск задания программно.
- Количество повторов при аварийном завершении задания — сколько раз выполнен перезапуск фонового задания, если оно было выполнено с ошибкой.
- Интервал повтора при аварийном завершении задания — с какой периодичностью будет выполнен перезапуск фонового задания, если оно было выполнено с ошибкой.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
И самая интересная настройка — Расписание:
Тут настраивается интервал запуска процедуры, указанного в поле «Имя метода». Допустим я настроил
Внимание! Не забудьте отключить блокировку выполнения регламентных и фоновых заданий на уровне СУБД!
Сделать это можно в утилите администрирования клиент-серверного варианта либо при создания новой БД:
Для управления фоновыми заданиями рекомендую использовать обработку с диска ИТС — «Консоль заданий«.
Настройка регламентных заданий в файловом режиме работы 1С
В файловом режиме настройка таких заданий несколько труднее. Для такого задания должна быть запущена отдельная сессия программы 1С. Зачастую это решается заведением «технического» пользователя, чей сеанс всегда запущен.
В файловом режиме инициализация регламентного задания происходит при запуске метода «ВыполнитьОбработкуЗаданий()».
Для определенного пользователя можно настроить запуск этого метод, используя другой метод —
- Имя процедуры — имя процедуры, подключаемой в качестве обработчика ожидания. Имя экспортируемой процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля. Процедура должна располагаться на клиенте .
- Интервал — период между выполнениями операций в секундах.
- Однократно — как выполнять задание, один раз или нет.
Двухминутное видео, в котором показано, как настроить регламентное задание в конфигураторе 1С:
Другие статьи по 1С:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Создать в 1С 8.3 отчет за считанные минуты можно с помощью СКД (система компоновки данных). Приведу пример такого отчета для конфигурации 1С:Бухгалтерия 3.0.
В нашем примере отчет показывает выпуск продукции и услуг в разрезе подразделений, номенклатурных групп и с разбивкой по месяцам.
Вот главная страница отчета:
Вызывается данная страничка из конфигуратора в меню Файл – Новый – Внешний отчет.
Сначала добавляем набор данных (НаборДанных1). В окошке «Запрос» можно набрать текст запроса самостоятельно, создать с помощью Конструктора запроса или загрузить из файла. Удобнее всего использовать конструктор запроса. Как работает конструктор, читайте здесь.
Например, заголовки колонок (галочка «Количество» на рисунке выше позволяет набрать любой текст заголовка для данного поля), можно задать формат вывода данных(см. Формат в строке Количество). Формат редактируется для любого вида данных – строк, дат, чисел.
На закладке Ресурсы выбираем сами ресурсы и настраиваем вывод итогов для них:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Закладка Параметры содержит все, от чего меняется содержимое отчета (например, период, за который будут выбираться данные). Заполняется автоматически на основании параметров запроса (см. первую страничку). Галочками можно регулировать видимость, доступность этих параметров, задавать первоначальное значение и т.д:
И, наконец, Настройки. Тут рисуется внешний вид отчета – колонки, строки, их положение относительно друг друга, группировки и т.д. Кнопочка «Открыть конструктор настроек» поможет выстроить строчки и колонки в нужном порядке. Кнопочка «Пользовательские настройки элемента» позволит вывести параметры в шапку отчета:
Обратите внимание на колонку Период.ЧастиДат.НазваниеМесяца. Как же вывести название месяца в заголовок колонки? Вот тут и выводится.
Кстати, именно такая настройка позволяет выводить данные сразу за несколько периодов в соседних колонках отчета:
Еще одна важная закладка – Выбранные поля. Если она будет пустой, отчет не сформируется. Обычно заполняется автоматом по кнопке «Открыть конструктор настроек»:
Собственно, вот все, что нужно из минимально необходимого. В результате будем иметь отчет следующего вида:
«Красивости» (заголовок, фон) настраиваются на закладках «Условное оформление», «Другие настройки».
Создание такого отчета занимает на порядок меньше времени, чем его описание. По ссылке можете скачать получившийся отчет для конфигурации 1С 8.3 Бухгалтерия 3.0.
Смотрите также видео по созданию таких отчетов:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также: