1с планировщик формат даты
Активно читаю "Заметки из зазеркалья". Большинству заметок я очень рад, и очень жду их реализации. Одно из них - это "Планировщик".
Собственно, статья будет посвящена этому новому, и как по мне, удобному механизму.
Так как в процессе изучения было выявлено несколько нюансов заполнения, решил написать статью с кодом заполнения.
О. спасибо за изучение темы )))). Я пока еще реализовывать для 8.3.6 не начал, хочется текущий функционал полностью допилить. А интерфейс можно заменить позже, я не вижу пока грядущих проблем.
Скажи в драг-энд-дроп на поле планировщика 1С поддерживает? А то у меня это один из недостатков )))))
(1) vandalsvq, Поддерживает.
Спасибо за идею. Я подумаю что еще в статью дописать.
(2) WalterMort, Ну на каждый механизм есть свой купец :)
Идей можно напридумывать.
Вот первые 3 которые на ум пришли.
1. График работ продавцов по магазинам.
2. Отобразить график водителей по маршрутам.
3. Так же по дням недели можно расписать посещения магазинов торговых менеджеров.
(1) может кому-то будет полезно.
Драг энд-энд-дроп поддерживает, но только для элементов планировщика.
Т.е. если вы захотите например взять элемент из таблицы (задачу из списка) и перекинуть на планировщик - он просто так это вам сделать не даст.
Но, если в процедуре ПроверкаПеретаскивания для планировщика СтандартнаяОбработка установить в ложь, а ПриОкончанииПеретаскивания или Перетаксивание - обработать получение нового элемента - то можно вполне себе подружить таблицу или дерево.
(2) WalterMort, на вскидку:
1. Заменить календарь который есть сейчас во всех типовых конфигурациях БП 3, Документооборот. Не говоря уже о подделках от рарус
2. Наконец есть развитие подсистемы задачи. Сами по себе задачи не создают план на неделю, планировщик - запросто
3. Избавиться от диаграммы Ганта в тех случаях когда нет нужды ставить связь между задачами
Это из общего. А частностей могу еще насыпать вагончик ))))
Спасибо за изучение. Жду с нетерпением.
Мой вариант это планирование загрузки мастеров приемщиков и постов в рем. зоне.
Эх! в свое время парился с диаграммой ганта, нужно было выводить графики заселения (даже пришлось сделать 2 обработки с гантом и на табличном документе).. в одной конфе видел что разрабы плюнули на нее и сдали свой ActiveX элемент специально под эти цели. Наконец-то и 1С сделало нам штатный нормальный контролл. За статью спасибо, плюс!
Спс, у меня до него руки еще не дошли - плотно засел за расширение - все таки оказался не такой бесполезный механизм, можно много интересного сделать.
в копилку.. на потом полюбопытствовать.
плотно засел за расширение - все таки оказался не такой бесполезный механизм, можно много интересного сделать
Вещь вроде полезная. но только для небольших личных дел с почасовым планированием. Пытался использовать как замену д. Ганта для проектов с планированием по дням, и так крутил и эдак - получается все равно коряво.
(14) friend0, А какая структура необходима?
Если я правильно уловил то:
Измерения: Проект, Сотрудник
Периодичность: День
(18) "как должно быть" я честно говоря виду с трудом. Но есть как бы две отдельные задачи:
1. Внутри одного проекта показать когда какие этапы будут начинаться/заканчиваться
2. Показать все проекты скопом, чтоб увидеть на каких этапах задержки и когда какой проект завершится.
Самая главный фича(недостаток) планировщика - все показывается на экране и не надо (невозможно) скролить одновременно по вертикали и горизонтали.
Со второй задачей все совсем плохо - активных проектов дофига и все получается слишком мелко/скучковано и не работает скроллинг, чтоб можно было пролистать по интересующему проекту по времени вперед или по определенному времени пробежаться по проектам.
С первой проще, но все равно выглядит корявенько. По сотрудникам бить смысла особо нет. Можно бить по 2-3 веткам, но на большом экране получается слишком фрагментированно.
После различных манипуляций оптимальным показался вариант вообще без измерений.
Но все равно остается вопрос с масштабом: во-первых с периодами отображения, во-вторых с размером окна (или элемента формы) пользователя. От этого тоже наглядость сильно гуляет.
Планировщик предназначен для того, чтобы автоматизировать планирование задач, событий, встреч, составление календарей, расписаний и т. д. Во многих прикладных решениях возникает необходимость в отображении данных в виде календаря или расписания. Задачи визуального планирования, например, часто возникают при автоматизации салонов красоты, стоматологических и ветеринарных клиник, фитнес-центров и т. д.
Архитектура
Планировщик представляет собой совокупность объекта встроенного языка и поля формы, которое отображает данные этого объекта. Благодаря этому становится возможным визуализация данных в удобном для планирования виде и их интерактивное изменение.
Планировщик не является объектом конфигурации, поэтому никакой собственной структуры для хранения данных он не имеет. Однако с помощью встроенного языка можно загрузить в него данные практически любого объекта конфигурации, лишь бы этот объект обладал двумя реквизитами типа Дата. Один из них будет указывать на начало элемента на оси времени, а другой — на конец этого элемента.
Интерактивное изменение элементов
При интерактивном изменении в форме элементов планировщика генерируется событие, в котором с помощью встроенного языка можно изменить данные того объекта информационной базы, из которого они загружались, и сохранить их в базе данных.
Измерения
Кроме элементов планировщик обладает ещё и измерениями. Каждое измерение позволяет группировать элементы планировщика по отношению к каждому значению этого измерения. Например, в качестве измерения может выступать учебная группа. Тогда элементы планировщика (события) можно анализировать по их отношению к каждой из имеющихся учебных групп: 961 группа, 962 группа и 963 группа.
Планировщик позволяет создавать вложенные элементы измерений. Например, если измерением планировщика является мастер, работающий в парикмахерской, то все мастера могут быть разделены на две группы: женские и мужские. Каждая из этих групп может быть свернута или развернута, что упрощает работу с планировщиком при большом количестве элементов измерений.
Представление данных
Планировщик имеет несколько свойств, с помощью которых можно создавать такие представления данных, как «День», «Неделя» или «Месяц».
Кроме этого планировщик позволяет отображать сразу несколько интервалов, и совсем не обязательно, что эти интервалы должны следовать друг за другом непрерывно. Например, задав три отображаемых интервала (7 февраля, 14 февраля и 21 февраля) можно одновременно показать три пятницы, чтобы сравнить состав дел в эти дни и, возможно, перенести невыполненные дела на следующую пятницу:
Планировщик может содержать не одну, а несколько шкал времени, каждая со своей периодичностью. Это удобно в тех случаях, когда отображаемые данные нужно идентифицировать, например, с точностью до дня и часа:
Саму шкалу времени можно показать полностью, либо скрыть её начало и/или конец. Это удобно, например, для отображения только рабочих часов:
По желанию в планировщике можно включить или выключить отображение текущего времени:
Интервалы фона позволяют, например, выделить другим цветом нерабочие часы или выходные дни:
В интервалах фона можно выводить собственный текст. Это позволяет, например, отображать загруженность ресурсов на каком-либо временном интервале при свернутых группах измерений.
Редактирование данных
Интерактивное добавление данных в планировщик осуществляется простым щелчком мыши. При этом открывается окно быстрого редактирования элемента планировщика:
В этом окне можно задать текст элемента (события). Если нужно изменить другие свойства элемента, по кнопке Редактировать в этом окне открывается стандартная форма для редактирования всех свойств элемента планировщика.
Редактирование существующих элементов можно выполнять как через эти формы, так и перетаскиванием элементов и изменением их границ с помощью мыши:
Для любого элемента можно задать расписание — периодичность, с которой будет повторяться это событие:
Во многих конфигурациях возникает необходимость в отображении данных в виде календаря, расписания. Задачи визуального планирования, например, часто возникают при автоматизации салонов красоты, стоматологических и ветеринарных клиник, фитнес-центров и т.д. При большом желании такие задачи можно было частично автоматизировать, используя существующие в платформе инструменты: табличный документ или диаграмму Ганта. Однако реализация подобных решений всегда была очень трудоёмкой, а их функциональность - недостаточной. К тому же они плохо переносились из одной конфигурации в другую, и не гарантировали одинаковую работоспособность в разных клиентских приложениях и разных операционных системах.
По этим причинам мы реализовали в платформе новый инструмент - Планировщик. Он предназначен для того, чтобы автоматизировать планирование задач, событий, встреч, составление календарей, расписаний и тому подобных задач.
Архитектура
По большому счёту весь инструмент представляет собой совокупность двух новых сущностей: объекта встроенного языка Планировщик и поля формы, имеющего вид Поле планировщика. Реквизит формы типа Планировщик отображается в поле формы, благодаря чему становится возможным визуализация данных в удобном для планирования виде и их интерактивное изменение.
Планировщик не является объектом конфигурации, поэтому никакой собственной структуры для хранения данных в СУБД он не имеет. Однако с помощью встроенного языка вы можете загрузить в него данные практически любого объекта конфигурации, лишь бы этот объект обладал двумя реквизитами типа Дата. Один из них будет указывать на начало элемента на оси времени, а другой - на конец этого элемента.
После того, как пользователь изменил в форме какой-либо элемент планировщика, платформа генерирует событие ПриОкончанииРедактирования. В этом событии вы можете изменить соответствующие данные того объекта конфигурации, из которого они загружались, и сохранить их в СУБД.
Каждый элемент планировщика имеет начало и конец (тип Дата), текст, картинку и значение. Значение не отображается в форме, а служит для связи элемента с конкретным объектом данных. Например, это может быть ссылка на элемент справочника, если планировщик отображает данные этого справочника. Естественно, цвет фона и шрифт каждого элемента также можно настроить индивидуально.
Кроме элементов планировщик обладает ещё одной важной коллекцией - это измерения. Каждое измерение позволяет группировать элементы планировщика по отношению к каждому значению этого измерения. Например, в качестве измерения может выступать учебная группа. Тогда элементы планировщика (события) вы можете анализировать по их отношению к каждой из имеющихся у вас учебных групп: 961 группа, 962 группа и 963 группа.
Представление данных
Планировщик имеет три важных свойства, с помощью которых вы можете создавать различные представления данных. Это свойства ЕдиницаПериодическогоВарианта, КратностьПериодическогоВарианта и ПоложениеШкалыВремени. С помощью этих свойств можно создавать такие знакомые вам представления как «День», «Неделя» или «Месяц».
Проще всего понять работу этих свойств на примерах.
Например, чтобы показать один день, вы можете задать единицу - час, кратность - 24 и расположить шкалу слева:
Чтобы показать рабочую неделю вертикально, вы можете задать единицу - день, кратность - 5 и расположить шкалу слева:
Чтобы показать полную неделю горизонтально, вы можете задать единицу - день, кратность - 7 и расположить шкалу вверху:
На этом же примере удобно показать ещё одно интересное свойство планировщика - отображаемый интервал. Если задать отображаемый интервал больше, чем «кратность единиц», то есть в данном случае больше, чем 7 дней, то планировщик начнёт переносить временную шкалу. В данном случае вниз. Это позволяет показать все даты из отображаемого интервала:
Таким образом вы можете показать полный месяц или другой произвольный интервал дат.
Интересным является то, что отображаемый интервал - это на самом деле коллекция элементов. Коллекция отображаемых интервалов. В этом примере мы задали один такой интервал, но их можно задать несколько. И совсем не обязательно, что эти интервалы должны следовать друг за другом непрерывно.
Например, задав три отображаемых интервала (7 февраля, 14 февраля и 21 февраля) вы можете одновременно показать три пятницы, чтобы сравнить состав дел в эти дни и, возможно, перенести невыполненные дела на следующую пятницу:
Отображение шкалы времени и элементов
Планировщик может содержать не одну, а несколько шкал времени, каждая со своей периодичностью. Это удобно в тех случаях, когда отображаемые данные нужно идентифицировать, например, с точностью до дня и часа:
Вы можете выравнивать элементы по шкале времени, или наоборот, отображать реальный промежуток времени:
Саму шкалу времени вы можете показать полностью, либо скрыть её начало и/или конец. Это удобно, например, для отображения только рабочих часов:
Если все элементы, которые нужно отобразить, не помещаются в одну ячейку, вместо них Планировщик выводит надпись «+ Ещё» и количество элементов, которые скрыты. Нажав на эту надпись вы можете увидеть список всех скрытых элементов и открыть любой из них:
По желанию в планировщике можно включить или выключить отображение текущего времени:
Элементы планировщика могут отображать время начала и окончания, только время начала или не отображать время вообще:
Вы можете раскрасить интервалы фона чтобы, например, выделить другим цветом нерабочие часы или выходные дни:
Редактирование данных
Добавление данных в планировщик осуществляется простым щелчком мыши. При этом открывается окно быстрого редактирования элемента планировщика:
В этом окне вы можете задать текст элемента (события). Если нужно изменить другие свойства элемента, по кнопке Редактировать в этом окне открывается стандартная форма для редактирования элемента планировщика:
В ней уже можно задать начало, конец элемента, указать значения измерений, если они используются, а также задать расписание для элемента, если это событие повторяющееся.
Переопределить эти формы можно в событиях ПередНачаломБыстрогоРедактирования и ПередНачаломРедактирования.
Редактирование существующих элементов вы можете выполнять как через эти формы, так и перетаскиванием элементов и изменением их границ с помощью мыши:
Планировщик поддерживает групповые операции редактирования. То есть вы можете выделить сразу несколько элементов и переместить, скопировать, изменить или удалить их:
Планировщик обеспечивает перетаскивание не только в пределах «себя самого», но и в/из других элементов формы. Эта возможность может быть полезна, например, для того, чтобы из общего списка дел, показанного в форме в виде таблицы, можно было перетащить в планировщик отдельные события.
Расписание
Для любого элемента вы можете задать расписание - периодичность, с которой будет повторяться это событие:
При этом можно ограничить интервал, в течение которого событие будет повторяться:
При необходимости можно изменить не только отдельное из повторяющихся событий, но и все события одновременно. Для этого в форме редактирования нужно установить флажок Применить редактирование ко всем повторам:
Для самописной конфигурации на базе БСП была разработана обработка "Календарь", в которой используется планировщик 1С. В публикации пойдёт речь о реализации с его помощью некоторых задач, таких как перетаскивание элементов календаря мышью или настройка повторения событий по расписанию.
В нашем "Календаре" отображаются стандартные "Задачи исполнителя" и элементы собственного справочника "События".
На основании справочника "События" можно стартовать бизнес-процессы, кроме того, для них доступна настройка повторения по расписанию. Нужно отметить, что повторяются события только в календаре, новые элементы справочника при этом не создаются. А вот бизнес-процессы на основании этих виртуальных повторяемых событий должны создаваться вполне реальные, с реальными датами. Рассмотрим пример реализации данной задачи.
Справочник "События" выглядит следующим образом:
В режиме "Предприятие":
Расписание - реквизит формы с типом значения "Произвольный". При его редактировании свойства расписания записываются в реквизиты события, а при создании формы события - наооборот.
При заполнении календаря расписание элементов заполняется сходным образом:
Планировщик 1С обрабатывает элементы с заполненным расписанием следующим образом: на каждый период повтора создаётся элемент планировщика с датами начала и окончания, соответствующими периоду повтора, и значением единственного реального элемента, который мы добавили при обходе выборки.
Выглядит это так:
Обработка "ПередНачаломРедактирования" элемента планировщика у нас нестандартная и вызывает открытие формы задачи/события в зависимости от типа значения. Но какой бы элемент из повторяющихся мы не открывали, даты начала и окончания в форме будут исходные, в данном случае 18.08.2017 и 19.08.2017.
Значит, из календаря будем открывать форму с параметрами, и обрабатывать их при создании на сервере.
Обработчик при создании формы события:
Если присмотреться, на размещённом в начале статьи скриншоте с формой события по два элемента с заголовками "Дата начала" и "Дата окончания". В зависимости от того, повторяемый это элемент или основной, видны либо реальные "Дата начала" и "Дата окончания", либо реквизиты формы "Дата начала элемента повторения" и "Дата окончания элемента повторения".
Стандартный ввод на основании для повторяемых элементов тоже пришлось переписать:
Разумеется, все запущенные на основании повторяемых элементов бизнес-процессы будут подчинены единственному реальному событию.
А теперь о реализации так полюбившейся пользователям функции - перемещения элементов календаря мышкой с сохранением изменений. Планировщик позволяет перемещать элементы и изменять их границы мышью "из коробки". При этом у элементов планировщика меняются даты начала и окончания. Осталось только записать их в реальные объекты.
Удобно выделять элементы планировщика разных видов цветом. У элемента есть свойства "ЦветФона", "ЦветТекста" и "ЦветРамки". В зависимости от тех или иных условий можно выбирать какие угодно их сочетания. Планировщик сам позаботится о том, чтобы элементы остались видимыми. В нашей конфигурации задачи, не принятые к исполнению, выделяются одним цветом, принятые - другим, а для каждого события цвет выбирается пользователем и сохраняется в справочнике в реквизите типа "ХранилищеЗначений". При заполнении планировщика данными цвет события устанавливается так:
Вот и всё самое интересное, что мне удалось выяснить в процессе работы с планировщиком. Возможно, кому-нибудь эта информация будет полезна.
Активно читаю "Заметки из зазеркалья". Большинству заметок я очень рад, и очень жду их реализации. Одно из них - это "Планировщик".
Собственно, статья будет посвящена этому новому, и как по мне, удобному механизму.
Так как в процессе изучения было выявлено несколько нюансов заполнения, решил написать статью с кодом заполнения.
Первым делом ссылки на ресурсы:
- Заметки из зазеркалья (
Результат заполнения планировщика выглядит так:
В строках видим время работы магазинов (с 9 до 18).
По колонкам: группы Магазинов и Продавцов.
Основные свойства планировщика для его программного заполнения:
- ТекущиеПериодыОтображения (тут можно указать рабочее время магазинов)
- Измерения (группировки: Магазин, Продавец)
- Элементы (сами заметки по измерениям)
Еще раз повторюсь, что тут описаны только азы.
ТекущиеПериодыОтображения заполняются так (тут всё просто, поэтому описывать комментариями думаю не нужно ):
Планировщик . ТекущиеПериодыОтображения . Очистить ();
Планировщик . ТекущиеПериодыОтображения . Добавить ( ПериодОтображенияНачало , ПериодОтображенияКонец );
Измерения можно заполнить таким образом:
// Инициализируем измерения планировщика
ИзмеренияПланировщика = Планировщик . Измерения ;
ИзмеренияПланировщика . Очистить ();
// Добавление магазинов в группу Магазины
НовыйМагазин = ИзмерениеМагазины . Элементы . Добавить ( ВыборкаМагазинов . Магазин );
НовыйМагазин . Текст = ВыборкаМагазинов . Магазин . Наименование ;
// Заполнение измерений продавцы
НовыйПродавец = ИзмерениеПродавцы . Элементы . Добавить ( ВыборкаПродавцов . Продавец );
НовыйПродавец . Текст = ВыборкаПродавцов . Продавец . Наименование ;
А вот так добавляем Элементы (записи в планировщике):
// Инициализация элементов планировщика (записи по измерениям)
ЭлементыПланировщика = Планировщик . Элементы ;
ЭлементыПланировщика . Очистить ();
Пока РезультатПланы . Следующий () Цикл
// Связка записей с измерениями выполняется через соответствия
СоответствиеЗначений = Новый Соответствие ;
СоответствиеЗначений . Вставить ( "Магазины" , РезультатПланы . Магазин );
СоответствиеЗначений . Вставить ( "Продавцы" , РезультатПланы . Продавец );
РазницаВремениНачало = РезультатПланы . ВремяС - НачалоДня ( РезультатПланы . ВремяС );
РазницаВремениКонец = РезультатПланы . ВремяПо - НачалоДня ( РезультатПланы . ВремяПо );
Начало = НачалоДаты + РазницаВремениНачало ;
Конец = НачалоДаты + РазницаВремениКонец ;
// Добавление новой записи в промежуток времени
НовыйЭлемент = ЭлементыПланировщика . Добавить ( Начало , Конец );
НовыйЭлемент . ЗначенияИзмерений = Новый ФиксированноеСоответствие ( СоответствиеЗначений );
НовыйЭлемент . Текст = РезультатПланы . Задание ;
После того мы разобрались с заполнением, можно показать итоговый вид с заполненным регистром сведений Дни работы (в котором регистрируем рабочее время сотрудников)
Читайте также: