mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 05:04:11 +00:00
465 lines
24 KiB
Plaintext
465 lines
24 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
Перем РедакторHTML; // Кэш
|
||
Перем НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка; // Временные переменные для всех методов
|
||
Перем ВременноеПолеВвода;
|
||
Перем ЛиВнутриУстановкиТекста;
|
||
|
||
Функция РедакторHTML() Экспорт
|
||
Если Истина
|
||
И РедакторHTML = Неопределено
|
||
И ЛиПолеHTMLДокумента()
|
||
Тогда
|
||
РедакторHTML = ЭлементФормы.Документ.defaultView;
|
||
Если РедакторHTML <> Неопределено И Не ЗначениеЗаполнено(РедакторHTML.version1C) Тогда
|
||
РедакторHTML = Неопределено;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат РедакторHTML;
|
||
КонецФункции
|
||
|
||
Функция ЛиПолеHTMLДокумента()
|
||
|
||
Результат = Ложь
|
||
Или ТипЗнч(ЭлементФормы) = Тип("ПолеHTMLДокумента")
|
||
Или (Истина
|
||
И ТипЗнч(ЭлементФормы) = Тип("ПолеФормы")
|
||
И (Ложь
|
||
Или ЭлементФормы.Вид = ВидПоляФормы.ПолеHTMLДокумента));
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока = Неопределено, КонечнаяКолонка = Неопределено, Активировать = Ложь,
|
||
ЭтаФорма = Неопределено) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если КонечнаяСтрока = Неопределено Тогда
|
||
РедакторHTML.setSelectionByLength(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция);
|
||
Иначе
|
||
РедакторHTML.setSelection(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока, КонечнаяКолонка);
|
||
КонецЕсли;
|
||
Если Активировать Тогда
|
||
РедакторHTML.editor.focus();
|
||
КонецЕсли;
|
||
Иначе
|
||
Если КонечнаяСтрока = Неопределено Тогда
|
||
ЭлементФормы.УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция);
|
||
Иначе
|
||
ЭлементФормы.УстановитьГраницыВыделения(НачальнаяСтрокаИлиПозиция, НачальнаяКолонкаИлиКонечнаяПозиция, КонечнаяСтрока, КонечнаяКолонка);
|
||
КонецЕсли;
|
||
Если Истина
|
||
// Похоже эта проверка не улучшает логику работы, а только лишь немного ускоряет
|
||
И ЭтаФорма <> Неопределено
|
||
И ЭтаФорма.ТекущийЭлемент = ЭлементФормы
|
||
Тогда
|
||
// https://www.hostedredmine.com/issues/929519
|
||
ирОбщий.УстановитьФокусВводаФормеЛкс();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
ВыделениеТекста = РедакторHTML.getSelection();
|
||
НачальнаяСтрока = ВыделениеТекста.startLineNumber;
|
||
НачальнаяКолонка = ВыделениеТекста.startColumn;
|
||
КонечнаяСтрока = ВыделениеТекста.endLineNumber;
|
||
КонечнаяКолонка = ВыделениеТекста.endColumn;
|
||
Иначе
|
||
ЭлементФормы.ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПолучитьТекст() Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Текст = РедакторHTML.getText();
|
||
ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда
|
||
Текст = ЭлементФормы.Значение;
|
||
ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") Тогда
|
||
Текст = ирОбщий.ДанныеЭлементаФормыЛкс(ЭлементФормы);
|
||
Иначе
|
||
Текст = ЭлементФормы.ПолучитьТекст();
|
||
КонецЕсли;
|
||
Возврат Текст;
|
||
|
||
КонецФункции
|
||
|
||
Функция УстановитьТекст(Текст, Активировать = Ложь, ИсходныйТекст = Неопределено) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
Если СтрЧислоСтрок(Текст) <> СтрЧислоСтрок(ПолучитьТекст()) Тогда
|
||
РедакторHTML.removeAllBookmarks();
|
||
КонецЕсли;
|
||
Если Активировать Тогда
|
||
РедакторHTML.editor.focus();
|
||
КонецЕсли;
|
||
// https://github.com/salexdv/bsl_console/issues/141#issuecomment-852355305
|
||
РедакторHTML.updateText(Текст);
|
||
//РедакторHTML.editor.setValue(Текст); // Так история редактирования сбрасывается и устанавливается модифицированность
|
||
Если ИсходныйТекст <> Неопределено Тогда
|
||
РедакторHTML.setOriginalText(ИсходныйТекст);
|
||
КонецЕсли;
|
||
ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда
|
||
ЭлементФормы.Значение = Текст;
|
||
ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") Тогда
|
||
ЭтаФорма = Неопределено;
|
||
ПутьКДанным = "";
|
||
ирОбщий.ДанныеЭлементаФормыЛкс(ЭлементФормы, ПутьКДанным, ЭтаФорма);
|
||
Если ЗначениеЗаполнено(ПутьКДанным) Тогда
|
||
Выполнить("ЭтаФорма." + ПутьКДанным + " = Текст");
|
||
КонецЕсли;
|
||
Иначе
|
||
ЭлементФормы.УстановитьТекст(Текст);
|
||
КонецЕсли;
|
||
Возврат Истина;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСтроку(НомерСтроки) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Текст = РедакторHTML.getLineContent(НомерСтроки);
|
||
Иначе
|
||
Текст = ЭлементФормы.ПолучитьСтроку(НомерСтроки);
|
||
КонецЕсли;
|
||
Возврат Текст;
|
||
|
||
КонецФункции
|
||
|
||
Функция КоличествоСтрок() Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Текст = РедакторHTML.getLineCount();
|
||
Иначе
|
||
Текст = ЭлементФормы.КоличествоСтрок();
|
||
КонецЕсли;
|
||
Возврат Текст;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВыделенныйТекст(НовыйТекст = Неопределено) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Если НовыйТекст = Неопределено Тогда
|
||
Результат = РедакторHTML.selectedText();
|
||
Иначе
|
||
РедакторHTML.selectedText(НовыйТекст);
|
||
//// https://github.com/salexdv/bsl_console/issues/64#issue-873784658
|
||
//ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
|
||
//УстановитьГраницыВыделения(КонечнаяСтрока, КонечнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
|
||
КонецЕсли;
|
||
Иначе
|
||
Если НовыйТекст = Неопределено Тогда
|
||
Результат = ЭлементФормы.ВыделенныйТекст;
|
||
Иначе
|
||
ЭлементФормы.ВыделенныйТекст = НовыйТекст;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТолькоПросмотр(НовыйРежим = Неопределено) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Если НовыйРежим = Неопределено Тогда
|
||
Результат = РедакторHTML.getReadOnly();
|
||
Иначе
|
||
РедакторHTML.setReadOnly(НовыйРежим);
|
||
КонецЕсли;
|
||
Иначе
|
||
Если НовыйРежим = Неопределено Тогда
|
||
Результат = ЭлементФормы.ТолькоПросмотр;
|
||
Иначе
|
||
ЭлементФормы.ТолькоПросмотр = НовыйРежим;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗаменитьСтроку(НомерСтроки, Текст) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
РедакторHTML.setLineContent(НомерСтроки, Текст); // https://github.com/salexdv/bsl_console/issues/90
|
||
//УстановитьГраницыВыделения(НомерСтроки, 1 , НомерСтроки, СтрДлина(ПолучитьСтроку(НомерСтроки)) + 1);
|
||
//ВыделенныйТекст(Текст);
|
||
Иначе
|
||
ЭлементФормы.ЗаменитьСтроку(НомерСтроки, Текст);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ВставитьСтроку(НомерСтроки, Текст) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
РедакторHTML.insertLine(НомерСтроки, Текст);
|
||
Иначе
|
||
ЭлементФормы.ВставитьСтроку(НомерСтроки, Текст);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ДобавитьСтроку(Текст) Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
//ДлинаТекста = СтрДлина(ПолучитьТекст());
|
||
//РедакторHTML.setText(Символы.ПС + Текст, ДлинаТекста);
|
||
РедакторHTML.AddLine(Текст);
|
||
Иначе
|
||
ЭлементФормы.ДобавитьСтроку(Текст);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура Очистить() Экспорт
|
||
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
РедакторHTML.eraseText();
|
||
Иначе
|
||
ЭлементФормы.Очистить();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПоказатьОшибку(НомерСтроки, НомерКолонки = 1) Экспорт
|
||
Если ЛиПолеHTMLДокумента() Тогда
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
РедакторHTML.markError(НомерСтроки, НомерКолонки);
|
||
Иначе
|
||
ЭлементФормы.УстановитьГраницыВыделения(НомерСтроки, 1, НомерСтроки, 150);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
Процедура ПолучитьПозициюКаретки(ВКОбщая, Форма, Панель) Экспорт
|
||
|
||
РедакторHTML = РедакторHTML();
|
||
Если РедакторHTML <> Неопределено Тогда
|
||
Координаты = РедакторHTML.getPositionOffset();
|
||
ВременноеПолеВвода = Форма.ЭлементыФормы.Добавить(Тип("ПолеВвода"), "ПолеВвода" + ирОбщий.СуффиксСлужебногоСвойстваЛкс(), Истина, Панель);
|
||
ВременноеПолеВвода.Лево = 0;
|
||
ВременноеПолеВвода.Верх = 0;
|
||
ВременноеПолеВвода.Высота = 20;
|
||
ВременноеПолеВвода.Ширина = 1;
|
||
Форма.ТекущийЭлемент = ВременноеПолеВвода;
|
||
|
||
// Стало необходимо в 8.3.19, иначе фокус не переходил в это поле сразу и координаты каретки получились пустые
|
||
//Форма.Обновить();
|
||
Форма.Открыть();
|
||
|
||
ВКОбщая.ПолучитьПозициюКаретки(Координаты.left, Координаты.top + 8);
|
||
Форма.ТекущийЭлемент = ЭлементФормы;
|
||
Форма.ЭлементыФормы.Удалить(ВременноеПолеВвода);
|
||
Иначе
|
||
ВКОбщая.ПолучитьПозициюКаретки(0, 0);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция КоординатыКурсора() Экспорт
|
||
ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
|
||
Результат = Новый Структура("НомерСтроки, НомерКолонки", КонечнаяСтрока, КонечнаяКолонка);
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Процедура Инициировать() Экспорт
|
||
// Настройки шрифта и окна автодополнения тут
|
||
#Если Сервер И Не Сервер Тогда
|
||
Обработки.ирПлатформа.Создать().БазовыйФайлРедактораКода();
|
||
#КонецЕсли
|
||
|
||
РедакторHTML = ЭлементФормы.Документ.defaultView;
|
||
ЭлементСтиля = РедакторHTML.document.createElement("style");
|
||
ЭлементСтиля.setAttribute("type", "text/css");
|
||
ЭлементСтиля.innerHTML = "
|
||
// Убираем полосы прокрутки 1С
|
||
|body {
|
||
| overflow: hidden;
|
||
|}
|
||
// Цвета статусной строки
|
||
|.statusbar-widget {
|
||
| background: #c2dfef;
|
||
| color: #000;
|
||
|}
|
||
// Окно подсказки по вызову метода
|
||
|.editor-widget.parameter-hints-widget .code {
|
||
| font-size: 13px !important;
|
||
| line-height: 15px;
|
||
|}
|
||
|.editor-widget.parameter-hints-widget .docs {
|
||
| font-size: 13px !important;
|
||
| line-height: 15px;
|
||
|}
|
||
|.editor-widget.parameter-hints-widget.visible {
|
||
| max-width: 600px;
|
||
|}
|
||
|.monaco-editor .parameter-hints-widget > .wrapper {
|
||
| max-width: 600px;
|
||
|}
|
||
|.monaco-editor-hover .monaco-editor-hover-content {
|
||
| max-width: 600px;
|
||
|}
|
||
// Подсказка удержания
|
||
|.monaco-editor-hover .hover-row {
|
||
| font-size: 13px !important;
|
||
| line-height: 15px;
|
||
|}
|
||
// Подсказка автодополнения
|
||
|.monaco-editor .suggest-widget {
|
||
| width: 500px;
|
||
|}
|
||
// Подсказка автодополнения вместе с окном детальной инфы
|
||
|.monaco-editor .suggest-widget.docs-side {
|
||
| width: 1000px;
|
||
|}
|
||
|.monaco-editor .suggest-widget.docs-side > .details {
|
||
| width: 60%;
|
||
| max-height: 800px !important;
|
||
|}
|
||
|.monaco-editor .suggest-widget.docs-side > .tree {
|
||
| width: 40%;
|
||
| float: left;
|
||
|}";
|
||
РедакторHTML.document.head.appendChild(ЭлементСтиля);
|
||
РедакторHTML.showStatusBar(Ложь); // параметр Ложь - отображаем снизу справа
|
||
РедакторHTML.renderWhitespace(Истина);
|
||
РедакторHTML.setFontSize(13);
|
||
РедакторHTML.setLineHeight(15);
|
||
РедакторHTML.disableContextMenu();
|
||
РедакторHTML.setOption("autoResizeEditorLayout", Истина); // https://github.com/salexdv/bsl_console/issues/185
|
||
//РедакторHTML.setOption("lineHeight", 15); // Высота строки редактора https://github.com/salexdv/bsl_console/issues/195
|
||
//РедакторHTML.setOption("suggestFontSize", 13); // шрифт окна автодополнения https://github.com/salexdv/bsl_console/issues/194
|
||
//РедакторHTML.setOption("suggestLineHeight", 15); // шрифт окна автодополнения https://github.com/salexdv/bsl_console/issues/194
|
||
//ИмяШрифта = ирКэш.ИмяШрифтаРедактораМодуляКонфигуратораЛкс();
|
||
//Если ЗначениеЗаполнено(ИмяШрифта) Тогда
|
||
// РедакторHTML.setFontFamily(ИмяШрифта);
|
||
//Иначе
|
||
РедакторHTML.setFontFamily("Lucida Console");
|
||
//КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
Процедура Перерисовать() Экспорт
|
||
РедакторHTML = РедакторHTML();
|
||
РедакторHTML.editor.layout();
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьСостояниеИзПоляТекстаЛкс(Знач ПолеИсточник, Знач ИсходныйТекст) Экспорт
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПолеИсточник = ЭтотОбъект;
|
||
#КонецЕсли
|
||
ПолеИсточник.ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
|
||
УстановитьТекст(ПолеИсточник.ПолучитьТекст(), Истина, ИсходныйТекст);
|
||
УстановитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка);
|
||
ТолькоПросмотр(ПолеИсточник.ТолькоПросмотр());
|
||
КонецПроцедуры
|
||
|
||
Функция СостояниеИсторииИзменения() Экспорт
|
||
РедакторHTML = РедакторHTML();
|
||
Результат = РедакторHTML.editor.saveViewState();
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Процедура ВосстановитьСостояниеИсторииИзменения(Состояние) Экспорт
|
||
РедакторHTML = РедакторHTML();
|
||
РедакторHTML.editor.restoreViewState(Состояние);
|
||
КонецПроцедуры
|
||
|
||
Процедура ПоказатьПоследнююСтроку() Экспорт
|
||
НомерСтроки = Макс(1, КоличествоСтрок()); // https://www.hostedredmine.com/issues/891268
|
||
Если НомерСтроки > 1 Тогда
|
||
УстановитьГраницыВыделения(НомерСтроки, 1, НомерСтроки, 1);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
Функция ОбработатьКликНаГиперссылке(Событие) Экспорт
|
||
СобытиеОбработано = Ложь;
|
||
ЗаголовокГиперссылки = Событие.params.label;
|
||
ЗначениеГиперссылки = Событие.params.href;
|
||
Если Ложь
|
||
Или ЗаголовокГиперссылки = "перейти по ссылке"
|
||
Или ирОбщий.СтрНачинаетсяСЛкс(ЗначениеГиперссылки, "http")
|
||
Тогда
|
||
ЗапуститьПриложение(ЗначениеГиперссылки);
|
||
СобытиеОбработано = Истина;
|
||
КонецЕсли;
|
||
Возврат СобытиеОбработано;
|
||
КонецФункции
|
||
|
||
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный ирПортативный.Открыть();
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
|
||
|