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

29.06.18

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

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

Файлы

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

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

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

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

28800 руб.

27.03.2025    35958    26    22    

37

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

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

6000 руб.

16.01.2015    66464    45    60    

84

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

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

5160 руб.

29.06.2020    22087    32    6    

49

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

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

5040 руб.

06.10.2020    12023    8    8    

14

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

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

20.08.2024    39243    mrXoxot    44    

136

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

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

27.05.2024    23075    smielka    37    

109

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

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

27.12.2023    21611    1301    elcoan    53    

128

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

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

3 стартмани

10.04.2023    15452    177    acces969    31    

132
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 265 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 265 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 1917 25.06.20 13:24 Сейчас в теме
14. RustIG 1917 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) Молодой был, неопытный.
Для отправки сообщения требуется регистрация/авторизация