<i>Разработка скриптов (начинающим)</i>

1. В первую очередь нужно изучить <b>объектную модель Cнегопата</b>.

Посмотри ссылку
там описаны способы, как можно посмотреть объектную модель -
тебе нужно посмотреть COM-объект "Библиотека типов Снегопата" или тупо подключить файл snegopat.dll к одному из этих обозревателей.

2. Далее нужно понять, как это все работает в скриптах.

По умолчанию методы и свойства объекта designer являются глобальными, т.е. к ним можно обращаться напрямую, а ко всем остальным уже через их имена - например, коллекция аддинов addins или активное текстовое окно snegopat.activeTextWindow()

Создавайте файл с расширением .js или .vb
В качестве его текста в любом редакторе(желательно редактор с поддержкой UTF-8) можно написать простейший код на JScript:
<verbatim>    $engine JScript
    $uname HelloWorld
    $dname HelloWorld
    Message("Hello World")
    метод designer.Message
</verbatim>

или на VBScript:
<verbatim>
    $engine VBScript
    $uname HelloWorld
    $dname HelloWorld
    Message "Hello World"
    ' метод designer.Message
</verbatim>

3. Созданный файл нужно закинуть в папку КореньСнегопатаСДллФайлом\scripts
и прописать в файле КореньСнегопатаСДллФайлом\addins.ini по примеру

4. Далее можно перезагрузить Конфигуратор для загрузки скрипта, но лучше в окне Снегопата щелкнуть правой кнопкой на группе "Пользовательские аддины" и выбрать "Загрузить скрипт", выбрать файл скрипта, он загрузится и
сразу же в окне сообщений Конфигуратора появится сообщение "Hello World"

5. В скриптах можно пользоваться штатными объектами 1С - ТаблицаЗначений, Массив, и многие другие с помощью команды <b>v8New</b>
  *  <b>Для создания объектов 1С</b> используйте код
<pre>    таблица = v8New("ТаблицаЗначений")</pre>

  *  <b>Для получения предопределенных значений 1С, используемых в различных методах 1С,</b> используйте код типа
<pre>    режим = v8New("ПеречислениеРежимДиалогаВыбораФайла").Открытие</pre>

  *  v8New - это полный аналог штатной команды 1С Новый(Тип)
  *  В качестве параметра-типа может выступать любая строка, получаемая из кода 1С "" + ТипЗнч(НужныйОбъект)
    *  Например, строку из сообщения
<pre>Сообщить("" + ТипЗнч(РежимДиалогаВыбораФайла));</pre>

6. Для <b>открытия файла в Конфигураторе</b> можно использовать аналог следующего кода (пример для JS)
<verbatim>    textDoc = v8New("ТекстовыйДокумент")
    var file = v8New("Файл", filepath)
    if(file.Существует()){
       textDoc.Прочитать(filepath)
       textDoc.Показать(filepath)
    }</verbatim>

или следущий прием
  *  использовать директиву \$addin stdlib в начале описания скриптов на отдельной строке
<verbatim>    $engine JScript
    $uname HelloWorld
    $dname HelloWorld
    $addin stdlib
</verbatim>
  *  само открытие файла производить командой
<verbatim>stdlib.openFileIn1C(путьФайла)</verbatim>

7. Для возможности использования <b>глобальных функций/процедур 1С</b> (ВвестиСтроку,ВвестиЧисло) можно использовать следующий прием:
<br>использовать директиву \$addin global в начале описания скриптов на отдельной строке и добавить скрипт global в пространство скрипта, т.е. код типа
<verbatim>    $engine JScript
    $uname HelloWorld
    $dname HelloWorld
    $addin global

    global.connectGlobals(SelfScript)
</verbatim>

8. <b>Для отладки скриптов</b> можно использовать:

  А. отладочную печать
  *  JS <pre>Message(" varname <" + varname + ">")</pre>
  *  VB <pre>Message " varname <" + varname + ">"</pre>

  Б. Непосредственную отладку скрипта
  *  в JS нужно написать в тексте <i>debugger</i>
  *  в VB нужно написать <i>stop</i>

9. Для работы с <b>текстом активного окна</b> можно использовать библиотечный скрипт Libs\TextWindow.js краткое описание от автора]

<hr><div id="d155e40e36c85df8"><i>24.08.2011 11:34:38 orefkov добавил:</i><br />
Тут возник вопрос по поводу открытия файлов в Конфигураторе.<br>
В объектной модели снегопата этого нет. Однако, вспомнив, как я открывал ert-шки в Конфигураторе 7ки в опенконфе, решил тряхнуть стариной и провернуть такой же финт ушами.

А в опенконфе я их открывал просто - добавлял имя файла в начало MRU (это список недавно открываемых файлов, появляющийся в меню Файл) и посылал команду "Открыть нулевой файл из списка MRU".

После десяти минут проб и ошибок в JS-Immediate, все получилось.

Итак, по порядку
  *  Список MRU лежит (сюрприз!!!) в профайле 1С по пути (еще сюрприз!!!) - "App/MRUFileList"
  *  Этот список - обычный список значений, правда значения в нем не обычные.
  *  С помощью ЗначениеВСтрокуВнутр разобрался, что там лежит, а с помощью
     ЗначениеИзСтрокиВнутр - смог создать нужное мне значение.
  *  В этом значении главное - путь к файлу и какой-то гуид, очевидно обозначающий тип документа,
     который должен открывать этот файл. Для текстовых доков гуид прост - сплошные нули.
     Для других видов доков надо исследовать, перебирая значения из MRUFileList, и смотря на них
     через ЗначениеВСтрокуВнутр
  *  Далее просто впихнул свое значение в начало списка, сохранил весь список в профайл,
     и послал нужную команду.

Вот код:
<verbatim>
Подготовим наше значение для MRU - списка
var pathToFile =
var docKind = '00000000-0000-0000-0000-000000000000'
var mruItem = ЗначениеИзСтрокиВнутр('{"#",36973550-6bbb-11d5-bf72-0050bae2bc79,\n' +
'{1,\n' +
+ pathToFile + '",0},' + docKind + '}\n' +
'}')

Получим текущий список MRU из настроек
var mru = profileRoot.getValue("App/MRUFileList")
Если там уже есть наше значение, удалим его
var hasInMru = mru.НайтиПоЗначению(mruItem)
if(hasInMru)
   mru.Удалить(hasInMru)
Если список полон, удалим последний элемент
if(mru.Количество() == 8)
   mru.Удалить(7)
Вставим значение для нашего файла в начало списка
mru.Вставить(0, mruItem)
Сохраним MRU-список обратно в настройки
profileRoot.setValue("App/MRUFileList", mru)
И зашлем команду
var cmd = addins.byUniqueName("stdcommands").object
cmd.Frame.RecentFile.getState()
cmd.Frame.RecentFile.send(0)
</verbatim>

Вот так пытливый ум преодолевает преграды.

ЗЫ: Для просмотра MRU использовался следующий код:
<verbatim>
var mru = profileRoot.getValue("App/MRUFileList")
for(var i = new Enumerator(mru); !i.atEnd(); i.moveNext())
{
	Message("v=" + ЗначениеВСтрокуВнутр(i.item().Значение), mExc3)
}
</verbatim>
В просмотре профайла мне помогло
</div id="d155e40e36c85df8">