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

29.06.18

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

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

Файлы

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

Наименование Скачано Купить файл
Часы со стрелками:
.epf 9,65Kb ver:1.1
4 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

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

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

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

Экран.Область("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С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

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

31720 руб.

27.03.2025    78902    52    40    

63

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

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

36600 руб.

28.08.2025    7346    2    2    

6

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

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

6100 руб.

14.01.2016    60035    22    25    

47

Консолидация данных Работа с интерфейсом Программист Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)

Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.

6088 руб.

17.10.2025    1881    3    0    

2

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

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6100 руб.

16.01.2015    68065    46    60    

85

Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

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

20.08.2024    48695    mrXoxot    44    

139

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

27.05.2024    26258    smielka    39    

116
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PerlAmutor 161 29.06.18 14:50 Сейчас в теме
А если с этим объединить? https://infostart.ru/public/840761/
Evil Beaver; +1 Ответить
2. Неопределено 111 29.06.18 15:00 Сейчас в теме
(1) Не вижу проблем, но изначально об этом не думал по неопытности. Тогда отпадёт необходимость строить линию попиксельно и с одной стороны часы станут аккуратнее, но с другой точечное построение интереснее с академической точки зрения. Повешу новый режим на тумблер, спасибо за ссылку.
4. Неопределено 111 02.07.18 12:25 Сейчас в теме
(1) Добавил рисование линий в качестве стрелок и эллипсов в качестве шкалы (см. картинку в описании), а также исправил баг, возникающий до 10 утра, когда текущий час состоит из одной цифры.
6. PerlAmutor 161 02.07.18 12:42 Сейчас в теме
(4) В качестве дальнейшего развития мысли можно еще посмотреть в сторону этой https://infostart.ru/public/312139/ и этой публикации https://infostart.ru/public/77713/ с корректировкой на то, что в платформе 8.3.9 появились возможности работы с бинарными данными.
8. Неопределено 111 02.07.18 13:55 Сейчас в теме
(6) Кажется, придётся вспоминать школьный курс QBASIC и режим SCREEN12.
3. madonov 271 02.07.18 10:25 Сейчас в теме
https://infostart.ru/public/86918/ - Развлекался будучи студентом во время освоения платформы.
Сделано средствами 1С на измерительных диаграммах, кстати без табличного документа, а прям на форме. Думаю и на УФ это доступно.
Из минусов - все стрелки одинаковой длины.
Evil Beaver; Dmitri93; +2 Ответить
5. Неопределено 111 02.07.18 12:32 Сейчас в теме
(3) Не могу понять, как там нарисованы стрелки?
7. PerlAmutor 161 02.07.18 12:45 Сейчас в теме
(5) Это диаграмма вида "Измерительная". Длиной стрелок управлять в ней нельзя.
9. madonov 271 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. Неопределено 111 27.02.20 02:56 Сейчас в теме
(11) Пытаетесь сделать что-то своё, или не запускается моя обработка? Или вы что-то переделали в моей обработке и оно перестало работать? Судя по описанию ошибки идёт вызов функции, которая доступна только на клиенте. Без примера кода, в котором возникает ошибка, помочь будет труднее, чем с ним.
13. RustIG 1946 25.06.20 13:24 Сейчас в теме
(0) оригинально, круто)
14. RustIG 1946 25.06.20 13:25 Сейчас в теме
математика в своей красе (не во всей, но в своей)
15. SatanClaws 147 13.01.25 04:23 Сейчас в теме
А зачем извращение в виде
* ?(Вычитание, -1, 1)


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

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


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