salexdv / bsl_console

Консоль кода для 1С 8.3 (Управляемые и обычные формы)
MIT License
299 stars 55 forks source link

Перестали отображаться свои подсказки по параметрам setCustomSignatures #343

Open tormozit opened 7 months ago

tormozit commented 7 months ago

Очень давно не менял этот код. Версия редактора вроде бы последняя. Видимо при последнем обновлении редактора сломалось отображение своей подсказки. При генерации события отображения подсказки по параметрам у меня в 1С работает код

        РедакторHTML.setCustomSignatures(ирОбщий.ОбъектВСтрокуJSONЛкс(ВариантыСинтаксиса));
        РедакторHTML.setOption("generateBeforeShowSuggestEvent", Ложь);
        РедакторHTML.triggerSigHelp();
        РедакторHTML.setOption("generateBeforeShowSuggestEvent", Истина);

Но почему то при этом часто происходит ничего. Например вызываю подсказку по параметрам между скобками в тексте

я = Новый ТаблицаЗначений;
я.Колонки.Добавить()

Далее приведен текст JSON. Сверил его с примером в документации https://github.com/salexdv/bsl_console/blob/develop/docs/set_custom_signatures.md . Вроде бы все правильно.

{
  "добавить": [
    {
      "label": "Добавить(Имя?, Тип?, Заголовок?, Ширина?) [КолонкаТаблицы…]",
      "parameters": [
        {
          "label": "Имя?",
          "documentation": "Обяз.: Нет, \"\";  Возвр.: ?\nТип: Строка.\n> Имя колонки. Значение по умолчанию: Пустая строка."
        },
        {
          "label": "Тип?",
          "documentation": "Обяз.: Нет, ?;  Возвр.: ?\nТип: ОписаниеТипов.\n> Объект, описывающий допустимые типы значений для колонки. Если параметр не указан, в колонке можно будет хранить значение любого типа."
        },
        {
          "label": "Заголовок?",
          "documentation": "Обяз.: Нет, \"\";  Возвр.: ?\nТип: Строка.\n> Заголовок колонки таблицы значений. Используется при визуальном отображении таблицы значений. Значение по умолчанию: Пустая строка."
        },
        {
          "label": "Ширина?",
          "documentation": "Обяз.: Нет, 0;  Возвр.: ?\nТип: Число.\n> Ширина колонки в символах. Используется при визуальном отображении таблицы значений. Значение по умолчанию: 0."
        }
      ],
      "documentation": "Возвращаемое значение:Тип: КолонкаТаблицыЗначений.  \nОписание:\nДобавляет колонку в конец коллекции колонок таблицы."
    }
  ]
}

Но в следующей ситуации работает между скобками ОткрытьФорму() с таким JSON

{
  "открытьформу": [
    {
      "label": "ОткрытьФорму(ИмяФормы, Параметры?, Владелец?, Уникальность?, Окно?, НавигационнаяСсылка?, ОписаниеОповещенияОЗакрытии?, РежимОткрытияОкна?) [Форма, ФормаКл…]",
      "parameters": [
        {
          "label": "ИмяФормы",
          "documentation": "Обяз.: Да;  Возвр.: ?\nТип: Строка.\n> Имя формы. 
        },
        {
          "label": "Параметры?",
          "documentation": "Обяз.: Нет, ?;  Возвр.: ?\nТип: Структура.\n> Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра структуры. \nП = Новый Структура(\"Ключ\", Поставщик); Форма = ПолучитьФорму(\"Справочник.Контрагенты.ФормаОбъекта\", П); Форма.Открыть();"
        },
        {
          "label": "Владелец?",
          "documentation": "Обяз.: Нет, ?;  Возвр.: ?\nТип: .\n> Владелец формы - форма или элемент управления другой формы."
        },
        {
          "label": "Уникальность?",
          "documentation": "Обяз.: Нет, Ложь;  Возвр.: ?\nТип: Произвольный.\n> В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма. Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск. Значение по умолчанию: Ложь."
        },
        {
          "label": "Окно?",
          "documentation": "Обяз.: Нет, ?;  Возвр.: ?\nТип: ОкноКлиентскогоПриложения.\n> Окно приложения, в котором будет открыта форма.  Применимо только для формы клиентского приложения. Окном может быть только основное окно приложения или вспомогательное окно формы. Используется только в управляемом приложении."
        },
        {
          "label": "НавигационнаяСсылка?",
          "documentation": "Обяз.: Нет, Неопределено;  Возвр.: ?\nТип: Строка, Неопределено.\n> Если содержит значение, отличное от Неопределено, то это значение присваивается свойству НавигационнаяСсылка формы, полученной в результате вызова данного метода, и свойство АвтоНавигационнаяСсылка этой формы устанавливается в Ложь. Значение по умолчанию: Неопределено."
        },
        {
          "label": "ОписаниеОповещенияОЗакрытии?",
          "documentation": "Обяз.: Нет, ?;  Возвр.: ?\nТип: ОписаниеОповещения.\n> Содержит описание процедуры, которая будет вызвана при закрытии формы со следующими параметрами: <РезультатЗакрытия> - значение, переданное при вызове метода Закрыть открываемой формы, <ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.  Если параметр не указан, то по завершению никакая процедура вызвана не будет. Используется только в управляемом приложении."
        },
        {
          "label": "РежимОткрытияОкна?",
          "documentation": "Обяз.: Нет, Неопределено;  Возвр.: ?\nТип: РежимОткрытияОкнаФормы.\n> Указывает режим открытия окна формы клиентского приложения. Используется только в управляемом приложении.  Форма, открытая в режиме БлокироватьОкноВладельца, не участвует в поиске уже открытых форм. При попытке открыть такую же форму (с параметром уникальности, установленным в значение Ложь), форма открытая в таком режиме, не будет найдена и будет открыта новая форма. Значение по умолчанию: Неопределено."
        }
      ],
      "documentation": "Вариант: По имени.\n."
    },
    {
      "label": "ОткрытьФорму(Форма, Окно?, ??) [Форма, ФормаКл…]",
      "parameters": [
        {
          "label": "Форма",
          "documentation": "Обяз.: Да;  Возвр.: ?\nТип: Форма, ФормаКлиентскогоПриложения.\n> Форма или форма клиентского приложения. В режиме тонкого и веб-клиентов только форма клиентского приложения."
        },
        {
          "label": "Окно?",
          "documentation": "Обяз.: Нет, ?;  Возвр.: ?\nТип: ОкноКлиентскогоПриложения.\n> Окно приложения, в котором будет открыта форма.  Применимо только для формы клиентского приложения. Окном может быть только основное окно приложения или вспомогательное окно формы."
        },
        {
          "label": "??",
          "documentation": "Обяз.: Нет, ;  Возвр.: ?\nТип: ."
        }
      ],
      "documentation": "Вариант: По форме.\n."
    }
  ]
}
tormozit commented 7 months ago

Еще почему то перестала отображаться эта подсказка когда каректа внутри текстового литерала ОткрытьФорму("ОбщаяФорма.Форма"); Если каретку ставлю перед первой кавычкой, то подсказка отображается, А если между кавычками, то не отображается. Причем в обоих случаях передается одинаковый JSON и выполняется одинаковый код.

tormozit commented 7 months ago

Работает также в Новый Структура( )

Похоже не работает если вызов метода идет после точки. Например еще не работает в тексте Справочники.Валюты.Выбрать()

salexdv commented 7 months ago

Посмотрю

tormozit commented 7 months ago

Основную проблему удалось обойти путем использования в качестве названия метода полное выражение слева от скобки приведенное к нижнему регистру. Т.е. для исходного текста я.Колонки.Добавить() передавать такой JSON

{
"я.колонки.добавить": [
{
"label": "Добавить(Имя?, Тип?, Заголовок?, Ширина?) [КолонкаТаблицы…]",
"parameters": [...

Название метода ранее я брал из Событие.params.word. Возможно заполнение этого параметра события изменилось. Если это задуманное изменение, то очень рекомендую его четко обозначить в документации, т.к. это сейчас непонятно из документации.

tormozit commented 7 months ago

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

tormozit commented 7 months ago

Проблему с отображением подсказки внутри кавычек исправил https://github.com/salexdv/bsl_console/pull/344