Велостыли: Регламентные задания

Программирование - Практика программирования

Переделывая очередное «Костыльное» решение, в голову пришла мысль, собрать все странные решения в одну статью, чтобы была некая библиотека о том, как делать не надо (Навеяно вредными советами). Потом понял, что в одну статью не получится все записать, начну с регламентных заданий. Поясню, в данную статью попали примеры из жизни, которые так или иначе реализованы на механизме регламентных заданий, при этом совершенно не всегда этот подход в принципе оправдан.

Не пытайтесь повторить это на работе!

Сокращения и сленг в статье:

  • РЗ - Регламентное задание
  • ФЗ – Фоновые задания
  • Шедулер -Task Scheduler, компонент Microsoft Windows, который предоставляет возможность запланировать запуск программ или скриптов в определённые моменты времени или через заданные временные интервалы. (РЗ на Windows)
  • Батник - файл с расширением *.bat
  • БСП – Библиотека стандартных подсистем
  • УТ – Управление торговлей
  • ERP - 1С:ERP Управление предприятием 2.

Содержание:

1 Себестоимость для Директора.

2 Не смог доделать до конца и использовал помощь зала.

3 По старинке. Толстым по тонкому.

4 Перемудрили, хотели как лучше наверное…

5 ФЗ и Обработчик ожидания. РЗ чем-то не угодили?

6 Красивые картинки, устаревшее решение. Закупку программного обеспечения должны производить IT специалисты.

7 Почти все предусмотрели. Бесконечный цикл.

 

1 Себестоимость для Директора.

Поведали мне тут историю про ERP и директора, которого удивлял отчет по себестоимости. Суть в том, что в течение дня себестоимость по Номенклатуре менялась и его это дико удивляло, объяснить же ему, что это вполне нормально сил не нашлось. Был придуман «Гениальный» план…

Средствами MSSQL раз в день (ранним утром) из последнего бекапа подымалась копия базы доступ, к которой был прописан директору за место рабочей базы. Все ради того чтобы он мог смотреть отчет по себестоимости с неменяющимися в течение дня цифрами. Соответственно копия весит ровно столько же, сколько и рабочая база.

На самом деле удивляет, что из всех возможных вариантов, а их на вскидку приходит в голову масса, к примеру:

-по регламенту собирать куда-то срез на утро и сделать отчет именно по этому срезу.

-либо дополнительный отчет (механизм из БСП), сохраняющий данные при первом запуске за день, а все последующие запуски в течение дня, показывающий только сохраненные данные.

-или все-таки объяснить, что меняющаяся себестоимость в течение дня - это нормально.

Но выбрали именно такой ресурсоемкий вариант…

2 Не смог доделать до конца и использовал помощь зала.

Эту ситуацию рассказала мне коллега по работе. Была задача, по регламенту собирать некий файл Excel и отправлять его на почту, но 1с программист не смог довести всю работу до конца. Толи у него сил не хватило, толи времени, толи желания…

Средствами 1с по регламенту собирался файл Excel и сохранялся на диск. Средствами виндового шедулера запускался скрипт, который отправлял тот самый файл по почте. Самое важное, что поработал 1С программист и системный администратор, они настроили время запуска РЗ и шедулера так, чтобы все работало почти бесшовно…

3 По старинке. Толстым по тонкому.

Это решение видел я лично, досталось оно от одной Франчайзи. Была задачка: собирать с касс в Розницу (Серверная) данные по регламенту. Касс было около 100, по 1-2 на магазине. На кассах стоял Frontol, обмен касс с Розницей настроен был через файлы (подпиленный типовой механизм).

Виндовый шедулер запускал батник, который запускал 1С в толстом клиенте и запускал внешнюю обработку, которая запрашивала отчет за смену либо загружала отчеты, если они лежали в папках обмена.

Я понимаю, что типовые механизмы в данном случае написаны в большинстве на клиентских модулях, но по тому количеству переделок, что было в Рознице, видно было, что за первоначальный вид конфигурации не боролись, поэтому для меня до сих пор остается тайной, почему не создали регламент и не перенесли код на сервер. А лучше вообще создали бы дополнительную обработку (механизм из БСП) и перенесли код в нее и использовали бы ее как регламент.

4 Перемудрили, хотели как лучше наверное…

Это решение опять же видел лично, оно досталось от Франчайзи. Оно, кстати, не такое страшное как выше. В рознице необходимо было сделать регламент и обработку по запуску процедуры усушки товара. Запускать либо по регламенту, либо вручную.

Была добавлена обработка в «Расширения конфигурации» с формой. В модуле обработки была экспортная процедура. В конфигурацию было добавлено РЗ и модуль, в котором была одна единственная процедура:

Процедура ЗапуститУсушкуТовараВРознице() Экспорт

       Обработка = Обработки.УсушкаТовараРозница.Создать();

       Обработка.ЗапуститьУсушкуНаВсехСкладах(Неопределено);

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

Предполагаю, что хотели сделать доработку без изменения конфигурации, но не учли, что на тот момент в расширение еще нельзя было добавлять модули и до сих пор нельзя добавлять РЗ.

Можно было в уже созданной обработке, в модуле добавить функцию СведенияОВнешнейОбработке() Экспорт с двумя командами «ВызовСерверногоМетода» и «ОткрытиеФормы» и все… Используя механизм БСП без доработки конфигурации.

5 ФЗ и Обработчик ожидания. РЗ чем-то не угодили?

Это решение видел лично. Задача состоит в том, что нужно было проверять папку с небольшим интервалом и если в папке присутствует файл, обработать его и удалить. База Розница (Серверная).

Виндовый шедулер запускал батник, который запускал 1С в толстом клиенте и запускал внешнюю обработку, которая запускала фоновое задание и подключала обработчик ожидания. Данный механизм ломался, если что-то случалось на сервере, где запускался толстый клиент.

Тут или РЗ или дополнительная обработка решала бы данную задачу.

6 Красивые картинки, устаревшее решение. Закупку программного обеспечения должны производить IT специалисты.

Не буду рассказывать плотно про мобильное приложение, попробую кратенько. Есть некое мобильное приложение со значком «1С:Совместимо», нарисованное 10 лет назад (так заявлено на сайте), учитывая то, что первая версия мобильной платформы вышла 29.05.2013., а http сервисы пришли с платформой 8.3.5 в 10.07.2014. Получается 10 лет назад, это действительно был прорыв, но решения с годами устаревают и надо озаботится о переработке решения под текущие реалии.

В общем, стояла задача подобрать мобильное приложение для обмена с УТ10, причем решение b2b. На сколько я понимаю, выбрали это решение из-за красивых картинок на сайте. Громких лозунгов "Быстро, Дешево, Легко!". И от того, что фирму обслуживала Франчайзи являющаяся официальным партнером разработчика этого решения.

Вы скажите причем здесь регламентные задания!?

По большему счету, РЗ тут и недолжно быть, но… Рассказываю, как это все работает…

1 Скачивается некая внешняя обработка.

2 С помощью нее делаются настройки в базе.

3 Прописывается под кем она должна запускаться и на каком сетевом ресурсе будет лежать. К этому ресурсу у пользователей должны быть полные права.

4 Виндовый шедулер под пользователем запускает толстый клиент и запускает данную обработку, и она постоянно обрабатывает вызовы.

5 При старте обработка запускает какой-то сервер обработки вызовов, который принимает и отдает данные.

Самое странное, что при работе всего этого, чем больше клиентов подключается через мобилку, тем сложнее работать в УТ сотрудникам. Постоянные конфликты блокировок, съедание всех ресурсов и страшные тормоза, то есть с транзакциями откровенно плохо продумано. Да и сам этот механизм ломался при динамическом обновлении и разных факторах. В итоге раньше раз 10-20 в день завершали работу запущенного толстого клиента и запускали заново через батник прописанный в шедулере. Это уже как ритуал было ;))

В данный момент большая часть клиентов переведена на веб клиент + http-сервис, а параллельно всех остальных переводят на новое самописное приложение, работающее через http-сервис. УТ чувствует себя все лучше и лучше.

7 Почти все предусмотрели. Бесконечный цикл.

Вот этот вариант почти был рабочий, банальная ошибка привела к зацикливанию. По регламенту надо было отправлять сообщения из регистра, в котором они копились. Выбирались первые 100 записей с сортировкой по измерению «ПопыткаОтправки». Сначала надо было отправить те сообщения, которые в прошлый раз были не отправлены. Если сообщение по какой-то причине не отправлялось, «ПопыткаОтправки» увеличивалась на 1. По регламенту если попыток отправки было 10 и более (жестко прописано в коде) сообщения больше не выбирались из регистра. Все бы ничего, но «ПопыткаОтправки» было с типом Число(1), то есть достигнуть 10 было в принципе невозможно.

 

На этом пока все.

Я буду периодически пополнять данную статью и если вдруг вы нашли решение, которого здесь нет, но оно тоже «Костыльное» пишите в комментариях или мне на почту, я его добавлю.

 

В конце решил написать статью с примерами использования механизма из БСП, который мог решить большинство перечисленных выше задач -> БСП. Дополнительные отчеты и обработки. Регламентные задания примеры от простого к сложному

См. также

Комментарии
1. Сергей Лесовой (Synoecium) 283 10.05.18 09:45 Сейчас в теме
Спасибо, что-то на ИС мало статей на тему как не надо делать, большинство пишут как надо (все ведь знают как правильно делать).
Trancer64; корум; dsdred; +3 Ответить
2. kav kav (alexkmbk) 17 10.05.18 09:48 Сейчас в теме
Себестоимость для Директора. - Возможно директор хотел не фактическую, а плановую, то есть cost price.
3. Дмитрий Сидоренко (dsdred) 207 10.05.18 09:52 Сейчас в теме
(2)Речь была именно про Факт
4. Дмитрий Абрамов (DAAbramov) 10.05.18 10:18 Сейчас в теме
На инфостарте появилась рубрика "Вредные советы"?)
Upd
Спасибо, нашел
5. Петр Малыгин (pm74) 61 10.05.18 10:45 Сейчас в теме
С регламентными заданиями давно для себя решил проблему, универсальное параметризованное РЗ + справочник с хранилищем параметров. Вышло вполне удобно. Пытался опубликовать на ИС, зарубили по оформлению, до сих пор болтается в черновиках.
11. Дмитрий Сидоренко (dsdred) 207 10.05.18 22:27 Сейчас в теме
(5)Сильно зарубили?
Интересно было бы посмотреть на решение.
12. Петр Малыгин (pm74) 61 10.05.18 23:56 Сейчас в теме
(11) вот описание (сорри за качество записывал поздно вечером )
Прикрепленные файлы:
Описание.wmv
корум; dsdred; +2 Ответить
13. Дмитрий Сидоренко (dsdred) 207 11.05.18 09:19 Сейчас в теме
(12)Очень хорошее решение, подойдет для http и web сервисов, регламентных заданий. Надо допиливать статью и публиковать.
У меня в планах у самого было летом написание справочника команд, но тут готовое решение.

Однозначно допиливайте статью и публикуйте!!!

П.С. На ИС смотришь одни Com и XML заголовки мелькают, аж передергивает ;)) Поэтому и статьи стал писать чтобы народ прекращал старье в работе использовать.
14. Петр Малыгин (pm74) 61 11.05.18 10:13 Сейчас в теме
(13) код с тех пор уже сильно изменился , в старом тоже куча недочетов (лишних процедур , серверных вызовов итп) нужен рефакторинг .
Думал сделать как расширение , жаль только в него регламентное задание не добавить
15. Дмитрий Сидоренко (dsdred) 207 11.05.18 10:27 Сейчас в теме
(14) Расширение + дополнительная обработка (БСП:Дополнительные отчеты и обработки) чем не вариант?
16. Петр Малыгин (pm74) 61 11.05.18 10:41 Сейчас в теме
(15) не думал на эту тему , можно попробовать.
кстати из предыдущего моего комментария может сложиться мнение , что какая то нерабочая поделка, но это не так . Работает уже несколько лет в боевом режиме на 2 базах.
Прикрепленные файлы:
Пример.wmv
17. Дмитрий Сидоренко (dsdred) 207 11.05.18 10:59 Сейчас в теме
(16)Обязательно нужно публиковать!

Реально то, что хотел писать сам))
6. kiruha Д (kiruha) 366 10.05.18 10:53 Сейчас в теме
Отдельная база для директора решает множество других проблем :
1) Кроме себестоимости может много чего меняться за день
2) Ничего не тормозит
3) Ничего не блокируется
Обычно только это называется ежедневной копией и доступ кроме директора дается еще финикам
Synoecium; +1 Ответить
7. Сергей Лесовой (Synoecium) 283 10.05.18 11:20 Сейчас в теме
(6) кстати да, в статье пишется, что цель у директора была чтобы "себестоимость не менялась" и такую проблему можно решить гораздо проще, но такая копия базы очень полезна и возможно стоит потраченных на неё ресурсов. А бывает что нужна еще и третья база - кроме актуальной копии с неизменной информацией еще и тестовая копия которую можно убивать в хлам и она сама восстановится на следующий день.
8. Дмитрий Сидоренко (dsdred) 207 10.05.18 11:25 Сейчас в теме
(6)
Отдельная база для директора решает множество других проблем :
1) Кроме себестоимости может много чего меняться за день
2) Ничего не тормозит
3) Ничего не блокируется
Обычно только это называется ежедневной копией и доступ кроме директора дается еще финикам


Обычно, но повторю. Задача была и возникла из-за одного единственного типового отчета на СКД и только для одного человека.
При этом в конторе около 300 сотрудников, в том числе и финики.
9. Ольга Николаевна (ron1) 10.05.18 11:39 Сейчас в теме
А мы тоже сделали копию, только на sql, и в ней директор, экономисты, финансисты и другие "исты" делают отчеты, потому что быстро. Обычно их не интересует текущий день, они делают отчеты за прошлые годы и уже закончившиеся кварталы и месяцы. Бухгалтерии удобно тем, что у них перестало тормозить, а "истам" удобно в том, что когда бухгалтерия закрывает период и почти каждый день запускает перепроведение документов это им не мешает . Все довольны.
корум; +1 Ответить
10. Ольга Николаевна (ron1) 10.05.18 11:42 Сейчас в теме
п.6 я догадываюсь о каком мобильном приложении речь. Мы тоже помучились, пока руководитель не понял, что это лохотрон.
18. Павел Колмаков (Stim213) 331 22.05.18 14:43 Сейчас в теме
5 ФЗ и Обработчик ожидания. РЗ чем-то не угодили?

Это решение видел лично. Задача состоит в том, что нужно было проверять папку с небольшим интервалом и если в папке присутствует файл, обработать его и удалить. База Розница (Серверная).


Ничего, что регламентные задания выполняются на сервере и от имени пользователя, под которым запущена служба?
При использовании в клиент-серверном режиме сервер ни сном ни духом о файлах на клиенте и ваше РЗ или обработка с РЗ не будут иметь доступа к нужным файлам.
Кроме того, даже если у вас клиент и сервер на одной машине(например, RDP), то, чтобы сервер видел папку пользователя - нужно давать права пользователю, под которым запущен сервер на эту папку. И в этом случае доступ к папке будут иметь все, т.к. что доступно серверу - доступно всем. По этой причине серверный пользователь должен быть максимально ограничен в правах.
Подробнее можете почитать: https://infostart.ru/public/659098/


Почитайте немного матчасть, прежде чем критиковать чужие решения.
20. Дмитрий Сидоренко (dsdred) 207 22.05.18 15:27 Сейчас в теме
(18)В том то и дело, что я в курсе того, что вы описали.

То есть Вы считаете нормальным решением на сервере по таску батником (в котором указан логин и пароль) открывать толстого клиента с обработкой под определенным пользователем который ломится в некую папку?
22. Павел Колмаков (Stim213) 331 22.05.18 17:48 Сейчас в теме
(20)

То есть Вы считаете нормальным решением на сервере по таску батником (в котором указан логин и пароль) открывать толстого клиента с обработкой под определенным пользователем который ломится в некую папку?


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

Простой пример - Клиент-серверная база, пользователи работают по RDP на сервере1. При этом служба 1С запущена на сервере2, к которому никому, кроме админов, нет доступа. Папка с файлами находится на терминальном сервере 1.
А теперь расскажите, как через РЗ вы организуете чтение файлов этой папки.
19. Павел Колмаков (Stim213) 331 22.05.18 14:54 Сейчас в теме
+ аналогично по прочим пунктам.
Поймите же, что при выполнении РЗ серверный пользователь при всем своем(и вашем) желании не сможет увидеть файлы, хранящиеся на клиенте. Для этого нужен толстый/тонкий клиент, который запускается шедулером.
21. Дмитрий Сидоренко (dsdred) 207 22.05.18 15:33 Сейчас в теме
(19)Я это понимаю, так как описанные выше решения переводил на РЗ.

Вы правда считаете, что "Папки для обмена" делают на "клиенте" у некого пользователя при клиент\серверном решении?
23. Павел Колмаков (Stim213) 331 22.05.18 17:53 Сейчас в теме
(21)
Вы правда считаете, что "Папки для обмена" делают на "клиенте" у некого пользователя при клиент\серверном решении?


я не могу знать кто и с какой целью создает эти папки. Но если вы хотите обеспечить безопасность файлов в ней, то не следует давать права неё пользователю, под которым крутится сервер, потому что таким образом содержимое может прочесть любой пользователь.
Если секретных данных в папке нет или безопасность поддерживается на уровне ларька средней руки - то можно и сервер. пользователю дать доступ.
24. Павел Колмаков (Stim213) 331 22.05.18 17:56 Сейчас в теме
+ я не говорю, что это правильно или неправильно.
Может в вашей конкретной ситуации РЗ и является корректным решением. Но в более общем случае и при разработке универсальных решений такой подход может являться единственно правильным способом, поэтому не стоит так бездумно винить разработчиков. Возможно, у вас просто мало опыта.
25. Дмитрий Сидоренко (dsdred) 207 22.05.18 18:57 Сейчас в теме
(24)Отвечу на все разом, если Вы не против.
Согласен, возможно, я не слишком подробно описал, но я предполагал, что упомянув 100 касс с Frontol и файловый обмен в 3 примере, это уже натолкнет на ftp... То есть с касс по ftp прилетали файлы в папки рассшаренные всем пользователям кроме того под которым крутилось 1с по принципу, что Вы описали выше(20). На стороне, где крутится 1с, запускалось то чудо, что я описал. Собственно я перерисовал код под ftp.

По 5 примеру с удалением файла из папки. Инвентаризаторы создавали некий файл определенного формата и передавали его тоже через ftp из вне. Дальше работало то, что описано выше. Я такие вещи в принципе делаю через http сервисы.

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


А по поводу "не следует давать права неё пользователю, под которым крутится сервер", а каким образом работают файловое хранилище в новых конфигурациях? 1С сама сделала именно такой вариант: пользователь, под которым крутится сервер, имеет доступ к папке с файлами, а уже остальным пользователям на уровне конфигурации запрещено использовать внешние обработки, и зарезаны различные доступы. (Хотя может, что то изменилось, но года полтора назад именно так и было)

-> http://v8.1c.ru/doc8/4.htm
Вырезка: "Для работы с файлами различных типов используются приложения, установленные на компьютере пользователя и ассоциированные с соответствующим типом файлов.

Все файлы хранятся в информационной базе или томах на диске и копируются на локальный компьютер для просмотра или редактирования по требованию пользователя.

В информационной базе для хранения файлов предусмотрена структура папок. Файлы распределяются по папкам. Доступ сотрудника к папке может быть ограничен заданными правами доступа."
Оставьте свое сообщение