Защита оплатыПодробнее
- Доработки в рамках пакета бесплатны.
- Если вы не ответите в течение 3 дней после сдачи, работа будет принята автоматически.
При оплате деньги резервируются и переходят сервису, только когда вы примете работу.

Пример результата
Сводный отчёт в Excel из ежемесячных продаж 9 магазинов
Как его запускают
python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO Папка: sales/2026-10, найдено файлов: 9
2026-11-02 09:14:03 INFO shop-01.csv: 1284 строки
2026-11-02 09:14:04 INFO shop-02.xlsx: 967 строк
2026-11-02 09:14:04 WARN shop-07.csv: пропущены 3 строки без цены (строки 88, 412, 913)
2026-11-02 09:14:05 INFO Готово: 10 412 строк -> report-2026-10.xlsx (листы «Продажи» и «Итоги»)
Настройки, а не код
Названия столбцов каждого магазина лежат в settings.ini. Новый магазин или переименованный столбец — это одна строка там:
[columns]
date = Дата, Дата продажи, День
product = Товар, Наименование, Название
quantity = Кол-во, Количество, Шт
price = Цена, Цена за шт
Фрагмент кода
def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
"""Читает файл одного магазина и даёт столбцам названия из отчёта."""
table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
renamed = {}
for name, variants in columns.items():
found = next((c for c in table.columns if c.strip() in variants), None)
if found is None:
raise ReportError(f"{path.name}: нет столбца «{name}» (искали: {', '.join(variants)})")
renamed[found] = name
table = table.rename(columns=renamed)[list(columns)]
table["shop"] = path.stem
return table
Файлы: ZIP-архив с merge_sales.py (310 строк), settings.ini, requirements.txt и README: как установить Python, как запустить скрипт и что значит каждое сообщение в журнале. Клиент запускает скрипт на своём компьютере.
Клиент: небольшая сеть из 9 магазинов канцтоваров. Каждый магазин присылает продажи за месяц в CSV или Excel, и названия столбцов у всех немного разные. Задача: скрипт, который читает все файлы из папки, приводит столбцы к одному виду и сохраняет один отчёт в Excel: все продажи и отдельный лист с итогами по магазинам.
Клиент и все данные вымышлены.
Об услуге
База без регулярных копий в одном неудачном обновлении или переполненном диске от потери заказов, записей или данных клиентов. Этот скрипт, на Bash или Python, как удобнее для вашего сервера, делает полную выгрузку базы MySQL, MariaDB или PostgreSQL штатными средствами (mysqldump или pg_dump), сжимает её, называет по дате и хранит только те копии, которые велят ваши правила, например 7 ежедневных, 4 еженедельных и 6 ежемесячных; старые удаляются только по этим правилам. Пароль базы вписывается в стандартный файл параметров, который вы заполняете на сервере (.my.cnf или .pgpass), а не в код. Ставите и запускаете скрипт вы на своём сервере, мы на него не заходим. Сначала попробуйте его на тестовой копии и восстановите одну копию в пробную базу, чтобы убедиться, что всё работает.
Что входит
- Что вы получитеАрхив ZIP со скриптом, README с пошаговой инструкцией и, начиная со «Стандарта», файл настроек с базами, папками и числом хранимых копий; код также виден на странице заказа.
- Штатные средстваmysqldump или pg_dump, ничего экзотического ставить не нужно
- Ротация по вашим правиламСтарые копии удаляются только так, как вы задали
- Пароль не в кодеВ .my.cnf или .pgpass на вашем сервере
- Сбои заметныНачиная со «Стандарта», неудачная или пустая выгрузка попадает в журнал и не считается копией
- Понятный кодС комментариями, базу легко добавить потом
Порядок работы
- 1ЗадачаВы описываете сервер, базы и сколько копий хранить
- 2КодМы пишем скрипт и инструкцию по установке
- 3ПроверкаВы запускаете его на тестовой копии и восстанавливаете одну копию в пробную базу
- 4ПравкиВы просите правки в рамках пакета и присылаете текст ошибки, если она есть
Что нужно от вас
База (MySQL, MariaDB или PostgreSQL) и её версия, система сервера (например, Ubuntu 22.04) и можно ли там ставить пакеты, какого размера база, где хранить копии и сколько там места. Ваши правила ротации: сколько ежедневных, еженедельных и ежемесячных копий хранить. Для «Премиума» второе место для копий и адрес для писем о сбоях. Никогда не присылайте пароли и доступы к серверу.
В брифе мы спросим:
- Какая база и какого размера?
- На каком сервере?
- Сколько копий хранить?
- Куда класть копии?
- Bash или Python?
Сравнение пакетов
| Пакеты | ЭкономОдна база16 $ | СтандартКопии с настройками33 $ | БизнесПрограмма для копий67 $ |
|---|---|---|---|
| Срок | 1 день | 2 дня | 3 дня |
| Доработки | 1 | 2 | 3 |
| Код | до 150 строк | до 400 строк | до 1000 строк |
| Файлов кода | 1 | до 3 | до 8 |
| Файл настроек | Нет | Да | Да |
| Понятные ошибки и журнал работы | Нет | Да | Да |
| Параметры запуска и инструкция для запуска по расписанию | Нет | Нет | Да |
| Инструкция по установке и запуску (README) | Да | Да | Да |
| Язык | Bash или Python | Bash или Python | Bash или Python |
| Заказать Эконом | Заказать Стандарт | Заказать Бизнес |
Защита оплаты
Вы оплачиваете заказ сразу, но деньги переходят сервису только за принятую работу.
- Фиксированная ценаЦена пакета не меняется после оплаты.
- Деньги резервируютсяПри оплате сумма только резервируется. Сервису она переходит, когда вы примете работу.
- Проверка перед сдачейКаждый результат проходит проверку качества, прежде чем попасть к вам, и вы видите его на странице заказа до приёмки.
- Бесплатные доработкиПросите изменения в рамках брифа столько раз, сколько предусмотрено пакетом.
- Приёмка через 3 дняЕсли в течение 3 дней после сдачи вы не примете работу и не попросите изменений, она будет принята автоматически. Если после сдачи вы напишете в чат заказа, заказ подождёт; ответив, мы можем начать отсчёт 3 дней заново и сообщим об этом в чате.
- Переделка или полный возвратЕсли результат не соответствует брифу и доработки не помогли или срок превышен больше чем вдвое, напишите в чат заказа: мы переделаем работу или полностью вернём деньги.
Вопросы и ответы
Он будет удалять старые копии?
Только по вашим правилам, например хранить 7 ежедневных и 4 еженедельные копии, и только в папке, куда сам пишет. Пока правил нет, он хранит всё.
Можно хранить копии не на сервере?
В «Премиуме» каждая копия отправляется на второй диск или в хранилище, которое у вас уже есть, через его собственную утилиту и с вашими ключами, которые вы сами вписываете в её настройки.
Сайт блокируется на время копии?
Для таблиц InnoDB в MySQL и для PostgreSQL выгрузка идёт без остановки сайта. Очень большие базы всё же могут его притормозить, поэтому запускайте копию в спокойные часы.
Вы установите его на мой сервер?
Нет. На ваш сервер мы не заходим. В README показан каждый шаг, от копирования скрипта до добавления в cron («Премиум»).
Не нашли ответ?