ИР. Прошу добавить в релиз RDT мои правки для сохранения скрипта по хоткею

bolsun Закрыто Высокий
//@script_hotkey None            СохранитьСкриптВФайлПоХоткею ИР Сохранить модуль в файл (по хоткею)

//+/bolsun@, 2023-11-21
//&ТолькоТекстовыеДокументы
Процедура СохранитьСкриптВФайлПоХоткею()  
  Если ТурбоКонф.ПолучитьВерсиюAPI() >= 6 Тогда
    Если ТурбоКонф.ЭтоСкрипт Тогда
      СохранитьМодульВФайл();  
      Возврат;
    КонецЕсли;
  КонецЕсли;  
  ТурбоКонф.КонтролКлавиша(Клавиши.S);
КонецПроцедуры
//+/bolsun@, 2023-11-21

Комментарии

tormozit
#1, 01 декабря 2023 18:39

Что за свойство ЭтоСкрипт? Когда оно будет Истина?
tormozit изменил статус на Открыто


bolsun
#2, 01 декабря 2023 18:40

(1) tormozit, это свойство Истина, когда в данный момент фокус в документе и этот документ - скрипт TurboConf.


tormozit
#3, ред. 01 декабря 2023 18:45

Как ты определяешь что "документ - скрипт"?
Я определяю по наличию специальной строки.
Пример такой строки
//#Дублировать в файл C:\Portable\TurboConf\user_scripts\RDT.os
Мой код

//&ТолькоТекстовыеДокументы
Процедура СохранитьМодульВФайл()
	ПодключениеИР = ПодключениеИР(,, Ложь);
	Если ПодключениеИР = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Если Не ЗначениеЗаполнено(ТекстМодуля) Или Не ЭтоДокумент() Тогда
		Возврат;    
	КонецЕсли;
	МодулиИР = МодулиИР(ПодключениеИР);
	Маркер = "//#Дублировать" + " в файл "; // Разделено для не обнаружения себя же
	ИмяФайла = СокрЛП(МодулиИР.ирОбщий.ТекстМеждуМаркерамиЛкс(ТекстМодуля, Маркер, Символы.ПС, Ложь));
	Если ЗначениеЗаполнено(ИмяФайла) Тогда
		Текст = Новый ТекстовыйДокумент;
		Текст.УстановитьТекст(ТекстМодуля);
		Текст.Записать(ИмяФайла);   
		ТурбоКонф.ПоказатьВсплывающееУведомление(НазваниеСкрипта(), СтрШаблон("Текст модуля сохранен в файл %1", ИмяФайла), 2000);
	Иначе 
		ТурбоКонф.ПоказатьВсплывающееУведомление(НазваниеСкрипта(), "Модуль не связан с файлом. В тексте модуля должна быть строка 
		|" + Маркер + "<Полное имя файла>", 4000);
	КонецЕсли;
	ТурбоКонф.КонтролКлавиша(Клавиши.S);
КонецПроцедуры


bolsun
#4, 01 декабря 2023 18:56

(3) tormozit, проверяю наличие "//@script" - достаточно верный признак, что это скрипт.


tormozit
#5, ред. 01 декабря 2023 20:47

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


bolsun
#6, ред. 01 декабря 2023 20:55

(5) tormozit, ты же делаешь проверку в методе СохранитьМодульВФайл(), если нет маркера, то ты и не сохраняешь. Не вижу проблемы.
Наличие //#Дублировать в файл - признак что это скрипт
Отсутствие //#Дублировать в файл - Не является флагом, что это не скрипт.

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

ПодключениеИР = ПодключениеИР(,, Ложь);
	Если ПодключениеИР = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Если Не ЗначениеЗаполнено(ТекстМодуля) Или Не ЭтоДокумент() Тогда
		Возврат;    
	КонецЕсли;
	МодулиИР = МодулиИР(ПодключениеИР);

Либо придется дублировать проверку в методе, с вызовом ИР

  Маркер = "//#Дублировать" + " в файл "; // Разделено для не обнаружения себя же
	ИмяФайла = СокрЛП(МодулиИР.ирОбщий.ТекстМеждуМаркерамиЛкс(ТекстМодуля, Маркер, Символы.ПС, Ложь));

Что не имеет никакого смысла для обычного модуля конфигуратора


bolsun
#7, ред. 01 декабря 2023 21:01

Основное назначение этой команды, навесить сохранение скрипта на Ctrl+S и ИР (COM) не должны вызываться в случае, если это не скрипт.


bolsun
#8, ред. 01 декабря 2023 21:06

В идеале добавить просто этот код, к текущей команде СохранитьМодульВФайл. Но у пользователей с API 5 не будет работать быстрая проверка ЭтоСкрипт


bolsun
#9, 01 декабря 2023 21:07

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


bolsun
#10, 01 декабря 2023 21:12

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


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера