Вариант раскрашивания кода 1С с JavaScript

01.11.17

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

Ко всему множеству вариантов еще один вариант раскрашивания исходного кода 1С на Управляемой форме с использованием JavaScript.

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
Еще один вариант раскрашивания кода 1С с JavaScript:
.epf 9,33Kb
3
3
1 SM
Скачать Купить за 1 850 руб.

Так как 1С использует для отображения HTML документа встроенный в ОС браузер (Internet Explorer на Windows), важно включить в настройках использование js.

Код частично взят из типовой конфы Translator (ссылка на ИТС, нужно логиниться). Код очень прост, и его легко встроить в свой.

Если где-то повторился/пересекся с другими публикациями - прошу прощения. Значит, плохо пользуюсь поиском.

Проверял на платформе 1С:Предприятие 8.3 (8.3.10.2496) (z).

раскрашивания исходного кода

См. также

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

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

2400 руб.

29.06.2020    17678    24    6    

38

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

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

27.05.2024    5467    smielka    37    

96

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

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

27.12.2023    12512    789    elcoan    47    

110

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

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

2 стартмани

10.04.2023    10697    158    acces969    31    

120

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

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

1 стартмани

05.07.2022    4630    kalyaka    6    

32

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

Обработка для раскраски кода, написанного на встроенном языке 1С:Предприятия, работающая в управляемых формах с возможностью сохранения результата в html.

1 стартмани

04.02.2022    7132    22    salexdv    23    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Synoecium 782 02.11.17 09:48 Сейчас в теме
А почему на JS сделали? Мне кажется тоже самое можно сделать на языке 1С, код то примитивный.
2. papa_harlo 158 07.11.17 12:51 Сейчас в теме
(1) потому что раскрашеный код выводится в поле html документа. а там очень удобно использовать js.
как раскрасить поле текстового документа я не придумал)))))
3. DrAku1a 1733 08.11.17 07:54 Сейчас в теме
Можно выводить в поле форматированного документа, процедура раскраски - на 1С.
Вот только, это не совсем то, чего хочется. Хочется - чтобы раскрашивался код "на лету" при редактировании.

Функция РаскраситьКод1С8(ТекстКод) Экспорт
	мОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
	Таб = Символы.Таб;
	НПП = Символы.НПП;
	ДопустимыеЗнаки = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789abcdefghijklmnop­qrstyvwxyz_";
	СписокКлючевыхСлов = "|if|если|then|тогда|elsif|иначеесли|else|иначе|endif|конецесли|do|цикл|for|для|to|по|each|каждого|in|из|while|пока|enddo|конеццикла|procedure|процедура|endprocedure|конецпроцедуры|function|функция|endfunction|конецфункции|var|перем|export|экспорт|goto|перейти|and|и|or|или|not|не|val|знач|break|прервать|continue|продолжить|return|возврат|try|попытка|except|исключение|endtry|конецпопытки|raise|вызватьисключение|false|ложь|true|истина|undefined|неопределено|null|new|новый|execute|выполнить|";
	Ответ = "<span style=""text-align: left; font-family: courier new,courier; color: blue; font-size: 10pt; white-space: pre; display: inline-block; ""><font>";
	ТекТипСлова = "<text>";
	Для нс=1 По СтрЧислоСтрок(ТекстКод) Цикл
		ТекСтрока = СокрП(СтрПолучитьСтроку(ТекстКод, нс));
		дл = СтрДлина(ТекСтрока);
		сч = 0;
		ТекСлово = "";
		КодНеНачался = Истина;
		Пока сч<дл Цикл
			сч = сч + 1;
			ТекущийСимвол = Сред(ТекСтрока, сч, 1);
			Если КодНеНачался Тогда
				Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
					//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", "    ");
					Ответ = Ответ + ТекущийСимвол;
					Продолжить;
				ИначеЕсли ТекущийСимвол="#" или ТекущийСимвол="&" Тогда
					ТекСлово = "";
					ДобавитьСлово(Ответ, Сред(ТекСтрока, сч), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<dir>");
					Прервать;
				КонецЕсли;
			КонецЕсли;
			КодНеНачался = Ложь;			
			Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
				Если КодНеНачался Тогда
					Ответ = Ответ + ТекущийСимвол;
					Продолжить;
				КонецЕсли;
				//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", "    ");
				ДобавитьСлово(Ответ, ТекСлово+ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
				ТекСлово = "";
				Продолжить;
			ИначеЕсли Найти("():;.,=+-*<>?[]%/", ТекущийСимвол) > 0 Тогда
				ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
				ТекСлово = "";
				//Проверяем на комментарий
				Если ТекущийСимвол="/" и Сред(ТекСтрока, сч+1, 1)="/" Тогда
					ТекСлово = "";
					ДобавитьСлово(Ответ, СокрП(Сред(ТекСтрока, сч)), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<cmnt>");
					Прервать;
				КонецЕсли;	
				ДобавитьСлово(Ответ, ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<symb>");
				Продолжить;
			ИначеЕсли ТекущийСимвол="""" или ТекущийСимвол="|" Тогда
				ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
				// найти закрывающую кавычку
				нач = сч;
				сч = сч + 1;
				СледующийСимвол = Сред(ТекСтрока, сч, 1);
				Пока сч<дл Цикл
					сч = сч + 1;
					ТекущийСимвол = СледующийСимвол;
					СледующийСимвол = Сред(ТекСтрока, сч, 1);
					Если ТекущийСимвол="""" Тогда
						Если СледующийСимвол="""" Тогда
							сч = сч + 1;
							СледующийСимвол = Сред(ТекСтрока, сч, 1);
						Иначе
							Прервать;
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;
				ТекСлово = "";
				ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
				сч = сч - 1;
				Продолжить;
			ИначеЕсли ТекущийСимвол="'" Тогда
				нач = сч;
				сч = сч + 1;
				СледующийСимвол = Сред(ТекСтрока, сч, 1);
				Пока сч<дл Цикл
					сч = сч + 1;
					ТекущийСимвол = СледующийСимвол;
					СледующийСимвол = Сред(ТекСтрока, сч, 1);
					Если ТекущийСимвол="'" Тогда
						Если СледующийСимвол="'" Тогда
							сч = сч + 1;
							СледующийСимвол = Сред(ТекСтрока, сч, 1);
						Иначе
							Прервать;
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;
				ТекСлово = "";
				ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
				сч = сч - 1;
				Продолжить;
			КонецЕсли;
			ТекСлово = ТекСлово + ТекущийСимвол;
		КонецЦикла;
		Если Не ПустаяСтрока(ТекСлово) Тогда
			ДобавитьСлово(Ответ,СокрП(ТекСлово), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
		КонецЕсли;
		Ответ = Ответ + "";
	КонецЦикла;	
	Ответ = Ответ + Символы.ПС+"</font></span>";
	Ответ = СтрЗаменить(Ответ, "<keywrd>", "</font><font color=red>");
	Ответ = СтрЗаменить(Ответ, "<text>", "</font><font color=blue>");
	Ответ = СтрЗаменить(Ответ, "<str>", "</font><font color=black>");
	Ответ = СтрЗаменить(Ответ, "<num>", "</font><font color=black>");
	Ответ = СтрЗаменить(Ответ, "<unwn>", "</font><font color=black>");
	Ответ = СтрЗаменить(Ответ, "<symb>", "</font><font color=red>");
	Ответ = СтрЗаменить(Ответ, "<cmnt>", "</font><font color=green>");
	Ответ = СтрЗаменить(Ответ, "<dir>", "</font><font color=brown>");	
	Ответ = СтрЗаменить(Ответ, Символы.Таб, "    ");
	Возврат Ответ;
КонецФункции
Показать
//Вспомогательная, используется в "РаскраситьКод1С8"
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
	Если ПустаяСтрока(Слово) Тогда
		Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, "    ");
		Возврат;
	ИначеЕсли ТипСлова=Неопределено Тогда
		нсл = НРег(СокрП(Слово));
		Если Найти(СписокКлючевыхСлов, нсл)>0 Тогда
			ТипСлова = "<keywrd>";
		ИначеЕсли Слово = "0" или мОписаниеТипаЧисло.ПривестиЗначение(Слово)<>0 Тогда
			ТипСлова = "<num>";
		Иначе
			ТипСлова = "<text>";
			ЭтоЧисло = Истина;
			Для сч=1 по СтрДлина(нсл) Цикл
				ТекСимв=Сред(нсл, сч, 1);
				Если Найти(ДопустимыеЗнаки, ТекСимв)=0 Тогда
					ТипСлова="<unwn>";
					Прервать;
				ИначеЕсли ТекСимв<>"0" Тогда
					ЭтоЧисло = Ложь;
				КонецЕсли;
			КонецЦикла;
			Если ЭтоЧисло Тогда
				ТипСлова = "<num>";
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Код = Код + ?(ТекТипСлова=ТипСлова, "", ТипСлова) + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, "<", "&lt;"), ">", "&gt;"), " ", "&nbsp;"), Символы.НПП, "&nbsp;"), Символы.Таб, "&nbsp;&nbsp;&nbsp;&nbsp;");
	ТекТипСлова = ТипСлова;
	Слово = "";
КонецПроцедуры
Показать
		//Использование
		мТекст = Элементы.МойФорматированныйДокумент.ВыделенныйТекст;
		Элементы.МойФорматированныйДокумент.ВыделенныйТекст = <ОбщийМодуль>.РаскраситьКод1С8(мТекст);


Да ещё бы прикрутить контекстную подсказку, как это сделано в ИР.
На просторах Инфостарта есть консоль запросов под управляемые формы, которая умеет это делать, но в ней много костылей напихано.
Оставьте свое сообщение