Рисуем стрелки в табличном документе

01.06.18

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

Рисуем стрелки средствами 1С .

Скачать файлы

Наименование Файл Версия Размер
Рисуем стрелки в табличном документе:
.epf 8,24Kb
12
.epf 8,24Kb 12 Скачать

Недавняя статья про  рисование графов заставила задуматься,  можно ли нарисовать орграф  исключительно средствами 1С.  Потом вспомнил, что  уже делал  нечто  подобное, порылся   в архивах.   Оказалось, ничего сложного,  просто вспомнить,  как рисовать  в табличном документе, добавить немножко  магии  геометрии Et... voilà,

Код прикладываю ниже:

 
 рисуем стрелки

 

#Область Фигуры

&НаКлиенте
Функция Рисовать(ТабДок,Вид, Верх=Неопределено, Лево=Неопределено, Высота=Неопределено, Ширина=Неопределено) 
	НовыйРисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента[Вид]);
	Если Верх <> Неопределено 	Тогда 	НовыйРисунок.Верх=Верх;			КонецЕсли;
	Если Лево <> Неопределено 	Тогда 	НовыйРисунок.Лево=Лево;			КонецЕсли;
	Если Высота <> Неопределено 	Тогда 	НовыйРисунок.Высота=Высота; 	        КонецЕсли;
	Если Ширина <> Неопределено	Тогда 	НовыйРисунок.Ширина=Ширина;		КонецЕсли;
	Возврат НовыйРисунок;
КонецФункции

//ТочкаА,ТочкаБ - Структура (Верх,Лево)
&НаКлиенте
Функция ЛинияАБ(ТабДок,ТочкаА,ТочкаБ,СтильРисунка=Неопределено) 
	Рисунок=Рисовать(ТабДок,"Прямая",ТочкаА.Верх,ТочкаА.Лево,?(ТочкаА.Верх>ТочкаБ.Верх,(ТочкаА.Верх-ТочкаБ.Верх)*-1,ТочкаБ.Верх-ТочкаА.Верх),?(ТочкаА.Лево>ТочкаБ.Лево,(ТочкаА.Лево-ТочкаБ.Лево)*-1,ТочкаБ.Лево-ТочкаА.Лево));
	УстановитьПараметрыРисунка(Рисунок,СтильРисунка);
	Возврат  Рисунок;
КонецФункции

&НаКлиенте
Функция  СтрелкаАБ(ТабДок,ТочкаА,ТочкаБ,ШиринаСтрелки,ВысотаСтрелки,СтильРисунка=Неопределено,Диаметр=0) 
	ШиринаСтрелки =?(ШиринаСтрелки=0,4,ШиринаСтрелки); 	
	ВысотаСтрелки =?(ВысотаСтрелки=0,4,ВысотаСтрелки);
	ВысотаПр=МАКС(ТочкаА.Верх-ТочкаБ.Верх,ТочкаБ.Верх-ТочкаА.Верх);
	ШиринаПр=МАКС(ТочкаА.Лево-ТочкаБ.Лево,ТочкаБ.Лево-ТочкаА.Лево);
	Гипотенуза=Sqrt(Pow(ВысотаПр,2)+Pow(ШиринаПр,2));
	Pi = 3.1415926535897932;
	УголА= ?(Гипотенуза=0,0,ASin(ШиринаПр*sin(Pi/2)/Гипотенуза));
	УголБ= ?(Гипотенуза=0,0,ASin(ВысотаПр*sin(Pi/2)/Гипотенуза));
	ГптБ1=ВысотаСтрелки;
	ГптА2=ШиринаСтрелки/2;
	ВысБ1=ГптБ1*sin(УголБ)/sin(Pi/2);
	ШирБ1=ГптБ1*sin(УголА)/sin(Pi/2);
	ВысА2=ГптА2*sin(УголА)/sin(Pi/2);
	ШирА2=ГптА2*sin(УголБ)/sin(Pi/2);
	НаправлениеЛП=""; НаправлениеВН="";
	Если ТочкаБ.Лево>ТочкаА.Лево Тогда
		НаправлениеЛП="П";
	ИначеЕсли ТочкаБ.Лево<ТочкаА.Лево Тогда 
		НаправлениеЛП="Л";
	КонецЕсли;
	Если ТочкаБ.Верх>ТочкаА.Верх Тогда
		НаправлениеВН="Н";
	ИначеЕсли ТочкаБ.Верх<ТочкаА.Верх Тогда 
		НаправлениеВН="В";
	КонецЕсли;
	Направление=НаправлениеЛП+НаправлениеВН;
	
	Если Направление="П" Тогда
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх,ТочкаБ.Лево-ВысотаСтрелки);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаА.Верх-ШиринаСтрелки/2,ТочкаБ1.Лево);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаА.Верх+ШиринаСтрелки/2,ТочкаБ1.Лево);
	ИначеЕсли Направление="Л" Тогда
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх,ТочкаБ.Лево+ВысотаСтрелки);
		Тело=ЛинияАБ(ТабДок,ТочкаА,ТочкаБ1);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаА.Верх-ШиринаСтрелки/2,ТочкаБ1.Лево);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаА.Верх+ШиринаСтрелки/2,ТочкаБ1.Лево);
	ИначеЕсли Направление="В" Тогда 
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх+ВысотаСтрелки,ТочкаБ.Лево);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаБ1.Верх,ТочкаБ1.Лево-ШиринаСтрелки/2);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаБ1.Верх,ТочкаБ1.Лево+ШиринаСтрелки/2);
	ИначеЕсли Направление="Н" Тогда 
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх-ВысотаСтрелки,ТочкаБ.Лево);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаБ1.Верх,ТочкаБ1.Лево-ШиринаСтрелки/2);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаБ1.Верх,ТочкаБ1.Лево+ШиринаСтрелки/2);
	ИначеЕсли  Направление="ЛВ" Тогда 
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх+ВысБ1,ТочкаБ.Лево+ШирБ1);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаБ1.Верх+ВысА2,ТочкаБ1.Лево-ШирА2);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаБ1.Верх-ВысА2,ТочкаБ1.Лево+ШирА2);
	ИначеЕсли Направление="ЛН" Тогда 
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх-ВысБ1,ТочкаБ.Лево+ШирБ1);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаБ1.Верх-ВысА2,ТочкаБ1.Лево-ШирА2);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаБ1.Верх+ВысА2,ТочкаБ1.Лево+ШирА2);
	ИначеЕсли Направление="ПВ" Тогда 
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх+ВысБ1,ТочкаБ.Лево-ШирБ1);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаБ1.Верх+ВысА2,ТочкаБ1.Лево+ШирА2);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаБ1.Верх-ВысА2,ТочкаБ1.Лево-ШирА2);
	ИначеЕсли Направление="ПН" Тогда 
		ТочкаБ1=Новый Структура("Верх,Лево",ТочкаБ.Верх-ВысБ1,ТочкаБ.Лево-ШирБ1);
		ТочкаА2=Новый Структура("Верх,Лево",ТочкаБ1.Верх-ВысА2,ТочкаБ1.Лево+ШирА2);
		ТочкаБ2=Новый Структура("Верх,Лево",ТочкаБ1.Верх+ВысА2,ТочкаБ1.Лево-ШирА2);
	КонецЕсли;
	мСтрелка=Новый Массив;
	р1=ЛинияАБ(ТабДок,ТочкаА,ТочкаБ1,СтильРисунка); мСтрелка.Добавить(р1);
	р2=ЛинияАБ(ТабДок,ТочкаА2,ТочкаБ2,СтильРисунка);мСтрелка.Добавить(р2);
	р3=ЛинияАБ(ТабДок,ТочкаА2,ТочкаБ,СтильРисунка); мСтрелка.Добавить(р3);
	р4=ЛинияАБ(ТабДок,ТочкаБ2,ТочкаБ,СтильРисунка); мСтрелка.Добавить(р4);
	Если Диаметр>0 Тогда 
		р5=Рисовать(ТабДок,"Эллипс", ТочкаА.Верх-Диаметр/2, ТочкаА.Лево-Диаметр/2,Диаметр,Диаметр);
		мСтрелка.Добавить(р5);
	КонецЕсли;
	Возврат  мСтрелка;
КонецФункции

// СтильРисунка- Структура
&НаКлиенте
Процедура  УстановитьПараметрыРисунка(Рисунок,СтильРисунка=Неопределено)
	Если ТипЗнч(СтильРисунка)= Тип("Структура") Тогда
		Для Каждого ЭлС Из СтильРисунка Цикл
			Попытка
				Рисунок[ЭлС.Ключ]=ЭлС.Значение;
			Исключение
			КонецПопытки;
		КонецЦикла; 
	КонецЕсли;
КонецПроцедуры


#КонецОбласти 

 

 

Для 1С: 8.3  (8.3.11.2924).

рисование нужные вещи табличный документ

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

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

6000 руб.

16.01.2015    61793    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

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

5000 руб.

14.01.2016    54398    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16695    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10734    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    9607    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12077    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 02.06.18 06:17
Сообщение было скрыто модератором.
...
2. WalterMort 241 02.06.18 14:04 Сейчас в теме
Способ рисования стрелки плохой. В том смысле, что кроме стрелки ничего не нарисуешь. Вот если бы была функция преобразований координат, а стрелка рисовалась как набор линий в базовых координатах (словно она исходит из 0,0 и смотрит ровно вверх, например), тогда можно было бы вместо рисования стрелки что угодно отобразить в любом месте, под любым углом и масштабом.
4wheel; Азверин; +2 Ответить
4. pm74 199 02.06.18 22:02 Сейчас в теме
(2)
Способ рисования стрелки плохой.

с удовольствием посмотрю на ваш вариант
зы. я и не утверждаю что мой способ идеальный
Вот если бы была функция преобразований координат

достаточно лишь знать положение начальной точки и угол поворота относительно оси ординат
ну например ломаная линия с углом наклона +-30 относительно оси абцисс
&НаКлиенте
Процедура ЛоманаяЛиния(Команда)
	Амплитуда= 30;
	ТочкаА = Новый Структура("Верх,Лево",30,30);
	Размер = 10;
	Для ё = 1 по 10 Цикл 
		Знак = ?(ё%2=0,-1,1);
		Угол = 90+Знак*Амплитуда;
		Гипотенуза(Размер,Угол,ТочкаА);
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Гипотенуза(Знач Размер,Знач УголГрад,ТочкаА)
	Pi = 3.1415926535897932;
	УлолРад = УголГрад*Pi/180;
	Л=ТочкаА.Лево+sin(УлолРад)*Размер;
	В=ТочкаА.Верх-cos(УлолРад)*Размер;
	ТочкаБ =Новый Структура("Верх,Лево",В,Л);
	ЛинияАБ(ТабДок,ТочкаА,ТочкаБ);
	ТочкаА = ТочкаБ;
КонецПроцедуры
Показать
Прикрепленные файлы:
12. WalterMort 241 24.07.18 15:29 Сейчас в теме
(4)
с удовольствием посмотрю на ваш вариант


Вот и он:

https://infostart.ru/public/872775/
Xershi; pm74; +2 Ответить
8. пользователь 04.06.18 08:13
Сообщение было скрыто модератором.
...
3. пользователь 02.06.18 17:31
Сообщение было скрыто модератором.
...
5. &rew 49 04.06.18 06:58 Сейчас в теме
Напомнило язык ЛОГО (он же - "черепашка"). На ЭВМ Электроника в школе "баловались".
SlavaKron; romanco; Sla; +3 Ответить
6. pm74 199 04.06.18 07:39 Сейчас в теме
(5)
черепашка
не видел,
имо смахивает на программирование для ЧПУ (без Z и управляющих кодов)
7. Поручик 4670 04.06.18 08:08 Сейчас в теме
Я тоже ЛОГО не видел. Помню только что-то бэйсик-подобное на русском языке.
9. Yashazz 4709 19.07.18 20:27 Сейчас в теме
А гляньте публикции Ильдаровича. Там было нечто с рисованием в таб.документе, с кривыми любого порядка.
10. pm74 199 19.07.18 20:36 Сейчас в теме
(9) киньте ссылку если можно.
вряд ли там есть стрелки , он такими пустяками не занимается
11. Yashazz 4709 19.07.18 22:03 Сейчас в теме
Там не стрелки. Он графы отрисовывал.
13. RustIG 1351 22.11.21 11:22 Сейчас в теме
(0) реализовал оцифровку и визуализацию склада https://infostart.ru/public/1551346/
думаю, что кто-нибудь объединит ваши разработки с моей... написал об этом немного в комментах...
Оставьте свое сообщение