---
name: sap-log-ventas
description: Ejecuta la automatización SAP ZCAR_LOG_VENTAS y descarga el log de ventas diario. Usar cuando el usuario pida "correr sap", "bajar log de ventas", "ejecutar sap_log_ventas" o similares.
metadata:
  author: orodriguez
  version: "1.0.0"
---

# SAP Log Ventas

Corre `scripts/sap_log_ventas.py` desde la raíz del proyecto `cursopr` para exportar el log de ventas diario de SAP (transacción ZCAR_LOG_VENTAS, variante LOG_DIARIO).

## Requisitos previos

- SAP GUI instalado en `C:\Program Files\SAP\FrontEnd\SAPgui\saplogon.exe`
- Archivo `scripts/.env` con `SAP_USER` y `SAP_PASSWORD` (no commitear)
- SAP GUI Scripting habilitado en servidor (`sapgui/user_scripting=TRUE`)

## Ejecución

```bash
python scripts/sap_log_ventas.py
```

Corre siempre desde la raíz del repositorio (`C:\Users\orodriguez\cursopr`).

## Comportamiento esperado

| Salida | Significado |
|--------|-------------|
| `Exportación completada: C:\Users\orodriguez\Documents\logventasdiarioact_YYYYMMDD_HHMMSS.txt` | Archivo generado correctamente |
| `Sin registros encontrados — cerrando SAP.` | La variante no tiene datos para hoy — salida limpia, no es error |
| `Sesión SAP cerrada.` | SAP se cerró correctamente al finalizar |

## Salidas de error comunes

- **`SAP_PASSWORD` no definida**: Crear o verificar `scripts/.env`
- **`saplogon.exe` no encontrado**: Verificar instalación de SAP GUI
- **`No se pudo abrir la conexión 'car productivo google'`**: Verificar que el nombre de la conexión exista en SAP Logon
- **`btn[17]` not found** (variante dialog): SAP quedó en pantalla intermedia de un run previo — cerrar manualmente y reintentar

## Archivo generado

- **Ruta**: `C:\Users\orodriguez\Documents\logventasdiarioact_YYYYMMDD_HHMMSS.txt`
- **Formato**: Texto separado por tabuladores
- **Contenido**: Log de ventas diario según variante LOG_DIARIO

## Notas técnicas

- El script abre SAP Logon automáticamente si no está corriendo
- Usa threading para capturar `btn[45]` (exportar) durante la ventana de ~3s en que es visible
- Cada hilo COM inicializa su propio contexto (`pythoncom.CoInitialize()`)
- Al terminar cierra la sesión SAP con `/nex`
