Смотрел я на запросы в 1С, потом смотрел на то как народ создаёт библиотеки с API в "текучем" стиле. И решил это совместить. Ведь есть же такой замечательный продукт от Microsoft - [Linq](https://learn.microsoft.com/ru-ru/dotnet/csharp/linq/standard-query-operators/)! Сначала подумал что буду первопроходцем. Но оказывается всё уже придумано до нас: [Раз](https://github.com/KalyakinAG/query-model), [Два](https://infostart.ru/1c/articles/1991009/). Может быть ещё что есть, а я не нашел.
Данная библиотека не ставит перед собой цель полностью повторить функционал механизма запросов в 1С Предприятии. Я, как разработчик, даже считаю подобную цель вредной и едва ли достижимой. Ни одна библиотека никогда не сможет повторить полный синтаксис языка запросов так чтобы это было удобно для использования. В противном случае это будет уже не библиотека, а новый язык запросов.
### Личные переживания и сомнения в процессе разработки
Сначала я был полон энтузиазма. Потом, по мере написания кода, начали появляться сомнения. Нужно ли это? Верной ли дорогой иду? Но когда я увидел как вот это:
```bsl
Функция ТаблицаАдресныхСокращений(НаименованияАдресныхОбъектов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УровниСокращенийАдресныхСведений.Значение КАК Наименование,
| УровниСокращенийАдресныхСведений.Сокращение КАК Сокращение
|ИЗ
| РегистрСведений.УровниСокращенийАдресныхСведений КАК УровниСокращенийАдресныхСведений
|ГДЕ
| &Условие
|
|СГРУППИРОВАТЬ ПО
| УровниСокращенийАдресныхСведений.Значение,
| УровниСокращенийАдресныхСведений.Сокращение
|
|УПОРЯДОЧИТЬ ПО
| Наименование";
Если ТипЗнч(НаименованияАдресныхОбъектов) = Тип("Массив") И НаименованияАдресныхОбъектов.Количество() > 0 Тогда
все сомнения отпали! 16 строк вместо 30-ти при сохранении общей читабельности. И качество кода улучшилось за счет отказа от конструкции `СтрЗаменить()`.
Документация находится по адресу [https://zerobig.github.io/fluent-request-schema-1c/](https://zerobig.github.io/fluent-request-schema-1c/). Наполнение продолжается.
* Вариант 1: скачать файл с расширением cf из раздела [Releases](https://github.com/zerobig/fluent-request-schema-1c/releases) и объединить со своей конфигурацией;
* Вариант 2: скачать файл с расширением cfe из раздела [Releases](https://github.com/zerobig/fluent-request-schema-1c/releases) и установить это расширение в свою базу данных;
* Вариант 3: скачать исходники из репозитория, собрать при помощи команды `npm run build` (потребуется установленная NodeJS) и использовать результаты сборки по своему усмотрению;
Тесты писались при помощи расширения для запуска тестов [YAxUnit](https://github.com/bia-technologies/yaxunit). И выполнялись на типовой конфигурации Управление торговлей ред.11.5 (11.5.18.41). Это надо учитывать при самостоятельном запуске тестов.
**Внимание!** YAxUnit для регулярных выражений использует внешнюю компоненту, так что требуется снять флаг безопасного режима. Иначе внешняя компонента не будет запущена.
- [ ] вариант библиотеки для [OneScript](https://github.com/EvilBeaver/OneScript). Пока не понятно, возможно ли и нужно ли? Идея на этапе исследования;