Исправлены все блокирующие ошибки загрузки XML в 1С:
1. Очистка GUID от query-параметров (?expand=...)
- Номенклатура: убран хвост ?expand=product.uom
- Единицы измерения: убран хвост из href
- Использован .split('?')[0] для получения чистого GUID
2. Убраны лишние пробелы из номера документа
- Заменен .ljust(11) на .strip()
- Предотвращение дублей/расхождений
3. Добавлены стандартные UUID для классификаторов
- Единица измерения 'Штука (796)': cdf130e2-63a8-11e8-80dd-0050569f5448
- Страна 'Россия (643)': 67700c1b-63a8-11e8-80dd-0050569f5448
4. Детерминированный UUID для договора
- Генерация на основе контрагента и организации
- Предотвращение ошибки 'Недопустимое значение параметра'
5. Удален дублирующий import uuid
Все изменения проверены по стандарту EnterpriseData 1.20
Makefile (20+ commands):
Development Docker Commands:
- make build: Build Docker image
- make up: Start containers
- make down: Stop containers
- make logs: Show logs
- make shell: Open bot shell
- make ps: Show container status
Production Docker Commands:
- make prod-build: Build and publish to registry
- make prod-up: Deploy production stack
- make prod-down: Stop production
- make prod-logs: Production logs
- make prod-ps: Production status
- make prod-restart: Restart services
- make prod-pull: Update images
- make prod-backup: Backup to /var/backups
Development Commands:
- make venv: Create virtual environment
- make install: Install dependencies
- make run: Run bot locally
- make test: Run tests
- make lint: Run linter
- make clean: Clean cache and temp files
- make backup: Backup data directory
Utility:
- make help: Show all commands with descriptions
- Add Dockerfile with Python 3.11-slim base
- Add docker-compose.yml for local development
- Add .dockerignore to optimize build context
- Add start/stop scripts for Linux and Windows
- Add .env.example template
- Configure volumes for data, logs, temp_documents
- Add healthcheck with 30s interval
- Resource limits: 0.5 CPU, 512MB RAM
- Implement per-user МойСклад credentials storage
- Add Fernet encryption for passwords (AES-128)
- Add UserManager module for credential management
- Add /logout and /change_credentials commands
- Update bot.py with AUTH_LOGIN/AUTH_PASSWORD states
- Each user works with their own МойСклад account
- Credentials stored in encrypted users.json