gifts2017

Пример сохранения служебных сообщений автоматически выполняемой (из регламентного задания) обработки (проведение по партиям) для дальнейшего использования.

Опубликовал VarvarV VVV (VarvarV) в раздел Программирование - Практика программирования

Пример показывает, как можно сохранить сообщения выдаваемые в окно "Служебные сообщения" при автоматическом выполнении обработки "Проведение по партиям" с помощью регламентного задания.

Данный прием пришлось изобретать из-за следующей ситуации доставшейся мне в наследство:

- каждый месяц бухгалтеру требуется выполнять стандартную обработку «Проведение по партиям» и анализировать сообщения выдаваемые обработкой;

- из-за большого объема данных обработка выполняется длительное время;

- при выполнении в немонопольном режиме периодически обработка останавливается по ошибке (пользователи проводят документы в уже обработанном периоде поэтому блокировки) – следовательно, сотрудник запустивший обработку должен периодически мониторить процесс выполнения – что не очень удобно;

- запускать в монопольном режиме в рабочее время не представляется возможным;

- желания оставаться, для выполнения этой обработки, в нерабочее время у бухгалтера нет.

Поэтому сложилась практика, что бухгалтер сообщает мне о необходимости выполнить проведение, я остаюсь после работы, выполняю обработку, а служебные сообщения отсылаю бухгалтеру по электронной почте.

            Через пару месяцев мне это надоело, и родилась идея сделать один раз механизм – и потом вообще про эту проблему забыть. Исходя из вышесказанного, и наличия сервера 1С родилась идея -  запускать автоматически через регламентное задание по ночам, когда пользователи не работают.

Первым делом из стандартной обработки «Проведение по партиям» делаем «упрощенный вариант». Разрешим пользователю выбирать только месяц, а остальные параметры настроим сами (смотрим в файле обработки «АвтоматическоеПроведениеПоПартиям.epf»).

Затем настраиваем регламентное задание на выполнение этой обработки (тексты процедур, которые надо добавить в модуль «МодульРегламентныхЗаданий» смотрим в файле «Общий модуль МодульРегламентныхЗаданий_ Модуль.txt»):

Процедура Автоматическое_Проведение_По_Партиям() Экспорт

  ОбработкаФоновогоЗадания   = Обработки.АвтоматическоеПроведениеПоПартиям.Создать();

  ОбработкаФоновогоЗадания.АвтоматическиПровестиПоПартиям(ТекущаяДата());

КонецПроцедуры

Довольно потираем руки… и вспоминаем про сообщения, которые обработка выдает в окно «Служебные сообщения»! А как прочитать сообщения, когда выполняется регламентное задание? Может они в журнал регистрации записываются? – Записываются да не все… самые нужные и не записываются как раз. Что делать? Поиск ответа в документации и интернете дает пару вариантов: запускать на сервере через назначенные задания с записью служебных сообщений в текстовый файл и пытаться скопировать сообщения из окна «Служебные сообщения» через copy/paste.

Через copy/paste подходит… даже работает… но не из регламентного задания!

Через файл надо настраивать на сервере назначенные задания, в процедуре при старте определять, что стартовали из назначенного задания (например, по пользователю), потом еще организовывать через другое регламентное или назначенное задание отправку файла по электронной почте. А как обеспечивать взаимодействие заданий: сначала выполнение обработки, потом отсылка файла с логом?

В общем, решил придумать другой способ. Для начала надо определить, где формируются нужные бухгалтеру сообщения: берем текст сообщения «Не списано по партиям» и выполняем глобальный поиск. Находим нужную нам процедуру «СообщитьОНехваткеПартииУпр» в модуле «УправлениеЗапасамиПартионныйУчет». Анализируя процедуру обнаруживаем, что сообщения выводятся с помощью процедуры «СообщитьОбОшибке» модуля «ОбщегоНазначения».

В этой процедуре и поставим сохранение сообщений в переменную. Будем сохранять сообщения в параметре сеанса. Создаем параметр сеанса «СообщенияФоновогоЗадания». В «МодулеСеанса» в процедуре «УстановкаПараметровСеанса» инициализируем параметр (тексты процедур, которые надо доработать в модуле «МодулеСеанса» смотрим в файле «УправлениеПроизводственнымПредприятием_ Модуль сеанса.txt»):

ПараметрыСеанса.СообщенияФоновогоЗадания = "";

В модуле «ОбщегоНазначения» в процедуре «СообщитьОбОшибке» собственно сохраняем служебные сообщения – дописываем в наш параметр сеанса если он не пустой (тексты процедур, которые надо доработать в модуль «ОбщегоНазначения» смотрим в файле «Общий модуль ОбщегоНазначения_ Модуль.txt»):

#Если не Клиент Тогда // т.к. сообщения перехватываем, когда запуск не интерактивный

  Если НЕ ПараметрыСеанса.СообщенияФоновогоЗадания = "" Тогда

    ПараметрыСеанса.СообщенияФоновогоЗадания = ПараметрыСеанса.СообщенияФоновогоЗадания + Символы.ПС

+ ТекстСообщения;

  КонецЕсли;     

#КонецЕсли

В нашей обработке вначале инициализируем параметр сеанса (записываем в него что-нибудь), чтобы он был непустой и при возникновении ошибок в него дописывались сообщения:

ПараметрыСеанса.СообщенияФоновогоЗадания = ПараметрыСеанса.СообщенияФоновогоЗадания

                                         + Формат(ТекущаяДата(), "ДФ=дд/ММ/гггг чч:мм:сс") + ": "

                                         + "Запущено автоматическое перепроведение по партиям за "

                                         + Формат(ПараметрПериодПерепроведения, "ДФ=""ММММ гггг""");

В конце обработки посылаем электронное письмо с содержимым параметра сеанса и очищаем его, чтобы он был пустой и при возникновении ошибок в него не дописывались сообщения.

Данный алгоритм работает на 1С УПП 1.2.22.3.

Скачать файлы

Наименование Файл Версия Размер
Архив со всеми файлами 88
.7z 9,87Kb
24.11.11
88
.7z 9,87Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Зубцов (iov) 24.11.11 23:50
(0) нет ну что сказать ... Не то что нового - вообще ничего особенного - это даже не работа а так 15 минут пока кофе пьешь. Плюс за то что расписал - трудился сделал все почти без глобального переписывания конфы. но блин и код посмотрел . ну нету изюминки
За полезность - это должен уметь каждый.
За подачу плюс.... За то что ДВА месяца не писал такого а задерживался - минус.
И не новичок вроде (24.12.2008 09:38).
Нужен рейтинг для возможности качать? Пиши статьи - есть у тебя потенциал. Изложение художественное . Но опиши например топ ошибок и способы их решения тобой... Систему начисления бонусов манагерам или способ определения себестоимости продукта - до распределения на него всех косвенных затрат.
А так - решения для песочницы. Даже выгонялку и проверялку на другие регламентные задания не сделал.
2. VarvarV VVV (VarvarV) 25.11.11 08:29
(1) iov,
За комментарий спасибо - любая информация полезна.
Не то что нового - вообще ничего особенного - это даже не работа а так 15 минут пока кофе пьешь
Ну так не на "зубров" рассчитано а на начинающих.
ну нету изюминки
Столкнулся с проблемой - решил. Мне не изящество надо было а решение проблемы.
За то что ДВА месяца не писал такого а задерживался
Сначала просто думал что это разово попросили... потом пытался "организовать" ручное выполнение бухгалтером... и только когда стало ясно что надо придумывать как самому выкручиваться - тогда и написал.
А так - решения для песочницы. Даже выгонялку и проверялку на другие регламентные задания не сделал.
Если не трудно покажите ту песочницу где про это написано - я сначала поискал в литературе и интернете - негусто...
Здесь выложен принцип и код как при автоматичеком запуске обработки "Проведение по партиям" сохранять сообщения. У себя в рабочей системе есть и проверки и ... здесь не хотел перегружать статью, так как на уровень новичков рассчитывал.
3. Александр Зубцов (iov) 25.11.11 12:25
(2) Так я и написал что песочница- читай новички.
Плюс за то что расписал - трудился сделал все почти без глобального переписывания конфы
Просто выложил все это как обработку а не как статью - вот потому и вопросы. Будь это просто статья- словил бы плюс... Но именно как решение - слишком просто (если новичок это не способен сделать - то боюсь это уже не лечится).
4. aspirator 23 (aspirator23) 03.12.11 13:35
Аналогичную задачу делал через журнал. Для моих задач там все есть.
Но ни один раз сталкивался, что на продолжительных проведениях - 5 и более часов фоновое задание запускаемое сервером падало. Версия 8.2
Не сталкивался?
5. Андрей Кузнецов (climepost) 06.12.11 11:17
(4) aspirator23,
да, в 8.2 дублирование сообщений в журнал регистрации как раз избавляет от необходимости менять конфигурацию.
6. Владимир Чаклин (vec435) 06.12.11 11:49
еще вариант: запуск 1С из ярлыка с параметром /Out "полный путь к файлу-логу"
7. Денис (amyd) 16.08.13 10:13
все гениальное просто - и не нужно сумашедших идей, которые описаны по всему инету .. спасибо!
8. Alex Nikulin (Al-77) 05.09.13 15:44
Уважаемый вы пишите очищаем параметр сеанса что бы система не писала туда ошибки, не совсем понятна эта фраза. получается все что теперь происходит на сервере пишиться в параметр сеанса. или я что то не до понял.
9. Андрей Ро (AndrewVVS) 16.10.13 22:14
в 8.2 дублирование сообщений в журнал регистрации, кто в теме, поподробней с этого момента. Где в УТ 10.3 это настраивается? А то пришлось ошибки партии писать в журнал регистрации, а потом в конце регл задания их оттуда выгребать и отправлять Прльзователю + самому всегда можно посмотреть, кто из Пользователей начхал при проведении на данне сообщения! )), 1 строчка кода в СообщитьОНехваткеПартииУпр()
ЗаписьЖурналаРегистрации("Сообщение", УровеньЖурналаРегистрации.Примечание, СтрокаДокумента.Регистратор.Метаданные(), СтрокаДокумента.Регистратор, СтрокаСообщения, РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
10. kainder 12.02.14 17:28

У нас при перепроведнии, может возникнуть несколько ошибок на несколько тысяч строк.
Спасибо! Статья пригодилась для общего развития.
Я проверил её на практике, но в итоге я сделал по другому:
Запуск 1С из ярлыка с параметром /Out "полный путь к файлу-логу", затем обработал полученный текстовый лог-файл, разложил ошибки по их видам в разные колонки, сохранил табличку в эксель . Экселька отправляется бухгалтеру на почту и все довольны)
kolesnikovdv; Natgrey; +2 Ответить 1
11. Lena Ivanova (slelvi) 02.10.14 16:14
Поделитесь обработкой на slelvi@rambler.ru . Заранее спасибо
12. Roman Rezschikov (Angel_19) 26.03.15 13:30
13. Дмитрий Колесников (kolesnikovdv) 14.10.15 08:45
(10) kainder,
Приветствую!
Скажите пожалуйста, а как можно налету сохранять служебные сообщения при перепроведение документов, когда закрывается месяц?
Это нужно на тот случай когда проведение слетело по какой-то причине: связь с сервером БД пропала, свет отключили и т.д..
Таким образом мы бы имели ошибки и сообщения до момента аварийного выхода из системы и потом можно было бы продолжить проведение с той даты, на которой вылетела программа.
Спасибо!
14. VarvarV VVV (VarvarV) 01.06.16 16:15
(13) kolesnikovdv,
Например завести в конфигурации новый регистр сведений для таких сообщений, и писать сообщения не в параметр сеанса а в этот регистр новыми записями. Или вообще не в регистр писать а в текстовый файл.
15. Alex Su (alexsu4236) 10.11.16 13:27
6 - /OUT не срабатывает при аварийном завершении.