Описание
Разработана внешняя система аналитики закупок для 1С на базе FastAPI + PostgreSQL + Docker с поддержкой локального AI через Ollama.
Решение предназначено для:
— сетей магазинов;
— торговых компаний;
— оптовых баз;
— компаний с большим ассортиментом товаров.
Система анализирует продажи, остатки и сезонность, после чего формирует рекомендации по закупке и автоматически выявляет проблемные позиции.

Возможности системы
Рекомендации по закупке
Система автоматически рассчитывает:
— средние продажи;
— запас в днях;
— рекомендуемый объём закупки;
— риск дефицита;
— сезонный коэффициент;
— целевой запас.
Рекомендации рассчитываются на основе фактических продаж и остатков.

ABC / XYZ анализ
Поддерживается:
— ABC-анализ по выручке;
— XYZ-анализ по стабильности спроса;
— комбинированный ABC/XYZ анализ.
Это позволяет:
— выделять ключевые товары;
— находить нестабильные позиции;
— оптимизировать ассортимент.

Неликвиды и излишки
Система автоматически выявляет:
— товары без продаж;
— избыточные остатки;
— медленно оборачиваемые позиции.
Это помогает снижать замороженные остатки и оптимизировать закупки.

Анализ сезонности
Выполняется анализ сезонного роста и падения спроса.
Система определяет:
— сезонные пики;
— снижение спроса;
— изменение коэффициента сезонности.

AI-пояснения через Ollama
Дополнительно подключён локальный AI через Ollama.
AI умеет:
— объяснять причины рекомендаций;
— анализировать риск дефицита;
— объяснять влияние сезонности;
— давать краткие комментарии по каждой позиции.
AI работает локально без облачных сервисов и без передачи данных наружу.

Архитектура решения
Система построена как внешний аналитический сервис:
1С → FastAPI → PostgreSQL → AI (Ollama)
Преимущества архитектуры:
— высокая скорость работы;
— возможность масштабирования;
— независимость от платформы 1С;
— возможность подключения AI;
— работа через Docker.

Производительность
Для ускорения работы реализовано:
— кэширование тяжёлых расчётов;
— быстрые аналитические endpoint’ы;
— принудительное обновление кэша после загрузки данных.
Даже при больших объёмах данных отчёты открываются быстро.
Технологии
— 1С 8.3
— FastAPI
— PostgreSQL
— Docker
— Ollama
— REST API
— Python
Возможности развития
Планируется:
— прогнозирование спроса;
— multi-tenant SaaS версия;
— web-интерфейс;
— автоматические уведомления;
— AI-анализ динамики продаж;
— интеграция с BI-системами.
Установка приложения на Linux-сервер
Версия поставляется в виде Docker Compose проекта и может быть быстро развернута на отдельном Linux-сервере.
Требования
— Ubuntu 22.04 / 24.04
— Docker
— Docker Compose
— доступ к интернету для загрузки контейнеров
Быстрая установка
1. Установка Docker
sudo apt update
sudo apt install -y git docker.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
2. Загрузка demo-версии
git clone https://github.com/AldarKose/forecast-system-demo.git
cd forecast-system-demo
3. Запуск системы
sudo docker compose -f docker-compose.demo.yml up -d
После запуска API будет доступен по адресу:
http://IP_СЕРВЕРА:8000
Swagger-документация API:
http://IP_СЕРВЕРА:8000/docs
Подключение к 1С
В обработке 1С необходимо указать:
IP_СЕРВЕРА
Порт сервиса:
8000
Обмен выполняется по HTTP REST API.
В расширении есть процедуры выгрузки в систему данных о продажах(ВыгрузитьПродажиВДатасет) и остатках(ВыгрузитьОстаткиДатасет). Необходимо первоначально выгрузить за нужный вам период, далее выгружать ежедневно регламентным заданием. ВыгрузитьНоменклатуруНаСервере() выгружает дополнительные реквизиты номенклатуры.
&НаСервере
Процедура ВыгрузитьПродажиВДатасет(
ДатаНачала,
ДатаОкончания
) Экспорт
ИдентификаторЗагрузки = Строка(Новый УникальныйИдентификатор);
ЗаписатьЛогВФайл(ИдентификаторЗагрузки, "Старт выгрузки продаж");
РазмерПакета = 1000; ВсегоПакетов = 0;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ) КАК Дата,
...
...
СтрокаJSON = Новый Структура;
СтрокаJSON.Вставить("store_id", Строка(Выборка.МагазинGUID));
СтрокаJSON.Вставить("store_name", Строка(Выборка.Магазин));
СтрокаJSON.Вставить("warehouse_id", Строка(Выборка.СкладGUID));
СтрокаJSON.Вставить("warehouse_name", Строка(Выборка.Склад));
СтрокаJSON.Вставить("sku", Строка(Выборка.НоменклатураGUID));
СтрокаJSON.Вставить("sku_name", Строка(Выборка.Номенклатура));
СтрокаJSON.Вставить("characteristic_id", Строка(Выборка.ХарактеристикаGUID));
СтрокаJSON.Вставить("characteristic_name", Строка(Выборка.Характеристика));
СтрокаJSON.Вставить("date", Формат(Выборка.Дата, "ДФ=yyyy-MM-dd"));
СтрокаJSON.Вставить("qty", Выборка.Количество);
МассивСтрок.Добавить(СтрокаJSON);
Если МассивСтрок.Количество() >= РазмерПакета Тогда
ОтправитьПакетПродаж(МассивСтрок);
МассивСтрок = Новый Массив;
ВсегоПакетов = ВсегоПакетов+1;
ИдентификаторЗагрузки = Строка(Новый УникальныйИдентификатор);
ЗаписатьЛогВФайл(
ИдентификаторЗагрузки,
"Отправлен пакет " + Строка(ВсегоПакетов)
+ ", строк в пакете: " + Строка(МассивСтрок.Количество())
+ ", всего строк: " + Строка(МассивСтрок.Количество())
);
КонецЕсли;
КонецЦикла;
Если МассивСтрок.Количество() > 0 Тогда
ОтправитьПакетПродаж(МассивСтрок);
КонецЕсли;
ИдентификаторЗагрузки = Строка(Новый УникальныйИдентификатор);
ЗаписатьЛогВФайл(
ИдентификаторЗагрузки,
"Завершено. Пакетов: " + Строка(ВсегоПакетов)
+ ", строк: " + Строка(МассивСтрок.Количество())
);
КонецПроцедуры
Опционально: локальный AI через Ollama
Для AI-пояснений можно подключить локальную LLM-модель через Ollama.
Установка Ollama
curl -fsSL https://ollama.com/install.sh | sh
Загрузка модели
ollama pull qwen2.5:7b-instruct
Разрешить доступ Docker-контейнера к Ollama
sudo mkdir -p /etc/systemd/system/ollama.service.d
cat <<'EOF' | sudo tee /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF
sudo systemctl daemon-reload
sudo systemctl restart ollama
Проверка Ollama
curl http://127.0.0.1:11434/api/tags
После этого AI-пояснения станут доступны в обработке 1С.
Тестировалось на amd 5 7500f 16Gb 254 SSD
для этого установил ограничения(код открыт)
— загрузка первоначальных данных 3-4 часа
— до 1000 строк аналитики до 15 сек;
— ограничение периода анализа;
— AI-пояснения только по одной выбранной позиции до 30 сек;
Проверено на следующих конфигурациях и релизах:
- Управление нашей фирмой, редакция 3.0, релизы 3.0.12.261
Вступайте в нашу телеграмм-группу Инфостарт