Как мы автоматизировали расчёт шкафов автоматики
Как мы автоматизировали расчёт шкафов автоматики
Проблема
Каждый раз, когда монтажная организация или EPC-генподрядчик запрашивал коммерческое предложение на шкаф управления котлом, мы тратили 2 дня на ручной расчёт:
- Инженер открывал спецификацию из Eplan Platform 2025
- Вручную переносил номенклатуру в Excel
- Подставлял актуальные цены из 1С
- Считал сроки сборки исходя из количества компонентов
- Формировал PDF коммерческого предложения
Результат: ошибки при переносе данных, срывы сроков согласования, недовольство заказчиков непрозрачностью цены.
Решение
Мы разработали модуль автоматического парсинга XML из Eplan и расчёта стоимости по актуальной номенклатуре. Теперь процесс выглядит так:
- Инженер экспортирует спецификацию из Eplan в XML
- Загружает файл в калькулятор
- Система мгновенно возвращает:
- Разобранную спецификацию (артикул, наименование, количество, цена)
- Общую стоимость
- Прогнозируемый срок сборки
- Готовое КП в PDF
Результат: время расчёта сократилось с 2 дней до 5 минут. Ошибки спецификации исключены. Прозрачность ценообразования для заказчиков.
Техническая реализация
Парсинг Eplan XML
Eplan Platform 2025 позволяет экспортировать спецификацию в XML-формат. Структура файла содержит узлы <Component> с атрибутами:
<Component>
<Article>123456</Article>
<Name>Автоматический выключатель 3P 16A</Name>
<Quantity>10</Quantity>
<Price>1500.00</Price>
</Component>
Парсер на Python (FastAPI) читает XML, извлекает компоненты и маппит их на внутреннюю модель:
from xml.etree import ElementTree as ET
from pydantic import BaseModel
class Component(BaseModel):
article: str
name: str
quantity: int
price: float
def parse_eplan_spec(xml_content: str) -> list[Component]:
root = ET.fromstring(xml_content)
components = []
for component in root.findall('.//Component'):
components.append(Component(
article=component.find('Article').text,
name=component.find('Name').text,
quantity=int(component.find('Quantity').text),
price=float(component.find('Price').text)
))
return components
Расчёт стоимости и сроков
Логика расчёта учитывает:
- Стоимость компонентов: сумма
quantity * priceдля каждой позиции - Срок сборки: базовое время (3 дня) + 1 день на каждые 50 компонентов
- Наценка: 15% на логистику и упаковку
def calculate_estimate(components: list[Component]) -> dict:
total_price = sum(c.quantity * c.price for c in components)
total_quantity = sum(c.quantity for c in components)
base_days = 3
additional_days = total_quantity // 50
estimated_days = base_days + additional_days
final_price = total_price * 1.15
return {
"total_price": round(final_price, 2),
"components_count": len(components),
"estimated_days": estimated_days
}
Интеграция с FastAPI
API endpoint принимает XML-файл и возвращает расчёт:
from fastapi import APIRouter, UploadFile, File
from app.services.calculator import parse_eplan_spec, calculate_estimate
router = APIRouter()
@router.post("/api/calculate")
async def calculate_specification(file: UploadFile = File(...)):
xml_content = await file.read()
components = parse_eplan_spec(xml_content.decode('utf-8'))
estimate = calculate_estimate(components)
return {
"total_price": estimate["total_price"],
"components": [c.dict() for c in components],
"estimated_days": estimate["estimated_days"]
}
Результат в цифрах
| Метрика | До | После | Улучшение | |---------|-----|-------|-----------| | Время расчёта КП | 2 дня | 5 минут | 99.7% | | Ошибки спецификации | 3-5 на КП | 0 | 100% | | Прозрачность цены | Частичная | Полная | — | | Удовлетворённость заказчиков | 6/10 | 9/10 | +50% |
Выводы
- Автоматизация рутинных расчётов — это не просто экономия времени, это устранение человеческого фактора и повышение качества.
- Интеграция с Eplan через XML — стандартный и надёжный способ обмена данными без необходимости писать плагины.
- Прозрачность ценообразования — ключевой фактор доверия для монтажных организаций и EPC-генподрядчиков.
Что дальше?
Сейчас мы работаем над расширением модуля:
- Поддержка импорта из других САПР (AutoCAD Electrical, SolidWorks Electrical)
- Интеграция с 1С для автоматического обновления цен
- Генерация КП в формате Word/PDF с логотипом заказчика
Если вы столкнулись с похожей проблемой ручного расчёта спецификаций — напишите в @KachanAI. Обсудим, как это можно автоматизировать в вашей компании.