Часы со стрелками

29.06.18

Разработка - Работа с интерфейсом

Часы со стрелками на управляемых формах, созданные штатными средствами языка на платформе 8.3.10.

Платные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
Часы со стрелками:
.epf 9,65Kb ver:1.1
4 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний за 2430 руб. в месяц

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

В первую очередь, при запуске обработки подготавливается для отрисовки табличный документ. В связи с тем, что по умолчанию ширина ячейки не равна её высоте, "пиксели" получаются вытянутыми по оси У, в результате чего картинка растягивается. Для того чтобы исправить это, нужно изменить ширину ячеек рабочей области:

Экран.Область("R1C1:R40C40").ШиринаКолонки = 2;

После чего подключается обработчик ожидания с таймингом 0.1

В нём происходит всё самое интересное. Для начала экран очищается, а затем отрисовывается циферблат. Я не буду показывать как это происходит по той причине, что для понимания этого сначала мне стоит объяснить как отрисовываются стрелки. Прежде чем начать отрисовку, необходимо получить текущее время, разбив его на часы, минуты и секунды. После этого полученные данные преобразуются в градусы. Это происходит так:

((ТекущееЗначение-МинимальноеЗначениеИзСтарогоДиапазона) / (МаксимальноеЗначениеИзСтарогоДиапазона-МинимальноеЗначениеИзСтарогоДиапазона)) * (МаксимальноеЗначениеИзНовогоДиапазона-МинимальноеЗначениеИзНовогоДиапазона) + МинимальноеЗначениеИзНовогоДиапазона;

То есть, для минут это выглядит следующим образом:

УголМинутной = Число(Формат(((ТекущаяМинута) / (60)) * (360),"ЧДЦ=; ЧН=0"));

Но для часов всё будет немного интереснее. Если мы просто изменим 60 минут на 12 часов, это будет работать. Однако, на протяжении всего часа маленькая стрелка не сдвинется с места и это будет вызывать затруднения восприятия ближе к концу часа. Поэтому после того как мы проделаем с часами то же что и с минутами, нам нужно будет добавить к полученному количеству градусов значение, полученное из текущего количества минут:

УголЧасовой = УголЧасовой + Число(Формат(((ТекущаяМинута) / (60)) * (30),"ЧДЦ=; ЧН=0"));

Теперь часовая стрелка будет плавно двигаться по кругу в течение всего часа. За это время она пройдёт расстояние, равное пяти минутам для минутной стрелки, а это 30 градусов.

Итак, теперь у нас есть данные об угле наклона каждой стрелки относительно 12 часов и можно приступить к её отрисовке, но как нам найти каждый пиксель стрелки? Для того чтобы вычисление координат стрелок было проще понять, давайте посмотрим на рисунок:

Представим, что все стрелки выходят из точки C. Точка A смотрит ровно на 12 часов, а угол альфа мы только что посчитали. Мы примерно знаем где должна быть наша стрелка CB, но как узнать её координаты? Для себя мы определились, что рисование происходит на поле 40х40 квадратов. Пускай точка С будет иметь координаты 20;20. Длина стрелки пусть будет равняться 16. Теперь мы знаем, что у нас есть равнобедренный треугольник с вершинами в точках 20;20 и 20;4. Длина равных рёбер равна 16, а угол между ними составляет, допустим, 120 градусов. Для того чтобы найти координаты искомой точки B, давайте нарисуем точку D, которая образует прямоугольный треугольник с точками С и B. Школьный курс геометрии говорит, что сторона DB равна sin(180 - α)*BC, а сторона CD эквивалентна cos(180 - α)*BC. Но если сделать эти вычисления, добавить получившиеся длины сторон к центру часов и закрасить полученный пиксель, вместо стрелки будет всего лишь точка. Поэтому рисование происходит в следующей процедуре:

Процедура ВывестиСтрелку(Начало, ДлинаСтрелки, Угол, Цвет)
	                                                                                                      
	Если Угол > 180 Тогда
		Угол = 360 - Угол;
		Вычитание = Истина;
	Иначе 
		Вычитание = Ложь;
	КонецЕсли;
	
	Для Счетчик = Начало По ДлинаСтрелки Цикл
		КоординатыХ =  Число(Формат(20 + Счетчик * Sin((180 - Угол)*(3.1415926535897932/180)) * ?(Вычитание, -1, 1), "ЧДЦ=; ЧН=0"));
		КоординатыУ = Число(Формат(20 + Счетчик * Cos((180 - Угол)*(3.1415926535897932/180)), "ЧДЦ=; ЧН=0"));
		Экран.Область(КоординатыУ, КоординатыХ).ЦветФона = Цвет;		
	КонецЦикла;
	
КонецПроцедуры

Очевидно, что сумма углов треугольника не может превышать 180 градусов, поэтому в начале стоит такая проверка. Не совсем очевидное 3.1415926535897932/180 преобразует наш угол из градусов в радианы, т.к. встроенные функции sin и cos работает только с ними.

После отрисовки обработчик ожидания включается заново в связи с тем, что с интервалами менее 1 секунды он включается однократно. Таким образом получается рекурсивныя процедура рисования, вызывающая сама себя 10 раз в секунду.

часы программирование управляемые формы табличный документ рисование

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С v8.3 8.3.14 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью подсистемы "Инфоборды". Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Подсистема реализована в форме расширения 1С.

14400 руб.

27.03.2025    3468    9    9    

14

Работа с интерфейсом Системный администратор Программист 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6000 руб.

14.01.2016    56985    19    25    

45

Работа с интерфейсом 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    10957    2    2    

7

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    20888    30    6    

46

Работа с интерфейсом Программист Стажер 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    31951    mrXoxot    44    

134

Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

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

27.05.2024    17777    smielka    37    

105

Работа с интерфейсом 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    19960    1259    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    14053    174    acces969    31    

131
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PerlAmutor 160 29.06.18 14:50 Сейчас в теме
2. Неопределено 91 29.06.18 15:00 Сейчас в теме
(1) Не вижу проблем, но изначально об этом не думал по неопытности. Тогда отпадёт необходимость строить линию попиксельно и с одной стороны часы станут аккуратнее, но с другой точечное построение интереснее с академической точки зрения. Повешу новый режим на тумблер, спасибо за ссылку.
4. Неопределено 91 02.07.18 12:25 Сейчас в теме
(1) Добавил рисование линий в качестве стрелок и эллипсов в качестве шкалы (см. картинку в описании), а также исправил баг, возникающий до 10 утра, когда текущий час состоит из одной цифры.
6. PerlAmutor 160 02.07.18 12:42 Сейчас в теме
(4) В качестве дальнейшего развития мысли можно еще посмотреть в сторону этой https://infostart.ru/public/312139/ и этой публикации https://infostart.ru/public/77713/ с корректировкой на то, что в платформе 8.3.9 появились возможности работы с бинарными данными.
8. Неопределено 91 02.07.18 13:55 Сейчас в теме
(6) Кажется, придётся вспоминать школьный курс QBASIC и режим SCREEN12.
3. madonov 264 02.07.18 10:25 Сейчас в теме
https://infostart.ru/public/86918/ - Развлекался будучи студентом во время освоения платформы.
Сделано средствами 1С на измерительных диаграммах, кстати без табличного документа, а прям на форме. Думаю и на УФ это доступно.
Из минусов - все стрелки одинаковой длины.
Evil Beaver; Dmitri93; +2 Ответить
5. Неопределено 91 02.07.18 12:32 Сейчас в теме
(3) Не могу понять, как там нарисованы стрелки?
7. PerlAmutor 160 02.07.18 12:45 Сейчас в теме
(5) Это диаграмма вида "Измерительная". Длиной стрелок управлять в ней нельзя.
9. madonov 264 03.07.18 02:56 Сейчас в теме
(5) Измерительная диаграмма. Для того, чтобы сделать её круглой необходимо установить начальный угол 0, а конечный 360.
Длину стрелок регулировать не получится, только цвет. Пробовал наложить 3 диаграммы друг на друга соосно - не получается, они друг друга перекрывают, несмотря на установленный флаг "Прозрачность"
Прикрепленные файлы:
Работа_Не_Волк.epf
Неопределено; +1 Ответить
10. Arsen1986 81 04.07.18 08:40 Сейчас в теме
Вспомнил QBasic, спасибо за публикацию.
11. user1345957 26.02.20 23:58 Сейчас в теме
Я пытаюсь сделать часы на форме, на которой будет видно что идут минуты и часы.
Ошибка мешает: метод недоступен на сервере.
12. Неопределено 91 27.02.20 02:56 Сейчас в теме
(11) Пытаетесь сделать что-то своё, или не запускается моя обработка? Или вы что-то переделали в моей обработке и оно перестало работать? Судя по описанию ошибки идёт вызов функции, которая доступна только на клиенте. Без примера кода, в котором возникает ошибка, помочь будет труднее, чем с ним.
13. RustIG 1884 25.06.20 13:24 Сейчас в теме
14. RustIG 1884 25.06.20 13:25 Сейчас в теме
математика в своей красе (не во всей, но в своей)
15. SatanClaws 147 13.01.25 04:23 Сейчас в теме
А зачем извращение в виде
* ?(Вычитание, -1, 1)


Не проще ли чуть выше переписать

Знак = 1;
Если Угол > 180 Тогда
		Угол = 360 - Угол;
		Знак = -1;
КонецЕсли;


и дальше просто умножать на знак?
16. Неопределено 91 13.01.25 05:26 Сейчас в теме
(15) Молодой был, неопытный.
Оставьте свое сообщение