Кому не итересно читать дальше, суть механизма:
Все построено на обмене. Создается обмен данными, по ПРАВИЛАМ!!!. Добавляется правила, у которых в событии ПослеЗагрузкиПравилОбмена создается обработка и вызывается экпортная процедура. А в обработоке чего душа желает. Вот.
Теперь по порядку:
1. Добавляем настройку:
В краце по полям:
Наименование — понятно
Узел — не принципиально
Тип обмена — Обмен через файловый ресурс (с другими не пробывал)
Каталог — При обменение через файловый ресурс, в этот каталог будут валится сообщения обмена.
Все остальные поля не принципиальны.
2. Вобщем то сами правила. — В них вся соль 🙂
‘
‘2.01
‘4279b494-5374-4cb7-964a-a93a7171dfcf
‘Отчет По Дебиторке
‘2012-03-02T20:23:53
‘<Источник ВерсияПлатформы=»8.0″ ВерсияКонфигурации=»1.3.22.1″ СинонимКонфигурации=»Управление производственным предприятием, редакция 1.3″>УправлениеПроизводственнымПредприятием
‘<Приемник ВерсияПлатформы=»8.0″ ВерсияКонфигурации=»1.3.22.1″ СинонимКонфигурации=»Управление производственным предприятием, редакция 1.3″>УправлениеПроизводственнымПредприятием
‘
//Способ получаения обработки выбирайте сами, кому что больше нравится. Я лично предпочитаю использовать подключенные обработки в базу (надежнее) В прикрепленных файлах — правила для загрузки обработки с диска.
КодОбработки = «100000009»;
ИмяСобытия = «Автоотчет»;
Ссылка = Справочники.ВнешниеОбработки.НайтиПоКоду(КодОбработки);
Если НЕ Ссылка.Пустая() Тогда
Попытка
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = Ссылка.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
ВнешнаяОбработка = ВнешниеОбработки.Создать(ИмяФайла, Ложь); // БезопасныРежим ложь, иначе файл не создаст
ВнешнаяОбработка.Тест(); //Эскпортная функция/процедура в модуле обработки
//Ответ = ВнешнаяОбработка.Тест(); — Это если необходимо, что то возвращать
//Если Ответ Тогда
// ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , ,»Отчет выполнен успешно.»);
//Иначе
// ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,»Ошибка формирования и отправки отчета.»);
//КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,«Ошибка запуска обработки.»);
КонецПопытки;
//СтандартнаяОбработка = Ложь;
Иначе
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,«Не найдена обработка с кодом » + КодОбработки);
КонецЕсли;
‘
‘
‘
‘
‘
‘
‘
‘
‘
Эти правила необходимо загрузить в обмен (кнопочка открыть и записать :))
3. Далее необходимо настроить запуск обмена:
Вкалдка «Автоматический обмен». Доавбялем настройку. Ставим расписание запуска. ВАЖНЫЙ МОМЕНТ: В выполняемых действиях (второй прямоугольник на скрине ниже) необходимо добавить выгрузку данных.
4. Про обработку: Тут никаких особенностей нет. Важно понимать, где будет выполнятся процедура сервер/клиент — Вобщем использывать провильные методы.
В итоге: По расписанию запускается выполнение обмена. Грузятнся правила, там событие… Обработка … Выгружать нечего. В Каталог калдется файл сообщения обмена.
Данный механизм прекрасно работает в УПП (1_3_20_1 и выше) и БП (2_0_30_8 и выше). По сути будет работать в любой типовой конфе, где есть обмены.
Что-то криво правила разместились(пункт 2), отвались шапка и подвал хмл. Ниже все в txt.
забавно придумано, плюсанул за креатив
Нестандартно, но интересно найдено место для запуска произвольной процедуры.
Во внешние обработки можно положить все что угодно, лишь бы были права.
Открыта дыра в защите базы.
Ждем хакеров…
(3) vladismi, ну это Вы уж громко 🙂
А не из пушки ли по воробьям получается?
Ну хорошо — не подходит механизм регламентных/фоновых заданий.
Но уж планировщиком операционной системы можно воспользоваться — запускать по расписанию задание, в котором всего одна команда — старт 1С8 в режиме enterprise, и в параметрах командной строки указана обработка для запуска.
Эту обработку можно сделать таким образом, что она при открытии сделает все, что нужно, а потом закроет 1С-Предприятие.
(5) Да, обычно так и делают, но, думаю, такой способ тоже не всем может подойти. У пользователя может не быть прав на открытие внешних обработок, или право COM-соединения (если через скрипт делать), или нельзя пароль хранить в скрипте. Так-то способ оригинальный, но неплохо было бы упомянуть, что запускаемая обработка или сами же правила должны чистить хотя бы периодически регистрацию изменений на этом «виртуальном» узле. А то и объем базы будет расти, да и обход в цикле «выгружаемых» измененных объектов будет все дольше и дольше (насчет последнего могу ошибаться, может до этого и не дойдет с такими «пустыми» правилами).
(6) khaoos,
Так раз обмен будет происходить по произвольным правилам обмена, то никакой автоматической регистрации изменений не будет, только то, что вы сами напишите в правилах выгрузки, -а раз там нечего будет выгружать, то все «накладные» расходы по времени будут минимальны
Откуда плану обмена знать по каким правилам будут выгружать его изменения? Есть еще так называемые правила регистрации изменений. В новых БСП-шных «управляемых» конфигурациях они используются.
Добавлено: а я вспомнил, давно не пользовался обменом на старых конфигурациях: там же табличка есть, что выгружать, что не выгружать, что по ссылкам и т.д. И да, регистрация изменений, кажется, туда смотрит при принятии решения.
(5) kapustinag,
1. Если у Вас нет прав на планировщик? — в больший компаниях такое есть.
2. Не предпочитаю использовать внешние обработки, т.к. сменился серв, упала сеть все обработина не запустилась. Поэтому проще запускать из обработок, загруженных в базу (просто надежнее). А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю — буду рад если Вы просветите как это сделать )
Да и так, считаю, что совсем не из пушки. Т.к. все в одном месте. Надо базу перекинуть — все останется. В Вашем же варианте, надо еще и про планировщик не забыть.
(8) khaoos,
про это сказать ничего не могу.
В обычном приложении с ничего не регистрируется.
(10), Да, я благодаря fancy освежил в памяти этот момент. А в новых конфигурациях «правил выгрузки» нет, а вместо этого можно загрузить xml-файл правил регистрации, который можно разработать или доработать типовой в той же «Конвертации данных». Ну это так, к слову, если кто на новых конфигурациях захочет применить методику.
(0), класс! На прошлой неделе опять задавался мыслью, что надо бы подумать все-таки чего-то насчет «внешних» регламентных заданий… Прошерстить стандартные 1С механизмы, которые можно использовать в своих целях.
То есть «мы только думаем, а вы уже сделали…»
Тут ведь какая необходимость есть:
Сейчас все (?..) будет в формате сервиса. И нужно разработки готовить в виде внешних обработок, которые клиент будет устанавливать в справочник внешних обработок. Конфигурацию-то он править не может. И встает вопрос, как енти обработки запускать регламентно, если сам регламент (задание) отсутствует…
Возможно и сама 1С выпустит что-то вроде свободного регл.задания, которое будет мониторить внешние обработки для их запуска.
(12) samamoiloff, близко не смотрел, но, кажется, в последней БСП и об этом уже подумали :). По крайней мере на ИТС мельком читал про запуск внешних обработок по регламенту в подсистеме «Дополнительные отчеты и обработки» (точно не помню названия).
Для глобальной автоматизации снаружи инфобаз компания 2iS делает продукт Интеграцияhttp://infostart.ru/public/145983/ . Все построено на COM. Там уже сейчас можно определенного вида внешние обработки выполнять по расписанию в любой инфобазе. В следующей версии там уже будет импорт регламентных заданий из «подопечных» инфобаз.
(13) khaoos,
будем искать…
(14) tormozit,
это тоже хорошо… Но есть задача — продать решение. То есть решение должно быть «из коробки», тут не пристегнешь чужие разработки, само должно справляться, например внешняя обработка. Если ее продавать клиентам, например, с базовой версией или «облачным», то в чем их интерес к суперсистеме, которая все делает с тем, чего у них в основном нет, кроме маленькой обработочки? Или самому только к подобной системе подключать всех клиентов и мониторить, а оно кому-то надо? Если только клиентов подписывать на подобные вашим годовые сублицензии. Вам 10 000, с 100 клиентов по 1000 рублей, 90 тысяч на работу админа-контролера… Что-то вроде окупаемости получается? Но это-удорожание разработки. А тут пример того, как сам выходишь из положения.
(0) Зачем такие сложности?
Создал батник для пакетного запуска с таким параметром (благо не 7.7, там нельзя было), родным виндовым планировщиком назначил его в задания по расписанию и дел-то…
Стартуем, например, под пользователем AUTOPILOT, обработка запустилась, выполнила что надо, по завершении сделала ЗавершитьРаботуСистемы(Ложь,Ложь).
(16) Abadonna, об этом уже писали в (5), я ответил в (9).
в двух словах:
Минусы Вашего решения:
1. Пропал доступ до файла внешней обратоки (файл сервер лег, переместили и иеще что) — всё, капут 🙂
2. Необходимо всегда помнить(знать) о планировщике. Встречал организации, у которых с локального компа запускается восстановление последовательности расчетов. Админ не в курсе об том — покилял комп, начился Вой.
Плюсы:
1. Простота
Естествено, раньше я так и делал, до смены работы. Теперь у нас в IT-«отделе» более 200 человек. Админы и Програмисты — разные департаменты. Всеми серверами рулят админы(которых я в лицо то не видел никогда), программисты сидят на терминалах, прав никаких нет.
(17)
Сермяжная правда тут есть, но мои «автопилотные» всегда мне куда-нибудь сообщают как дела, вплоть до аси 😉
Если с правами кирдык, тогда полностью согласен. У меня нет ни одного терминала, где бы я не был полноправным админом.
забавно придумано, плюсанул за креатив !
(16) Abadonna,
в модели сервиса?
(9)
1. Если нет прав на планировщик операционной системы, то довольно странно, что есть права на управление обменами в ПРОИЗВОДСТВЕННОЙ информационной базе. Так что это не аргумент, и явная недоработка службы безопасности.
2. Насчет падений сети, переездов с места на место и недоступности сетевых дисков — такое, конечно, бывает. Но и Ваше решение не 100% защищено от таких событий. Если посмотреть внимательнее на первый же скрин в публикации, то видно, что Тип обмена = Обмен через файловый ресурс, и указан локальный каталог на диске d:
3. По поводу «… А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю — буду рад если Вы просветите как это сделать…» — просвещаю. Никакого волшебства. В той внешней обработке, которая находится НЕ В БАЗЕ, и которую Вы запустите через параметры командной строки 1С-Предприятия, будет Вами прописан вызов обработки из справочника «Внешние обработки», или любой другой обработки.
Вполне рабочее решение, мы использовали его, например, для запуска некоторых отчетов при входе определенных пользователей в 1С.
(21) kapustinag,
1. Правами в ОС рулят админы. Права в ИБ настраивают программисты 1С. — Поэтому ничего странного нет, наоборот 🙂 В больших компаниях Администротор <> Программист.
я не вижу ничего странного, в том, что бы у программиста, который поддерживает базу, были ПолныеПрава.
2. По большому счету, обмена то и не происходит. В этот каталог валится «пустое» сообщение обмена. За замечание, Спасибо. Посмотрю, что будет если каталог будет не доступен. (упустил этот момент).
3. Это понятно ) Я же имел ввиду, как запустить обработку, которая находится в базе.
(21) kapustinag,
Есть еще один вариант: программисты рулят админами 😉
(17) так ваши доводы, по поводу батников, аналогично можно применить и в вашу сторону: вы настроили обмен и ушли. После вас пришел другой программист, он знает — что обмен нужен для обмена. Спросил у знающего люда — у вас хоть какие-нибудь обмены есть? Ему сказали — нет. Ну пока, до свиданья все ваши настройки 🙂
Мне кажется, предложенное решение — нишевое очень. С одной стороны — там где есть права, всегда можно либо обписаться батниками, либо посмотреть что есть в тех конфигурациях на эту тему, где предполагается что-то запускать.
С другой стороны, в модели сервиса, о которой тут упоминалось — такой выкрутас не нужен, там уже все есть.
Но само решение, согласен, весьма оригинально!
(24) Новенький_2209, Как это «знающий люд» может ответить «НЕТ» — значит это НЕ «знающий люд» 🙂
Если это Ваш метод, приходя на новое место, сразу килять настройки, не разобравшись, что откуда растет — то успехов Вам… 🙂
Да и даже если «знающие люди» сказали, что обмена нет, запустив консоль, сразу можно увидеть, что какое-то событие периодически запускается — повод задуматься. Да и как можно удалить настройки обмена — не поняв, что там вертится…
Я вот, что-то не нашел ничего в конфигурациях на эту тему(данный мех давно использую). Да и если есть права, использовать батники и т.д. это уже последнее дело — когда не хватает мыслей как реализовать задачу средствами 1С.
Я никого не заставляю применять данный мех 🙂 Ранее и сам использовал батники для старта обработок по расписанию. Но с переходом на новое место работы, права оказались сильно урезаны — вот и пришлось выкручивается 🙂
(25) я только в том ключе, что грохнуть непонятный обмен можно также легко, как и батник, обосновывая это «быть не в теме». Причем именно разговор про отвязанность от конкретных лиц, компетенций и т.д. Как бы вы сказали, можно батник прибить, а что мешает план обмена прибить? 🙂
>>Я вот, что-то не нашел ничего в конфигурациях на эту тему
Это смотря какие конфигурации смотреть. В БСП это есть, если последняя версия в УТ 11 и БП 3.0 — значит и там должно быть (либо появиться как-то), иначе в модели сервиса ничего нельзя сделать.
Из самописок — в рарусовских вроде поделках есть механизм, в итиле точно есть, причем довольно интересная реализация. Это навскидку, с чем в последнее время работал 🙂
Ваш способ мне тем понравился, что не нужно вносить изменения. Это ценно.
(26) Новенький_2209, дак вся то соль именно в реализации запуска произвольной обработки, без внесения изменений в конфу. Споров нет, если в конфе можно шашкой махать, то можно размахнуться 🙂
(27) я взгляну в БП 3.0, есть ли штатный БСПшный механизм там или нет 🙂
(16) Abadonna,
После перезапуска, если не произведен логон пользователя задания не будут выполняться (в смысле 1С не сможет запустить обработку, хотя сами задания конечно же выполняются). Поправьте если не прав.
(29) EfiopReal,
http://dev.1tsm.ru/project/114
Если честно — даже и не знаю 😉
Я как-то склонен вот такое решение применять, проверено на сто пудов:
(28) Новенький_2209,
будем очень благодарны, хотя если даже это и есть в БП, это «только» в БП. Хочу продавать обработки универсальные, не зависящие от конфы, даже если она будет базовая…
(29) +/30/
Забыл написать: есть возможность скриптом создавать задание от имени system, тогда никакой logon от имени пользователя ни во что не стучит.
прикольная штука, правда на данный момент в ней нет необходимости
голь на выдумки хитра. 😉
я лично все же поменял конфу, создал справочник параметры регл. заданий, надо бы печатнуть, что ле.
(30) не, мое решение круче. 😉
(3) vladismi, А нечего всем юзверям раздавать права на запуск внешних обработок/отчетов.
Интересная идея 🙂 Человеческая мысль не знает границ!
(5) нет.
Т.к. все файлы хранятся в базе, а не по папкам/компьютерам/серверам раскиданы.
Отличная идея! И главное — работает
А в каком контексте выполняется обработка? Точнее как считать каталог, который указан в настройке, чтобы сформированный для обмена файл, генерируемый моей же обработке, был в каталоге, указанный в настройке?
(40) maxx, а не проще ли для обмена использовать обмен (сори, за каламбур).
Отличное решение. На 8.2 все остальное работает очень нестабильно.
Согласен с автором! Решение интересное!
(24) За уши притянуто. Для того, чтобы этот обмен не был непонятным, у настройки обмена есть поля «наименование» и «комментарий».