Алгоритмы и регламентные задания

Программирование - Инструментарий

нужные вещи универсальный алгоритмы регламентные задания 8.3

17
Универсальный механизм для создания алгоритмов и регламентных задач.

Несколько лет назад на Инфостарте уже была моя публикация ("Регламентные задания") для 8.2 . Решил выложить снова, переработанный  вариант (под влиянием публикации БСП: Дополнительная обработка (Регламенты) + Расширения, примеры от сложного к универсальному)  Код адаптирован под 8.3.

Коротко о функционале:

  •  выполняет произвольный  код на сервере или клиенте (обращение к серверу)
  •  в коде можно использовать  произвольные параметры
  • параметры можно передать при вызове, либо установить по умолчанию
  • доступны следующие типы сохраняемых параметров:  примитивные , ссылки , коллекции (массив,структура,соответствие, таблица значений) , файлы ,  программное создание  (все, кроме 2 последних, можно редактировать интерактивно)
  • может  работать как функция (возвращает соответствие) + возможно кэширование
  • есть обработка и регистрация (ЖР)  ошибок
  • для удобства редактирования используется  псевдокод
  • есть  шаблоны
  • можно использовать  как  регламентные задания

подробнее  можно видео посмотреть :   описание

Ниже  о том  как  подключить  и  добавить  регламентные задания:

 Вариант 1 :  Сравнить и объединить  с существующей конфигурацией.

Протестировано на  конфигурации демо БСП 2.4.6.56 ( 8.3.11.3034 , режим совместимости 8.3.10 )  ,  для исходной конфигурации установлен режим совместимости 8.3.8 , но должно "стрелять"  и на более ранних версиях

Будут добавлены  5 общих модулей , 1 справочник и  1 регламентное задание . 

  1.  Создаем новый алгоритм.
  2.  добавляем его как регламентное задание
  3.  проверяем , что задание создано ,  устанавливаем  активность ,  создаем  расписание (использовал  стандартную  обработку  в составе  БСП  ) ,    выполняем
  4. результат выполнения    - запись "ВЫПОЛЕНО РЕГЛАМЕНТНОЕ ЗАДАНИЕ  " в ЖР

 Вариант 2 :  Расширение + дополнительная  обработка (только для  8.3.11(12) + режим совместимости - "Не использовать")

Протестировано на  конфигурации демо БСП 3.0.1.127 (8.3.12.1440 , режим совместимости "Не использовать" )

  1.  подключаем расширение ( ! тут неудачный скриншот  , безопасный режим выключать не обязательно  )
  2.  пишем код
  3. добавляем РЗ
  4. добавляем доп. обработку.  (есть в загрузках ,  но можно  сделать самостоятельно , код модуля ниже )
     
     код модуля обработки

  5. проверяем
  6.   Я не стал заморачиваться  с удобством обновления регламентных задач ,  как это сделал Дмитрий , поэтому для обновления списка  РЗ  нужно зайти в дополнительные обработки  и  выполнить  команду "Обновить из файла".

 

На этом всё.  Найденные ошибки, критику  и  пожелания   пишите в комментариях.

Всем добра.

UPD  9.09.2018   Добавил  форматирование  текста  и конструктор запросов

17

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

Наименование Файл Версия Размер
Конфигурация Алгоритмы (upd 29.11.2018):
.cf 92,24Kb
29.11.18
3
.cf 92,24Kb 3 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. dsdred 939 28.05.18 09:48 Сейчас в теме
Петр, я правильно понимаю что:
Основа это "Конфигурация Алгоритмы" cf или "Алгоритмы расширение (8.3.11)." cfe, а Обработка обновления РЗ. это просто Доп обработка с описанием команд для "Алгоритмы расширение (8.3.11)."?


Пример файл шаблонов xml какие примеры содержит?
2. pm74 135 28.05.18 09:52 Сейчас в теме
(1) да все верно
файл шаблонов - это просто сериализованая в xml ТЗ с колонками Ключ(Строка10) Значение(Строка1024)
можно редактировать и в 1С , но в файле удобнее
3. dsdred 939 28.05.18 09:54 Сейчас в теме
(2)Хорошо, сегодня скачаю поэксперементирую.
4. pm74 135 28.05.18 09:57 Сейчас в теме
5. pm74 135 28.05.18 11:06 Сейчас в теме
(3)
поэксперементирую


эта версия несколько отличается от видео , в части написания кода , примеры есть во встроенной справке
напр:
Пример:

алгоритм1 :   $Ё=1;  Сообщить($Ё); @Процедура(@алгоритм2, Новый Структура("this,Й",this,66)); Сообщить($Ё); // выведет  1 1  66  2 99

алгоритм2 : Сообщить($Ё); Сообщить(@Й);  $Ё=2; @$Ё=99;  Сообщить($Ё);  
6. dsdred 939 28.05.18 11:11 Сейчас в теме
7. zeegin 35 01.06.18 18:54 Сейчас в теме
Зачем нужно расширение, позволяющее сохранять и исполнять произвольный код, если можно этот произвольный код сразу расположить в расширении и подключить/исполнять штатными средствами, при этом сохраняя безопасный режим не подвергая сервер угрозам.

Выглядит как ужасный костыль.
8. pm74 135 01.06.18 19:17 Сейчас в теме
(7)
Выглядит как ужасный костыль

улыбнуло , на самом деле этот костыль одна из самых полезных штук которые я для себя сделал
все дело в параметрах
9. VVi3ard 42 29.11.18 15:35 Сейчас в теме
Спасибо.
Как раз возникла задача добавить в свою разработку произвольные алгоритмы с поддержкой цепочек алгоритмов.

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

Спасибо за то что поделились подсистемой.
12. pm74 135 29.11.18 17:45 Сейчас в теме
(9)пожалуйста, если пригодилась пользуйтесь на здоровье,
Писалось кусками на разных версияхтплатформ для себя в основном , поэтому код не совсем причесан, сейчас понемногу дорабатываю
10. VVi3ard 42 29.11.18 16:17 Сейчас в теме
&НаСервере
Процедура ПрочитатьНаСервере(АдресХранилища)
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);	
	Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения();	
	ЧтениеXML = новый ЧтениеXML;
	ЧтениеXML.ОткрытьПоток(Поток);
	ТаблицаШаблонов = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ДобавитьНовыйПараметрНаСервере(Новый Структура("НаименованиеПараметра,ЗначениеПараметра","Шаблоны",ТаблицаШаблонов));
КонецПроцедуры // ПрочитатьНаСервере()
Показать


В 1С:Предприятие 8.3 (8.3.9.2170) у ЧтениеXML нет метода ОткрытьПоток он появился только в 8.3.10.2168.
В описании у вас написано что для работы нужен 8.3.8.
Думаю стоит поправить в описании что минимальный релиз платформы 8.3.10
11. pm74 135 29.11.18 17:41 Сейчас в теме
(10)это просто бантик для удобства , не считается, на одной фирме работает на 8.2 хотя где то могут быть небольшие нестыковки , см следующий коммент.
13. VVi3ard 42 07.12.18 12:09 Сейчас в теме
Появилось еще несколько вопросов по подсистеме, думаю они будут интересны не только мне.

1. В форме редактирования алгоритмов есть кнопки работы с текстом: "ФормаСохранитьТекст,ФормаВосстановитьТекст" для чего предполагается их использовать?
2. Совсем не понял идею шаблонов, таблиц шаблонов, в видео есть пара слов об этом но не понятно в чем смысл, плюс в видео вероятно достаточно старая версия подсистемы и там шаблоны немного по другому устроены.
3. Для чего используются тэги.
4. Что дает флаг настройки алгоритма "На клиенте", мы ведь сами выбираем откуда выполнить алгоритм (алг_АлгоритмыКлиент.Выполнить..., алг_АлгоритмыСервер.Выполнить....)? Я пока нашел только одно место где это используется для определения того как передавать параметр с типом ТЗ в алгоритм.

Отдельный вопрос, точнее даже пожелание, не нашел способа выгрузки (Рекурсивной с учетом зависимостей) алгоритмов в файл для переноса их между базами.
Понятно что можно самому реализовать выгрузку, однако возможно уже есть выгрузка просто в виде отдельного функционала?
14. pm74 135 07.12.18 12:39 Сейчас в теме
(13)
"ФормаСохранитьТекст,ФормаВосстановитьТекст"

текущую версию алгоритма сохранить в хранилище , для восстановления версии - переименовать параметр в ТекстАлгоритма

(13)
Совсем не понял идею шаблонов, таблиц шаблонов, в видео есть пара слов об этом но не понятно в чем смысл, плюс в видео вероятно достаточно старая версия подсистемы и там шаблоны немного по другому устроены

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


(13) тэги для быстрого поиска в списке

(13)
Что дает флаг настройки алгоритма "На клиенте", мы ведь сами выбираем откуда выполнить алгоритм (алг_АлгоритмыКлиент.Выполнить...,

это в основном для дальнейшего функционала - построения пользовательских интерфейсов + в режиме редактирования алгоритма позволяет его протестировать

способа выгрузки (Рекурсивной с учетом зависимостей) алгоритмов в файл для переноса их между базами.
да тоже думал об этом , первоначально было сделано для тз шаблонов просто как элемент справочника , нужно будет добавить
Прикрепленные файлы:
16. VVi3ard 42 07.12.18 18:00 Сейчас в теме
(14) Что делают кнопки я понял, не понял именно прикладной смысл использования, зачем это нужно?
т.е. это типа черновика? что бы потом можно было посмотреть предыдущие версии алгоритма?

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


(14)
это в основном для дальнейшего функционала - построения пользовательских интерфейсов + в режиме редактирования алгоритма позволяет его протестировать

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



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

Да это было бы полезно странно как вы без этого живете, вероятно у вас одна база? Но даже просто из тестовой базы в продакшен перенести уже проблема.
Мне в общем то все равно пришлось писать отдельную выгрузку т.к. алгоритмы используюся совместно с другими сущностями и выгружать их нужно вместе.
18. pm74 135 07.12.18 19:57 Сейчас в теме
(16)
А шаблон это получается обычный алгоритм
.. не понял именно прикладной смысл использования, зачем это нужно?
т.е. это типа черновика?

ну да

(16)
странно как вы без этого живете, вероятно у вас одна база

не понял именно прикладной смысл использования

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

по поводу интерфейсов , тут разные варианты
например написать небольшие алгоритмы- адаптеры
Запрос = Новый Запрос; 
Запрос.Текст = @ТекстЗапроса; 
Для Каждого Параметр Из Параметры Цикл 
	Если Не Параметр.Ключ = "ТекстЗапроса" Тогда 
		Запрос.УстановитьПараметр(Параметр.Ключ,Параметр.Значение); 
	КонецЕсли; 
КонецЦикла; 
тз = Запрос.Выполнить().Выгрузить(); 
ТабДок = Новый ТабличныйДокумент;
ТабДок.Защита = Истина; 
Для i = 0 По тз.Количество()-1 Цикл 
	Для j = 0 По тз.Колонки.Количество()-1 Цикл 
		Область = ТабДок.Область("R"+(i+1)+"C"+(j+1)); 
		Область.Текст = Формат(тз[i][j], "ЧЦ=10; ДФ=dd.MM.yyyy; БЛ=Ложь; БИ=Истина"); 
		Область.Расшифровка = тз[i][j]; 
	КонецЦикла; 
КонецЦикла; 
возврат ТабДок;;

//----------------
или  например  обработка  ДЗ  на форме  с рекурсией


Если @дз.Строки.Количество() > 0  Тогда 
	Для Каждого Строка Из @дз.Строки Цикл
     	@Процедура(@алгоритм,Новый Структура("дз",Строка));
	КонецЦикла;
Иначе
	@дз.Пометка = Не @дз.Пометка;
КонецЕсли;

или просто взять любой   понравившийся код  на   ИС
Показать

или просто взять любой понравившийся код на ИС
и вывести в любое месте , в любом порядке и количестве , т.е в течение 15 мин. настраивать всякие рабочие места , рабочие столы и т.п . это минимум

задача на ближайшую перспективу , сделать универсальный механизм для декларативного (почти) описания систем со сложным поведением
15. pm74 135 07.12.18 12:56 Сейчас в теме
(13)
думаю они будут интересны не только мне

думаю тут вы ошибаетесь )) см 7 ,
впрочем меня это устраивает, я даже плюсанул
это все очень далеко до завершения , использую пока больше для повседневки, регламентов и всяких экспериментов
зы еще примерчик шаблонов
Прикрепленные файлы:
17. VVi3ard 42 07.12.18 18:06 Сейчас в теме
(15) Ну разные люди бывают с разным мнением. Я рад за (7) и что ему не приходится с этим связываться.
В моем случае алгоритмы это часть другой подсистемы которая используется в большом количестве ИБ по РБД при этом обновить их достаточно тяжело и только в определенные моменты времени. А вот спустить несколько элементов справочника через встроенный НСИ сервер можно в любой момент. Так же есть теоретическая необходимость дать возможность определенным пользователям править алгоритмы не давая доступа к толстому клиенту и конфигуратору. Не всегда есть необходимость и время рисовать интерфейсы.
Оставьте свое сообщение