# 1c formatter

> **Оформлятор модулей 1С** - форматтер кода и документации для модулей 1С с ИИ. Расставляет области, анализирует код, документирует методы.

- GitHub: https://github.com/vladimir-kharin/1c_formatter
- Gitsell page: https://gitsell.ru/vladimir-kharin/1c_formatter
- Visibility: public/free
- GitHub stars: 185
- Gitsell views: 92
- Gitsell downloads: 8

## 1C Configurations

Not specified.

## Pricing

Free or price is not specified.

## README

﻿# Оформлятор модулей 1С

**Оформлятор модулей 1С** — расширяемый форматтер структуры модулей 1С с ИИ. Он позволяет:
- Форматировать код, расставлять области (можно расширять форматтер под ваши регламенты, стандарты 1С и т.д.).
- Документировать методы при помощи LLM (вам остается проверить, поправить при необходимости).
- Анализировать код (в том числе строить граф вызовов, находить используемые поля и пр.).
- Перетаскивать функционал из других конфигураций, переводить язык синтаксиса и решать иные «точечные» задачи автоматизации. Но для этого нужно разрабатывать свои дополнительные компоненты (под ваши конерктные задачи).

Проект реализован целиком на языке 1С, поэтому любой разработчик 1С может изучить и доработать его под свои нужды без необходимости в освоении дополнительных стеков.

[Публикация на](https://infostart.ru/1c/tools/2297756/) ![Инфостарт](https://infostart.ru/bitrix/templates/sandbox_empty/assets/tpl/abo/img/logo.svg)

## Возможности
Что есть уже сейчас:

- **Расстановка стандартных областей** в модуле и автоматическое распределение по ним методов.
- **Документирование методов** с использованием LLM (есть режим где не нужен ключ API, но ограниченный - не более 15 тыс. символов в одном запросе и ограничения по количеству запросов в минуту).
- **Форматирование кода методов** с использованием LLM по настраиваемым правилам: возможность задавать собственные правила форматирования кода с автоматическим применением через ИИ.
- **Формирование текста модуля** на основании структуры данных (дерева) модуля.
- **Парсинг кода** в структуры нескольких уровней абстракции:
  - Токенизация.
  - Построение абстрактного синтаксического дерева (АСД).
  - Формирование структуры модуля (области, переменные, сигнатуры методов с информацией из документации в комментарии над методом). Это основное представление для дальнейших операций.
  - Анализ связей в коде (например, вызовы методов, используемые поля и т.д.).

## Типовой сценарий использования
Наиболее распространённый процесс «оформления» модуля выглядит так:

1. **Копирование модуля** из Конфигуратора 1С: открыть нужный модуль, <kbd>Ctrl + A</kbd>, затем <kbd>Ctrl + C</kbd>.
2. **Разбор модуля** в «Оформляторе»:
   - В инструменте выбрать «Добавить модуль» → «Из текста».
   - Вставить скопированный текст (<kbd>Ctrl + V</kbd>).
   - Нажать «Разобрать».
3. **Расстановка областей**: меню «Действия» → «Расстановка областей».
4. **Генерация документации** для методов (если требуется):
   - Клик правой кнопкой на области «ПрограммныйИнтерфейс» → «Документирование (с настройкой)...» → «Генерировать описание».
   - Проверить описание, при необходимости внести правки и сохранить.
5. **Формирование итогового текста модуля**: «Действия» → «Сформировать тексты модулей...».
6. **Копирование результата** обратно в Конфигуратор.

[Видеодемонстрация](https://vk.com/video-219359576_456239020), где в частности рассматривается внутреннее устройство и добавление компонент к решению.

![Demo GIF](./images/demo.gif)

## Компоненты форматирования

### Расстановка областей
Компонент для автоматической расстановки стандартных областей в модуле и распределения методов по этим областям на основе правил и соглашений. Поддерживает как русский, так и английский синтаксис (#Region/#Область).

### Документирование методов
Инструмент для автоматического создания документации методов с использованием LLM. Позволяет описывать назначение методов, их параметры, возвращаемые значения и другую информацию в формате комментариев к коду. Доступны два варианта использования: бесплатный сервис с ограничениями по объёму текста и количеству запросов, либо подключение через собственные ключи API для функционала без ограничений.

### Оформление тела методов
Компонент для форматирования кода внутри методов с применением произвольных правил оформления, описываемых текстом. Использует LLM для анализа и реформатирования кода согласно заданным правилам. По умолчанию контролируется, что логика кода после оформления в точности совпадает с той, что была до изменения.

### Сортировка методов
Позволяет упорядочить методы внутри модуля или области по алфавиту. Улучшает структурную организацию кода и облегчает навигацию.

### Встатка завершающего комментария
Компонент, добавляющий к завершающим инструкциям процедур и функций (КонецПроцедуры, КонецФункции) комментарии с указанием имени метода (улучшает читаемость кода, особенно при наличии длинных методов).

### Установка инструкций препроцессора
Добавляет стандартные инструкции на весь модуль (Сервер, ТолстыйКлиентОбычноеПриложение, ВнешнееСоединение).

### Генерация текстов модулей
Компонент для формирования итогового текста модуля на основе его внутренней структуры после всех манипуляций форматирования. Объединяет области, комментарии, методы и другие элементы в оформленный текст модуля.

### Анализ модуля
Инструмент для разбора и анализа кода модуля. Позволяет выявлять зависимости между методами, находить используемые переменные и поля, анализировать создаваемые объекты. Обеспечивает глубокое понимание структуры и взаимосвязей в коде. Модуль полезен при разработке инструментария работы с кодом (например, переноса части функционала со всеми связями из одной конфигурации в другую).

## Структура репозитория и установка
- **[build/](https://github.com/vladimir-kharin/1c_formatter/tree/main/build)** — содержит готовый файл расширения (.cfe).  
  Скачайте этот файл и подключите его в свою конфигурацию 1С (начиная с платформы **8.3.14** и выше).
- **[src/](https://github.com/vladimir-kharin/1c_formatter/tree/main/src)** — содержит исходники в формате XML (выгрузка 1С).

Если вам достаточно пользоваться готовым функционалом, просто используйте .cfe из папки `build`.

## Архитектура и принцип работы
Основные модули и компоненты «Оформлятора»:
- **ОМ_Парсер_*** — обработки для токенизации и разбора модуля в АСД.  
  Основаны на проекте [bsparser](https://github.com/lead-tools/bsparser) (автор, если не ошибаюсь: [tsukanov-as](https://github.com/tsukanov-as)).   
  В [моём форке](https://github.com/vladimir-kharin/bsparser) добавлена поддержка современных конструкций встроенного языка 1С, таких как Асинх, Ждать и др.

- **ОМ_ОформляторМодулей** — основная интерфейсная форма, к которой подключаются остальные обработки. В модуле менеджера находится программный интерфейс для разбора, анализа и формирования структур данных модуля.

- **ОМ_Компонент_*** — вспомогательные компоненты, вызываемые из основной формы. Реализуют логику расстановки областей, формирования итогового текста, документирования методов и другие функции.

## Совместимость
- Минимальная версия платформы 1С: **8.3.14**.

## Как внести вклад (Contributing)
Проект открыт для вкладов сообщества. Будем рады вашим идеям и исправлениям:
1. Ознакомьтесь с [CONTRIBUTING.md](CONTRIBUTING.md).
2. Создайте Issue в GitHub с предложением или проблемой.
3. Оформляйте Pull Request с доработками — мы обязательно посмотрим и обсудим.

Если у вас возникли вопросы или предложения, смело пишите в [GitHub Issues](../../issues).

## Контакты
- **Email**: [vladimir.v.harin@gmail.com](mailto:vladimir.v.harin@gmail.com)
- **Telegram**: [@vladimir_kharin](https://t.me/vladimir_kharin)
- **Канал автора**: [https://t.me/prosto_pro1c](https://t.me/prosto_pro1c)

## Лицензия
Проект распространяется по лицензии **MIT**. Подробности см. в файле [LICENSE](LICENSE).