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) Снять у выбранного пользователя галку «Защита от опасных действий» в конфигураторе.
Использование внешних обработок — довольно популярный механизм расширения функциональности стандартной конфигурации, который часто используют разработчики. Кроме того, специалистам приходится самостоятельно осуществлять их дальнейшую поддержку, это же Ваша обработка и компания 1С за Вас этого делать не будет. Разумеется, во время написания внешней обработки и в дальнейшем при ее сопровождении возникает необходимость отладки и исправления ошибок (куда же без них). Предлагаю следующую технологию, которая, с моей точки зрения, упрощает этот процесс.
Сразу скажу, что особенность данного способа в ускорении процесса отладки и отсутствии внесения каких-либо изменений непосредственно в исходном коде стандартной конфигурации. Рассмотрим весь процесс на примере 1С 8 ЗУП 3.1.
1. Изменение стандартной загрузки внешней обработки через расширение
Для начала нам необходимо изменить стандартную загрузку - функцию управления загрузкой внешних обработок. Поскольку одна из наших задач не изменять стандартную конфигурацию, делаем это через механизм «Расширений».
Создаем новое расширение через меню «Конфигурация»→«Расширение конфигурации» 1С 8.3 →«Действия»→«Добавить». Новое расширение я так и назвал «ОтладкаВнешнейОбработки».
Далее в дереве основной конфигурации находим «Общие модули» 1С 8.3→«ДополнительныеОтчетыИОбработки», в котором есть два интересующие нас объекта:
Добавляем их в наше расширение методом «Вместо» и, соответственно, копируем в расширение все их содержимое.
Далее в функции «ПодключитьВнешнююОбработку» нужно чтобы в соответствующем месте был задан полный путь к файлу обработки, которую мы собираемся отлаживать, например:
Напомню, что для быстрого копирования полного имени файла достаточно в «Проводнике» щелкнуть правой кнопкой мышки при нажатой клавише «Shift».
Далее ищем то место в конце модуля функции 1С, которое нам необходимо откорректировать. Вот оно:
Заменяем этот текст следующим:
Замечу, что имя обработки «НашаОбработка» то же, что прописано в главном окне редактирования обработки:
Далее в процедуре «ПриПолученииРегистрационныхДанных» необходимо заменить этот код:
на аналогичный предыдущему:
Это весь подготовительный этап.
2. Подключение обработки к основной конфигурации 1С
Эта процедура выполняется стандартными средствами. В стандартной конфигурации 1С 8 ЗУП 3.1, например так: «Администрирование»→«Печатные формы, отчеты и обработки»»→«Дополнительные отчеты и обработки»→«Добавить из файла. ».
Далее нажимаем кнопку «Выполнить» и приступаем к отладке. В нужном месте ставим точку останова, и при ее достижении система проваливается в код модуля 1С.
Замечу, что при внесении изменений достаточно сохранить (Ctrl + S) и перезапустить только обработку. Перезагружать всю конфигурацию не нужно. Теперь, после внесения изменений в модуль «ДополнительныеОтчетыИОбработки» система всякий раз будет заново загружать ваш файл с обработкой 1С, что гораздо быстрее перезагрузки всей конфигурации.
При первом старте после каждого изменения и отладки внешней обработки 1С система «предупредит» вас об огромной опасности использования посторонних обработок, а потом «попросит» выполнить обработку еще раз. Нажимаем «Выполнить» повторно и все работает.
По окончании работы не забудьте отключить расширение, сняв галочку «Активно» в окне расширений. Иначе система не выполнит никакую другую обработку!
Использование внешних обработок — довольно популярный механизм расширения функциональности стандартной конфигурации, который часто используют разработчики. Кроме того, специалистам приходится самостоятельно осуществлять их дальнейшую поддержку, это же Ваша обработка и компания 1С за Вас этого делать не будет. Разумеется, во время написания внешней обработки и в дальнейшем при ее сопровождении возникает необходимость отладки и исправления ошибок (куда же без них). Предлагаю следующую технологию, которая, с моей точки зрения, упрощает этот процесс.
Сразу скажу, что особенность данного способа в ускорении процесса отладки и отсутствии внесения каких-либо изменений непосредственно в исходном коде стандартной конфигурации. Рассмотрим весь процесс на примере 1С 8 ЗУП 3.1.
1. Изменение стандартной загрузки внешней обработки через расширение
Для начала нам необходимо изменить стандартную загрузку - функцию управления загрузкой внешних обработок. Поскольку одна из наших задач не изменять стандартную конфигурацию, делаем это через механизм «Расширений».
Создаем новое расширение через меню «Конфигурация»→«Расширение конфигурации» 1С 8.3 →«Действия»→«Добавить». Новое расширение я так и назвал «ОтладкаВнешнейОбработки».
Далее в дереве основной конфигурации находим «Общие модули» 1С 8.3→«ДополнительныеОтчетыИОбработки», в котором есть два интересующие нас объекта:
Добавляем их в наше расширение методом «Вместо» и, соответственно, копируем в расширение все их содержимое.
Далее в функции «ПодключитьВнешнююОбработку» нужно чтобы в соответствующем месте был задан полный путь к файлу обработки, которую мы собираемся отлаживать, например:
Напомню, что для быстрого копирования полного имени файла достаточно в «Проводнике» щелкнуть правой кнопкой мышки при нажатой клавише «Shift».
Далее ищем то место в конце модуля функции 1С, которое нам необходимо откорректировать. Вот оно:
Заменяем этот текст следующим:
Замечу, что имя обработки «НашаОбработка» то же, что прописано в главном окне редактирования обработки:
Далее в процедуре «ПриПолученииРегистрационныхДанных» необходимо заменить этот код:
на аналогичный предыдущему:
Это весь подготовительный этап.
2. Подключение обработки к основной конфигурации 1С
Эта процедура выполняется стандартными средствами. В стандартной конфигурации 1С 8 ЗУП 3.1, например так: «Администрирование»→«Печатные формы, отчеты и обработки»»→«Дополнительные отчеты и обработки»→«Добавить из файла. ».
Далее нажимаем кнопку «Выполнить» и приступаем к отладке. В нужном месте ставим точку останова, и при ее достижении система проваливается в код модуля 1С.
Замечу, что при внесении изменений достаточно сохранить (Ctrl + S) и перезапустить только обработку. Перезагружать всю конфигурацию не нужно. Теперь, после внесения изменений в модуль «ДополнительныеОтчетыИОбработки» система всякий раз будет заново загружать ваш файл с обработкой 1С, что гораздо быстрее перезагрузки всей конфигурации.
При первом старте после каждого изменения и отладки внешней обработки 1С система «предупредит» вас об огромной опасности использования посторонних обработок, а потом «попросит» выполнить обработку еще раз. Нажимаем «Выполнить» повторно и все работает.
По окончании работы не забудьте отключить расширение, сняв галочку «Активно» в окне расширений. Иначе система не выполнит никакую другую обработку!
В этой статье рассматриваются ситуации, в которых процесс отладки (или процесс запуска отладки) проходит каким-либо особенным образом.
Кроме этого отмечу, что эта статья входит в небольшую серию статей об отладке в 1С:
Отладка внешних объектов
Отладка обычных внешних обработок и отчетов, как правило, не вызывает трудностей — главное открывать в конфигураторе и предприятии один и тот же файл внешней обработки/отчета.
Отладка внешних печатных форм
Отладка внешних печатных форм отличается от отладки обычных внешних обработок. Это связано с тем что, во-первых, выполнение кода происходит не сразу после запуска печатной формы, а при вызове соответствующей процедуры, и, во-вторых, при вызове внешней печатной формы система создает временный файл и точки останова не срабатывают. Более подробно о внешних печатных формах можно прочитать в этой статье.
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетНаОплату"); ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); ОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); МассивПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм); УправлениеПечатьюКлиент.ПечатьДокументов(МассивПечатныхФорм, ОбъектыПечати, ЭтаФорма);Форма обработки
Отладка внешних обработок табличных частей
Трудности при отладке внешних обработок табличных частей (внешних обработок заполнения объекта) возникают по той же причине, что и случае с внешними печатными формами. Подробнее о внешних обработках табличных частей можно прочитать в этой статье.
Отладка внешней обработки заполнения в управляемом приложении немного отличается от внешних печатных форм, так как обработка заполнения уже может иметь основную форму, в этом случае можно создать еще одну форму (такую же как для внешних печатных форм), назначить ее основной и эмулировать вызов команды заполнения, например так:
ПараметрыВыполнения.Вставить("ДополнительнаяОбработкаСсылка", ОбработкаОбъект); ОбработкаОбъект.ВыполнитьКоманду("ЗаполнитьВсе", ОбъектыНазначения, ПараметрыВыполнения)Кроме этого имеется прекрасная обработка, которая помогает отлаживать внешние обработки заполнения: ссылка.
Включение отладки при публикации сервиса/интерфейса
Настройка автоматического подключения
Напомню, что при клиент-серверном варианте работы сервер должен быть запущен в режиме отладки.
Отладка регламентных/фоновых заданий
Напомню, что регламентные задания — это механизм 1С, предназначенный для каких-либо действий по расписанию. А фоновое задание — это объект, который создается регламентным заданием и непосредственно выполняет требуемые действия. Стало быть в отладке нуждаются именно фоновые задания, а регламентные задания просто настраиваются (расписание, пользователь и тд.).
Настройка автоматического подключения
При клиент-серверном варианте работы сервер должен быть запущен в режиме отладки. При файловом варианте работы база данных должна быть запущена в режиме предприятия.
Отладка мобильного приложения
Разрешаем отладку и указываем адрес отладчика
На этом все, надеюсь, что эта статья была Вам полезна. Также напомню про другие статьи серии об отладке в 1С, ссылки на них можно найти в начале этой статьи.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
(оценок: 6, средняя оценка: 5,00 из 5)Читайте также: