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

01.06.18

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Рисуем стрелки в табличном документе:
.epf 8,24Kb
12
12 Скачать (1 SM) Купить за 1 850 руб.

Недавняя статья про  рисование графов заставила задуматься,  можно ли нарисовать орграф  исключительно средствами 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 Платные (руб)

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

5000 руб.

14.01.2016    55306    17    23    

43

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

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

6000 руб.

16.01.2015    63700    44    59    

82

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

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

2400 руб.

29.06.2020    19550    27    6    

42

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

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

1500 руб.

06.10.2020    10768    7    7    

11

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

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

20.08.2024    20833    mrXoxot    44    

128

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

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

27.05.2024    10317    smielka    37    

105

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

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

27.12.2023    17745    1223    elcoan    53    

125
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 02.06.18 06:17
Сообщение было скрыто модератором.
...
2. WalterMort 247 02.06.18 14:04 Сейчас в теме
Способ рисования стрелки плохой. В том смысле, что кроме стрелки ничего не нарисуешь. Вот если бы была функция преобразований координат, а стрелка рисовалась как набор линий в базовых координатах (словно она исходит из 0,0 и смотрит ровно вверх, например), тогда можно было бы вместо рисования стрелки что угодно отобразить в любом месте, под любым углом и масштабом.
4wheel; Азверин; +2 Ответить
4. pm74 203 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 247 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 53 04.06.18 06:58 Сейчас в теме
Напомнило язык ЛОГО (он же - "черепашка"). На ЭВМ Электроника в школе "баловались".
SlavaKron; romanco; Sla; +3 Ответить
6. pm74 203 04.06.18 07:39 Сейчас в теме
(5)
черепашка
не видел,
имо смахивает на программирование для ЧПУ (без Z и управляющих кодов)
7. Поручик 4661 04.06.18 08:08 Сейчас в теме
Я тоже ЛОГО не видел. Помню только что-то бэйсик-подобное на русском языке.
9. Yashazz 4801 19.07.18 20:27 Сейчас в теме
А гляньте публикции Ильдаровича. Там было нечто с рисованием в таб.документе, с кривыми любого порядка.
10. pm74 203 19.07.18 20:36 Сейчас в теме
(9) киньте ссылку если можно.
вряд ли там есть стрелки , он такими пустяками не занимается
11. Yashazz 4801 19.07.18 22:03 Сейчас в теме
Там не стрелки. Он графы отрисовывал.
13. RustIG 1834 22.11.21 11:22 Сейчас в теме
(0) реализовал оцифровку и визуализацию склада https://infostart.ru/public/1551346/
думаю, что кто-нибудь объединит ваши разработки с моей... написал об этом немного в комментах...
Оставьте свое сообщение