Если вы инженер-сметчик, то наверняка знаете, что такое ежедневная работа с огромными таблицами и бесконечными спецификациями. Кто-то, возможно, уже смирился с монотонностью, а кто-то разработал свои лайфхаки для ускорения обработки данных. Но сегодня расскажем о новом подходе, который помог нам упростить процесс составления сметы на монтаж системы вентиляции.
С чего все начиналось: с типичного дня сметчика
Однажды мне поставили задачу — подготовить сметы для нового объекта, включая раздел вентиляции. Как многие сметчики знают, вентиляция — это один из самых трудоемких разделов. Я выделила на него 4 рабочих дня, но когда увидела спецификацию, моё спокойствие испарилось: 45 листов А4 (20 позиций на каждом). Итого 900 позиций для обработки.
Если на каждую позицию тратить по 3 минуты, то общее время составит 2700 минут, или 45 часов. Это значительно больше, чем я планировала.
Что не так с вентиляцией: почему этот раздел такой «неудобный» для сметчиков
Основная сложность заключается в расчете стоимости монтажа фасонных частей воздуховодов — переходов, отводов, заглушек, тройников и других элементов. В моей спецификации почти половина из 900 позиций была именно такими.
Объем монтажа фасонных частей определяется площадью их поверхности, которую сметчики обычно рассчитывают с помощью онлайн-калькуляторов, а затем вручную переносят в сметную программу. Это долгий и утомительный процесс, который я называю «сценарий №1» — традиционный ручной способ.

Нескучная автоматизация: как успеть, когда уже все горит
У проекта было два этажа. Смета на первый этаж была выполнена вручную, и на это ушло около 20 часов. Учитывая сжатые сроки, мы решили автоматизировать процесс для второго этажа. Идея заключалась в создании шаблона в Excel, который можно было бы легко импортировать в программу ГРАНД-смета.

Для реализации мы выбрали Python и несколько библиотек:
pandas — для обработки табличных данных;
asyncio — для асинхронного выполнения задач;
re — для работы с регулярными выражениями;
math — для математических расчетов;
pyppeteer — для автоматизации взаимодействия с онлайн-калькуляторами.
Общая концепция работы программы заключается в том, чтобы автоматически обрабатывать спецификации, объединять данные из нескольких источников (файлов), рассчитывать площади фасонных элементов (посредством формул, онлайн-калькулятора) и формировать выходной файл, пригодный для загрузки и дальнейшей работы в ПО ГРАНД-смета.
Обработка исходных файлов
Посредством библиотеки pandas исходные документы загружаются в DataFrame.

Далее создается маска для строк в первом столбце df_fer, которые начинаются с подстроки "ФЕР", после чего все значения в этом столбце, не входящие в маску, заполняются предыдущим значением, начинающимся с "ФЕР", с помощью метода forward fill. Исходные строки, по которым была задана маска, удаляются. В итоге получается df, в котором каждому наименованию соответствует свой код ФЕР.

В df_prices удаляются строки с пропусками в колонках 3 (наименование) и 11 (цена).

На следующем шаге данные из df_fer и df_prices объединяются по столбцам с наименованиями, при этом удаляется дублированная колонка. В колонке с ценами выполняется форматирование значений (2 знака после запятой), а так же к каждому значению добавляется строка "/им" (“им” - переменная индекса на материал в ПО ГРАНД-смета для базисно-индексного методае).
В результате создается словарь, где ключами являются значения из колонки с наименованием, а значениями – списки с кодом ФЕР и отформатированной ценой.

Пример элемента словаря: {‘Воздуховод гибкий теплоизолированный Sonodec 25 ⌀102’:['ФЕР20-01-001-01', '798.53/им']}.
Функции расчета площадей фасонных элементов
Расчет площади каждого фасонного элемента оформлен как отдельная функция. Для простых формул, например, расчета площади круглого воздуховода, используется стандартная математическая формула.

Для более сложных расчетов используются функции, которые через библиотеку pyppeteer взаимодействуют с онлайн-калькулятором. В таких случаях функция представляет собой список словарей, где каждый словарь – это селектор веб-страницы с его значением.

Для работы с онлайн-калькуляторами используется несколько общих асинхронных функций, которые управляют процессом заполнения полей и получения результатов.
Функция fill_input:
- ожидает доступность поля с определенным селектором;
- очищает поле;
- вводит в него значение.
Функция get_result:
- ожидание доступности элемента с результатом расчета;
- извлечение текста результата;
- округление и возврат рассчитанного значения.

Функция main_calculation управляет браузером, открывает веб-страницу, заполняет необходимые поля и получает результат.

Также используется вспомогательная функция create_chunk_df, которая по сути создает фрагмент целевого файла с необходимым форматом.

Формирование целевого файла
Для выбора правильного калькулятора необходимо идентифицировать позиции спецификации. Для этого был создан словарь содержащий в себе условия.

Ключи – строки которые служат для обозначения разных типов изделий или характеристик.
Значения – лямбда-функции, которые принимают строку и возвращают True или False в зависимости от того, соответствует ли строка условиям.
Функция make_tasks проходит по строкам df_template, извлекая из них наименования и количества материалов. Для каждого наименования проверяются условия, указанные в condition_dict, и в зависимости от их выполнения создаются соответствующие задачи для вычислений, которые добавляются в список tasks.

Функция process_tasks реализует асинхронную обработку нескольких задач, используя возможности библиотеки asyncio для параллельного выполнения.

Основная программа
Функция main() загружает данные из трех Excel файлов, создает словарь с ФЕРами и ценой, создает асинхронные задачи и выполняет их параллельно. Целевые фрагменты, полученные как результаты от выполнения задач объединяются в один DataFrame и сохраняются в новый Excel файл.

Что в итоге?
Полученный файл в формате Excel, представленный на рисунке, – отличный шаблон для вставки в программный комплекс ГРАНД-смета для автоматизированного расчета сметы.

Автоматизация рутинных процессов — это не просто тренд, а необходимость для современных сметчиков. Наш опыт показал, что даже небольшие изменения в подходе могут значительно упростить жизнь и повысить эффективность работы.
Параметр | Ручной расчет | Автоматизированный расчет |
Время выполнения | 20 часов | 1 час |
Вероятность ошибок | 5-10% | 0,1-0,5% |
Удобство | Низкое | Высокое |
Если вы тоже сталкиваетесь с подобными трудностями, попробуйте найти способы автоматизации. Возможно, ваш следующий проект станет намного проще и быстрее! Удачи в работе!
Автор: Татьяна Ляпина, инженер-сметчик