Редактор встроенного языка на управляемой форме

Вариант решения проблемы редактирования текста (раскрашивание текста) на управляемой форме так же, как и во встроенном редакторе кода 1С.

Думаю, большинство коллег в процессе разработки универсальных механизмов сталкивались с задачей предоставления в качестве их настройки использовать куски кода, написанные не в конфигураторе, а в режиме исполнения (режиме "Предприятие"). Выполнение кода "на лету" довольно удобная возможность платформы, предоставляет разработчику проектировать тонко настраиваемые механизмы, а администратору или внедренцу подгонять логику под нужны конкретных реализаций без привлечения разработчика.

Так вот одним из спорных и неудобных моментов является то, что на управляемых формах является отсутствует возможность править текст, как во встроенном редакторе кода.

Существуют различные варианты решения проблемы, но все они по тем или иным причинам не очень мне подходили. Поэтому я решил самостоятельно попробовать решить проблему, используя поле форматированного документа, как контейнера для редактирования текста. Что из этого получилось, в приложенном файле. 

Сразу хочу сказать о минусах и плюсах этого подхода:

Достоинства:

1. Не используются внешние компоненты и/или библиотеки;

2. Есть возможность редактирования текста

Недостатки:

1. Сама логика работы поля форматированного документа несколько отличается от обычного текстового редактора (поле текстового документа). Например использование табуляции, вставки текста из буфера обмена.

2. Форматирование текста происходит не "на ходу", а после интерактивного нажатия "кнопочек" (в будущем планирую устранить, есть идеи)

В будущем планирую:

1. Доработать функционал для корректного форматирования текста запроса. Будет полезно в консоли запросов. Реализованно вот тут //infostart.ru/public/732711/

2. Реализовать общий функционал для внедрения в конфигурации, а также примеры хранения и использования текстов.

Обновления:

Версия 1.01:

— Исправлено отображение "многоэтажных" строк

— Исправлено отображение слова "Выполнить", если оно является методом или свойством

23 Comments

  1. Brawler

    вирусы писать можно?

    Reply
  2. user806113

    не можна

    Reply
  3. pbazeliuk

    Достойная обработка, перейдем к замечаниям:

    Не стоить использовать вызовы БСП не все конфигурации используют БСП и не все конфигурации используют русскоязычную БСП.

    СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку() лучше заменить на аналог или использовать StrTemplate(СтрШаблон)

    СтроковыеФункцииКлиентСервер.ЭтоРазделительСлов() лучше заменить на аналог

    СтроковыеФункцииКлиентСервер.СообщитьПользователю() лучше заменить на аналог

    Reply
  4. Pistolierro

    Обрабока писалась под ИБ на платформе 8.3.5, там еще нет СтрШаблон. А в целом замечание принимается, как и указал в описании в будущем планирую адаптировать механизмы для внедрения в любые конфигурации

    Reply
  5. krasavcheg

    Очень интересный подход и идея, однозначно +

    Reply
  6. Octopus

    (4) По мне так лучше бы проверку делать, есть БСП в конфе или нет. И только если нет, использовать аналог.

    Reply
  7. the1

    Вот опять же позор разработчикам платформы! Почему не реализовали этот механизм в управляемых формах?

    Reply
  8. Brawler

    (7) ну когда-то и конструктора запросов не было на управляемых формах, потом сделали, еще все в переди

    Reply
  9. DrAku1a
    Форматирование текста происходит не «на ходу»

    А, ну тогда не интересно…

    Reply
  10. Yashazz

    Хотел-хотел это сделать, руки не дошли. И не покидало ощущение, что стоит сделать это, как 1С допилит платформу) На чём реализовано? Форматируемый документ?

    Reply
  11. Dzenn

    За основу, я так понял, взята обработка с ИТС, и переписано с позорного CSS на православное ФорматированиеТекста.

    В обработке с ИТС, а значит, и здесь, замечена как минимум одна ошибка форматирования: попробуйте написать

    Запрос.Выполнить();

    Также, в этой обработке, некорректно отрабатывает табуляция. Например, не получается написать так:

    Процедура А()

    [Табуляция]Б = 4;

    КонецПроцедуры;

    Получается только так:

    Процедура А()

    Б = 4;

    КонецПроцедуры;

    То есть, её нужно немного доработать, но в общем и целом код очень полезный, спасибо.

    Reply
  12. Pistolierro

    (10) Да, форматированный документ

    Reply
  13. Pistolierro

    (11) Обработку с ИТС брал за основу, но в итоге от нее почти ничего не осталось (или совсем ничего). Логика разбора строк на составляющие полностью изменена.

    Запрос.Выполнить() — да, Выполнить отображается красным шрифтом. Допилю

    С таблуляциями есть проблемы, а так же есть шереховатости при вставке текста из буфера обмена. Это особенности работы поля форматированного документа.

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

    Reply
  14. Pistolierro

    (7) Я думаю 1С не будет это реализовывать, так как, раз уж сразу не сделали, то есть какие то проблемы (возможно связанные с работой в вэб-клиенте). Да и не сказать,что это фича «must have».

    Reply
  15. Dzenn

    (13) если не надоест заморачиваться этой темой — переделай всё на хтмл с редактированием в другом реквизите — надёжнее будет

    Reply
  16. user774630

    https://partners.v8.1c.ru/forum/topic/1633631

    У кого доступа нет, тема называется «Платформа 8.3 → Прошу реализовать возможность раскраски текста в поле текстового документа управляемой формы». Старых Сергей (AXELOT, Москва) 01.08.2017 12:05

    Последнее сообщение в теме:

    Копиенко Сергей (1С, Москва) вчера 11:47 1634020 Отвечает на

    Предложение записано, спасибо.

    P.S. т.е. до этого никто не просил, видимо 🙂

    Reply
  17. Ava1or

    В Конвертации 3.0 это было бы полезно

    Reply
  18. anatoliy.kichuk

    Вот, как раз мне такое надо для моей консоли…

    Reply
  19. Fatov_DI

    (11) Поддерживаю. Табуляций очень не хватает…

    Reply
  20. m..adm

    Скачал, запустить не удалось. Обработка требует модулей.

    Reply
  21. Pistolierro
    // Определяет, является ли символ разделителем.
    //
    // Параметры:
    //  КодСимвола      — Число  — код проверяемого символа;
    //  РазделителиСлов — Строка — символы разделителей.
    //
    // Возвращаемое значение:
    //  Булево — истина, если символ является разделителем.
    //
    Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт
    
    Если РазделителиСлов <> Неопределено Тогда
    Возврат Найти(РазделителиСлов, Символ(КодСимвола)) > 0;
    КонецЕсли;
    
    Диапазоны = Новый Массив;
    Диапазоны.Добавить(Новый Структура(«Мин,Макс», 48, 57));   // цифры
    Диапазоны.Добавить(Новый Структура(«Мин,Макс», 65, 90));   // латиница большие
    Диапазоны.Добавить(Новый Структура(«Мин,Макс», 97, 122));   // латиница маленькие
    Диапазоны.Добавить(Новый Структура(«Мин,Макс», 1040, 1103));  // кириллица
    Диапазоны.Добавить(Новый Структура(«Мин,Макс», 1025, 1025));  // символ «Ё»
    Диапазоны.Добавить(Новый Структура(«Мин,Макс», 1105, 1105));  // символ «ё»
    Диапазоны.Добавить(Новый Структура(«Мин,Макс», 95, 95));   // символ «_»
    
    Для Каждого Диапазон Из Диапазоны Цикл
    Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда
    Возврат Ложь;
    КонецЕсли;
    КонецЦикла;
    
    Возврат Истина;
    
    КонецФункции
    

    Показать

    Reply
  22. vladnet

    Валентин, спасибо за обработку. Я пытался уже предыдущей версией пользоваться, но там из за IE проблем больше чем пользы.

    Тут вроде уже выглядит все более менее отлично.

    Возникли вопросы:

    1. Мне очень нужен редактор html кода наподобие форматированного документа (с ним багом наелся уже). Куда копать? Подскажите пожалуйста.

    2. Выделение мышкой не работает (

    3. Esc как понимаю перехватывает модуль. Нельзя ли его как то вывести на верхний уровень чтобы форма закрывалась?

    4. Еще бы как то автодополнение слов сделать, с возможностью выбора из списка. Было бы шикарно)

    Reply
  23. Pistolierro

    (22)

    1. Для html-кода я бы использовал специализированные проги, типа notepad++, что нить от microsoft и пр.

    2. Хммм, вроде работало. Проверю. Спасибо.

    3, 4. Замечания принимаются. Спасибо

    Reply

Leave a Comment

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