|
Интерпретация ДиалогРасписанияРегламентногоЗадания в таблицу дат | ☑ | ||
---|---|---|---|---|
0
Веселый Джузеппе
28.06.19
✎
09:08
|
Доброе утра, уважаемые форумчане!
Занимаюсь задачкой, в рамках которого требуется сделать некий механизм планирования процессов, планированием занимается пользователь. Доработки веду на базе 1С Розница 2.2.11.30, 1С:Предприятие 8.3 (8.3.13.1513) На данном этапе картина следующая, есть справочник "Группы обучения", у которого есть кроме всего прочего реквизит РегламентноеЗадание (тип УникальныйИдентификатор), подвязанный к моему регламентному заданию. Идея регламента - оповещение о проведении занятия, расписание настраивается отдельно, для каждого элемента справочника. Вопрос в следующем, как мне интерпретировать расписание в некую структуру, чтобы на ее основании заполнять РС для формирования плана проведения занятий? Может кто сталкивался с подобной реализацией? Поделитесь опытом! |
|||
1
Веселый Джузеппе
28.06.19
✎
09:13
|
Также приветствуются альтернативные механизмы реализации планирования, календарь аля документооборот не предлагать)
|
|||
2
Йохохо
28.06.19
✎
09:19
|
ошибка проектирования
|
|||
3
Веселый Джузеппе
28.06.19
✎
09:21
|
(2) только в том, что гибкости не хватит? Проект не срочный, мне больше интересно разобраться в механизме
|
|||
4
exwill
28.06.19
✎
09:22
|
(0) Не умножайте сущности... Храните в справочнике РасписаниеРегламентногоЗадания и оповещайте себе на здоровье.
|
|||
5
Йохохо
28.06.19
✎
09:25
|
(3) в том что задание это изменяющаяся во времени сущность и вообще не привязана к предметной области, в реквизите ей делать нечего
|
|||
6
Веселый Джузеппе
28.06.19
✎
09:29
|
(4) (5) Справедливо, я уже столкнулся умножением регламентов, решил переделать.
Есть ли механизмы для работы с РасписаниеРегламентногоЗадания или придется писать свой парсер, чтобы на выходе получить, например, таблицу значений? |
|||
7
Веселый Джузеппе
28.06.19
✎
09:31
|
Как бы вы подошли к реализации данной задачи?
|
|||
8
palsergeich
28.06.19
✎
09:36
|
Глянь как в БСП это сделано.
|
|||
9
exwill
28.06.19
✎
09:38
|
(6) Ну какой там парсер! Надо оповестить - используешь метод ТребуетсяВыполнение(). Надо визуализировать календарь - используешь его же. Выкинь таблицу из головы.
|
|||
10
Веселый Джузеппе
28.06.19
✎
09:38
|
(8) в части какой подсистемы?
|
|||
11
palsergeich
28.06.19
✎
09:40
|
Как бы сделал я
РС в котором хранится дата следующего запуска в разрезе заданий. + Регламентные задание которое рассчитывает дату следующего задания которое <= текущая дата. + Регламентные задание, которое запускает регламентные задание, время которого пришло, в принципе их можно объединить. + Вместе с объектом расписание регламентные задание хранил бы его хеш. + Подписка на событие - хеш изменился - делаем расчет даты следующего запуска. |
|||
12
palsergeich
28.06.19
✎
09:40
|
(10) регламентные задания
|
|||
13
palsergeich
28.06.19
✎
09:41
|
Или рассылка отчётов по расписанию.
|
|||
14
Веселый Джузеппе
28.06.19
✎
09:44
|
(9) Действительно, можно этот метод в цикле погонять.
Вопрос, какой тип реквизиты справочника должен быть, чтобы хранить РасписаниеРегламентногоЗадания? Я видел только примеры с гуидом на конретный экземляр регламентного задания, где и хранилось расписание |
|||
15
Веселый Джузеппе
28.06.19
✎
09:47
|
(11) В целом для просчета следующего подойдет, но есть потребность анализа всего расписания в целом, т.е. при изменении расписания надо прописывать все даты (ТребуетсяВыполнение()), когда оно отработает, например для вывода в диаграмму ганта
|
|||
16
palsergeich
28.06.19
✎
09:49
|
(15) ну рассчитывай на весь период.
Просто с расписанием храни его хеш и при изменении пересчитывая. |
|||
17
palsergeich
28.06.19
✎
09:52
|
Пусть даже самым тупым способом.
Ясно что квант расписания одного задания не может быть меньше какой то величины. Тупо циклом прибавляй у дате это значение и ТребуетсяВыполнение() |
|||
18
Веселый Джузеппе
28.06.19
✎
09:52
|
(16) В (4) правильно написано, что мне экземпляр регламента на каждый элемент мне по сути не нужен, достаточно хранения расписания.
Но пока я не понял, как его можно привязать к элементу справочника |
|||
19
exwill
28.06.19
✎
09:53
|
(14) Строка же. Строка все стерпит )))
|
|||
20
Веселый Джузеппе
28.06.19
✎
10:07
|
(19) допустим, как его в Новый РасписаниеРегламентногоЗадания конвертировать?
|
|||
21
Веселый Джузеппе
28.06.19
✎
10:08
|
Т.е. получается есть строка вида "c 1 января 2019 г. по 1 августа 2019 г. каждый 2-й день; с 7:00:00 по 20:00:00 каждые 5 секунд"
|
|||
22
palsergeich
28.06.19
✎
10:12
|
(21) нет.
Массив дат сериализуешь в json или xml и пихаешь в реквизит. Но это костыль.лучше сделать РС. 2 измерения - ссылка на справочник и дата. Тогда ты сможешь получать эти значения в запросе без постобработки, а оно потребуется, поверь. |
|||
23
palsergeich
28.06.19
✎
10:13
|
А если само расписание - то значение в строкувнутр или сериализовать во чтотнибудь
|
|||
24
palsergeich
28.06.19
✎
10:13
|
(21) из такой строки ты обратно расписание не получишь.
|
|||
25
Веселый Джузеппе
28.06.19
✎
10:14
|
(23) было бы логично хранить именно расписание, я думаю. Для его корректировки возможной, как минимум...
|
|||
26
palsergeich
28.06.19
✎
10:21
|
(25) правильнее хранить и то и то.
Меняешь расписание -> пересчитывает даты. Нужно отчёт/запрос или ещё что то - обращаешься к рассчитанным данным, а не пишешь набор данных.объекд для СКД и прочие непотребство. Неужто ты для составления календаря на год будешь получать все расписания, потом получать все даты, а потом только выводить? Ванную это будет работать так медленно, что ты потом пожалеешь, что сэкономил на спичках (регистре) |
|||
27
exwill
28.06.19
✎
10:23
|
(20) Кошерно - через XDTO
Некошерно - через ЗначениеВСтрокуВнутр(), ЗначениеИзСтрокиВнутр(). |
|||
28
exwill
28.06.19
✎
10:24
|
(26) Это будет работать быстро. Чему там замедляться?
|
|||
29
palsergeich
28.06.19
✎
10:28
|
(28) во первых чисто суульная операция априори быстрее встроенного кода.
Во вторых 1000 расписаний за год это больше миллиона небесплатных проверок. |
|||
30
palsergeich
28.06.19
✎
10:32
|
(29) с шагом. В час
|
|||
31
Веселый Джузеппе
28.06.19
✎
10:40
|
(27) прокатил некошерный вариант, спасибо!)
никогда не пользовался функциями, день прошел не зря) |
|||
32
Веселый Джузеппе
28.06.19
✎
10:41
|
(31) именно этими ЗначениеВСтрокуВнутр(), ЗначениеИзСтрокиВнутр() (уточнение)
|
|||
33
Вафель
28.06.19
✎
10:42
|
с регистром нужен регламент для расчета дат
+ не забывать пересчитывать при изменении |
|||
34
Веселый Джузеппе
28.06.19
✎
10:43
|
по факту получилось:
Реквизит справочника РасписаниеГруппы тип Строка(1000) &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ПолучитьРасписаниеРегламентногоЗадания(); КонецПроцедуры &НаСервере Процедура ПолучитьРасписаниеРегламентногоЗадания() Если ЗначениеЗаполнено(Объект.РасписаниеГруппы) Тогда Расписание = ЗначениеИзСтрокиВнутр(Объект.РасписаниеГруппы); Иначе Расписание = Новый РасписаниеРегламентногоЗадания; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура КомандаНастроитьРасписание(Команда) Если Расписание = Неопределено Тогда ПолучитьРасписаниеРегламентногоЗадания(); КонецЕсли; ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); ДополнительныеПараметры = Новый Структура; ОбработчикОповещения = Новый ОписаниеОповещения("НастроитьРасписаниеЗавершение", ЭтотОбъект, ДополнительныеПараметры); ДиалогРасписания.Показать(ОбработчикОповещения); КонецПроцедуры &НаКлиенте Процедура НастроитьРасписаниеЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат <> Неопределено Тогда ЭтаФорма.Модифицированность = Истина; Расписание = Результат; РасписаниеСтрокой = Строка(Расписание); ЗаписатьРасписаниеНаСервере(); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаписатьРасписаниеНаСервере() Объект.РасписаниеГруппы = ЗначениеВСтрокуВнутр(Расписание); КонецПроцедуры |
|||
35
Веселый Джузеппе
28.06.19
✎
10:44
|
ну и наверно, буду переписывать регистр сведений после изменения расписания, чтобы удобнее было работать в запросах.
Всем спасибо за участие в решении вопроса. |
|||
36
exwill
28.06.19
✎
10:44
|
(29) Какая-такая тысяча расписаний? Мы что, МГУ просчитываем?
|
|||
37
Вафель
28.06.19
✎
10:44
|
(34) а где настройка рег заданий на расписание?
|
|||
38
palsergeich
28.06.19
✎
10:47
|
(36) За год даже в паршивеньком УЦ типо автошколы несколько сотен групп более чем реальность.
В МГУ и МГТУ счет идет на десятки тысяч |
|||
39
Веселый Джузеппе
28.06.19
✎
10:49
|
(37) так оно уже не нужно, я с ним изначально завязался т.к. не знал, как реализовать работу с РасписаниеРегламентногоЗадания.
При записи элемента справочника заполняю регистр измерение ссылка на справочник, ресурс дата выполнения. Отдельное регламентное задание будет за текущий день собирать записи с регистра и формировать оповещения и т.д. |
|||
40
palsergeich
28.06.19
✎
10:53
|
(39) Лучше не при записи, а при реальном изменении. Так будет оптимальнее.
Можно в лоб сравнить строки, можно хеш функцией. |
|||
41
Веселый Джузеппе
28.06.19
✎
10:57
|
(40) я понял мысль, согласен, нужна контролька, чтобы попосту не переписывать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |