1с параметры запуска внешняя обработка
Эта статья появилась в результате решения интересной задачи. Мы захотели поделиться опытом. Итак задача: нужно запускать по регламенту существующую уже обработку Выгрузка данных и загрузка данных в формате XML с определенными параметрами, но так, чтобы не менять типовую конфигурацию. Она могла бы называться «Программный запуск внешних обработок по регламенту в 1С 8.3».
Считаю, что всю информацию по данной теме нужно собрать в одном месте.
Для реализации задачи было принято решение написать внешнюю обработку 1С для запуска типовой обработки и настроить ее как фоновое задание. Кому-то может хватить и этой информации, а подробности для остальных будут ниже.
Чтобы не возникло путаницы, далее будем называть Главной обработкой ту, которую планируем запускать с помощью регламентной, а Фоновой обработкой ту, которая будет выполнять функцию регламентного задания для запуска Главной обработки.
Первым делом готовим Главную обработку. Все функции, которые вы планируете использовать при запуске Главной обработки в фоне, должны быть экспортными и должны находиться в модуле объекта данной Главной обработки.
Затем создаем Фоновую внешнюю обработку, которая будет работать как регламентное задание. Для этого в Сведениях о внешней обработке указываем следующий код:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.5.71");
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); ПараметрыРегистрации.Вставить("Наименование", "Автоматическая выгрузка XML");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", "Автоматическая выгрузка XML");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление=НСтр("ru = 'Автоматическая выгрузка XML'");
НоваяКоманда.Идентификатор="АвтоматическаяВыгрузкаХМЛ";
НоваяКоманда.Использование="ВызовСерверногоМетода";
НоваяКоманда.ПоказыватьОповещение=Истина;
НоваяКоманда.Модификатор="";
Возврат ПараметрыРегистрации;
КонецФункции
Важно чтобы в функции СведенияОВнешнейОбработке не было команды НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Эта команда не позволит использовать внешнюю обработку 1С как регламентное задание.
Далее создаем в модуле объекта Фоновой обработки процедуру ВыполнитьКоманду(Идентификатор, ОбъектыНазначения) Экспорт
В таком варианте обработки не нужно добавлять никаких форм.
Далее есть два варианта вызова Главной обработки.
1. Как запустить вручную обработку
Если вы планируете прикрепить свою Главную обработку к конфигурации, тогда в Фоновой обработке в функции ВыполнитьКоманду можно использовать указанный ниже вызов Главной обработки:
ВнешняяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Выгрузка и загрузка данных XML");
ДвоичныеДанные = ВнешняяОбработка.ХранилищеОбработки.Получить();
ИмяВременногоФайла = КаталогВременныхФайлов()+"ОбработкаХМЛ.epf";
ДвоичныеДанные.Записать(ИмяВременногоФайла);
СтруктураЗащита=новый ОписаниеЗащитыОтОпасныхДействий;
СтруктураЗащита.ПредупреждатьОбОпасныхДействиях=ложь;
//Создаем структуру защиты от опасных действий
Обработка = ВнешниеОбработки.Создать(ИмяВременногоФайла,Ложь,СтруктураЗащита);
Обработка.Инициализация();
Это ответ на вопрос как запустить вручную.
2. Обработка из файла
Если вы планируете запускать внешнюю обработку из файла, тогда можно использовать такой код:
АдресХранилища = "";
СтруктураЗащита=новый ОписаниеЗащитыОтОпасныхДействий;
СтруктураЗащита.ПредупреждатьОбОпасныхДействиях=ложь;
Обработка = ВнешниеОбработки.Создать("\\192.168./ваш ip/\Выгрузка и загрузка данных XML_3_0.epf",ложь,СтруктураЗащита);
Обработка.Инициализация();
Очень важно при запуске из файла указать и задать полный путь к файлу. Также важно чтобы папка, в которой будет храниться Главная обработка, была доступна по сети. Все дело в том, что фоновое задание будет выполняться на сервере. Если настроена клиент-серверная система работы, у сервера может не быть доступа к тем папкам, к которым есть доступ у клиента и у пользователя с его локальной машины. Также и при указании локальных папок, к примеру, «С:\имяГлавнойОбработки.epf» - можно получить ошибку, потому что у сервера может быть свой диск С, на котором он и будет искать папку при запуске Фоновой обработки. Поэтому лучше конкретизировать путь с указанием ip-адреса.
Также очень важно при создании обработки ставить параметр ПредупреждатьОбОпасныхДействиях в значение ложь. Далее скажу об этом подробнее.
После нужно подключить Фоновую обработку и настроить ее выполнение в фоне
После можно найти свою внешнюю обработку в списке Регламентный заданий. Для этого нужно открыть Администрирование – Обслуживание - Регламентные операции - Регламентные и фоновые задания.
И здесь, в списке фоновых заданий, иногда можно получить ошибку такого вида:
Предупреждение безопасности
Открывается "Выгрузка и загрузка данных XML" из файла "C:\Users\tempout\AppData\Local\Temp\ОбработкаХМЛ.epf".
Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным.
Разрешить открывать данный файл?
Мы поставили параметр ПредупреждатьОбОпасныхДействиях в значение ложь для Главной обработки программно. Для Фоновой обработки нужно сделать следующее:
1) Указать в регламентном задании пользователя с полными правами можно и с правом на открытие внешних обработок, если это предусмотрено конфигурацией.
2) Снять у выбранного пользователя галку «Защита от опасных действий» в конфигураторе.
В типовых конфигурациях существует возможность запуска внешних обработок по расписанию. Наверняка, многие сталкивались с подобной задачей. В данной статье рассмотрим как можно реализовать такую возможность для управляемого приложения и обычного.
Итак, управляемое приложение. В современных конфигурациях данный функционал реализован и остается только им воспользоваться, создадим внешнюю обработку, например хотим производить выгрузку XML через универсальный обмен по расписанию, для этого нам нужно:
создать внешнюю обработку (в моем примере даже не буду создавать форму),
в модуле внешней обработки разместить следующую процедуру:
далее идут процедуры и функции, необходимые для выполнения вашего алгоритма:
теперь добавим подключим нашу обработку к базе, как внешнюю и посмотрим, как это будет выглядеть, теперь мы можем задать расписание для своей обработки:
проверяем журнал регистрации, чтобы убедиться в выполнении нашей обработки:
Как мы видим в управляем приложении все довольно просто, теперь попробуем реализовать то же самое только для обычного приложения. На самом деле на инфостарте куча разных способов, как это можно сделать, но многие из них мне не подошли, а подошел способ, который я нашел на одном из ресурсов, доработал под свои нужды и все заработало, как нужно, хочется его осветить подробнее. Суть будет заключаться во внедрении части функционала БСП управляемых форм, для обычных.
Возьмем какую-нибудь типовую конфигурацию на обычных формах, например УПП.
Для справочника ВнешниеОбработки, добавим табличную часть Команды со следующей структурой (все реквизиты строкового типа):
в модуль формы добавим следующий код, для обработки изменения расписания на форме:
Теперь касаемо БСП, берем за основу подсистему дополнительных отчетов и обработок, и адаптируем ее под обычное приложение, поместим в общий модуль ДополнительныеОтчетыИОбработки, рабочий код выглядит следующим образом:
Добавим подписку на событие ПриЗаписиВнешнейОбработки для события ПриЗаписи, в качестве обработчика будет выступать ДополнительныеОтчетыИОбработки.ПриЗаписиВнешнейОбработки:
Добавим регламентное задание без расписания, назовем ЗапускДополнительныхОбработок, с его помощью и будем запускать внешние обработки, в качестве метода укажем ДополнительныеОтчетыИОбработки.ПриЗаписиВнешнейОбработки:
А теперь создадим, какую-нибудь внешнюю обработку, которую хотим запускать по расписанию, для этого в модуле обработки обязательно наличие следующей процедуры:
Теперь запустим конфигурацию, добавим внешнюю обработку и посмотрим, что получилось, появилась настройка расписания:
Проверяем через консоль заданий, и видим, что добавилось регламентное задание с названием нашей внешней обработки:
С помощью таких способов, можно решить данную задачу, однако изучите и другие способы, возможно придет идея, сделать что - то свое, спасибо человеку, который описывал данный способ для обычных форм, ресурс не помню, но решил доработать и разжевать полученную информацию, всем удачи)
Внешние обработки – очень удобный инструмент для компаний, использующих типовые конфигурации на 1С:Предприятие 8.3. Они позволяют не тратить силы и средства на обновления 1С, давая возможность обновлять базы одной кнопкой в режиме простого пользователя. Используя механизм библиотеки стандартных подсистем, можно добавить различные кнопки в документы и справочники, не изменяя типовую конфигурацию. Рассмотрим пример создания и подключения внешней обработки в одной из конфигураций 1С.
Создаем внешнюю обработку в 1С 8.3
Чтобы создать новую внешнюю обработку, используем конфигуратор. Через меню «Файл» выбираем команду создания «Новый…» и определяемся, что мы будем создавать внешнюю обработку. В открывшемся окне задаем имя, и при нажатии «Enter» оно заполняется автоматически. Также это имя вам предложит система в качестве названия файла при сохранении.
Рис.1 Создаем внешнюю обработку
Добавим форму обработки, нажав на кнопку с изображением лупы в соответствующем окне. Для примера создадим обработку, показывающую, в каких заказах клиента используется определенная номенклатура. Для этого нам необходимо разместить на форме:
- Реквизит – поле для установки номенклатуры;
- Кнопку, которая выполнит вызов кода.
Добавляем реквизит «Номенклатура» с типом данных «СправочникСсылка.Номенклатура» в соответствующем разделе и кнопку «Показать» в меню «Команды» -> «Команды формы».
Чтобы на форме отразились добавленные данные, их необходимо перетащить в элементы формы, расположенные в левой верхней части. Есть возможность поменять местами элементы с помощью синих стрелок. Чтобы созданная нами кнопка выполняла задуманное, ей нужно назначить процедуру. Через контекстное меню выберем «Действие команды», и на вопрос, где нужен обработчик, ответим: «Создать на клиенте и процедуру на сервере».
Рис.2 Создать на клиенте и процедуру на сервере
Мы выбрали создание процедуры на сервере, так как хотим в качестве результата получить выборку из базы данных. На клиенте у нас нет такой возможности, поэтому потребуется подключение к серверу, который и обменивается с БД данными. Теперь нам необходимо написать код, который реализует задуманное нами. Будет использоваться запрос и вывод всех документов через функцию «Сообщить()».
Рис.3 Прописываем код
На текущем этапе мы можем в запущенной базе 1С осуществить открытие внешней обработки как обыкновенного файла, и она уже будет работоспособна. Но если у нас много пользователей, нам придется разослать им всем этот файл, снабдив при этом его инструкцией о том, как его, собственно, открывать в 1С, что крайне неудобно. Чтобы этого избежать, наша обработка должна располагаться внутри одного из разделов 1С. Для этого нам необходимо еще немного ее доработать через конфигуратор, указав определенные настройки.
Чтобы разместить внешнюю обработку в разделе 1С, необходимо ей в модуле объекта прописать процедуру «СведенияОВнешнейОбработке». В основном меню обработки нажмите «Действия» и выберите «Модуль объекта». Здесь необходимо прописать все нужные для 1С настройки, чтобы система поняла, что от нее требуется и что за файл перед ней. На скриншоте изображен код функции «СведенияОВнешнейОбработке».
Подключение внешней обработки в 1С
Перед тем, как подключать внешнюю обработку к типовой конфигурации, необходимо включить использование этого инструмента. В «Администрировании» в подпункте «Печатные формы, отчеты и обработки» устанавливаем флаг напротив нужного нам механизма. Нам становится доступна кнопка перехода к справочнику дополнительных обработок и отчетов.
Рис.4 Подключение внешней обработки
При переходе к списку создадим новую строчку в нем, и система предложит выбрать файл. Выбираем сделанную нами и сохраненную обработку, и конфигурация 1С самостоятельно заполняет большинство полей. Через кнопку «Выполнить» мы уже можем проверить работоспособность нашей обработки, но это не слишком удобно для остальных пользователей. Чтобы у пользователей появилась наша команда, и они могли сделать вызов, нам необходимо:
- Указать размещение объекта. Нажатием на «Не определено» мы открываем окно разделов и укажем, в каких разделах будет доступна операция;
- Выбрать пользователей, у которых данная команда появится в меню «Дополнительные обработки» выбранных разделов без лишних настроек. Для этого в табличной части нужно выбрать пункт «Быстрый доступ» и добавить в правую половину ответственных пользователей;
- На вкладке «Дополнительная информация» вы можете указать папку, в которой будет находиться загруженная обработка;
- После нажатия клавиши «Записать» в выбранном разделе в меню «Дополнительные обработки» пользователи обнаружат нашу команду и смогут ею воспользоваться.
Рис.5 Создание команды вызова
Если мы хотим внести изменения в нашу обработку, необходимо сначала выгрузить ее из базы. Для этого в справочнике «Дополнительные обработки и отчеты» найдите нужную строчку и воспользуйтесь командой «Выгрузить в файл…». Внесите изменения, сохраните обработку и через клавишу «Загрузить из файла…» найдите измененный файл epf, не меняя параметры. После записи все пользователи увидят внесенные изменения.
Если вы используете не типовую или снятую с поддержки базу 1С, то воспользуйтесь возможностью загрузить обработку через конфигуратор. В дереве объектов в разделе «Обработки» создайте новую обработку и через контекстное меню выберите «Заменить на внешнюю обработку, отчет…». Останется лишь настроить запуск внешней обработки из нужного раздела, включив добавленную обработку в нужную подсистему.
Рис.6 Загрузка обработки через конфигуратор
Работа с внешними обработками весьма удобна и позволяет избежать многих конфликтов. Единственный их существенный недостаток – они не обновляются автоматически вместе с конфигурацией. То есть, если разработчики поменяли название документа или справочника в основной конфигурации, нам придется вручную выполнять настройку обработки.
Часто при работе с 1С бывает нужно провести какие-то однотипные операции, которые повторяются систематически по времени и просто отвлекают от основной работы. Это могут быть различные загрузки-выгрузки, формирование каких то данных для внешнего анализа и т.д. Есть достаточно простой способ эти операции автоматизировать и фактически забыть про них, получая периодически лог-файлы на почту для контроля.
Отлично, если эти операции у Вас уже написаны внешними обработками, не проблема, если это не так, создать и перенести все туда. Далее для проверки работоспособности рекомендую протестировать все это в ручном режиме и далее, если все работает как надо, переписать основной код обработки таким образом, чтобы при загрузки внешней обработки она стартовала автоматически, без нажатий на кнопку выполнить и тому подобное. Самое простое, перенести код в процедуру ПриОткрытии().
Следующий шаг, делаем автоматическое закрытие программы после выполнения внешней обработки, которую мы создали и она у нас уже работает. Для этого в процедуре ПриОткрытии() в самом конце вставляем следующую команду: ЗавершитьРаботуСистемы(Ложь); в данном случае параметру ЗапрашиватьВозможность мы передаем значение «Ложь», что бы отсечь различные варианты дополнительных вопросов системы при закрытии, тем самым инициируем безусловное завершение работы 1С после выполнения данной внешней обработки. Для верности опять запускаем программу и выполняем обработку и убеждаемся, что она отработала и программа сама закрылась.
Далее нам нужно запустить 1С с этой обработкой по расписанию, для этого я рекомендую создать файл, например avtozapusk1c.cmd, где напишем следующую командную строку:
«C:\Program Files (x86)\1cv8\8.3.5.хххх\bin\1cv8.exe» ENTERPRISE /DisableStartupMessages /FС:\путь к базе /N»ИмяПользователя» /P»ПарольПользователя» /Execute с:\путь к обработке\самаобработка.epf
3. /FС:\путь к базе — /F и далее без пробела путь к нужной базе включая название каталога, где данные лежат.
4. /N»ИмяПользователя» /P»ПарольПользователя» — соответственно /N имя пользователя, также сразу без пробела и /P пароль.
5. /Execute с:\путь к обработке\самаобработка.epf — /Execute запускает нашу обработку, путь и название должно следовать после этого ключа.
Теперь все, остается только добавить в планировщик заданий наш cmd файл: avtozapusk1c.cmd, указав расписание его запуска.
Для отслеживания работы внешней обработки рекомендую под нее создать отдельного пользователя, еще оптимально, что бы обработка сама создавала лог-файл, который также периодически падал к Вам на почту.
Вот такие не хитрые инструменты помогают автоматизировать каждодневные рутинные операции, успехов Вам!
Эта статья появилась в результате решения интересной задачи. Мы захотели поделиться опытом. Итак задача: нужно запускать по регламенту существующую уже обработку Выгрузка данных и загрузка данных в формате XML с определенными параметрами, но так, чтобы не менять типовую конфигурацию. Она могла бы называться «Программный запуск внешних обработок по регламенту в 1С 8.3».
Считаю, что всю информацию по данной теме нужно собрать в одном месте.
Для реализации задачи было принято решение написать внешнюю обработку 1С для запуска типовой обработки и настроить ее как фоновое задание. Кому-то может хватить и этой информации, а подробности для остальных будут ниже.
Чтобы не возникло путаницы, далее будем называть Главной обработкой ту, которую планируем запускать с помощью регламентной, а Фоновой обработкой ту, которая будет выполнять функцию регламентного задания для запуска Главной обработки.
Первым делом готовим Главную обработку. Все функции, которые вы планируете использовать при запуске Главной обработки в фоне, должны быть экспортными и должны находиться в модуле объекта данной Главной обработки.
Затем создаем Фоновую внешнюю обработку, которая будет работать как регламентное задание. Для этого в Сведениях о внешней обработке указываем следующий код:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.5.71");
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); ПараметрыРегистрации.Вставить("Наименование", "Автоматическая выгрузка XML");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", "Автоматическая выгрузка XML");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление=НСтр("ru = 'Автоматическая выгрузка XML'");
НоваяКоманда.Идентификатор="АвтоматическаяВыгрузкаХМЛ";
НоваяКоманда.Использование="ВызовСерверногоМетода";
НоваяКоманда.ПоказыватьОповещение=Истина;
НоваяКоманда.Модификатор="";
Возврат ПараметрыРегистрации;
КонецФункции
Важно чтобы в функции СведенияОВнешнейОбработке не было команды НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Эта команда не позволит использовать внешнюю обработку 1С как регламентное задание.
Далее создаем в модуле объекта Фоновой обработки процедуру ВыполнитьКоманду(Идентификатор, ОбъектыНазначения) Экспорт
В таком варианте обработки не нужно добавлять никаких форм.
Далее есть два варианта вызова Главной обработки.
1. Как запустить вручную обработку
Если вы планируете прикрепить свою Главную обработку к конфигурации, тогда в Фоновой обработке в функции ВыполнитьКоманду можно использовать указанный ниже вызов Главной обработки:
ВнешняяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Выгрузка и загрузка данных XML");
ДвоичныеДанные = ВнешняяОбработка.ХранилищеОбработки.Получить();
ИмяВременногоФайла = КаталогВременныхФайлов()+"ОбработкаХМЛ.epf";
ДвоичныеДанные.Записать(ИмяВременногоФайла);
СтруктураЗащита=новый ОписаниеЗащитыОтОпасныхДействий;
СтруктураЗащита.ПредупреждатьОбОпасныхДействиях=ложь;
//Создаем структуру защиты от опасных действий
Обработка = ВнешниеОбработки.Создать(ИмяВременногоФайла,Ложь,СтруктураЗащита);
Обработка.Инициализация();
Это ответ на вопрос как запустить вручную.
2. Обработка из файла
Если вы планируете запускать внешнюю обработку из файла, тогда можно использовать такой код:
АдресХранилища = "";
СтруктураЗащита=новый ОписаниеЗащитыОтОпасныхДействий;
СтруктураЗащита.ПредупреждатьОбОпасныхДействиях=ложь;
Обработка = ВнешниеОбработки.Создать("\\192.168./ваш ip/\Выгрузка и загрузка данных XML_3_0.epf",ложь,СтруктураЗащита);
Обработка.Инициализация();
Очень важно при запуске из файла указать и задать полный путь к файлу. Также важно чтобы папка, в которой будет храниться Главная обработка, была доступна по сети. Все дело в том, что фоновое задание будет выполняться на сервере. Если настроена клиент-серверная система работы, у сервера может не быть доступа к тем папкам, к которым есть доступ у клиента и у пользователя с его локальной машины. Также и при указании локальных папок, к примеру, «С:\имяГлавнойОбработки.epf» - можно получить ошибку, потому что у сервера может быть свой диск С, на котором он и будет искать папку при запуске Фоновой обработки. Поэтому лучше конкретизировать путь с указанием ip-адреса.
Также очень важно при создании обработки ставить параметр ПредупреждатьОбОпасныхДействиях в значение ложь. Далее скажу об этом подробнее.
После нужно подключить Фоновую обработку и настроить ее выполнение в фоне
После можно найти свою внешнюю обработку в списке Регламентный заданий. Для этого нужно открыть Администрирование – Обслуживание - Регламентные операции - Регламентные и фоновые задания.
И здесь, в списке фоновых заданий, иногда можно получить ошибку такого вида:
Предупреждение безопасности
Открывается "Выгрузка и загрузка данных XML" из файла "C:\Users\tempout\AppData\Local\Temp\ОбработкаХМЛ.epf".
Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным.
Разрешить открывать данный файл?
Мы поставили параметр ПредупреждатьОбОпасныхДействиях в значение ложь для Главной обработки программно. Для Фоновой обработки нужно сделать следующее:
1) Указать в регламентном задании пользователя с полными правами можно и с правом на открытие внешних обработок, если это предусмотрено конфигурацией.
2) Снять у выбранного пользователя галку «Защита от опасных действий» в конфигураторе.
Читайте также: