Skip to content

Latest commit

 

History

History
4622 lines (3134 loc) · 227 KB

snegapi.markdown

File metadata and controls

4622 lines (3134 loc) · 227 KB

Объектная модель Снегопата Reborn

{ extract: }

На этой странице я буду готовить информацию и отображать ход работ по портированию SnegAPI в версию Reborn.

Вступительная часть описывает новые принципы функционирования SnegAPI, а описания методов и свойств объектов взята из оригинала SnegAPI. Те методы и свойства, которые уже портированы, будут помечены как

портировано

img text

API Снегопата (SnegAPI) на данный момент выполнено по технологии OLE-Automation, так как в мире Windows-программирования это самая универсальная технология, с которой могут работать практически все языки программирования. Интерфейсы всех объектов реализованы в виде IDispatch интерфейса и позволяют обращаться к их методам и свойствам через Invoke. Библиотеки типов Снегопат не предоставляет, так как объектный интерфейс формируется динамически из объектов AngelScript.

Вообще, SnegAPI задумывалось как набор базовых кирпичиков, на базе которых с помощью дополнительных аддинов и строится функционал приложения. Сделано так было, учитывая опыт работы ОпенКонфа, в котором многие вещи были жестко прописаны в самом коде опенконфа, и не могли гибко изменяться в соответствии с изменяющимися требованиями. Поэтому в отличии от него, snegopat.dll, к примеру, не загружает сам аддины, диктуя логику их размещения. Вместо этого он предоставляет возможность через апи загружать/выгружать аддины, и их загрузкой уже занимается скрипт - snegopat.js. То есть возможно не меняя основную библиотеку, реализовать любую другую логику хранения и загрузки аддинов. Или к примеру, настройка хоткеев. Сам снегопат их не хранит, не назначает и не настраивает. Вместо этого SnegAPI предоставляет доступ к коллекции своих хоткеев, чем и пользуется скрипт hotkeys.js, организуя всю работу по хранению и настройке горячих клавиш.

Просмотр SnegAPI в исходниках

Для функционирования SnegAPI мной была создана в snegopat.dll автоматическая трансляция объектов AngelScript в IDispatch. Таким образом, реализация интерфейсов упрощается, взаимодействие кода скриптов и снегопата упрощается. Поэтому, на первых порах всвязи с отсутствием полной документации и библиотеки типов для детального знакомства с апи можно смотреть непосредственно код прикладного слоя снегопата в папке core\engine. Начать можно с файла com_designer.as, в котором описан объект Designer, а дальше смотреть его свойства и методы. Вообще, я стараюсь код объектов, реализующих SnegAPI размещать в файлах с префиксом "com_", и при портировании сохранять имена типов объектов.

При авто-трансляции объектов AngelScript в IDispatch применяется несколько правил:

  • Экспортируются все публичные методы объекта, кроме начинающихся с "_".
  • Методы, название которых начинается с "get_", не имеющие параметров и имеющие возвращаемое значение, экспортируются как чтение свойства с именем без "get_", например, "string get_name()" будет эскпортировано как свойство "name", которое можно прочитать.
  • Методы, название которых начинаются с "set_", имеющие тип "void" и один параметр, экспортируются как свойство, доступное для записи, с именем без "set_", например, "void set_name(string)" будет эскпортировано как свойство "name", которое можно присвоить.
  • Экспортируются все публичные свойства объекта, не начинающиеся с "__".
  • Свойства, чье название начинается с "_", экспортируются как read only свойства, без начального "_".
  • Если последним параметром метода указан array<Variant> - метод считается с неопределённым количество параметров. Все переданные после предпоследнего параметра аргументы укладываются в массив Variant и передаются в метод.
  • Если возвращаемое значение указано как array<Тип> - возвращается объект, имеющий свойство length (количество элементов в массиве) и метод item(индекс), возвращающий указанный элемент массива.

Параметры передаются по значению.


Объект Designer

Портирован частично, еще не все методы и свойства

Корнем объектной модели Снегопата является объект Designer. Именно через его свойства, методы и события возможен доступ ко всей остальной части API Снегопата.

Аддины получают доступ к объекту Designer, реализовав интерфейс IAddinInit. Встроенные в снегопат загрузчики для скриптов и dll уже реализуют этот интерфейс, и передают этот объект дальше, в скрипт или dll:

  • В скриптах объект Designer добавляется в пространство имен скрипта как глобальный объект Designer, поэтому его свойства и методы можно вызывать напрямую, без указания имени объекта.
  • В dll загрузчик ищет функцию initAddin, и если она есть, вызывает ее, передавая в нее ссылку на этот объект. Пока аддины dll не реализованы

Далее я распишу методы и свойства объекта Designer, по ходу дела описывая их более подробно.

Свойство addins

Портирован полностью

Только чтение. Возвращает объект IAddinMgr, с помощью которого можно работать с аддинами: загружать и выгружать их, перечислять уже загруженные аддины, получать информацию о конкретном аддине и его дополнительные возможности.

Метод v8New

Портирован полностью

Создает новый объект 1С.
Синтаксис:

v8New(ИмяТипа, [Параметры для конструктора...])

Аналог оператора Новый языка 1С.

Параметры:

  • ИмяТипа. Обязательный. Строка. Содержит имя типа создаваемого объекта.
  • [Параметры для конструктора...]. Необязательный набор параметров любого типа, разделенных запятой. Все параметры передаются в конструктор объекта.

Возвращает: ссылку на созданный объект.

Как оказалось, в среде Конфигуратора можно также как и в Предприятии содавать многие объекты. Конечно, не все - объекты, требующие подключения к данным, либо объекты прикладные (связанные с созданными метаданными), создать нельзя. Список того, что можно попробовать создать в v8new размещен на форуме снегопата в разделе "Скрипты". Не факт, что все из этих объектов заработают.

Кроме того, так как сама 1С "заточена" для работы через COM - все объекты из внутреннего типа 1С могут быть преобразованы самим движком 1С в IDispatch и уложены в VARIANT. Вот это то и позволяет потом легко использовать созданные объекты в скриптах! То есть снегопат создает объект внутреннего типа 1С, вызывает метод 1С valueToVariant - и получает готовый OLE-объект. С которым уже легко могут работать другие аддины и скрипты - вызывать их методы, работать со свойствами, обходить коллекции и т.д. JScript позволяет использовать русские буквы в названиях, так что часть кода можно напрямую брать из готового кода 1С, VBScript - нет, можно использовать только английские названия методов и свойств.

Пример:

var vt = v8New("ТаблицаЗначений")
vt.Колонки.Добавить("Кол1")
....
var fileInfo = v8New("Файл", filePath)
if(fileInfo.Существует())
{
}
....
var КонструкторФорматнойСтроки = v8New("КонструкторФорматнойСтроки");
КонструкторФорматнойСтроки.ДоступныеТипы = v8New("ОписаниеТипов", "Дата");
if (КонструкторФорматнойСтроки.ОткрытьМодально())
    addToSignatureFormat(form, "ДатаВремя#" + КонструкторФорматнойСтроки.Текст);

Метод Message

Портирован полностью.

Выводит сообщение в окно сообшений.
Синтаксис:

Message(Текст, [Пиктограмма], [Обработчик], [Параметр для обработчика])

Параметры:

  • Текст. Обязательный. Строка. Текст выводимого сообщения. Пустой текст движком 1С не выводится.

  • [Пиктограмма]. Не обязательный. Число или объект Картинка. Указывает пиктограмму для выводимого сообщения. Если передано число, выводится одна из стандартных пиктограмм:

    • mNone = 0, без пиктограммы
    • mTriangle = 1, Треугольник
    • mExc1 = 2, !
    • mExc2 = 3, !!
    • mExc3 = 4, !!!
    • mInfo = 5, Информация

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

  • [Обработчик]. Необязательный. Функция, которая будет вызвана при клике или нажатии Enter на выведенном сообщении.

  • [Параметр для обработчика]. Необязательный. Любого типа. Будет передан аргументом в функцию-обработчик нажатия при ее вызове.

Примеры:

Message("Привет!")

Выводит сообщение "Привет".

function onClick(param)
{
    MessageBox("Вы нажали строку " + param)
}
Message("Строка 1", mNone, onClick, 1)
Message("Строка 2", mExc1, onClick, 2)

Выводит две строки, по которым можно кликнуть.

Метод MessageBox

Портирован полностью

Выводит Предупреждение.
Синтаксис:

MessageBox(Текст, [Стиль], [Заголовок], [Таймаут])

Параметры:

  • Текст. Обязательный. Строка. Текст предупреждения.

  • [Стиль]. Необязательный. Число, задающее состав кнопок, тип иконки, кнопку по умолчанию:

    • mbOK = 0, Кнопка Ок.
    • mbOkCancel = 1, Кнопки Ок, Отмена.
    • mbAbortRetryIgnore= 2, Кнопки Прервать, Повторить, Пропустить.
    • mbYesNoCancel = 3, Кнопки Да, Нет, Отмена.
    • mbYesNo = 4, Кнопки Да, Нет.
    • mbRetryCancel = 5, Кнопки Повторить, Отменить.
    • mbIconError = 0x10, Картинка ошибки.
    • mbIconQuestion = 0x20, Картинка вопроса.
    • mbIconWarning = 0x30, Картинка предупреждения.
    • mbIconInformation = 0x40, Картинка информации.
    • mbDefButton1 = 0, Кнопка по умолчанию - 1.
    • mbDefButton2 = 0x100, Кнопка по умолчанию - 2.
    • mbDefButton3 = 0x200, Кнопка по умолчанию - 3.

    Стили иконок и дефолтных кнопок надо прибавлять к стилю состава кнопок.

  • [Заголовок]. Необязательный. Строка. Заголовок для предупреждения. По умолчанию - Конфигуратор.

  • [Таймаут]. Необязательный. Число. Количество секунд для отображения предупреждения. 0 - без ограничения. По умолчанию - 0.

Возвращает номер выбранного ответа:

  • 0 - сработал таймаут.
  • mbaOK = 1, OK
  • mbaCancel = 2, Отмена
  • mbaAbort = 3, Прервать
  • mbaRetry = 4, Повторить
  • mbaIgnore = 5, Игнорировать
  • mbaYes = 6, Да
  • mbaNo = 7, Нет

Свойство profileRoot

Портирован полностью

Содержит объект IProfileStore, представляющий корневую папку настроек 1С. Через этот объект можно работать со всем деревом хранимых настроек 1С.

Метод designInternalForm

портирован

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

designInternalForm(ПутьКФайлуФормы)

Параметры:

  • ПутьКФайлуФормы. Необязательный. Строка. Путь к открываемому файлу. Если не указан, или передана пустая строка, будет открыта новая пустая форма.

Смотрите также описание работы с ресурсами 1С

Метод designScriptForm

Портирован полностью

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

designScriptForm(ПутьКФайлуФормы)

Параметры:

  • ПутьКФайлуФормы. Необязательный. Строка. Путь к открываемому файлу. Если не указан, или передана пустая строка, будет открыта новая пустая форма.

ВАЖНО!!!

Сохранять форму можно только с расширением .ssf!!!
Так как сохранение обычной формы в файл "самой по себе", не в составе какого-либо контейнера в 1С нет, то в процедуре сохранения файла с формой в движке 1С есть ошибка - файл открывается только для записи, но в процессе сохранения также происходит попытка чтения из файла. Ошибка приводит к падению 1С. Снегопат патчит эту ошибку, перехватывая открытие файла движком 1С. Если открывается файл с расширением .ssf, то режим открытия исправляется на "чтение и запись".

Метод loadScriptForm

Портирован полностью

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

loadScriptForm(ПутьКФайлуФормы, [ОбъектДляСобытий], [ПрефиксИменСобытий])

Параметры:

  • ПутьКФайлуФормы. Обязательный. Строка. Путь к открываемому файлу.
  • [ОбъектДляСобытий]. Необязательный. Объект. Все обработчики событий, назначенные в форме, будут искаться среди методов этого объекта.
  • [ПрефиксИменСобытий]. Необязательный. Строка. Добавляется в начало имени события при его поиске среди обработчиков. Например, если префикс Форма_ и название назначенного обработчика ПриОткрытии, то в объекте будет искаться метод Форма_ПриОткрытии.

Возвращает: 1Сный объект Форма (обычная). Методы и свойства описаны в СП. Дальше с ним можно работать, как с обычной формой в Предприятии - Открыть(), ОткрытьМодально() и т.п.

Небольшая тонкость в работе обработчиков событий. Так как не все языки, работающие с OLE-Automation, корректно работают с передачей параметров по ссылке (а javascript именно такой язык), при вызове обработчика аргументы, передаваемые в него, "оборачиваются" в объект-посредник, и доступны в нем через свойство val. Это позволяет при необходимости установить новое значение свойству и таким образом передать изменения обратно. Например:

function РезультатВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
{
    СтандартнаяОбработка.val = false        // Устанавливаем новое значение
    var mdobj = ВыбраннаяСтрока.val.mdobj   // Обращаемся к значению

Свойство hotkeys

Портирован полностью. Также добавлено несколько новых методов.

Содержит ссылку на объект IHotKeys - менеджер горячих клавиш. Позволяет добавлять/удалять хоткеи.

Метод globalContext

Портирован полностью

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

var gc = globalContext(ГУИДконтекста)

Параметры:

  • ГУИДконтекста. Обязательный. Строка. Содержит guid, задающий глобальный контекст, который желаем получить.

Возвращает объект, чьи методы и свойства представляют часть глобального контекста 1С.

Если открыть синтакс-помощник и в нем раздел "Глобальный контекст" (и "Системные перечисления") - мы увидим целую кучу разнообразных функций и свойств, типа Сообщить, Вопрос, КодВозвратаДиалога и т.п.

На самом деле в движке 1С нет глобальный функций и свойств. Есть специальные типы объектов, которые создаются при запуске 1С в режиме предприятия в единственном экземпляре, чьи методы и свойства становятся доступными глобально. То есть например, встретив Сообщить, 1С будет перебирать все такие созданные объекты, пока не найдет тот, в котором есть такой метод, и вызовет его. Метод globalContext пытается создает объект, чей guid передали и вернуть ссылку на него.

Откуда брать эти guid'ы и кто за что отвечает? Надо просто посмотреть файл core\std\scripts\0_global_context.js. Там перечислены guid'ы всех таких объектов, их методы и свойства, а также dll, в которых они реализованы. Проверить сразу все из них на возможность работы в Конфигураторе нереально, поэтому по мере сил и нужд проверяются отдельные из них, что и отражается в этом скрипте.

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

$addin global
...
global.connectGlobals(SelfScript)

Здесь происходит сразу получение всех проверенных глобальных объектов 1С и подключение их к глобальному пространству имен скрипта, т.е. после этих строк вполне можно писать как в самой 1С Сообщить, Вопрос, ЗначениеВСтрокуВнутр и т.п.

Метод listGlobalContextes

Не портирован

Выводит в окно сообщений список всех возможных guid'ов глобальных объектов, их методы/свойства.
Синтаксис:

listGlobalContextes()

Метод используется только в исследовательских целях, для работы над файлом global.js.

Метод getCmdState

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

Позволяет получить состояние команды.
Синтаксис:

state = getCmdState(гуидГруппы, номерКоманды, [ПодномерКоманды])

Параметры:

  • гуидГруппы. Обязательный. Строка. GUID группы команд.
  • номерКоманды. Обязательный. Число. Номер команды в группе.
  • [ПодномерКоманды]. Необязательный. Число. Номер подкоманды в списке.

Возвращает: объект ICmdUpdateResult, содержащий информацию о состоянии команды.

Что такое команды? Это все действия, запускающиеся пунктом меню, кнопкой на панели инструментов, горячей кнопкой. В старом-добром WinAPI в этих случаях посылалось сообщение WM_COMMAND с укзанием номера команды. В 1С конечно же не ищут легких путей, поэтому там разработана своя объектная система для посылки команд и их идентификации.

Все команды в 1С делятся на группы, которые характеризуются GUID'ом. Каждая команда имеет свой номер внутри группы. Часть команд может представлять не один, а несколько разных пунктов меню, связанных друг с другом. Обычно это подменю с выбором из нескольких однотипных вариантов.

Существует несколько путей прохождения и обработки команд.

  • Команда может посылаться в главное окно, которое перенаправляет ее в активное окно. Обычно это команды главного меню, панелей команд главного окна, команды контекстного меню.
  • Может посылаться в конкретное окно. Обычно это команды панели инструментов в форме.
  • И может посылаться в конктретное окно и конкретный элемент управления. Это обычно команды панелей инструментов, связанных с конкретными элементами формы, и управляющие ими, например с командами "Добавить", "Сортировать" какого-либо табличного поля.

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

В силу того, что пути прохождения команд открывались мной не сразу, а по мере углубления исследований, методы для работы с разными вариантами обработки команд несколько разбросаны по SnegAPI. Данный метод проверяет состояние команды, пропуская ее через обработчик команд главного окна.

Так как помнить и работать с guid'ами иномерами команд трудно, был создан скрипт core\std\scripts\2_commands.js. Он содержит описания групп и состава найденных команд, создает объектную "обертку" вокруг команд для более удобной работы, а также автоматически создает макросы для посылания этих команд в главное окно (чтобы можно было назначить для них хоткеи). Кроме того, он объединяет в одной объектной модели разбросанные по SnegAPI методы работы с командами (помните, что я говорил о "кирпичиках" SnegAPI?). С помощью этого скрипта работать с командами становиться проще. В начале скрипта подключаем аддин:

$addin stdcommands

Затем можем использовать:

// Сохраним конфигурацию
stdcommands.Config.Save.send()
...
// Узнать, открыта ли конфигурация
function isConfigOpen()
{
    var s = stdcommands.Config.Close.getState()
    return s && s.enabled
}

Метод sendCommand

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

Посылает команду в главное окно 1С.
Синтаксис:

sendCommand(гуидГруппы, номерКоманды, [ПодномерКоманды])

Параметры:

  • гуидГруппы. Обязательный. Строка. GUID группы команд.
  • номерКоманды. Обязательный. Число. Номер команды в группе.
  • [ПодномерКоманды]. Необязательный. Число. Номер подкоманды в списке.

Возвращает: Истина, если команда обработана, иначе Ложь.

Данный метод позволяет запустить выполнение какой-либо команды, как если бы ее нажал пользователь. Подномер команды используется для команд, состоящих из списка пунктов. Например, это команды для открытия одного из последних файлов. Тогда в методе getCmdState можно получить весь список подкоманд, и указать, который из них открывать.

Свойство cmdTrace

Портировано полностью

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

Свойство sVersion

Портировано полностью

Только чтение. Строка с номером версии Снегопата.

Свойство v8Version

Портировано полностью

Только чтение. Строка с номером версии релиза 1С.

Свойство v8ver

НОВОЕ

Только чтение. Версия релиза 1С в виде 64битного значения, где под каждую часть номера отводится 16 бит.

Свойство snMainFolder

НОВОЕ

Только чтение. Путь к папке расположения snegopat.dll, с завершающим слэшем.

Свойство snegopat

Портировано частично. Свойство есть, но еще не все методы работают.

Только чтение. Содержит объект ISnegopat.

Метод saveProfile

Портировано полностью

Вызывает сохранение настроек 1С.
Синтаксис:

saveProfile();

1С сохраняет свои настройки только при завершении работы. В случае краха программы изменения настроек остаются несохраненными. Метод позволет принудительно сохранить их.

Свойсто events

Портировано полностью

Только чтение. Содержит объект IEventConnector, позволяющий организовать подписку на события. Служит для замены стандартного для OLE-Automation интерфейса IConnectionPoint, т.к. тот не так гибок, как хотелось бы.

Метод createTimer

Портирован полностью

Создает таймер, вызывающий заданную функцию через заданный временнОй промежуток.
Синтаксис:

createTimer(Интервал, Объект, [Обработчик] = "")

Параметры:

  • Интервал. Обязательный. Число. Количество миллисекунд для срабатывания таймера.
  • Объект. Обязательный. Задает объект, среди методов которого ищется функция-обработчик.
  • Обработчик. Не обязательный. Строка. Название метода объекта, который будет вызван при срабатывании таймера. Если передана пустая строка, будеть вызван метод объекта "по умолчанию", т.е. с номером 0.

Возвращает: Число, идентификатор созданного таймера.

Метод killTimer

Портирован полностью

Уничтожает таймер.
Синтаксис:

killTimer(НомерТаймера);

Параметры:

  • НомерТаймера. Обязательный. Число. Идентификатор таймера, который был вернут методом createTimer.

Метод toV8Value

Портирован полностью

Позволяет узнать больше о значении из 1С.
Синтаксис:

res = toV8Value(Значение)

Параметры:

  • Значение. Обязательный. Любой. Значение, информацию о котором желаем получить.

Возвращает: объект IV8Value, позволяющий получить информацию о значении.

Хотя 1С и заточена для работы с COM, и любое значение из 1С может быть преобразовано в тип, поддерживаемый OLE-Automation, преобразование сделано простым, и многая информация о значении недоступна. Имея COM-объект, невозможно узнать, какого типа 1С этот объект, получить его строковое представление. Чтобы обойти это ограничение, был создан объект IV8Value, который получая COM-значение, преобразует его обратно в значение 1С и предоставляет информацию о нем.

Свойство windows

Портировано частично. Не все методы реализованы

Только чтение. Содержит объект IV8Windows, содержащий методы для работы с оконной подсистемой 1С.

Свойство metadata

портировано полностью

Только чтение. Содержит объект IV8MetaData, содержащий методы для работы со всеми открытыми в 1С метаданными.

Свойство v8files

портировано

Только чтение. Содержит объект IV8Files, содержащий методы для работы с файлами через движок 1С.

Метод loadResourceString

портировано

Загружает строку из ресурсных файлов 1С.
Синтаксис:

res = loadResourceString(ИмяМодуля, ИдентификаторСтроки);

Параметры:

  • ИмяМодуля. Обязательный. Строка. Задает имя ресурсного файла (без расширения), из которого надо получить строку.
  • ИдентификаторСтроки. Обязательный. Строка. Задает идентификатор строки в ресурсном файле.

Вся локализация интерфейса в 1С построена на системе ресурсных файлов (смотри Работа с ресурсными файлами 1С). Файлы в том числе содержат и строковые константы, задающие различные сообщения и прочие элементы интерфейса. Данный метод позволяет получить строку по имени модуля и ее идентификатору в модуле, в активной локали интерфейса 1С.
Например:

loadResourceString("config", "IDS_AFTERLOADIBBAD")

Вернет "Информационную базу загрузить не удалось." при запуске 1С в русском интерфейсе, и "Couldn't restore the Infobase." при запуске 1С в английском интерфейсе.

Свойство ownerName

Портировано полностью

Только чтение. Строка, содержащая название владельца данной копии snegopat.dll, как оно появляется в сплеш-заставке.

Свойство v8debug

Не портировано

Только чтение. Содержить объект IV8Debugger, позволяющий немного взаимодействовать с отладчиком 1С.

Событие onMessage

Портировано полностью

Вызывается при выводе текста в окно сообщений.
Параметры обработчика:

  • Объект IMessageParams. Содержит информацию о выводимом сообщении. Свойства объекта:

    • text. Только чтение. Содержит текст сообщения.
    • marker. Только чтение. Число, номер маркера сообщений, описание смотри в методе Message.
    • cancel. Чтение и запись. Булево. При установке в true подавляет вывод текста в окно сообщений.

Событие beforeExitApp

Портировано полностью

Вызывается перед попыткой закрытия приложения. Позволяет отменить закрытие.
Параметры обработчика:

  • Объект IParamsWrapper. Свойства объекта:

    • val. Чтение и запись. Булево. При установке в true позволяет отменить закрытие приложения.

Событие onExitApp

Портировано полностью

Вызывается при закрытии приложения. Параметров нет.

Событие onLoadAddin

Портировано полностью

Вызывается при загрузке аддина.
Параметры обработчика:

  • Объект IAddin. Содержит информацию о загруженном аддине.

Событие onUnLoadAddin

Портировано полностью

Вызывается при выгрузке аддина.
Параметры обработчика:

  • Объект IAddin. Содержит информацию о выгружаемом аддине.

Событие onIdle

Портировано полностью

Вызывается при "простое" программы, т.е. когда все сообщения из очереди событий обработаны. Параметров нет. Позволяет организовать выполнение каких-либо в как-бы фоновом режиме.

Событие onSelectFile

портировано

Вызывается при открытии диалога выбора файлов.
Параметры обработчика:

  • Объект ISelectFileData. Содержит информацию об открываемом диалоге.

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

Событие createTextWindow

портировано полностью

Возникает при создании окна текстового редактора. Позволяет подключится к этому окну альтернативным редакторам.

Параметры:

  • Объект ITextWindow - создаваемы текстовый редактор.

Объект IEventConnector

Портировано полностью

Объект предназначен для организации системы работы с событиями, позволяет одним объектам реагировать на события, порожденные другим объектом, подписываясь и отписываясь в любое время на любое из них. Служит для замены стандартного для OLE-Automation интерфейса IConnectionPoint.

Событие всегда характеризуется объектом - источником события и именем события. При подписке и отписке указывается объект - приемник события и имя метода - обработчика события этого объекта. На каждое событие может быть подписано несколько обработчиков. Все они выполняются в порядке подписки. Имя события - регистроНЕзависимое (в отличии от прошлого API). Пример подписки на событие:

function onIdle()
{
    .....
}
events.connect(Designer, "onIdle", SelfScript.self)

В Snegopat-Reborn можно при подписке на событие указывать имя метода-обработчика, как "-". В этом случае у объекта-обработчика не ищется метод по его имени, а вызывается метод "по умолчанию", т.е. номером 0. Для объектов-функций JScript - это непосредственно вызов функции. Таким образом, можно подписчиком можно указать сразу анонимную "inplace" функцию, указав имя обработчика, как "-":

connect(Designer, "onIdle", function() {doIdleWork()}, "-");

Кроме того, методы connect и addCommandHandler теперь возвращают объект, описывающий подписку на событие. У него можно при желании поменять объект-обработчик и имя метода. При отписке можно в методе disconnectNode указать этот объект, не используя старый метод отписки с указанием объекта-обработчика и имени метода.

Метод connect

Портировано полностью

Позволяет подписаться на событие.
Синтаксис:

events.connect(ОбъектИсточник, ИмяСобытия, ОбъектПриемник, [ИмяОбработчика])

Параметры:

  • ОбъектИсточник. Обязательный. Объект (IDispatch). Ссылка на объект, которой порождает событие.
  • ИмяСобытия. Обязательный. Строка. Имя события.
  • ОбъектПриемник. Обязательный. Объект (IDispatch). Ссылка на объект, который содержит обработчик события.
  • [ИмяОбработчика]. Необязательный. Строка. Название метода в объекте-приемнике, который будет обработчиком события. Если не указан, то считается совпадающим с именем события. Если указан "-", то вызывается метод объекта "по умолчанию", т.е. с номером 0.

Возвращает: объект HandlerNode, описывающий подписку.

Метод disconnect

Портировано полностью

Позволяет отписаться от события.
Синтаксис:

events.disconnect(ОбъектИсточник, ИмяСобытия, ОбъектПриемник, [ИмяОбработчика])

Параметры:

  • ОбъектИсточник. Обязательный. Объект (IDispatch). Ссылка на объект, которой порождает событие.
  • ИмяСобытия. Обязательный. Строка. Имя события.
  • ОбъектПриемник. Обязательный. Объект (IDispatch). Ссылка на объект, который содержит обработчик события.
  • [ИмяОбработчика]. Необязательный. Строка. Название метода в объекте-приемнике, который будет обработчиком события. Если не указан, то считается совпадающим с именем события.

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

Метод disconnectNode

НОВОЕ

Позволяет отписаться от события.
Синтаксис:

events.disconnectNode(ОбъектПодписки)

Параметры:

  • ОбъектПодписки. Обязательный. Объект HandlerNode, возвращенный в методах connect и addCommandHandler.

Удаляет указанную подписку на событие.

Метод fireEvent

Портировано полностью

Генерирует событие.
Синтаксис:

events.fireEvent(ОбъектИсточник, ИмяСобытия, [Дополнительные параметры события...]);

Параметры:

  • ОбъектИсточник. Обязательный. Объект (IDispatch). Ссылка на объект, которой порождает событие.
  • ИмяСобытия. Обязательный. Строка. Имя события.
  • [Дополнительные параметры события...]. Необязательные параметры любого типа и количества. Все они будут переданы как аргументы подписчикам - обработчикам события.

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

Вообще с помощью этого механизма можно организовывать не только реагирование на события SnegAPI, но и свои события и оповещения. Генератору события достаточно вызвать fireEvent, и все подписчики на это событие будут оповещены.

Метод removeMyListeners

НОВОЕ

Отписывает всех подписчиков объекта. Синтаксис:

events.removeMyListeners(ОбъектИсточник);

Параметры:

  • ОбъектИсточник. Обязательный. Объект (IDispatch). Ссылка на объект - источник событий.

Удаляет из списка все подписки на все события этого объекта-источника.

Метод addCommandHandler

Портировано полностью

Позволяет подписаться на срабатывание команды, посылаемой в главное окно.
Синтаксис:

events.addCommandHandler(ГУИДКоманды, НомерКоманды, ОбъектОбработчик, ИмяОбработчика);

Параметры:

  • гуидГруппы. Обязательный. Строка. guid, задающий группу команд.
  • НомерКоманды. Обязательный. Число. Номер команды в группе.
  • ОбъектОбработчик. Обязательный. Объект (IDispatch). Задает объект, чей метод будет обработчиком.
  • ИмяОбработчика. Обязательный. Строка. Имя метода, который будет вызваться. Если указан "-", то вызывается метод объекта "по умолчанию", т.е. с номером 0.

Возвращает: объект HandlerNode, описывающий подписку.

О командах и их обработке можно прочитать здесь.

Можно подписаться на срабатывание команды, посылаемой в главное окно. Неважно, как она будет активирована - программно, или пользователем - обработчик сработает. Обработчик может выполнить какие-либо действия при своем вызове, вплоть до отмены прохождения команды в стандартный обработчик 1С. Обработчик должен принимать один аргумент. В него будет передан объект ICmdHandlerParam, который передает информацию о сработавшей команде.

Метод delCommandHandler

Портировано полностью

Удяляет обработчик команды, установленной методом addCommandHandler.
Синтаксис:

events.delCommandHandler(ГУИДКоманды, НомерКоманды, ОбъектОбработчик, ИмяОбработчика);

Параметры:

  • гуидГруппы. Обязательный. Строка. guid, задающий группу команд.
  • НомерКоманды. Обязательный. Число. Номер команды в группе.
  • ОбъектОбработчик. Обязательный. Объект (IDispatch). Задает объект, чей метод будет обработчиком.
  • ИмяОбработчика. Обязательный. Строка. Имя метода обработчика.

Объект ICmdHandlerParam

Портировано полностью

Этот объект передается как аргумент при вызове обработчика команды, установленного методом addCommandHandler. Сам обработчик вызывается дважды - один раз перед передачей команды в стандартный обработчик 1С. Если команда не была отменена, обработчик вызывается еще один раз после штатной обработки команды.

Свойство groupID

Портировано полностью

Только чтение. Строка, содержащая guid группы команды.

Свойство cmdNumber

Портировано полностью

Только чтение. Число, номер команды в группе.

Свойство cmdParam

Портировано полностью

Только чтение. Число, параметр, передаваемый с командой.

Свойство isBefore

Портировано полностью

Только чтение. Булево. При первом вызове обработчика (до срабатывания команды) установлено в true. При вызове после срабатывания установлено в false.

Свойство cancel

Портировано полностью

Чтение и запись. Булево. При вызове обработчика до срабатывания команды установка свойства в true позволяет отменить стандартную обработку команды (заблокировать ее).


Объект ISelectFileData

портирован

Объект этого типа передается как параметр в обработчик события Designer.onSelectFile. Позволяет получить и установить информацию об открываемом диалоге выбора файлов.

Свойство mode

Только чтение. Число. Показывает, в каком режиме открывается диалог.

  • sfOpen = 0, Открытие файла
  • sfSave = 1, Сохранение файла
  • sfFolder= 2, Выбор каталога

Свойство flags

Только чтение. Число. Содержит флаги открытия диалога:

  • sfMultiSelect = 1, Множественный выбор
  • sfPromptCreate = 2, Предупреждать при создании файла
  • sfFileMustExist = 4, Выбирать только существующий файл
  • sfDisableChangeDir = 8, Не менять каталог
  • sfPromptOverwrite = 16, Предупреждать при перезаписи
  • sfUsePreview = 32, Использовать просмотр

Свойство filtersCount

Только чтение. Число. Содержит количество фильтров в диалоге открытия файлов.

Метод filterDescr

Позволяет получить описание фильтра по его индексу.
Синтаксис:

res = filterDesc(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер фильтра, начиная с 0.

Возвращает: строку с описанием указанного фильтра. Например, "Все файлы".

Метод filterVal

Позволяет получить значение фильтра (маску) по его номеру.
Синтаксис:

res = filterVal(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер фильтра, начиная с 0.

Возвращает: строку с маской фильтра.

Свойство filter

Чтение и запись. Число. Позволяет получить и установить номер выбранного фильтра.

Свойство defExt

Только чтение. Строка. Содержит расширение файла по-умолчанию.

Свойство initialFileName

Только чтение. Строка. Содержит начальное имя файла.

Свойство folder

Чтение и запись. Строка. Содержит начальный каталог.

Свойство title

Чтение и запись. Строка. Позволяет прочитать/установить заголовок диалога выбора файлов.

Свойство filesCount

Только чтение. Число. Содержит количество выбранных файлов.

Метод selectedFile

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

selectedFile(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер выбранного файла, начиная с 0.

Возвращает: строку, имя файла.

Метод addSelectedFile

Добавляет путь к файлу в список выбранных файлов.
Синтаксис:

addSelectedFile(ПолныйПуть)

Параметры:

  • ПолныйПуть. Обязательный. Строка. Полный путь к добавляемому файлу.

Свойство result

Чтение и запись. Число. Позволяет задать результат диалога.

  • sfrNormal = 0, использовать обычное открытие диалога.
  • sfrSelected = 1, не открывать диалог, вернуть, что пользователь нажал Ок.
  • sfrCanceled = 2, не открывать диалог, вернуть, что пользователь нажал Отмена.

Работа с метаданными

портировано

Для работы с метаданными в режиме предприятия есть объект Метаданные. Он также работает и в режиме конфигуратора, но только с метаданными ИБ. Кроме того, возможности штатного объекта ограниченны и не предоставляют всей полноты информации о метаданных. Поэтому в SnegAPI сделана своя модель работы с метаданными.

Что же из себя они представляют?
Вкратце метаданные - это дерево из объектов метаданных. Каждый объект относится к определенному классу метаданных, имеет набор собственных свойств, а также несколько видов дочерних объектов.

Класс объекта метаданных задает, какие виды свойств имеет этот объект и какие виды дочерних объектов. Например, возьмем объект метаданных какого-либо справочника. Он относится к классу Справочники. Данный класс указывает, что у справочника имееются такие-то свойства (Иерархический, ДлинаКода, МодульОбъекта и т.п.), и следующие виды дочерних объектов: Реквизиты, ТабличныеЧасти, Формы, Команды, Макеты. Конкретные значения свойств и состав дочерних объектов задаются уже в каждом конкретном объекте метаданных.

У каждого объекта метаданных имеется уникальный идентификатор (guid), а также набор свойств. Свойства - это то, мы видим в окне свойств, активировав объект в дереве метаданных. Обратите внимание, что непосредственно сами модули, формы, макеты - это тоже свойства объекта метаданных, а не дочерние объекты. Каждый класс метаданных и каждый вид свойств также имеет свой собственный уникальный идентификатор (guid).

Сами метаданные организованы в контейнер метаданных. Он задает корневой объект, систему типов, порожденных этими метаданными, название контейнера и т.д. Если сравнивать с v77, то там был только один, глобальный контейнер метаданных, то есть по сути, было только одно дерево. В 8ке это не так. Имеется контейнер с метаданными конфигурации базы данных, метаданными основной конфигурации, каждая внешняя обработка/отчет и каждый открываемый cf-файл имеют свое дерево метаданных.
SnegAPI содержит методы, позволяющие перебрать все доступные в данный момент контейнеры метаданных. Каждый контейнер может быть подчинен другому, master контейнеру. Обычно это внешние отчеты/обработки, их метаданные подчинены основным метаданным.

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

Корнем доступа ко всем метаданным является свойство Designer.metadata, имеющее тип IV8MetaData. Через него можно перебрать все метаданные, открытые в конфигураторе.


Объект IV8MetaData

портирован полностью

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

Свойство ib

Только чтение. IV8MDContainer. Содержит контейнер с метаданными конфигурации базы данных.

Свойство current

Только чтение. IV8MDContainer. Содержит контейнер с текущими активными метаданными. Если конфигурация открыта, возвращает контейнер метаданных основной конфигурации, если закрыта, возвращает метаданные конфигурации базы данных.

Метод mdClass

Получить класс метаданных по их guid'у.
Синтаксис:

res = metadata.mdClass(гуидКласса)

Параметры:

  • гуидКласса. Обязательный. Строка. Содержит guid класса метаданных.

Возвращает: объект IV8MDClass с описанием класса метаданных.

Метод mdProp

Получить вид свойства метаданных по их guid'у.
Синтаксис:

res = metadata.mdProp(гуидВидаСвойств)

Параметры:

  • гуидВидаСвойств. Обязательный. Строка. Содержит guid вида свойств метаданных.

Возвращает: объект IV8MDProperty с описанием вида свойств метаданных.

Свойство openedCount

Только чтение. Число. Количество открытых в Конфигураторе контейнеров метаданных.

Метод getContainer

Получить контейнер метаданных по индексу.
Синтаксис:

res = metadata.getContainer(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер контейнера, начиная с 0.

Возвращает: объект IV8MDContainer - указанный контейнер метаданных.

Событие MetaDataEvent

портировано полностью

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

Параметры:


Объект IV8MetaDataEvent

портировано полностью, добавлено свойство parentObj

Содержит информацию о событии метаданных.

Свойство kind

Только чтение. Число, перечисление MetaDataEvents. Содержит вид произошедшего события:

  • mdeAdd = 0, Добавление объекта метаданных
  • mdeChangeProp = 1, Изменение свойства объекта метаданных
  • mdeDelete = 2, Удаление объекта метаданных
  • mdeChange = 3, Изменение объекта метаданных
  • mdeSave = 4, Перед сохранением метаданных
  • mdeClose = 5, Закрытие контейнера метаданных
  • mdeAfterSave = 6, После сохранения метаданных
  • mdeOpen = 7, Открытие контейнера метаданных

Свойство request

Только чтение. Булево. Флаг опроса возможности события.

Для некоторых изменений метаданных 1С сначала посылает событие с установленным флагом request. Если кто-то из подписчиков установит result в false, изменение отменяется.

Свойство result

Чтение и запись. Булево. Позволяет отменить событие, при установленном флаге request.

Свойство container

Только чтение. Объект IV8MDContainer. Указывает контейнер метаданных, к которому относится событие.

Свойство obj

Только чтение. Объект IV8MDObject. Показывает объект метаданных, к которому относится событие. Может быть null.

Свойство parentObj

Только чтение. Объект IV8MDObject. Показывает родительскй объект метаданных, к которому относится событие. Может быть null.

Свойство prop

Только чтение. Объект IV8MDProperty. Показывает свойство объекта метаданных, к которому относится событие. Может быть null.


Объект IV8MDContainer

портирован полностью

Контейнер одного дерева метаданных.

Свойство rootObject

Только чтение. IV8MDObject. Корневой объект метаданных, узел "Конфигурация". С него можно начинать перебор всех метаданных.

Метод typeList

портировано

Позволяет получить все типы прикладных объектов, порожденные этим деревом метаданных.
Синтаксис:

res = container.typeList(гуидКатегорииТипов, Язык)

Параметры:

  • гуидКатегорииТипов. Обязательный. Строка. Содержит guid, задающий категорию типов, которые мы желаем получить. Если передана пустая строка, возвращает все возможные типы.
  • Язык. Обязательный. Число. На каком языке возвращать названия типов. 0 - английский, 1 - русский.

Возвращает: array, содержащий объекты IV8TypeInfo, описывающие типы.

Дело в том, что в режиме конфигуратора 1С не регистрирует в своей системе типов те типы, которые порождены метаданными (для ясности это к примеру такие как: СправочникСсылка.ХХХ, ДокументОбъект.ХХХ и т.п.). И получить для них объект ОписаниеТипов не получается. Однако можно получить guid какого-либо типа и найти его в этом массиве по guid. Примеры использования можно найти в файлах scripts\code_gen\gen_mgr.js и scripts\code_gen\create_doc.js.

Свойство masterContainer

Только чтение. IV8MDContainer. Содержит ссылку на контейнер-владелец этого контейнера. Заполнено для внешних отчетов/обработок.

Свойство isModified

Только чтение. Булево. Содержит признак измененности метаданных в этом контейнере.

Свойство treeVisible

Чтение и запись. Булево. Позволяет получить/установить видимость дерева метаданных этого контейнера.

Метод findByUUID

Позволяет найти объект метаданных по его идентификатору.
Синтаксис:

mdObj = container.findByUUID(Идентификатор)

Параметры:

  • Идентификатор. Обязательный. Строка. Содержит guid, идентификатор объекта метаданных.

Возвращает: объект IV8MDObject с указанным идентификатором, если он найден, иначе null.

Метод findByTypeUUID

Найти объект метаданных по идентификатору порожденного им типа.
Синтаксис:

mdObj = container.findByTypeUUID(ИдентификаторТипа)

Параметры:

  • ИдентификаторТипа. Обязательный. Строка. Содержит guid, идентификатор типа, порожденного объектом метаданных.

Возвращает: объект IV8MDObject, который образовал тип с указанным идентификатором, если он найден, иначе null.

Некоторые объекты метаданных порождают различные прикладные типы. Например, справочник порождает типы: СправочникОбъект.ХХХ, СправочникСсылка.ХХХ, СправочникМенеджер.ХХХ, СправочникСписок.ХХХ и т.п. Но так как при работе в конфигураторе типы прикладных объектов не регистрируются в системе типов 1С, вместо самих типов мы всегда получаем только их идентификаторы - guid'ы. Этот метод позволяет имея гуид типа, найти объект, который его породил.

Свойство identifier

Только чтение. Строка. Название контейнера метаданных, как оно отображается в различных сообщения конфигуратора. Например, "Основная конфигурация", Конфигурация базы данных. Для внешних отчетов и обработок, а также открытых cf-файлов это обычно имя файла.


Объект IV8TypeInfo

портирован полностью

Содержит информацию о прикладном типе, порожденному объектом метаданных.

Свойство name

Только чтение. Строка. Имя типа.

Свойство clsid

Только чтение. Строка. Идентификатор типа.

Свойство order1

Только чтение. Число. Ключ упорядочивания, используемый 1С при показе списка типов.

Свойство order2

Только чтение. Число. Второй ключ упорядочивания, используемый 1С при показе списка типов.

Свойство picture

Только чтение. Объект Картинка. Пиктограмма типа.


Объект IV8MDObject

портирован частично, добавлен метод isSame

Представляет объект метаданных.

Свойство id

портировано

Только чтение. Строка. Содержит guid - идентификатор объекта метаданных.

Свойство mdclass

портировано

Только чтение. IV8MDClass. Класс метаданных объекта.

Свойство parent

портировано

Только чтение. IV8MDObject. Содержит родительский объект метаданных.

Метод isSame

НОВОЕ

Позволяет сравнить, ссылаются ли два объекта IV8MDObject на один и тот же реальный объект метаданных.
Синтаксис:

mdObj.isSame(ДругойОбъект)

Параметры:

  • ДругойОбъект. Обязательный. IV8MDObject. Другой объект метаданных.

Возвращает: true - два объекта ссылаются на один реальный объект метаданных.

Метод property

портировано

Позволяет получить свойство объекта метаданных в виде значения.
Синтаксис:

prop = mdObj.property(ИндексСвойства)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.

Возвращает: значение свойства.

Следует учесть, что для внешних свойств метод малополезен, всегда возвращается одно и то же значение для всех объектов и свойств. Также стоит понимать, что не все типы значений 1С имеют адекватное отображение в COM-типы, и для дальнешей с ними работы надо либо использовать метод toV8Value, либо работать с внутренним представлением значения через ЗначениеВСтрокуВнутр.

Метод setProperty

портировано

Позволяет установить значение свойства объекта метаданных.
Синтаксис:

setProperty(ИндексСвойства, Значение)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.
  • Значение. Обязательный. Любого типа.

Возвращает: Булево. Удалось ли успешно установить свойство.

Следует учесть, что большинство типов значений нет в COM, и создать их можно только через v8New или ЗначениеИзСтрокиВнутр. Также надо понимать, что значения внешних свойств здесь также не поменять, у них надо менять их файлы.

Метод childObjectsCount

портировано

Позволяет получить количество дочерних объектов указанного вида.
Синтаксис:

res = mdObj.childObjectsCount(ВидОбъектов)

Параметры:

  • ВидОбъектов. Обязательный. Строка или Число. Указывается либо номер вида дочерних объектов, начиная с 0, либо гуид вида, либо его название.

Возвращает: Число. Количество дочерних объектов заданного вида.

Пример, узнать сколько у объекта есть табличных частей:

var count = mdObj.childObjectsCount("ТабличныеЧасти")

Метод childObject

портировано

Позволяет получить дочерний объект заданного вида по его индексу.
Синтаксис:

child = md.childObject(ВидОбъектов, Индекс)

Параметры:

  • ВидОбъектов. Обязательный. Строка или Число. Указывается либо номер вида дочерних объектов, начиная с 0, либо гуид вида, либо его название.
  • Индекс. Обязательный. Строка или Число. Указывается либо номер дочернего объекта, начиная с 0, либо гуид дочернего объекта, либо его название.

Возвращает: IV8MDObject. Указанный дочерний объект.

Пример:

// Получить первый документ основной конфигурации
var mdDoc = metadata.current.rootObject.childObject("Документы", 0)
// Получить справочник по имени
var mdRef = metadata.current.rootObject.childObject("Справочники", "Номенклатура")

Свойство container

портировано

Только чтение. IV8MDContainer. Контейнер метаданных, к которым принадлежит объект.

Метод activateInTree

портировано

Активирует объект метаданных в дереве метаданных.
Синтаксис:

mdObj.activateInTree()

При вызове метода заданный объект стает активным в окне - дереве метаданных, фокус переключается в дерево.

Метод editProperty

портировано

Позволяет открыть для редактирования свойство объекта метаданных.
Синтаксис:

mdObj.editProperty(ИндексСвойства)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.

Возвращает: объект IV8View, окно редактора свойства.

Метод применяется для открытия редактора внешнего свойства - модулей, форм, макетов и т.п. Например:

// Открыть модуль обычного приложения:
metadata.current.rootObject.editProperty("МодульОбычногоПриложения")

Метод openEditor

портировано

Позволяет открыть для редактирования сам объект, как если бы мы выбрали пункт меню "Изменить (F2)" в окне конфигурации.
Синтаксис:

mdObj.openEditor()

Свойство name

портировано

Только чтение. Строка. Имя объекта метаданных. Хотя оно и доступно через property("Имя"), для удобства сделано отдельным свойством.

Метод types

портирован

Позволяет получить гуиды типов этого объекта метаданных, если объект имеет тип. Синтаксис:

t = mdObj.types()

Возвращает: array, содержащий строки-гуиды: идентификаторы типов этого объекта.

Метод synonym

портировано

Позволяет получить синоним объекта метаданных.
Синтаксис:

s = mdObj.synonym(КодЯзыка)

Параметры:

  • КодЯзыка. Обязательный. Строка. Содержит код языка, для которого надо получить синоним. Например, "ru", "en" и т.д.

Возвращает: Строка. Синоним объекта для указанного языка.

Свойство comment

портировано

Только чтение. Строка. Комментарий к объекту метаданных.

Метод isPropModule

портировано

Позволяет узнать, содержит ли указанное свойство модуль.
Синтаксис:

mdObj.isPropModule(ИндексСвойства)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.

Возвращает: Булево. true, если указанное свойство содержит модуль, иначе false.

Метод getModuleText

портировано

Позволяет получить текст модуля свойства.
Синтаксис:

text = mdObj.getModuleText(ИндексСвойства)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.

Возвращает: Строка. Текст модуля.

Метод setModuleText

не портировано

Позволяет установить текст модуля свойства.
Синтаксис:

mdObj.setModuleText(ИндексСвойства, Текст)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.
  • Текст. Обязательный. Строка. Текст модуля.

Метод openModule

портировано

Позволяет открыть редактор модуля.
Синтаксис:

editor = mdObj.openModule(ИндексСвойства)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.

Возвращает: объект ITextWindow, текстовый редактор модуля.

В отличии от метода editProperty всегда открывает именно модуль (например для форм переключается на вкладку модуля) и возвращает текстовый редактор модуля.

Метод extPropUUID

портирован

Позволяет узнать гуид вида внешнего свойства.
Синтаксис:

uid = mdObj.extPropUUID(ИндексСвойства)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.

Возвращает: Строка. Гуид вида внешнего свойства.

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

Метод getExtProp

портирован

Позволяет получить внешнее свойство.
Синтаксис:

ep = mdObj.getExtProp(ИндексСвойства)

Параметры:

  • ИндексСвойства. Обязательный. Строка или Число. Указывается либо номер свойства, начиная с 0, либо строка-гуид свойства, либо имя свойства.

Возвращает: объект IV8ExtProp, описывающий внешнее свойство объекта.

Метод saveToFile

портирован

Позволяет сохранить внутреннее представление объекта метаданных в файл.
Синтаксис:

f = mdObj.saveToFile([Файл])

Параметры:

  • [Файл]. Необязательный. Объект IV8DataFile, в который будет сохранен объект метаданных. Если не задан, будет создан файл в памяти.

Возвращает: Объект IV8DataFile, в который сохранился объект.

Метод loadFromFile

портирован

Позволяет загрузить содержимое объекта метаданных из файла.
Синтаксис:

mdObj.loadFromFile(Файл)

Параметры:

  • Файл. Обязательный. Объект IV8DataFile, в котором находятся данные для загрузки.

Метод возможно нестабилен.

Свойство picture

портировано

Только чтение. Картинка. Пиктограмма объекта метаданных.

Свойство props

не портировано

Только чтение. IObjectProperties. Содержит объект, позволяющий работать со свойствами объекта метаданных, отображаемыми в окне свойств.


Объект IV8MDClass

портирован полностью

Объект содержит описание класса метаданных.

Свойство id

Только чтение. Строка. Содержит гуид - идентификатор класса метаданных.

Метод name

Позволяет получить имя класса метаданных.
Синтаксис:

name = mdClass.name(НомерЯзыка, [МножественнаяФорма])

Параметры:

  • НомерЯзыка. Обязательный. Число. 0 - английское название, 1 - русское.
  • [МножественнаяФорма]. Необязательный. Булево. true - получить название во множественное форме, false - в единственной. По-умолчанию - false.

Возвращает: Строка. Название класса метаданных.

Метод presentation

Позволяет получить представление класса метаданных.
Синтаксис:

p = mdClass.presentation([МножественнаяФорма])

Параметры:

  • [МножественнаяФорма]. Необязательный. Булево. true - получить название во множественное форме, false - в единственной. По-умолчанию - false.

Возвращает: Строка. Представление класса метаданных.

Свойство propertiesCount

Только чтение. Число. Количество свойств метаданных, которые имеет объект этого класса.

Метод propertyAt

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

propDef = mdClass.propertyAt(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер свойства, начиная с 0.

Возвращает: объект IV8MDProperty, описывающий свойство метаданных.

Свойство childsClassesCount

Только чтение. Число. Количество дочерних классов.

Метод childClassAt

Позволяет получить дочерний класс метаданных по его номеру.
Синтаксис:

classDef = mdClass.childClassAt(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер дочернего класса, начиная с 0.

Возвращает: объект IV8MDClass, описывающий дочерний класс.

childsClassesCount и childClassAt позволяют создать универсальную процедуру для обхода всех объектов дерева метаданных, чего нельзя сделать штатным объектом Метаданные.

Пример:

// Функция для обхода всех объектов метаданных, для каждого из них вызывается метод callback
function forAllMdObjects(root, callback)
{
    callback(root)
    var mdc = root.mdclass;
    for(var i = 0; i < mdc.childsClassesCount; i++)
    {
        for(var chldidx = 0, c = root.childObjectsCount(i); chldidx < c; chldidx++)
            forAllMdObjects(root.childObject(i, chldidx), callback)
    }
}
// Собственно, сам вызов обхода. Например, нам надо показать все объекты, у которых непустой
// модуль менеджера. try используется потому что возникает исключение, если у объекта
// нет свойства МодульМенеджера, чтобы не проверять его наличие.
forAllMdObjects(metadata.current.rootObject, function(mdObj){
    try{
        if(mdObj.getModuleText("МодульМенеджера").length)
            Message(mdObj.mdclass.name(1) + "." + mdObj.name)
    }catch(e){}
})

Объект IV8MDProperty

портирован полностью

Содержит описание свойства объекта метаданных.

Свойство id

Только чтение. Строка. Содержит гуид - идентификатор свойства метаданных.

Метод name

Позволяет получить название свойства метаданных.
Синтаксис:

name = mdPropDef.name(НомерЯзыка)

Параметры:

  • НомерЯзыка. Обязательный. Число. 0 - английское название. 1 - русское.

Возвращает: Строка. Название свойства объекта метаданных.

Свойство description

Только чтение. Строка. Описание свойства объекта метаданных.

Свойство category

Только чтение. Строка. Категория свойства объекта метаданных.


Объект IV8ExtProp

портирован

Представляет внешнее свойство объекта метаданных. Внешние свойства объектов метаданных хранятся отдельно от самого объекта, в виде дополнительного файла. Не стоит воспринимать этот файл как отдельный файл на диске, в 1С поддерживется свой формат файлов-контейнеров (*.cf), которые внутри сами представляют собой файловую систему, хранилище файлов. Подробнее о файлах в соответствующем разделе.

Чтобы понять, что же хранится в этом файле, помогут свойства idData и idEditor. Они задают вид объекта и вид редактора объекта. По ним можно определить, текстовый ли это документ, или таблица, и т.д. Конкретных значений гуидов пока не приведу, нет под рукой.

// TODO - привести гуиды

Свойство idData

Только чтение. Строка. Гуид вида данных, хранящихся во внешнем свойстве.

Свойство idEditor

Только чтение. Строка. Гуид вида редактора внешнего свойства.

Свойство url

Только чтение. Строка. Содержит путь к файлу внешнего свойства.

Свойство title

Только чтение. Строка. Заголовок внешнего свойства.

Свойство isReadOnly

Только чтение. Булево. Показывает, доступно ли редактирование свойства.

Метод saveToFile

Позволяет сохранить внешнее свойство в файл.
Синтаксис:

extProp.saveToFile([Файл])

Параметры:

  • [Файл]. Необязательный. Объект IV8DataFile, в который нужно сохранить данные. Если не указан, создается файл в памяти.

Возвращает: Объект IV8DataFile, в который сохранены данные.

Метод loadFromFile

Позволяет загрузить данные из файла во внешнее свойство.
Синтаксис:

extProp.loadFromFile(Файл)

Параметры:

  • Файл. Обязательный. Объект IV8DataFile, из которого нужно загрузить данные.

Метод возможно работает нестабильно.

Метод getForm

Позволяет получить внешнее свойство как объект 1С.
Синтаксис:

obj = extProp.getForm()

Возвращает: объект 1С.

Если внешнее свойство содержит объект, который можно преобразовать к значению 1С, то вернет это значение. Применяется в основном для свойства Форма (для толстых форм, будет вернут объект Форма), для свойства Макет (будет вернут соответствующий макету объект - табличный документ, текстовый документ и т.п.). И в дальнейшем можно работать уже с этим объектом. Аналог 1Сного ПолучитьМакет.


Объект ISnegopat

Портирован частично

Содержит ряд методов и свойств для взаимодействия со Снегопатом.

Метод activeTextWindow

Портировано

Позволяет получить текущее активное текстовое окно.
Синтаксис:

wnd = snegopat.activeTextWindow()

Возвращает: объект ITextWindow, представляющий текстовый редактор активного окна. Если активного текстового окна нет, возвращает null. При наличии открытого модального окна все-равно возвращает ссылку на редактор, так что в макросах лучше проверять текщий модальный режим.

Метод parseTemplateString

Портировано полностью

Позволяет обработать текст штатным 1Сным процессором шаблонов.
Синтаксис:

text = snegopat.parseTemplateString(СтрокаШаблона, [ИмяШаблона])

Параметры:

  • СтрокаШаблона. Обязательный. Строка. Содержит текст, который будет обработан.
  • [ИмяШаблона]. Необязательный. Строка. Имя шаблона. Будет использоваться для диалогов ввода значений.

Возвращает: Строка. Текст, обработанный шаблонизатором 1С.

Метод позволяет программно использовать все те возможности, которые есть в "родных" шаблонах 1С. При этом не надо как в штатных шаблонах готовить и хранить их где-то заранее - текст для шаблона можно создать "на лету".

Метод showMethodsList

не портировано

Показывает снегопатовский список методов модуля.
Синтаксис:

snegopat.showMethodsList()

Возвращает: Булево. Открыт или нет список модуля.

Используется в макросах снегопата, для назначения сего действия на хоткей, по умоланию Ctrl + 1.

Метод showSmartBox

не портировано

Открывает выпадающий список Снегопата.
Синтаксис:

snegopat.showSmartBox()

Возвращает: Булево. Открыт или нет список Снегопата.

Используется в макросах снегопата, для назначения сего действия на хоткей, по умоланию Ctrl + Alt + Пробел.

Метод showParams

не портировано

Открывает снегопатовскую подсказку о параметрах метода.
Синтаксис:

snegopat.showParams()

Возвращает: Булево. Открыта или нет подсказка.

Используется в макросах снегопата, для назначения сего действия на хоткей, по умоланию Ctrl + Shift + Пробел.

Метод nextParams

не портировано

Позволяет переключить подсказку на следующий тип.
Синтаксис:

snegopat.nextParams()

Возвращает: Булево. Переключилось или нет.

Если подсказка о параметрах метода отображет методы для нескольких типов ([N из M]), позволяет переключить ее на следующий тип. Используется в макросах снегопата, для назначения сего действия на хоткей, по умоланию Alt + Вниз.

Метод prevParams

не портировано

Позволяет переключить подсказку на предыдущий тип.
Синтаксис:

snegopat.prevParams()

Возвращает: Булево. Переключилось или нет.

Если подсказка о параметрах метода отображет методы для нескольких типов ([N из M]), позволяет переключить ее на предыдущий тип. Используется в макросах снегопата, для назначения сего действия на хоткей, по умоланию Alt + Вверх.

Метод paramsTypes

не портировано

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

res = snegopat.paramsTypes()

Возвращает: COMSafeArray (VBArray), в котором перечислены названия типов.

Метод paramsPosition

не портировано

Позволяет получить экранные координаты подсказки о параметрах.
Синтаксис:

res = snegopat.paramsPosition()

Возвращает: объект ISelection, в котором перечислены экранные координаты окна подсказки о параметрах.

Метод setParamType

не портировано

Позволяет переключить подсказку о параметрах на нужный номер типа.
Синтаксис:

snegopat.setParamType(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер, на который нужно переключить подсказку, начиная с 0.

Возвращает: Булево. Переключилась или нет.

Метод getHotWords

не портировано. И не будет, так как снегопат теперь сам сохраняет список слов

Позволяет получить список "горячих" слов списка снегопата.
Синтаксис:

res = snegopat.getHotWords()

Возвращает: COMSafeArray (VBArray), содержащий список "горячих" слов.

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

Метод setHotWords

не портировано

Позволяет установить список горячих слов списка снегопата.
Синтаксис:

snegopat.setHotWords(МассивСлов)

Параметры:

  • МассивСлов. Обязательный. COMSafeArray. Содержит список горячих слов для списка Снегопата.

Метод применяется в-основном для восстановления списка горячих слов, сохраненных в прошлом сеансе работы.

Метод parseSources

портировано полностью

Создает парсер текстов модулей 1С.
Синтаксис:

parser = snegopat.parseSources(ИсходныйТекст, [НомерНачальнойСтроки])

Параметры:

  • ИсходныйТекст. Обязательный. Строка. Содержит код модуля.
  • [НомерНачальнойСтроки]. Необязательный. Число. Содержит номер, который будет присвоен первой строке переданного текста. Полезно, когда вы парсите кусок модуля не с начала модуля. Тогда задав номер начальной строки, вы автоматом получите все номера строк, как в исходном модуле.

Возвращает: объект IV8Lexer, служащий для разбора текста модуля.

Свойство v8types

не портировано

Только чтение. Содержит объект IDescriptionArray, содержащий описания типов 1С из файла v8types.txt, массив ITypeDescription.

Метод readTypeFile

не портировано

Позволяет прочитать файл описания типов и добавить их к общему описанию типов.
Синтаксис:

snegopat.readTypeFile(ПутьКФайлу)

Параметры:

  • ПутьКФайлу. Обязательный. Строка. Содержит путь к загружаемому файлу с описанием типов.

Событие onChangeTextManager

не портировано

Возникает при внесении изменений в текстовый редактор 1С.
Синтаксис:

onChangeTextManager(АдресБуфера, ВыделениеДо, ВыделениеПосле)

Параметры:

  • АдресБуфера. Число. Адрес внутреннего объекта 1С TextManager.
  • ВыделениеДо. Объект ISelection. Показывает область выделения текста перед изменением.
  • ВыделениеПосле. Объект ISelection. Показывает область выделения текста после изменения.

Событие onProcessTemplate

не портировано

Возникает после обработки текста штатным процессором шаблонов 1С. Позволяет внести дополнительные изменения в текст.
Синтаксис:

onProcessTemplate(ПараметрыШаблона)

Параметры:

  • ПараметрыШаблона. Объект IProcessTemplateParam, содержащий параметры обрабатываемого шаблона.

Событие onShowParams

не портировано

Возникает перед показом подсказки о параметрах метода. Позволяет модифицировать состав подсказки о параметрах.
Синтаксис:

onShowParams(ПараметрыПодсказки)

Параметры:

  • ПараметрыПодсказки. Объект IShowParamsData. Содержит информацию о подсказках и позволяет ее изменять.

Событие onProcessInsert

не портировано

Вызывается в некоторых случаях перед вставкой текста из списка снегопата. Позволяет изменить вставляемый текст.
Синтаксис:

onProcessInsert(ПараметрыВставки)

Парметры:

  • ПараметрыВставки. Объект IGetInsertText. Содержит описание вставляемого текста.

Объект IProcessTemplateParam

не портировано

Служит для передачи параметров события onProcessTemplate.

Свойство name

Только чтение. Строка. Имя шаблона

Свойство indent

Только чтение. Строка. Оступ, который будет вставляться в каждой строке текста.

Свойство text

Чтение и запись. Строка. Содержит уже обработаный текст. Можно его изменять.

Свойство cancel

Чтение и запись. Булево. При установке в true - отменяет вставку шаблона.


Объект IShowParamsData

не портировано

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

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

Пример использования этого объекта можно в скрипте scripts\choiseParamType.js.

Свойство name

Только чтение. Строка. Содержит имя метода, для которого должна быть показана подсказка.

Свойство src

Только чтение. Строка. Содержит исходный код модуля от начала текущей процедуры/функции до места подсказки. Для облегчения анализа текста.

Свойство typesCount

Только чтение. Число. Содержит количество типов, которые будут показаны в подсказке.

Метод typeName

Позволяет получить имя типа по его номеру в списке.
Синтаксис:

name = param.typeName(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер в списке, начиная с 0.

Возвращает: Строка, имя типа.

Метод typeIsModule

Позволяет узнать, является ли тип с указанным номером модулем.
Синтаксис:

res = param.typeIsModule(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер в списке, начиная с 0.

Возвращает: Булево. Показывает, является ли тип с указанным номером модулем.

Метод move

Позволяет переместить тип с одного места на другое.
Синтаксис:

param.move(Откуда, Куда)

Параметры:

  • Откуда. Обязательный. Число. Номер в списке, начиная с 0, откуда следует переместить элемент списка.
  • Куда. Обязательный. Число. Номер в списке, начиная с 0, куда следует переместить элемент списка.

Метод remove

Удаляет элемент из списка типов.
Синтаксис:

param.remove(Индекс)

Параметры:

  • Индекс. Обязательный. Число. Номер в списке, начиная с 0.

Метод insert

Добавляет элемент в список подсказки.
Синтаксис:

param.insert(Индекс, ИмяМетода, ИмяТипа, Описание, Возвращает, ЭтоМодуль)

Параметры:

  • Индекс. Число. Номер в списке, куда вставлять элемент.
  • ИмяМетода. Строка. Содержит имя метода. Так как названия методов могут отличаться регистром букв, для каждого элемента задается его вариант написания метода.
  • ИмяТипа. Строка. Содержит имя типа, к которому относится метод.
  • Описание. Строка. Содержит описание метода.
  • Возвращает. Строка. Содержит текст, который будет показан после Возвращает:
  • ЭтоМодуль. Булево. Задает, является ли этот тип модулем. Для типов и для модулей несколько по разному строится текст описание метода.

Метод addParamDescr

Добавляет описание параметра к методу.
Синтаксис:

param.addParamDescr(Индекс, ИмяПараметра, Описание)

Параметры:

  • Индекс. Число. Задает номер в списке, для которого добавляется параметр.
  • ИмяПараметра. Строка. Задает имя добавляемого параметра.
  • Описание. Строка. Задает описание добавляемого параметра.

Объект IGetInsertText

не портировано

Содержит параметры для события onProcessInsert.

Свойство type

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

  • itKeyword = 0, вставка ключевого слова.

Свойство name

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

Свойство text

Чтение и запись. Строка. Текст, который будет вставлен. Можно его изменять.

В тексте используется символ ¦ для обозначения места вставки курсора. Набрать символ можно так - зажав Alt, набрать 0166 на цифровой клавиатуре. Или скопировав отсюда. Если такого символа в тексте нет, курсор будет вставлен в конце текста.


Объект ITextWindow

портирован частично

Объект представляет собой текстовый редактор 1С и содержит методы и свойства для работы с ним. Для изменения текста необходимо установить выделение текста в нужных границах изменения, и присвоить свойство selectedText.

Во всех местах, где надо оперировать с номером строки учитывайте, что нумерация строк в текстовом редакторе начинается с 1.

Свойство text

портировано полностью

Только чтение. Строка. Содержит весь текст редактора.

Метод getSelection

портировано полностью

Позволяет получить границы выделенного текста.
Синтаксис:

selection = textWnd.getSelection()

Возвращает: Объект ISelection, границы выделенного текста.

Метод setSelection

портировано полностью

Позволяет установить границы выделения текста.
Синтаксис:

txtWnd.setSelection(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка)

Параметры:

  • НачальнаяСтрока. Число. Номер строки начала выделения.
  • НачальнаяКолонка. Число. Номер колонки начала выделения.
  • КонечнаяСтрока. Число. Номер строки конца выделения.
  • КонечнаяКолонка. Число. Номер колонки конца выделения.

Свойство selectedText

портировано полностью

Чтение и запись. Строка. Позволяет прочитать/установить текущий выделенный текст.

При присвоении действует также, как при вставке из клипборда. Не потому, что реально присваивает через клипборд, а потому, что так работает движок редактора 1С.

Метод getCaretPos

портировано полностью

Позволяет получить положение каретки в тексте.
Синтаксис:

caretPos = textWnd.getCaretPos()

Возвращает: Объект ISelection, в котором свойства beginRow и beginCol указывают положение каретки в тексте.

Метод setCaretPos

портировано полностью

Позволяет установить положение каретки в тексте.
Синтаксис:

textWnd.setCaretPos(НомерСтроки, НомерКолонки)

Параметры:

  • НомерСтроки. Число. Номер строки, в которую надо установить каретку.
  • НомерКолонки. Число. Номер колонки в строке, в которую надо установить каретку.

При установке положения каретки также автоматически скроллируется окно редактора так, чтобы положение каретки было видимым на экране.

Свойство linesCount

портировано полностью

Только чтение. Число. Содержит количество строк в тексте редактора.

Метод line

портировано полностью

Позволяет получить текст строки с указанным номером.
Синтаксис:

text = txtWnd.line(НомерСтроки)

Параметры:

  • НомерСтроки. Число. Номер строки, текст которой надо получить.

Возвращает: Строка. Тест заданной строки текста.

Нумерация строк начинается с 1.

Свойство readOnly

портировано полностью

Только чтение. Булево. true, если текст в редакторе открыт в режиме "только чтение" и не может быть изменен.

Свойство extName

портировано полностью

Только чтение. Строка. Содержит название установленного расширения редактора. Например, Встроенный язык, Язык запросов, Текст.

Свойство hwnd

портировано полностью

Только чтение. Число. WinAPI HWND описатель окна редактора.

Свойство mdCont

портировано

Только чтение. Объект IV8MDContainer. Если текст относится к какому-либо объекту метаданных, указывает на контейнер этих метаданных. Иначе - null.

Свойство mdObj

портировано

Только чтение. Объект IV8MDObject. Если текст относится к какому-либо объекту метаданных, указывает на этот объект. Иначе - null.

Свойство mdProp

портировано

Только чтение. Объект IV8MDProperty. Если текст относится к какому-либо объекту метаданных, указывает на то свойство этого объекта, к которому относится текст. Иначе - null.

Свойство multyEdit

не портировано

Чтение и запись. Булево. Признак включения режима множественных изменений.

Если необходимо внести несколько изменений в текст, рекомендуется сначала установить это свойство в true, внести изменения, установить свойство в false. При включении этого свойства отключается вызов перерисовки всех окон редактора при внесении изменений, и сброс синтаксического кэша. Затем при отключении режима вызывается перерисовка всех окон редактора и производится сброс кэша синтакс-разбора. То есть эти действия делаются один раз, а не при каждом изменении. Хотя если вы и не сделаете это, ничего особо страшного не случится.

Свойство textMgr

портировано полностью

Только чтение. Число. Содержит адрес внутреннего объекта TextManager, связанного с этим редактором. Служит для того, чтобы альтернативные редакторы могли узнать в событии onChangeTextManager, которое из их окон надо обновлять.

Свойство extObject

портировано

Только чтение. Значение 1С. Содержит "внешний" объект, к которому относится модуль.

Когда редактор инициализируется для модуля, для работы контекстной подсказки редактору передается объект, описывающий методы и свойства того объекта, которые должны быть доступны в модуле "глобально". Снегопат отлавливает установку такого объекта. Если этот переданный объект можно преобразовать в значение 1С, то он отдает его в этом свойстве. Пока такой финт возможен для объекта Форма в обычных формах.

Говоря короче, если это модуль обычой формы, здесь можно получить объект "Форма".

Свойство textDocument

НОВОЕ

Только чтение. Значение 1С. Содержит объект типа "ТекстовыйДокумент", который редактируется в этом окне.

Свойство isAlive

НОВОЕ

Только чтение. Булево. Показывает, существует ли еще окно, определяемое этим объектом. После закрытия окно оно будет false.

Событие TextWindowClosed

НОВОЕ

Возникает при закрытии окна редактора. Объект источник - само ITextWindow. Оно же передаётся и как параметр события.


Объект ISelection

портировано полностью

По сути это просто объект с четырмя числовыми свойствами. Применяется для получения границ выделения в текстовом редакторе, положения каретки, а также экранных координат окна подсказки о параметрах.

Содержит четыре числовых свойства: beginRow, beginCol, endRow, endCol.


Объект IAddinMgr

портирован полностью

Предназначен для управления аддинами и взаимодействия между ними.

Аддины - это динамически загружаемый расширения для Снегопата. Могут быть выполнены по различным технологиям. Снегопат нативно поддерживает аддины выполненые в виде скриптов на Windows Script Host-совместимых языках, и аддины, выполненные в виде обычных dll.

Каждый аддин характеризуется уникальным именем, и может предоставлять макросы и объект аддина. Все аддины организуются в группы, которые могут быть вложены друг в друга.

Свойство count

Только чтение. Число. Количество загруженных аддинов.

Метод byUniqueName

Позволяет найти аддин по его уникальному имени.
Синтаксис:

addin = addins.byUniqueName(ИмяАддина)

Параметры:

  • ИмяАддина. Строка. Уникальное имя аддина, по которому его надо найти.

Возвращает: объект IAddin, содержащий информацию об аддине, либо null, если аддин с таким уникальным именем не найден.

Метод byFullPath

Позволяет найти аадин по его строке загрузки.
Синтаксис:

addin = addins.byFullPath(СтрокаЗагрузки)

Параметры:

  • СтрокаЗагрузки. Строка. Содержит строку загрузки аддина.

Возвращает: объект IAddin, содержащий информацию об аддине, либо null, если аддин с такой строкой загрузки не найден.

Для загрузки аддинов используется "строка загрузки", описывающая загружаемый аддин. Она состоит из указания имени загрузчика аддинов, двоеточия, и данных для загрузчика аддинов. Метод позволяет найти аддин по его строке загрузки.

Метод byIdx

Позволяет получить аддин по номеру.
Синтаксис:

addin = addins.byIdx(Индекс)

Параметры:

  • Индекс. Число. Номер аддина, начиная с 0.

Возвращает: объект IAddin по заданному номеру.

Свойство root

Только чтение. Объект IAddinGroup. Содержит корневую группу для загрузки аддинов.

Метод loadAddin

Загружает аддин.
Синтаксис:

addind = addins.loadAddin(СтрокаЗагрузки, ГруппаАддинов)

Параметры:

  • СтрокаЗагрузки. Строка. Задает строку загрузки аддина. Состоит из названия загрузчика, двоеточия, и данных для загрузчика аддинов. Например для скриптов строка имеет вид: script:путь к файлу скрипта, для dll: dll:путь к dll-файлу. Различные расширения могут регистрировать свои загрузчики аддинов.
  • ГруппаАддинов. Объект IAddinGroup. Группа, в которую надо загрузить аддин.

Возвращает: объект IAddin для загруженного аддина.

Метод unloadAddin

Выгружает указанный аддин.
Синтаксис:

addins.unloadAddin(Аддин)

Параметры:

  • Аддин. Объект IAddin выгружаемого аддина.

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

Метод registerLoader

Регистрирует дополнительный загрузчик аддинов.
Синтаксис:

addins.registerLoader(Загрузчик)

Параметры:

  • Загрузчик. Объект IAddinLoader, реализующий дополнительный загрузчик аддинов.

Метод getLoaderCommands

Позволяет получить все команды загрузки аддинов от всех зарегистрированных загрузчиков.
Синтаксис:

res = addins.getLoaderCommands()

Возвращает: COMSafeArray (VBArray), который содержит все команды для загрузки аддинов.

Применяется в скриптах снегопата для создания меню загрузки аддинов. При вызове этого метода снегопат обходит все зарегистрированные загрузчики аддинов, и каждый добавляет свою команду для меню загрузки аддинов. Каждая добавленная команда имеет вид "Название команды|перфикс загрузчика". Например, загрузчик скриптов добавляет Загрузить скрипт|script. Часть до | должна показываться в интерфейсе пользователя, а часть после | - передаваться менеджеру аддинов при выборе этой команды.

Метод selectAndLoad

Передает команду нужному загрузчику аддинов для выбора пользователем аддина и его загрузки.
Синтаксис:

addins.selectAndLoad(ПрефиксЗагрузчика, ГруппаАддинов)

Параметры:

  • ПрефиксЗагрузчика. Строка. Задает загрузчик, который должен обработать команду. Берется часть после | из команды загрузчика.
  • ГруппаАддинов. Объект IAddinGroup. Группа, в которую надо загрузить аддин.

Возвращает: объект IAddin для загруженного аддина.

Метод isAddinUnloadable

Позволяет узнать, поддерживает ли аддин выгрузку.
Синтаксис:

res = addins.isAddinUnloadable(Аддин)

Параметры:

  • Аддин. Объект IAddin для которого необходимо узнать возможность выгрузки.

Возвращает: Булево. Поддерживает аддин выгрузку или нет.


Объект IAddin

Содержит информацию о загруженном аддине, и позволяет взаимодействовать с ним.

Свойство displayName

Только чтение. Строка. Отображаемое имя аддина, для интерфейса.

Свойство uniqueName

Только чтение. Строка. Уникальное имя аддина. Каждый аддин должен иметь такое имя.

Свойство fullPath

Только чтение. Строка. Полная строка загрузки аддина.

Свойство object

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

Метод macroses

Позволяет получить список макросов аддина.
Синтаксис:

res = addin.macroses()

Возвращает: COMSafeArray (VBArray). Массив с именами макросов аддина.

Метод invokeMacros

Позволяет вызвать макрос аддина.
Синтаксис:

addin.invokeMacros(ИмяМакроса)

Параметры:

  • ИмяМакроса. Строка. Имя макроса, который надо вызвать.

Возвращает: то, что вернул макрос.

Свойство group

Только чтение. Объект IAddinGroup. Группа, в которою загружен аддин.


Объект IAddinGroup

портировано полностью

Представлет группу для аддинов.

Свойство name

Только чтение. Строка. Название группуы.

Свойство parent

Только чтение. Объект IAddinGroup. Родительская группа.

Свойство child

Только чтение. Объект IAddinGroup. Первая дочерняя группа.

Свойство next

Только чтение. Объект IAddinGroup. Следующая группа.

Свойство addinsCount

Только чтение. Число. Количество аддинов в группе.

Метод addin

Позволяет получить аддин группы по его номеру.
Синтаксис:

addin = group.addin(Индекс)

Параметры:

  • Индекс. Число. Номер аддина, начиная с 0.

Возвращает: объект IAddin для аддина с указанным номером.

Метод addGroup

Добавляет дочернюю группу.
Синтаксис:

child = group.addGroup(ИмяГруппы)

Параметры:

  • ИмяГруппы. Строка. Название добавляемой группы.

Возвращает: Объект IAddinGroup добавленной группы.


Объект IProfileStore

портирован полностью

Предназначен для работы с хранилищем настроек 1С.

Все настройки 1С организованы в древовидную структуру, некий аналог реестра Windows. Однако для каждого хранимого значения можно задать место, где на самом деле должно физически хранится значение, т.е. уникально ли оно в пределах базы данных, пользователя и т.п. Данный объект представляет собой "папку" в дереве настроек и позволяет перебрать имеющиеся в ней значения и подпапки, создавать новые, удалять существуующие, а также получать и устанавливать значения. Каждое значение перед использованием должно быть создано, с указанием одного из вариантов места его хранения и дефолтного значения.

Доступ к корневой папке осуществляется через свойство designer.profileRoot. Если вам не нужно обходить хранящиеся значения и вам известен путь в дереве настроек до нужного значения, к нему можно сразу обратится от корневой папки, указав полный путь, используя разделителем символ /.

Для просмотра структуры дерева настроек и примеров его программного обхода используйте скрипт scripts\DevTools\pflview.js.

Свойство name

Только чтение. Строка. Название раздела.

Метод createValue

Создает значение в дереве настроек.
Синтаксис:

createValue(Путь, ЗначениеПоУмолчанию, Хранилище)

Параметры:

  • Путь. Строка. Название или полный путь к значению, например MyValue, SomeFolder/SomeValue. Если указан полный путь, все папки по этому пути также будут созданы.
  • ЗначениеПоУмолчанию. Любой. Значение, которое будет установлено, если создаваемого значения еще нет в настройках.
  • Хранилище. Число. Вариант места хранения значения:
    • pflSeanse = 0, Для сеанса. Хранится в памяти на время одного сеанса.
    • pflComputer = 1, Для компьютера. Уникально для компьютера.
    • pflBase = 2, Для базы.
    • pflBaseUser = 3, Для базы и пользователя.
    • pflCompBase = 4, Для компьютера и базы.
    • pflCompBaseUser = 5, Для компьютера, базы и пользователя.
    • pflSnegopat = 6, Для Снегопата. Хранится в папке Снегопата в файле snegopat.pfl.

Система хранения настроек должна знать, где именно должно хранится каждое значение, поэтому сначала надо ей это указать.

Метод getValue

Позволяет получить хранящееся значение.
Синтаксис:

val = folder.getValue(Путь)

Параметры:

  • Путь. Строка. Содержит название значения или полный путь к нему во вложенных папках.

Возвращает: хранящееся значение.

Метод setValue

Позволяет установить значение.
Синтаксис:

folder.setValue(Путь, Значение)

Параметры:

  • Путь. Строка. Содержит название значения или полный путь к нему во вложенных папках.
  • Значение. Любое значение, которое надо сохранить.

Реальное сохранение значений в файлы происходит при завершении работы программы, либо при вызове метода designer.saveProfile.

Свойство valuesCount

Только чтение. Число. Количество хранящихся в папке значений.

Метод valueName

Позволяет получить имя значения по его номеру.
Синтаксис:

name = folder.valueName(Индекс)

Параметры:

  • Индекс. Число. Номер значения.

Возвращает: Строка. Имя значения.

Метод getValueAt

Позволяет получить значение по его номеру.
Синтаксис:

val = folder.getValueAt(Индекс)

Параметры:

  • Индекс. Число. Номер значения.

Возвращает: Хранящееся значение.

Метод setValueAt

Позволяет установить значение по его номеру.
Синтаксис:

folder.setValueAt(Индекс, Значение)

Параметры:

  • Индекс. Число. Номер значения.
  • Значение. Любое значение, которое надо сохранить.

Возвращает:

Метод deleteValue

Позволяет удалить значение по его имени.
Синтаксис:

folder.deleteValue(Путь)

Параметры:

  • Путь. Строка. Содержит название значения или полный путь к нему во вложенных папках.

Метод deleteValueAt

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

folder.deleteValueAt(Индекс)

Параметры:

  • Индекс. Число. Номер значения.

Возвращает:

Метод createFolder

Создает вложеннную подпапку.
Синтаксис:

folder.createFolder(Имя, ВариантХранения)

Параметры:

  • Имя. Строка. Название папки.
  • ВариантХранения. Число. Указание места для хранения папки.

Свойство foldersCount

Только чтение. Число. Количество вложеных папок.

Метод getFolder

Позволяет получить вложенную папку по имени.
Синтаксис:

subFolder = folder.getFolder(Путь)

Параметры:

  • Путь. Строка. Содержит название папки или полный путь к ней во вложенных папках.

Возвращает: объект IProfileStore. Вложенная папка.

Метод getFolderAt

Позволяет получить вложенную папку по ее номеру.
Синтаксис:

subFolder = folder.getFolderAt(Индекс)

Параметры:

  • Индекс. Число. Номер вложенной папки.

Возвращает: объект IProfileStore. Вложенная папка.

Метод deleteFolder

Удаляет вложенную папку.
Синтаксис:

folder.deleteFolder(Путь)

Параметры:

  • Путь. Строка. Содержит название папки или полный путь к ней во вложенных папках.

Метод deleteFolderAt

Удаляет вложенную папку по ее номеру.
Синтаксис:

folder.deleteFolderAt(Индекс)

Параметры:

  • Индекс. Число. Номер вложенной папки.

Объект ISelfScript

портировано полностью

Этот объект не являются частью SnegAPI, а предоставляется загрузчиком скриптов отдельно для каждого загруженного скрипта. С его помощью скрипт может получить информацию о себе, получить ссылку на себя, а также добавлять объекты в свое пространство имен. Каждый скрипт имеет доступ к этому объекту через имя SelfScript.

Свойство uniqueName

Только чтение. Строка. Уникальное имя скрипта.

Свойство displayName

Только чтение. Строка. Отображаемое имя скрипта.

Свойство fullPath

Только чтение. Строка. Полный путь к файлу скрипта.

Метод addNamedItem

Добавляет объект в пространство имен скрипта.
Синтаксис:

SelfScript.addNamedItem(Имя, Объект, [Глобально])

Параметры:

  • Имя. Строка. Название, под которым объект будет доступен в скрипте.
  • Объект. Ссылка на добавляемый объект.
  • [Глобально]. Необязательный. Булево. По-умолчанию false. Если передать true, объект добавиться как глобальный, т.е. к его методам и свойствам можно будет обращаться напрямую, без указания имени объекта.

Свойство self

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


Объект IHotKeys

портирован полностью

Менеджер хоткеев Снегопата. Служит для назначения горячих клавиш на макросы аддинов. На один хоткей может быть назначено несколько макросов. В этом случае они выполняются последовательно в порядке своего добавления, пока один из макросов не вернет true. Тогда считается, что он обработал хоткей, и дальнейшие макросы не вызываются.

Объект доступен через свойство Designer.hotkeys. Так как он содержит довольно "низкоуровневый" доступ к хоткееям, для более удобной работы с ними был создан скрипт core\std\scripts\hotkeys.js, который вызывается кнопкой "Клавиатура" в окне снегопата.

Метод item

Позволяет получить хоткей по его номеру.
Синтаксис:

hk = hotkeys.item(Индекс)

Параметры:

  • Индекс. Число. Номер хоткея.

Возвращает: объект IHotKey.

Свойство count

Только чтение. Число. Количество хоткеев.

Метод remove

Удаляет хоткей с укзанным номером.
Синтаксис:

hotkesy.remove(Индекс)

Параметры:

  • Индекс. Число. Номер хоткея.

Метод add

Добавляет новый хоткей.
Синтаксис:

hotkeys.add(КодКлавиши, ИмяАддина, ИмяМакроса)

Параметры:

  • КодКлавиши. Число. Виртуальный код клавиши + модификаторы:
    • hkCtrl = 0x10000.
    • hkAlt = 0x20000.
    • hkShift = 0x40000.
  • ИмяАддина. Строка. Уникальное имя аддина.
  • ИмяМакроса. Строка. Название вызываемого макроса в аддине.

Возвращает: объект IHotKey. Добавленный хоткей.

Метод clearAll

Удаляет все хоткеи.
Синтаксис:

hotkeys.clearAll()

Метод addTemp

Добавляет временный хоткей.
Синтаксис:

hkID = hotkeys.addTemp(КодКлавиши, ИмяАддина, ИмяМакроса)

Параметры:

  • КодКлавиши. Число. Виртуальный код клавиши + модификаторы:
    • hkCtrl = 0x10000.
    • hkAlt = 0x20000.
    • hkShift = 0x40000.
  • ИмяАддина. Строка. Уникальное имя аддина.
  • ИмяМакроса. Строка. Название вызываемого макроса в аддине.

Возвращает: Число. Идентификатор временного хоткея.

Предназначен для временного назначения какого-либо хоткея, например в каком-либо модальном диалоге. В отличии от обычных хоткеев, которые вызываются в порядке своего добавления - вызывается ПЕРЕД ними. Данные хоткеи не входят в число count остальных хоткеев, их нельзя перечислить, они не сохраняются скриптом hotkeys.js.

Метод addTempFunction

НОВОЕ

Добавляет временный хоткей, вызывающий обработчик.
Синтаксис:

hkID = hotkeys.addTempFunction(КодКлавиши, ОбъектОбработчик, [ИмяМетода] = "")

Параметры:

  • КодКлавиши. Число. Виртуальный код клавиши + модификаторы:
    • hkCtrl = 0x10000.
    • hkAlt = 0x20000.
    • hkShift = 0x40000.
  • ОбъектОбработчик. Объект, метод которого будет вызван при срабатывании хоткея.
  • ИмяМетода. Строка. Необязательный параметр. По умолчанию - пустая строка. Название вызываемого метода в объекте. Если передана пустая строка, будет вызван метод объекта "по умолчанию", т.е. с номером 0. К примеру для объектов-функций JScript - это вызов самой функции.

Возвращает: Число. Идентификатор временного хоткея.

Предназначен для временного назначения какого-либо хоткея, например в каком-либо модальном диалоге. В отличии от обычных хоткеев, которые вызываются в порядке своего добавления - вызывается ПЕРЕД ними, в обратном порядке, т.е. назначенный позже хоткей для этой клавиши будет вызван перед назначенным раньше. Данные хоткеи не входят в число count остальных хоткеев, их нельзя перечислить, они не сохраняются скриптом hotkeys.js.

Метод removeTemp

Удаляет временный хоткей.
Синтаксис:

hotkeys.removeTemp(ИдХоткея)

Параметры:

  • ИдХоткея. Число. Идентификатор хоткея, который был получен методом addTemp.

Объект IHotKey

портирован полностью

Служит для описания хоткея.

Свойство presentation

Только чтение. Строка. Строковое представление комбинации клавиш хоткея.

Свойство addin

Только чтение. Строка. Уникальное имя аддина, обрабатывающего хоткей.

Свойство macros

Только чтение. Строка. Название макроса в аддине, обрабатывающий хоткей.

Свойство key

Чтение и запись. Число. Комбинация клавиш хоткея.

Метод setCommand

Позволяет задать команду, выполняемую хоткеем.
Синтаксис:

hk.setCommand(ИмяАддина, ИмяМакроса)

Параметры:

  • ИмяАддина. Строка. Уникальное имя аддина.
  • ИмяМакроса. Строка. Название вызываемого макроса в аддине.

Объект ICmdUpdateResult

Портировано всё, за исключением свойства subCommands

Содержит информацию о состоянии команды.

Свойство enabled

Только чтение. Булево. Доступность команды

Свойство checked

Только чтение. Булево. Помечена ли команда.

Свойство text

Только чтение. Строка. Текст команды.

Свойство description

Только чтение. Строка. Описание команды, выводится в строке состояния.

Свойство tooltip

Только чтение. Строка. Тултип команды

Свойство subCommands

Только чтение. Число. Количество подкоманд.


Объект IV8Files

портирован

Предоставляет доступ к внутреннему механизу работы с файлами 1С.

В движке 1С файл - это не только то, что мы понимаем как файл на диске. Там это целая абстракция - сущность, поток байтов, в который можно записывать данные, читать из них, позиционироваться в них. Он необязательно должен быть обычным дисковым файлом - это может быть файл в памяти, файл внутри ресурсов 1С, файл внутри справки 1С, файл внутри другого файла и т.п. Для задания конкретного типа файлов используется концепция URL, и вид файла задается как часть URL. Например, обычный файл открывается как file://путь к файлу на диске, файл из ресурсов - v8res://имя ресурсного файла/имя файла внутри ресурса и т.п.

Для работы с файлами служит объект IV8DataFile. Также этот файл может быть сам так называемым "контейнерным" файлом, cf. Это файл, в котором хранятся другие файлы. В семерке для этого использовались стандартные compaund файлы, в 8ке 1С создала свой формат. Для работы с контейнерым файлом служит объект IV8StorageFile, который создается на основе объекта файла.

Доступ к менеджеру файлов осуществляется через свойство Designer.v8files.

Метод open

Открывает файл.
Синтаксис:

file = v8files.open(URL, РежимОткрытия)

Параметры:

  • URL. Строка. Указывает, какой файл надо открыть. Для обычных файлов имеет вид file://путь к файлу.
  • РежимОткрытия. Число. Задает режим открытия файла:
    • fomAppend = 0x1, Не очищать файл при открытии
    • fomTruncate = 0x2, Очистить файл при открытии
    • fomIn = 0x8, Открыть файл для чтения
    • fomOut = 0x10, Открыть файл для записи
    • fomShareRead = 0x100, Разделяемое чтение
    • fomShareWrite = 0x200, Разделяемая запись

Возвращает: объект IV8DataFile, открытый файл.

Метод createMemoryFile

Создает файл в памяти.
Синтаксис:

file = v8files.createMemoryFile()

Возвращает: объект IV8DataFile, открытый файл.

Метод createTempFile

Создает временный файл.
Синтаксис:

file = v8files.createTempFile([ЛимитПамяти])

Параметры:

  • [ЛимитПамяти]. Число. По-умолчанию 0. Пока размер файла не превысил лимита, он будет находится только в памяти. Как только размер стал больше, файл становится файлом во временном каталоге, для экономии памяти.

Возвращает: объект IV8DataFile, открытый файл.

Метод attachStorage

Позволяет работать с файлом как с контейнерным файлом.
Синтаксис:

cf = v8files.attachStorage(ИсходныйФайл, [СоздатьНовый])

Параметры:

  • ИсходныйФайл. Объект IV8DataFile, исходный открытый файл.
  • [СоздатьНовый]. Булево. По-умолчанию false. Создавать новый контейнерный файл. Если указано false, а исходный файл не является контейнерным файлом, генерируется исключение.

Возвращает: объект IV8StorageFile, через который можно работать с содержимым контейнера.

Метод newMemoryBuffer

Создает объект MemoryBuffer заданного размера.
Синтаксис:

buffer = v8files.newMemoryBuffer(Размер)

Параметры:

  • Размер. Число. Количество выделяемой для буфера памяти в байтах.

Возвращает: объект MemoryBuffer.


Объект IV8DataFile

портирован

Служит для работы с данными файла.

Метод read

Позволяет прочитать блок данных из файла.
Синтаксис:

data = file.read(Количество)

Параметры:

  • Количество. Число. Сколько байт считать из файла.

Возвращает: объект MemoryBuffer с прочитанными данными.

Чтение осуществляется с текущей позиции в файле.

Метод write

Записывает данные в файл.
Синтаксис:

file.write(Данные)

Параметры:

  • Данные. Объект MemoryBuffer. Массив байт для записи.

Метод seek

Позицонироваться в файле.
Синтаксис:

file.seek(Откуда, Смещение)

Параметры:

  • Откуда. Число. Задает режим перемещения указателя.

    • fsBegin = 1, перемещаться от начала файла.
    • fsCurrent = 2, перемещаться от текущей позиции.
    • fsEnd = 4, перемещаться от конца файла.
  • Смещение. Число. Насколько байт надо сместиться. Положительное смещение - в сторону конца файла, отрицательное - в сторону начала файла.

Возвращает: Число. Новую позицию указателя в файле от его начала.

Метод getString

Прочитать данные из файла как строку.
Синтаксис:

str = file.getString(ТипСтроки, [Длина])

Параметры:

  • ТипСтроки. Число. Показывает, в каком режиме считывать строку:

    • dsAnsi = 1, Строка в файле в формате ANSI.
    • dsUtf8 = 2, Строка в файле в формате UTF-8.
    • dsUtf16 = 3, Строка в файле в формате UTF-16
  • [Длина]. Число. По-умолчанию -1. Задает длину считываемой строки. Если задано -1, строка считывается до первого нулевого символа.

Возвращает: Строка. Считанный текст.

Метод putString

Позволяет записать данные из строки.
Синтаксис:

file.putString(ТипСтроки, Текст, [Длина])

Параметры:

  • ТипСтроки. Число. Задает, в каком виде записать строку:
    • dsAnsi = 1, Записать строку в файл в формате ANSI.
    • dsUtf8 = 2, Записать строку в файл в формате UTF-8.
    • dsUtf16 = 3, Записать строку в файл в формате UTF-16
  • Текст. Строка. Записываемый текст.
  • [Длина]. Число. По-умолчанию -1. Длина записываемой строки в символах. Если задано -1, записывается до первого нулевого символа.

Метод flush

Сбрасывает буфер записи.
Синтаксис:

file.flush()

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

Метод setEOF

Устанавливает конец файла в текущей позиции.
Синтаксис:

file.setEOF()

Свойство url

Только чтение. Строка. URL файла.

Метод close

Закрывает файл.
Синтаксис:

file.close()

Объект IV8StorageFile

портирован

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

Метод files

Позволяет получить список файлов в контейнере.
Синтаксис:

files = stg.files()

Возвращает: Массив строк с названиями файлов в контейнере.

Метод open

Открывает файл в контейнере. Синтаксис:

file = stg.open(ИмяФайла, РежимОткрытия)

Параметры:

  • ИмяФайла. Строка. Задает имя открываемого файла.
  • РежимОткрытия. Число. Задает режим открытия:
    • fomAppend = 0x1, Не очищать файл при открытии
    • fomTruncate = 0x2, Очистить файл при открытии
    • fomIn = 0x8, Открыть файл для чтения
    • fomOut = 0x10, Открыть файл для записи
    • fomShareRead = 0x100, Разделяемое чтение
    • fomShareWrite = 0x200, Разделяемая запись

Возвращает: объект IV8DataFile, открытый файл.

Метод rename

Переименует файл в контейнере.
Синтаксис:

stg.rename(СтароеИмя, НовоеИмя)

Параметры:

  • СтароеИмя. Строка. Старое имя файла.
  • НовоеИмя. Строка. Новое имя файла.

Метод remove

Удаляет файл из контейнера.
Синтаксис:

stg.remove(ИмяФайла)

Параметры:

  • ИмяФайла. Строка. Имя удаляемого файла.

Объект IV8Lexer

портирован

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

Свойство text

Только чтение. Строка. Исходный текст.

Свойство reStream

Только чтение. Строка. Текст в виде аббревиатур значимых лексем для анализа с помощью regexp'ов

Свойство lexemCount

Только чтение. Число. Количество лексем в тексте.

Метод lexem

Позволяет получить лексему по ее номеру.
Синтаксис:

l = parser.lexem(Индекс)

Параметры:

  • Индекс. Число. Номер лексемы.

Возвращает: объект ILexem.

Свойство namesCount

Только чтение. Число. Количество различных идентификаторов в тексте. Все найденные во время разбора идентификаторы (названия), собираются в один массив. Свойство показывает величину этого массива.

Метод name

Позволяет получить идентификатор из массива найденных названий по его номеру.
Синтаксис:

name = parser.name(Индекс)

Параметры:

  • Индекс. Число. Номер идентификатара в массиве, начиная с 0.

Возвращает: Строку. Идентификатор.

Метод idxOfName

Позволяет найти номер идентификатора в массиве по его имени.
Синтаксис:

num = parser.idxOfName(Имя)

Параметры:

  • Имя. Строка. Искомое имя.

Возвращает: Число. Номер имени в массиве. Если имя не найдено, -1.

Метод posToLexem

Позволяет найти номер лексемы по ее позиции в строке reStream.
Синтаксис:

num = parser.posToLexem(Позиция)

Параметры:

  • Позиция. Число. Позиция аббревиатуры лексемы в строке reSream.

Возвращает: Число. Номер лексемы в общем списке. Если переданная позиция не соответствует ни одной лексеме, -1.

Метод strNameIdx

НОВОЕ

Позволяет получить индекс идентификатора в строковой форме для поиска в reStream, т.е. как NmXXXXXX.
Синтаксис:

strIdx = parser.strNameIdx(Идентификатор)

Параметры:

  • Идентификатор. Строка. Название идентификатора.

Возвращает: Строку. Индекс идентификатора в строковом виде, либо пустую строку, если такой идентификатор не найден.


Объект ILexem

портирован

Описывает одну лексему текста исходного кода 1С.

Свойство type

Только чтение. Число. Тип лексемы.

|Тип лексемы|Лексема|Аббревиатура в reStream| |ltUnknown|неизвестная лексема|"Un"| |ltRemark|Комментарий|""| |ltQuote|Строка|"Qt"| |ltDate|Дата|"Dt"| |ltNumber|Число|"Nu"| |ltPreproc|Команда препроцессора|"Pr"| |ltDirective|Директива компиляции|"Dr"| |ltLabel|Метка|"Lb"| |ltLPar|(|"Lp"| |ltRPar|)|"Rp"| |ltLBrt|[|"Lr"| |ltRBrt|]|"Rr"| |ltEqual|=|"Eq"| |ltComma|,|"Cm"| |ltSemicolon|;|"Sc"| |ltPlus|+|"Pl"| |ltMinus|-|"Mn"| |ltMult|*|"Mu"| |ltDivide|/|"Dv"| |ltMod|%|"Mo"| |ltQuestion|?|"Qs"| |ltPeriod|.|"Pd"| |ltLess|<|"Ls"| |ltLessEq|<=|"Le"| |ltGrat|>|"Gt"| |ltGratEq|>=|"Ge"| |ltNotEq|<>|"Ne"| |ltName|Идентификатор|"Nm000000"| |ltIf|If, Если|"If"| |ltThen|Then, Тогда|"Th"| |ltElsIf|ElseIf, ИначеЕсли|"Es"| |ltEndIf|EndIf, КонецЕсли|"Ei"| |ltElse|Else, Иначе|"El"| |ltFor|For, Для|"Fo"| |ltEach|Each, Каждого|"Ea"| |ltIn|In, Из|"In"| |ltTo|To, По|"To"| |ltWhile|While, Пока|"Wl"| |ltDo|Do, Цикл|"Do"| |ltEndDo|EndDo, КонецЦикла|"Ed"| |ltProcedure|Procedure, Процедура|"Pc"| |ltFunction|Function, Функция|"Fu"| |ltEndProcedure|EndProcedure, КонецПроцедуры|"Ep"| |ltEndFunction|EndFunction, КонецФункции|"Ef"| |ltVar|Var, Перем|"Va"| |ltGoto|Goto, Перейти|"Go"| |ltReturn|Return, Возврат|"Re"| |ltContinue|Continue, Продолжить|"Co"| |ltBreak|Break, Прервать|"Br"| |ltAnd|And, И|"An"| |ltOr|Or, Или|"Or"| |ltNot|Not, Не|"Nt"| |ltTry|Try, Попытка|"Tr"| |ltExcept|Except, Исключение|"Ec"| |ltRaise|Raise, БроситьИсключение|"Rs"| |ltEndTry|EndTry, КонецПопытки|"Et"| |ltNew|New, Новый|"Nw"| |ltExecute|Execute, Выполнить|"Eu"| |ltTrue|True, Истина|"Tu"| |ltFalse|False, Ложь|"Fl"| |ltAddHandler|AddHandler, ДобавитьОбработчик|"Ah"| |ltRemoveHandler|RemoveHandler, УдалитьОбработчик|"Rh"| |ltExport|Export, Экспорт|"Ex"| |ltNull|Null|"Nl"| |ltUndefined|Undefined, Неопределено|"Uf"| |ltVal|Val, Знач|"Vl"|

Свойство start

Только чтение. Число. Позиция начала строки в исходном тексте (в символах).

Свойство length

Только чтение. Число. Длина лексемы.

Свойство line

Только чтение. Число. Номер строки исходного текста, в которой расположена лексема.

Свойство text

Только чтение. Строка. Текст лексемы.


Объект IV8Windows

портирован частично

Служит "точкой входа" для работы с оконной подсистемой 1С, через свойство Designer.windows. Оконная система 1С состоит из Views (представлений). Обычно это окно, но не всегда. Все представления организованы в иерахическую структуру, то есть внутри одного представления могут находится другие - например, можно разделить некоторые окна редакторов на несколько, или "сцепить" несколько окон в одно (либо "затащив" одно окно на другое мышью с нажатым Shift, либо с помощью диалога "Окна" в меню "Окна").

Свойство mainView

портировано

Только чтение. Объект IV8View. Представление главного окна программы.

Свойство mdiView

портировано

Только чтение. Объект IV8View. Представление MDI-части окна конфигуратора.

Свойство modalMode

портировано

Только чтение. Число. Показывает, открыто ли сейчас модальное окно:

  • msNone = 0, нет модальных окон.
  • msPseudo = 1, открыто псевдо-модальное окно.
  • msModa = 2, открыто модальное окно.

Свойство caption

портировано

Чтение и запись. Строка. Текущий заголовок окна конфигуратора.

Свойство mainTitle

портировано

Чтение и запись. Строка. Основная часть заголовка конфигуратора.

Свойство additionalTitle

портировано

Чтение и запись. Строка. Дополнительная часть заголовка конфигуратора.

Свойство propsVisible

портировано

Чтение и запись. Булево. Видимость окна свойств.

Метод getActiveView

портирован

Позволяет получить активное представление.
Синтаксис:

view = windows.getActiveView()

Возвращает: Объект IV8View. Активное представление.

Метод getFocusedView

портирован

Позволяет получить представление, которое сейчас в фокусе.
Синтаксис:

view = windows.getFocusedView()

Возвращает: Объект IV8View. Представление, которому принадлежит фокус ввода. Может не совпадать с активным представлением.

Событие onDoModal

не портировано

Возникает при показе модальных диалогов.
Синтаксис:

onDoModal(ПараметрыСобытия)

Параметры:

  • ПараметрыСобытия. Объект IDoModalHook, содержащий описание события.

Событие onMessageBox

портировано полностью

Возникает перед показом предупреждения.

Синтаксис:

onMessageBox(ПараметрыСобытия)

Параметры:

  • ПараметрыСобытия. Объект IMsgBoxHook, содержащий описание события.

Событие onChangeTitles

портировано полностью

Возникает при изменении заголовка основного окна.

Синтаксис:

onChangeTitles(ПараметрыСобытия)

Параметры:

  • ПараметрыСобытия. Объект ISetMainTitleHook, содержащий описание события.

Объект IMsgBoxHook

портировано полностью

Содержит параметры события перехвата Предупреждения.

Свойство caption

Только чтение. Строка. Заголовок окна предупрждения.

Свойство text

Только чтение. Строка. Текст предупреждения.

Свойство type

Только чтение. Число. Флаги типа предупреждения. Смотри описание метода MessageBox.

Свойство timeout

Только чтение. Число. Таймаут предупреждения.

Свойство cancel

Чтение и запись. Булево. Признак отказа. При установке в true, предупреждение не будет выведено на экран.

Свойство result

Чтение и запись. Число. Ответ. Если показ предупреждения отменен, вызывающему будет вернут этот ответ.


Объект ISetMainTitleHook

портировано полностью

Параметры события изменения основного заголовка Конфигуратора. Пример использования смотри в скрипте scripts\configCaption.js. Заголовок окна конфигуратора состоит из двух частей - основного заголовка, это неизменная часть, и дополнительного заголовка, который описывает активное окно в конфигураторе, если оно есть и максимизировано.

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

Свойство mainTitle

Только чтение. Строка. Основной заголовок.

Свойство additionalTitle

Только чтение. Строка. Дополнительный заголовок.

Свойство cancel

Чтение и запись. Булево. Отказ от штатной обработки. При установке в true, подавляет вызов стандартной процедуры установки заголовка.


Объект IDoModalHook

не портировано

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

Свойство caption

Только чтение. Строка. Заголовок диалога.

Свойство form

Только чтение. Объект IV8Form, если диалог на основе формы 1С.

Свойство cancel

Чтение и запись. Булево. При установке в true завершает диалог.

Свойство result

Чтение и запись. Число. Код завершения диалога. Если показ диалога отменен, вызывающему будет вернут этот код.

Свойство stage

Только чтение. Число. Описывает этап, во время которого вызван обработчик события:

|beforeDoModal|0|Перед открытием. Диалог еще не инициализирован, окно еще не показано на экране.| |openModalWnd |1|При открытии окна. Окно только-что показано на экране. | |afterDoModal |2|После закрытия. Можно посмотреть код завершения диалога. | |afterInitial |3|После инициализации. Диалог уже инициализирован, но окно еще не показано |


Объект IV8View

портирован

Объект для работы с отображением 1С.

Свойство id

Только чтение. Строка. Содержит guid представления. Каждое представление имеет свой идентификатор.

Свойство title

Только чтение. Строка. Заголовок представления.

Свойство hwnd

Только чтение. Число. HWND окна предстваления, если оно есть.

Метод position

Позволяет получить положение представления.
Синтаксис:

pos = view.position()

Возвращает: объект IV8ViewPosition, положение представления.

Свойство parent

Только чтение. Объект IV8View. Родительское представление.

Метод enumChilds

Позволяет получить список дочерних представлений.
Синтаксис:

views = view.enumChilds()

Возвращает: объект IV8ViewList со списком дочерних представлений.

Метод merge

Позволяет "соединить" два представления.
Синтаксис:

view.merge(ДругоеПредставление, Способ)

Параметры:

  • ДругоеПредставление. Объект IV8View, с кем объединять.
  • Способ. Число. Перечисление ViewPlacements.

Свойство isContainer

Только чтение. Число. Показывает, является ли представление контейнером других представлений:

|vctNo |0|Не контейнер | |vctTabbed |1|Контейнер с закладками | |vctTwoViewsHorz|2|Два отображения горизонтально| |vctTwoViewsVert|3|Два отображения вертикально | |vctMdiContainer|4|MDI контейнер | |vctUnknown |5|Неизвестный тип контейнера |

Свойство wndClass

Только чтение. Строка. Если представление имеет окно, содержит название класса окна.

Свойство visible

Чтение и запись. Булево. Видимость представления.

Свойство activeChild

Только чтение. Объект IV8View. Активное подчиненное отображение, если оно есть.

Метод activate

Активирует представление.
Синтаксис:

view.activate()

Метод close

Закрывает представление.
Синтаксис:

view.close([Обязательно])

Параметры:

  • [Обязательно]. Булево. По-умолчанию false. Если true, то представление закроется без вопросов, иначе может отменить свое закрытие. Например, измененный документ может отменить закрытие.

Метод getCmdState

Позволяет получить состояние команды. Аналогично методу Designer.getCmdState, только состояние команды запрашивается не у главного окна, а у этого представления.

Метод sendCommand

Посылает команду в представление. Аналогично методу Designer.sendCommand, только команда посылается не в главное окно, а в это представление.

Метод getDocument

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

doc = view.getDocument()

Возвращает: объект IViewDocument.

Метод getObject

Позволяет получить объект языка 1С, если объект связан с редактированием такого объекта. Например, редактор текстового документа вернет ТекстовыйДокумент, табличного документа - ТабличныйДокумент и т.п.
Синтаксис:

obj = view.getObject()

Возвращает: объект 1С.

Метод getInternalForm

Позволяет получить "внутреннюю" форму 1С, если представление сделано на основе формы.
Синтаксис:

form = view.getInternalForm()

Возвращает: объект IV8Form, если представление на основе формы, иначе null.

Свойство mdObj

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

Свойство mdProp

Только чтение. Объект IV8MDProperty. Свойство объекта метаданных, если представление относится к свойству объекта метаданных.

Свойство icon

Только чтение. Объект Картинка. Иконка представления.


Перечисление ViewPlacements

портировано

Константы, определяющие положение представления.

|vpNo |0 |Нигде | |vpLeft |1 |Слева | |vpTop |2 |Сверху | |vpRight |4 |Справа | |vpBottom|8 |Снизу | |vpCenter|16|По центру | |vpTabbed|32|Закладками|


Объект IV8ViewPosition

портировано частично

Объект - положение представления.

Свойство state

Чтение и запись. Число. Состояние представления. Перечисление ViewStates:

|vsDock |1 |Доковано | |vsFloat |2 |Плавающее | |vsMDI |4 |Обычное MDI| |vsHardDock|8 |Прибито | |vsHiding |16|Прячущееся |

Свойство placement

Чтение и запись. Число. Положение отображения. Перечисление ViewPlacements.

Свойство dockRow

Чтение и запись. Число. Номер строки в доке.

Свойство dockRowPos

Чтение и запись. Число. Положение в строке дока.

Свойство dockWidth

Чтение и запись. Число. Ширина в доке.

Свойство dockHeight

Чтение и запись. Число. Высота в доке.

Свойство isMergeable

Чтение и запись. Булево. Соединяемое.

Свойство floatLeft

Чтение и запись. Число. Размер в плавающем состоянии.

Свойство floatTop

Чтение и запись. Число. Размер в плавающем состоянии.

Свойство floatRight

Чтение и запись. Число. Размер в плавающем состоянии.

Свойство floatBottom

Чтение и запись. Число. Размер в плавающем состоянии.

Свойство mdiLeft

Чтение и запись. Число. Размер в MDI состоянии.

Свойство mdiRight

Чтение и запись. Число. Размер в MDI состоянии.

Свойство mdiBottom

Чтение и запись. Число. Размер в MDI состоянии.

Свойство mdiLeft

Чтение и запись. Число. Размер в MDI состоянии.

Свойство mdiMax

Чтение и запись. Булево. Окно максимизировано в MDI состоянии.

Свойство hiddenWidth

Чтение и запись. Число. Ширина в авто-скрытом состоянии.

Свойство hiddenHeight

Чтение и запись. Число. Высота в авто-скрытом состоянии.

Свойство possibleStates

Чтение и запись. Число. Флаг возможных состояний.

Свойство possiblePlacements

Чтение и запись. Число. Возможные положения.

Свойство isDockable

Чтение и запись. Булево. Прикрепляемое.


Объект IV8ViewList

портирован

Служит для передачи списка представлений.

Свойство count

Только чтение. Число. Количество представлений в списке.

Метод item

Получить представление по номеру.
Синтаксис:

view = list.item(Индекс)

Параметры:

  • Индекс. Число. Номер представления.

Возвращает: объект IV8View.


Объект IViewDocument

не портировано

Служит для работы с данными представления.

Свойство path

Только чтение. Строка. Путь данных.

Свойство isReadOnly

Только чтение. Булево. Данные в режиме "только чтение".

Свойство isModified

Только чтение. Булево. Данные модифицированы.

Свойство isConfigMode

Только чтение. Булево. Данные часть конфигурации.

Свойство title

Только чтение. Строка. Заголовок.

Свойство key

Только чтение. Строка. Ключ данных.

Свойство kind

Только чтение. Строка. GUID вида данных.

Метод enumViews

Позволяет получить все представления данных.
Синтаксис:

views = doc.enumViews()

Возвращает: объект IV8ViewList, список представлений данных.


Объект IV8Debugger

не портировано

Служит для взаимодействия с отладчиком. Доступен как свойство Designer.v8debug.

Метод eval

Позволяет вычислить отладочное выражение.
Синтаксис:

res = v8debug.eval(Выражение)

Параметры:

  • Выражение. Строка. Содержит вычисляемое выражение.

Возвращает: объект IDebugEvalResult, результат вычисления.


Объект IDebugEvalResult

не портировано

Свойство sucessed

Только чтение. Булево. Показывает, успешно ли было вычислено выражение.

Свойство value

Только чтение. Строка. Текстовое представление результата.

Свойство typeCode

Только чтение. Число. Код типа результата.

Свойство type

Только чтение. Строка. Название типа результата.

Свойство propCount

Только чтение. Число. Количество свойств результата. Если результат представляет собой объект, можно получить свойства объекта.

Метод prop

Позволяет получить свойство результата по его номеру.
Синтаксис:

p = res.prop(Индекс)

Параметры:

  • Индекс. Число. Номер свойства.

Возвращает: объект IDebugEvalProp, описывающий свойство результата.


Объект IDebugEvalProp

не портировано

Описывает одно из свойств результата вычисления отладочного выражения.

Свойство name

Только чтение. Строка. Название свойства.

Свойство value

Только чтение. Строка. Текстовое представление значения свойства.

Свойство typeCode

Только чтение. Число. Код типа значения свойства.

Свойство type

Только чтение. Строка. Название типа значения свойства.

Свойство expandable

Только чтение. Булево. Свойство можно развернуть дальше, т.е. оно само содережит свойства.


Объект IV8Form

не портировано

Служит для взаимодействия с "внутренними" формами 1С. Это те формы, на базе которых сделаны диалоги самой 1С и часть ее окон. Похожи на обычные, "толстые" формы, используемые для прикладной разработки, но немного не те. Форма является контейнером для контролов (элементов управления), и сама тоже может рассматриваться как контрол. Котролы могут посылать форме события, которые задаются числом - номером события и могут иметь параматры - различные данные. Форма может принимать команды, как обычные, так и команды контролов. Каждый контрол имеет ID - целое число, и может иметь строку - имя.

Свойство controlsCount

Только чтение. Число. Количество элементов управления на форме.

Метод getControl

Позволяет получить элемент управления по номеру или имени.
Синтаксис:

control = form.getControl(Индекс)

Параметры:

  • Индекс. Строка или Число. Указывает имя или номер контрола. Если передано -1 или пустая строка, возвращает контрол - саму форму.

Возвращает: объект IV8Control, описывающий элемент управления.

Свойство trapDialogEvents

Чтение и запись. Булево. Включает и выключает трассировку событий в форме. При включенной трассировке в окне сообщений отображаются различные события, принимаемые формой. Используется в исследовательских целях разработчиками аддинов.

Метод sendEvent

Позволяет послать событие форме, имитируя какое-либо действие.
Синтаксис:

form.sendEvent(ИДКонтрола, НомерСобытия, [Данные...])

Параметры:

  • ИДКонтрола. Число. Идентификатор контрола - инициатора события.
  • НомерСобытия. Число. Номер события. Каждый вид контролов имеет свой набор событий со своей нумерацией.
  • [Данные...]. Необязательные аргументы, передающие данные о событии. Набор данных зависит от события.

Метод getCmdState

Позволяет получить состояние команды. Аналогично методу Designer.getCmdState, только состояние команды запрашивается не у главного окна, а у этой формы.

Метод sendCommand

Посылает команду в представление. Аналогично методу Designer.sendCommand, только команда посылается не в главное окно, а в эту форму.

Метод getCtrlCmdState

Позволяет получить состояние команды. Аналогично методу Designer.getCmdState. Добавляется первый параметр - ИД контрола. Состояние команды запрашивается у этой формы для этого контрола. Обычный пример - команды на панелях команд таблиц - Добавить, Сортировать и т.п.

Метод sendCtrlCommand

Посылает команду в представление. Аналогично методу Designer.sendCommand. Добавляется первый параметр - ИД контрола. Команда посылается этой форме от этого контрола. Обычный пример - команды на панелях команд таблиц - Добавить, Сортировать и т.п.

Свойство activeControl

Чтение и запись. Объект IV8Control. Позволяет получить или установить текущий (активный) элемент управления.


Объект IV8Control

не портировано

Служит для взаимодействия с элементами управления на внутренних формах 1С.

Свойство value

Чтение и запись. Значение контрола.

Если элемент управления представляет значение, его можно получить/установить через это свойство. Это такие элементы, как Надпись - текст надписи, ПолеВвода - текст поля, Флажок - значение флажка, табличное поле, если источник данных у него список значений, таблица значений, дерево значений и т.д.

Свойство id

Только чтение. Число. Идентификатор элемента управления.

Свойство name

Только чтение. Строка. Имя элемента управления. Может быть пустым.

Свойство hwnd

Только чтение. Число. Если у элемента управления есть окно, то HWND этого окна.

Свойство extInterface

Только чтение. Различные объекты.

Свойство позволяет получить дополнительный интерфейс для работы с контролами определенных видов. Так, для табличного поля возвращает интерфейс IGridCtrl, а для панелей - ITabPanel.

Свойство props

Только чтение. Объект IObjectProperties, позволяет работать со свойствами элемента управления.


Объект IGridCtrl

не портировано

Служит для взаимодействия с элементами управления - табличными полями на внутренних формах 1С. Содержит колонки. Каждая колонка имеет свой ИД, обычно совпадает с номером колонки, но не обязательно.

Свойство dataSource

Только чтение. Объект IDataSource, работающий с источником данных этого поля.

Свойство columnCount

Только чтение. Число. Количество колонок.

Свойство currentRow

Чтение и запись. Объект IDataRow, задающий текущую строку.

Свойство currentColID

Чтение и запись. Число. ID текущей колонки.

Метод isExpanded

Позволяет узнать, развернута ли строка, если поле представляет дерево.
Синтаксис:

res = grid.isExpanded(СтрокаДанных)

Параметры:

  • СтрокаДанных. Объект IDataRow, строка источника данных.

Возвращает: Булево. Развернута ли строка.

Метод expand

Позволяет развернуть/свернуть строку в дереве.
Синтаксис:

grid.expand(СтрокаДанных, Развернуть, [СПодчиненными])

Параметры:

  • СтрокаДанных. Объект IDataRow, строка источника данных.
  • Развернуть. Булево. Развернуть (true) или свернуть (false) строку.
  • [СПодчиненными]. Булево. Необяательный параметр, по-умолчанию false. Разворачивать/сворачивать также все дочерние строки этой строки.

Метод isCellChecked

Позволяет узнать, установлена ли пометка в ячейке.
Синтаксис:

grid.isCellChecked(СтрокаДанных, ИДКолонки)

Параметры:

  • СтрокаДанных. Объект IDataRow, строка источника данных.
  • ИДКолонки. Число. Идентификатор колонки.

Возвращает: Число. 0 - нет пометки, 1 - помечен, 2 - серый.

Метод checkCell

Позволяет пометить ячейку табличного поля.
Синтаксис:

grid.checkCell(СтрокаДанных, ИДКолонки, [Пометка])

Параметры:

  • СтрокаДанных. Объект IDataRow, строка источника данных.
  • ИДКолонки. Число. Идентификатор колонки.
  • [Пометка]. Число. 0 - нет пометки, 1 - помечен, 2 - серый. По-умолчанию 1.

Объект ITabPanel

не портировано

Служит для взаимодействия с элементом управления Панель

Свойство pages

Только чтение. Объект СтраницыПанели (см в Синтакс-Помощнике).

Свойство activePage

Чтение и запись. Число. Позволяет получить/установить активную страницу панели.


Объект IDataSource

не портировано

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

Свойство type

Только чтение. Число. Тип источника данных.

|dstGrid| 0|Источник данных Таблица| |dstTree| 1|Источник данных Дерево |

Свойство hasCellAppearance

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

Свойство root

Только чтение. Объект IDataRow. Начальная точка для получения данных. Реальные данные есть дочерние строки этой строки.


Объект IDataRow

не портировано

Строка с данными источника данных.

Свойство owner

Только чтение. Объект IDataSource, которому принадлежит строка.

Свойство parent

Только чтение. Объект IDataRow, родительская строка. У строк верхнего уровня родителей нет.

Свойство firstChild

Только чтение. Объект IDataRow, первая дочерняя строка этой строки.

Свойство lastChild

Только чтение. Объект IDataRow, последняя дочерняя строка этой строки.

Свойство next

Только чтение. Объект IDataRow, следующая строка.

Свойство prev

Только чтение. Объект IDataRow, предыдущая строка.

Метод getCellValue

Позволяет получить значение ячейки в указанной колонке.
Синтаксис:

val = row.getCellValue(ИДКолонки)

Параметры:

  • ИДКолонки. Число. Идентификатор колонки. Обычно совпадает с номером колонки, но не обязательно.

Возвращает: значение ячейки. Значение может и отсутствовать, а отображение задаваться через оформление ячейки.

Метод getCellAppearance

Позволяет получить оформление ячейки заданной колонки, если оно есть.
Синтаксис:

val = row.getCellAppearance(ИДКолонки)

Параметры:

  • ИДКолонки. Число. Идентификатор колонки. Обычно совпадает с номером колонки, но не обязательно.

Возвращает: объект ICellAppearance, оформление указанной ячейки.


Объект ICellAppearance

не портировано

Оформление ячейки строки источника данных.

Свойство text

Только чтение. Строка. Текст ячейки.

Свойство checked

Только чтение. Число. Состояние пометки - 0 сброшен, 1 - помечен, 2 - серый

Свойство picture

Только чтение. Объект Картинка. Картинка ячейки.

Свойство addPicture

Только чтение. Объект Картинка. Дополнительная картинка ячейки.

Свойство value

Только чтение. Значение ячейки.


Объект IObjectProperties

не портировано

Предназначен для работы со свойствами объектов. Многие объекты внутри 1С поддерживают универсальный интерфейс для отображения своих свойств в окне свойств. Я пока вывел этот интерфейс для контролов и объектов метаданных.

Свойство count

Только чтение. Число. Количество свойств объекта.

Метод propName

Позволяет получить имя свойства.
Синтаксис:

name = obj.propName(Индекс)

Параметры:

  • Индекс. Число. Номер свойства, начиная с 0.

Возвращает: Строка. Имя свойства.

Метод getValue

Позволяет получить значение свойства.
Синтаксис:

val = obj.getValue(Индекс)

Параметры:

  • Индекс. Число, Строка. Номер свойства или его имя.

Возвращает: значение свойства. В COM-значения, нормально преобразуются только простые свойства - строки, числа, булево. Остальные значения можно исследовать через ЗначениеВСтрокуВнутр, либо используя метод Designer.toV8Value.

Метод setValue

Позволяет установить значение свойства.
Синтаксис:

obj.setValue(Индекс, Значение)

Параметры:

  • Индекс. Число, Строка. Номер свойства или его имя.
  • Значение. Значение свойства.

Метод activateProperty

Позволяет активировать свойство в окне свойств.
Синтаксис:

obj.activateProperty()

Параметры:

  • Индекс. Число, Строка. Номер свойства или его имя.

Объект IDescriptionArray

не портировано

Набор описаний элементов системы типов, прочитанных из файла v8types.txt. Каждый элемент унаследован от общего класса IDescription.

В этом наборе могут находится элементы следующих типов:

В некоторых из элементов есть свойство access. Оно указывает на доступность элемента в разных режимах запуска:

|1 |Сервер | |2 |Толстый клиент | |4 |Тонкий клиент | |8 |Веб-клиент | |16|Внешнее соединение|

Свойство count

Только чтение. Число. Количество элементов.

Метод item

Получить элемент по его номеру.
Синтаксис:

descr = arr.item(Индекс)

Параметры:

  • Индекс. Число, Строка. Номер элемента или его имя.

Возвращает: объект, унаследованный от IDescription.


Объект IDescription

не портировано

Базовый класс для описаний элементов системы типов 1С. От него унаследованы:

Метод name

Получить имя элемента.
Синтаксис:

name = obj.name([НомерЯзыка])

Параметры:

  • [НомерЯзыка]. Число. По-умолчанию 0. Номер языка, 0 - английский, 1 - русский.

Возвращает: Строка. Имя элемента.

Метод descr

Получить описание элемента.
Синтаксис:

descr = obj.descr([НомерЯзыка])

Параметры:

  • [НомерЯзыка]. Число. По-умолчанию 0. Номер языка, 0 - английский, 1 - русский.

Возвращает: Строка. Описание элемента.


Объект ITypeDescription

не портировано

Описание типа, наследован от IDescription, вместе с его методами name, descr.

Свойство access

Только чтение. Число. Доступность типа.

Свойство uuid

Только чтение. Строка. Гуид типа.

Свойство ctors

Только чтение. Объект IDescriptionArray, содержащий элементы IMethDescription. Список описаний конструкторов типа.

Свойство meths

Только чтение. Объект IDescriptionArray, содержащий элементы IMethDescription. Список описаний методов типа.

Свойство events

Только чтение. Объект IDescriptionArray, содержащий элементы IMethDescription. Список описаний событий типа.

Свойство props

Только чтение. Объект IDescriptionArray, содержащий элементы IPropDescription. Список описаний свойств типа.

Свойство collection

Только чтение. Строка. Если тип является коллекцией, содержит имя типа элементов коллекции.


Объект IMethDescription

не портировано

Описание метода, наследован от IDescription, вместе с его методами name, descr.

Свойство memberOf

Только чтение. Объект ITypeDescription. Содержит ссылку на тип, членом которого он является.

Свойство rettype

Только чтение. Строка. Тип возвращаемого значения. Пустая строка для процедур.

Свойство access

Только чтение. Число. Доступность метода.

Свойство syntaxes

Только чтение. Объект IDescriptionArray, содержащий элементы IMethSyntaxDescription. Список описаний вариантов синтаксиса метода.


Объект IMethSyntaxDescription

не портировано

Описание синтаксиса метода, наследован от IDescription, вместе с его методами name, descr.

Свойство params

Только чтение. Объект IDescriptionArray, содержащий элементы IParamDescription. Список описаний параметров метода.


Объект IParamDescription

не портировано

Описание параметра метода, наследован от IDescription, вместе с его методами name, descr.

Свойство type

Только чтение. Строка. Тип параметра.


Объект IPropDescription

не портировано

Описание свойства типа, наследован от IDescription, вместе с его методами name, descr.

Свойство memberOf

Только чтение. Объект ITypeDescription. Содержит ссылку на тип, членом которого он является.

Свойство type

Только чтение. Строка. Тип свойства.

Свойство access

Только чтение. Число. Доступность свойства.

Свойство ro

Только чтение. Булево. Свойство доступно только для чтения.


Объект IV8Value

портировано полностью

Данный объект является "оберткой" над переданным в метод toV8Value значением, позволяя узнать о нем больше информации, в случае, если это значение является каким-либо значением из 1С. С его помощью можно узнать название типа 1С этого значения, получить его строковое представление, внутреннее предстваление в виде строки, и список методов объекта.

Метод typeName

Получить название типа значения, соответствует ТипЗнч в 1С.
Синтаксис:

typeName = obj.typeName([НомерЯзыка])

Параметры:

  • [НомерЯзыка]. Число. По-умолчанию 0. Номер языка, 0 - английский, 1 - русский.

Возвращает: Строка. Название типа значения.

Метод presentation

Получить строковое представление значения.
Синтаксис:

descr = obj.presentation([)

Возвращает: Строка. Представление значения.

Метод isObject

Проверить, является ли значение объектом 1C.
Синтаксис:

isObj = obj.isObject()

Возвращает: Булево. Если значение является объектом 1C, возвращает true, если значение простого типа - false.

Метод contextInfo

Получить cписок методов/свойств объекта 1С. Предназначен в основном для исследовательских целей.
Синтаксис:

info = obj.contextInfo()

Параметры:

Возвращает: Строка. Список методов и свойств объекта. Названия возвращаются на русском языке, по одному названию в строке.

Метод toStringInternal

Получить внутреннее представление значения, то же самое, что ЗначениеВСтрокуВнутр.
Синтаксис:

val = obj.toStringInternal()

Возвращает: Строка. Внутреннее представление значения.

Свойство typeUUID

Только чтение. Строка. Содержит внутренний UUID типа значения. Для исследовательских целей.