# 🚀 1C Contract Generator

**Система генерации контрактов метаданных 1С**

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

## 📋 Возможности

- 🎯 **Контракты метаданных** - структурированное описание объектов (справочники, документы)
- 📋 **Контракты форм** - архитектура форм с элементами управления
- 🔧 **Контракты модулей** - описание модулей объектов
- 🔍 **Анализ и валидация** - проверка качества контрактов
- 📊 **Статистика и отчеты** - анализ структуры конфигурации
- 🚀 **Интерактивный режим** - пошаговый мастер с подсказками
- ⚡ **Командный режим** - автоматизация через аргументы

## 🏗️ Структура проекта

```
1c-contract-generator/
├── src/                                    # Исходный код
│   ├── core/                               # Основные компоненты
│   │   ├── launcher.py                     # 🚀 Единый запускатор
│   │   ├── metadata_generator.py           # 📋 Генератор контрактов метаданных
│   │   ├── form_generator.py               # 📝 Генератор контрактов форм
│   │   └── module_generator.py             # 🔧 Генератор контрактов модулей
│   ├── utils/                              # Утилиты
│   │   ├── analyzer.py                     # 📊 Анализ контрактов
│   │   ├── validator.py                    # ✅ Валидация контрактов
│   │   └── reporter.py                     # 📄 Генерация отчетов
│   └── parsers/                            # Парсеры
│       ├── xml_parser.py                   # 📄 Парсер XML файлов
│       ├── bsl_parser.py                   # 🔤 Парсер BSL модулей
│       └── report_parser.py                # 📋 Парсер текстовых отчетов
├── scripts/                                # Скрипты запуска
│   ├── generate.py                         # 🚀 Главный скрипт
│   ├── analyze.py                          # 📊 Скрипт анализа
│   └── test.py                             # 🧪 Скрипт тестирования
├── tests/                                  # Тесты
├── docs/                                   # Документация
├── examples/                               # Примеры
└── README.md                               # Эта документация
```

## 🚀 Быстрый старт

### Требования

```bash
Python 3.7+
```

### Установка

```bash
# Клонируйте репозиторий
git clone <repository-url>
cd 1c-contract-generator

# Или скопируйте папку в ваш проект
cp -r 1c-contract-generator /path/to/your/project/
```

### Использование

#### Интерактивный режим (рекомендуется)

```bash
python scripts/generate.py
```

Запустится пошаговый мастер:
1. 📁 Выбор директории конфигурации
2. 📄 Выбор файла отчета
3. 📂 Выбор выходной директории
4. 🔧 Выбор компонентов для генерации
5. 🎯 Подтверждение и запуск

#### Командный режим

```bash
python scripts/generate.py --auto \
  --conf-dir conf_files \
  --report-path conf_reports/FullReport.txt
```

#### Анализ контрактов

```bash
# Статистика
python scripts/analyze.py --action stats

# Поиск
python scripts/analyze.py --action search --query "ДокументыПредприятия"

# Валидация
python scripts/analyze.py --action validate

# Экспорт отчета
python scripts/analyze.py --action report --output analysis.md
```

#### Тестирование

```bash
python scripts/test.py
```

## 📊 Структура контрактов

### Контракт метаданных

```json
{
  "name": "Справочники.ДокументыПредприятия",
  "type": "Справочник",
  "attributes": [
    {
      "name": "Наименование",
      "type": "Строка"
    }
  ],
  "tabular_sections": {
    "Состав": {
      "name": "Состав",
      "attributes": [
        {
          "name": "Номенклатура",
          "type": "СправочникСсылка.Номенклатура"
        }
      ]
    }
  }
}
```

### Контракт формы

```json
{
  "owner": "Справочник.ДокументыПредприятия",
  "name": "ФормаОбъекта",
  "context": ["НаКлиенте", "НаСервере"],
  "attributes": [
    {
      "name": "Объект",
      "type": "СправочникОбъект.ДокументыПредприятия"
    }
  ],
  "controls": [
    {
      "name": "Наименование",
      "type": "ПолеВвода"
    }
  ],
  "commands": [
    {
      "name": "ЗаписатьИЗакрыть",
      "action": "ЗаписатьИЗакрытьНаКлиенте"
    }
  ]
}
```

## 🎯 Преимущества

### ✅ **Чистая архитектура**
- Логичная организация файлов
- Модульная структура
- Разделение ответственности

### ✅ **Простота использования**
- Интерактивный мастер
- Простые команды запуска
- Автоматическое определение путей

### ✅ **Профессиональность**
- Стандартная структура Python проекта
- Подробная документация
- Полное тестирование

### ✅ **Автономность**
- Не требует установки зависимостей
- Работает на любой платформе
- Может быть скопирован в любой проект

## 🔧 Настройка

### Переменные окружения

```bash
# Для Windows (кодировка)
set PYTHONIOENCODING=utf-8

# Для Linux/macOS
export PYTHONIOENCODING=utf-8
```

### Структура входных данных

```
project/
├── conf_files/                    # Файлы конфигурации
│   ├── Catalogs/
│   ├── Documents/
│   └── Forms/
├── conf_reports/                  # Отчеты конфигурации
│   └── FullReport.txt
└── 1c-contract-generator/         # Система генерации
```

## 📚 Документация

- [📖 Руководство по использованию](docs/USAGE.md)
- [🔧 API документация](docs/API.md)
- [💡 Примеры использования](docs/EXAMPLES.md)

## 🧪 Тестирование

```bash
# Запуск всех тестов
python scripts/test.py

# Запуск конкретных тестов
python -m pytest tests/ -v

# Запуск с покрытием
python -m pytest tests/ --cov=src
```

## 🚨 Устранение проблем

### Проблема: Кодировка в Windows
```bash
# Решение: Установить переменную окружения
set PYTHONIOENCODING=utf-8
python scripts/generate.py
```

### Проблема: Пути к файлам
```bash
# Решение: Использовать абсолютные пути
python scripts/generate.py --auto \
  --conf-dir /absolute/path/to/conf_files \
  --report-path /absolute/path/to/report.txt
```

### Проблема: Отсутствие файлов
```bash
# Решение: Проверить структуру проекта
ls -la
python scripts/test.py
```

## 🤝 Вклад в проект

1. Форкните репозиторий
2. Создайте ветку для новой функции
3. Внесите изменения
4. Добавьте тесты
5. Создайте Pull Request

## 📄 Лицензия

MIT License - см. файл [LICENSE](LICENSE) для подробностей.

## 🆘 Поддержка

При возникновении проблем:

1. Запустите тесты: `python scripts/test.py`
2. Проверьте документацию в папке `docs/`
3. Создайте Issue в репозитории

---

**Удачной работы с контрактами метаданных! 🚀** 