# Функция *parseSnippets*

## Назначение функции

Функция для загрузки шаблонов кода (сниппетов) в формате 1С:Предприятия

## Параметры функции

* **stData** - *string*, текстовое содержимое файла шаблона .st
* **unionSnippets** - *boolean*, признак объединения ранее загруженных или стандартных шаблонов кода с шаблонами, переданными для загрузки. Значение по умолчанию: `false`

## Пример вызова

```javascript
// Загрузка шаблонов с полной заменой
parseSnippets('{0,{"Пока",0,0,"Пока","Пока <?""Условие""> Цикл......');
// Загрузка шаблонов с объединением
parseSnippets('{0,{"Пока",0,0,"Пока","Пока <?""Условие""> Цикл......', true);
```

## Особенности реализации

1. В списке подсказок появляются только те шаблоны кода, у которых в 1С заполнено поле `Автоматически заменять строку`.
2. В стандартных шаблонах 1С для списка выбора есть возможность указывать представление значение и само вставляемое значение, например, так:

```bsl
<?"", ВыборВарианта, "Основная таблица", "<?>", "СрезПервых", ".СрезПервых(<?>)", "СрезПоследних", ".СрезПоследних(<?>)">
```

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

3. Шаблон `ДатаВремя` всегда преобразуется в текущую дату в формате `dd.MM.yyyy HH:mm:ss`
4. Шаблоны, предназначенные для выбора объекта метаданных, такие как `Справочник`, `Документ`, `РегистрСведений` и подобные преобразуются в список выбора соответствующих объектов. Если метаданные ранее не были загружены через функцию [`updateMetadata`](update_metadata.md), тогда при активизации сниппета в списке подсказок происходит генерация события [`EVENT_GET_METADATA`](get_metadata_event.md) после обработки которого в 1С следует дополнительно вызвать метод [`updateSnippetByGUID`](update_snippet_guid.md)
5. Синтаксис шаблона `ОбъектМетаданных` поддерживается частично, а именно поддерживается выбор только "корневых" объектов метаданных, предназначенных для хранения какой-либо информации, а именно `Справочник`, `Документ`, `РегистрСведений` и т.п.
Ниже приведены шаблоны с выбором объекта метаданных в формате 1С, а также конечный результат, получаемый при загрузке в редактор:

```bsl
// Преобразуется к выбору регистра сведений
<?"", ОбъектМетаданных, "РегистрСведений">
// Преобразуется к выбору всех справочников и документов
<?"", ОбъектМетаданных, "Справочник", "Документ">

// Табличные части, формы, измерения/ресурсы регистров и прочие объекты не обрабатываются
// Преобразуется к выбору всех справочников
<?"", ОбъектМетаданных, "Справочник", "Документ.ТабличнаяЧасть">
// В указанных ниже шаблонах будет подставлено слово "ОбъектМетаданных"
<?"", ОбъектМетаданных, "Справочник.ТабличнаяЧасть", "Документ.ТабличнаяЧасть"> 
<?"", ОбъектМетаданных, "Справочник.Форма", "Справочник.Макет">
<?"", ОбъектМетаданных, "Стиль", "ПодпискаНаСобытие", "ОпределяемыйТип">
```

6. При выборе шаблона `ТекстЗапроса` происходит генерация события `EVENT_QUERY_CONSTRUCT`.
7. При выборе шаблона `ФорматнаяСтрока` происходит генерация события `EVENT_FORMAT_CONSTRUCT`.
8. При выборе шаблона `ВыборТипа` происходит генерация события `EVENT_TYPE_CONSTRUCT`.
9. При выборе шаблона `КонструкторОписанияТипов` происходит генерация события `EVENT_TYPEDESCRIPTION_CONSTRUCT`.
10. Перечисленные ниже шаблоны никак не обрабатываются, а просто вставляются в код с аналогичным именем переменной:

* ВыборТипа
* ЖурналДокументов
* ЗначениеПеречисления
* ИмяПользователя
* ПолноеИмяПользователя
* ИмяПользователяХранилищаКонфигурации
* КонструкторОписанияТипов
* КритерийОтбора
* Перерасчет
* ПланВидовРасчетаПредопределенныеДанные
* ПланВидовХарактеристикПредопределенныеДанные
* ПланСчетовПредопределенныеДанные
* Последовательность
* СправочникПредопределенныеДанные
