BR 3.6 — Excel-выгрузка продаж в 1С Общепит
Контекст
Бухгалтер Елена ведёт учёт в 1С Общепит. Сейчас ОРП (Отчёт о розничных продажах) она формирует вручную, сверяя POS-чеки и кассовую ленту. Нужна кнопка «Выгрузить продажи в 1С» которая отдаёт xlsx-файл в формате типового загрузчика 1С Общепит.
Полноценный 1С-адаптер (REST/SOAP интеграция, автоматическая публикация документов) — отдельная будущая BR. Сейчас — минимальный xlsx-прототип, чтобы:
- Проверить формат xlsx на пилоте «Кофейня Цифра»
- Дать бухгалтеру возможность загружать выгрузки руками вместо ручного составления
Формат xlsx
| Колонка | Содержание | Источник |
|---|---|---|
| A — Дата | DD.MM.YYYY | orders.created_at (или paid_at если есть) |
| B — Код | Код номенклатуры 1С | sku_1c опции или товара (см. правило резолва) |
| C — Наименование | Название из 1С | name_1c или fallback на name |
| D — Количество | Сумма за день | агрегация по дню+коду |
| E — Цена | Цена за единицу | unit_price (среднее, если разные — берём первое) |
| F — Сумма | Сумма за день | агрегация по дню+коду |
| G — НДС, % | Ставка | из products.vat_rate |
Первая строка — заголовки. Файл: sales-{store_name}-{from}-{to}.xlsx.
Правило резолва кода 1С
Для каждой позиции чека (order_item):
- Если в
order_item.modifiersесть запись сmodifier_option_idу которой в catalog естьsku_1c→ используем код опции + название опции (виртуальный товар, наиболее частый кейс для cifra) - Иначе — если у
products.sku_1cзаполнен → используем код товара + название товара (прямая привязка) - Иначе — строка пропускается, в UI показывается «Пропущено N позиций без 1С» со списком ссылок на товары
Параметры выгрузки (попап)
- Период: «От» / «До» — date picker. По умолчанию: за сегодня (от 00:00 текущего дня до сейчас)
- ТТ: определяется страницей (
store_idиз URL)
Группировка
По дню+номенклатуре:
- Если за один день один и тот же sku_1c продавался N раз — это одна строка с суммированными количеством и суммой
- Цена в такой строке —
unit_priceпервой попавшейся позиции (если разные — для MVP это пограничный случай, бухгалтер увидит и исправит руками)
Изменения
Backend
Catalog Service — bulk internal endpoint для резолва 1С-атрибутов:
POST /api/v1/internal/products/1c-info- Request:
{ product_ids: [uuid], modifier_option_ids: [uuid] } - Response:
{ products: [{id, sku_1c, name_1c, name, vat_rate}], modifier_options: [{id, sku_1c, name_1c, name}] }
Order Service — экспортный сервис + endpoint:
- POI dependency (
poi-ooxml) в pom.xml SalesExportService.exportXlsx(franchiseId, storeId, from, to) → byte[]GET /api/v1/orders/export-1c?store_id={uuid}&from={iso}&to={iso}- Response:
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, attachment
Admin BFF
- Proxy
/api/v1/admin/orders/export-1cс прозрачной передачей body
Admin Web
- На странице ТТ (
StoreViewPage) — кнопка «Выгрузить продажи в 1С» - Модалка с двумя date input (по умолчанию — сегодня) + кнопка «Скачать»
- При клике fetch с
responseType=blob→URL.createObjectURL→<a download>
Не входит
- Авто-загрузка xlsx в 1С (нужен 1С-адаптер — отдельная BR)
- Группировка по часам/сменам
- Колонки Сертификат, Скидка, Возвраты — пока опускаем
- Возвраты (refunds) в этой выгрузке — будущая итерация
Ссылки
- BR 1.17 — поле sku_1c
- BR 1.18 — name_1c
- Интеграция с 1С Общепит