Automatización¶
Esta guía le enseña a automatizar xls2sage50 usando tareas programadas y scripts.
Tareas Programadas de Windows¶
Crear una Tarea Básica¶
- Abra el Programador de Tareas (Task Scheduler)
- Presione
Windows + R - Escriba
taskschd.msc -
Presione Enter
-
Haga clic en "Crear tarea básica"
-
Configure la tarea:
Pestaña - General:
- Nombre: Importación Clientes Diaria
- Descripción: Importa clientes automáticamente todos los días
- Ejecutar tanto si el usuario inició sesión como si no
Pestaña - Desencadenadores: - Nuevo: Diariamente - Hora: 02:00:00 AM
Pestaña - Acciones:
- Acción: Iniciar un programa
- Programa: python
- Argumentos: "C:\ruta\a\xls2sage50.py" run --template=Clientes_Mensual --file="C:\datos\clientes.xlsx"
- Iniciar en: C:\ruta\a\
- Haga clic en "Finalizar"
Crear una Tarea Avanzada¶
Para configuraciones más avanzadas:
- Abra el Programador de Tareas
- Haga clic en "Crear tarea" (no básica)
- Configure las pestañas:
| Pestaña | Configuración |
|---|---|
| General | Nombre, descripción, usuario de ejecución |
| Desencadenadores | Cuándo ejecutar (diario, semanal, al inicio) |
| Acciones | Qué programa ejecutar con parámetros |
| Condiciones | Solo si está conectado a red, si inactivo |
| Configuración | Opciones de manejo de fallos |
!!! tip "Condiciones de Ejecución**
Configure condiciones como "Ejecutar solo si el equipo está inactivo durante X minutos" para no interferir con el trabajo del usuario.
Scripts por Lotes (Batch)¶
Script Básico¶
@echo off
REM ============================================================================
REM Importación de Clientes - Script Básico
REM ============================================================================
setlocal
REM Configuración
set APP_PATH=C:\xls2sage50
set PYTHON_EXE=python
set TEMPLATE=Clientes_Mensual
set INPUT_FILE=C:\Datos\clientes_%date:~-4,4%%date:~-7,2%%date:~-10,2%.xlsx
set LOG_FILE=C:\Logs\importacion_%date:~-4,4%%date:~-7,2%%date:~-10,2%.log
REM Ejecutar importación
echo [%date% %time%] Iniciando importación... >> %LOG_FILE%
"%PYTHON_EXE%" "%APP_PATH%\xls2sage50.py" run ^
--template=%TEMPLATE% ^
--file="%INPUT_FILE%" ^
--verbose >> %LOG_FILE% 2>&1
REM Verificar resultado
if %ERRORLEVEL% EQU 0 (
echo [%date% %time%] Importación exitosa >> %LOG_FILE%
exit /b 0
) else (
echo [%date% %time%] Error en importación: %ERRORLEVEL% >> %LOG_FILE%
exit /b %ERRORLEVEL%
)
endlocal
Script con Notificaciones¶
@echo off
REM Script con notificación por email
set APP_PATH=C:\xls2sage50
set TEMPLATE=Clientes_Mensual
set INPUT_FILE=C:\Datos\clientes.xlsx
set LOG_FILE=C:\Logs\importacion.log
set EMAIL=admin@empresa.com
REM Ejecutar importación
python "%APP_PATH%\xls2sage50.py" run --template=%TEMPLATE% --file="%INPUT_FILE%"
REM Verificar resultado
if %ERRORLEVEL% EQU 0 (
blat %LOG_FILE% -to %EMAIL% -subject "Importacion exitosa" -body "La importacion se completo correctamente."
) else (
blat %LOG_FILE% -to %EMAIL% -subject "ERROR en importacion" -body "Ocurrio un error durante la importacion."
)
Script con Manejo de Errores¶
@echo off
setlocal enabledelayedexpansion
REM Función para manejar errores
:handle_error
echo [%date% %time%] ERROR: %~1 >> %LOG_FILE%
echo [%date% %time%] ERROR: %~1
REM Enviar notificación
goto :eof
REM Principal
set LOG_FILE=C:\Logs\importacion.log"
echo [%date% %time%] Iniciando script >> %LOG_FILE%
REM Verificar que existe el archivo
if not exist "%INPUT_FILE%" (
call :handle_error "Archivo no encontrado: %INPUT_FILE%"
exit /b 1
)
REM Verificar que existe la plantilla
python "%APP_PATH%\xls2sage50.py" info --template=%TEMPLATE% >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
call :handle_error "Plantilla no encontrada: %TEMPLATE%"
exit /b 1
)
REM Ejecutar importación
python "%APP_PATH%\xls2sage50.py" run --template=%TEMPLATE% --file="%INPUT_FILE%"
if %ERRORLEVEL% EQU 0 (
echo [%date% %time%] Importacion exitosa >> %LOG_FILE%
) else (
call :handle_error "Error en importacion (codigo %ERRORLEVEL%)"
exit /b %ERRORLEVEL%
)
endlocal
Scripts PowerShell¶
Script Básico de PowerShell¶
# ============================================================================
# Importación de Clientes - PowerShell
# ============================================================================
# Configuración
$AppPath = "C:\xls2sage50"
$Template = "Clientes_Mensual"
$InputFile = "C:\Datos\clientes.xlsx"
$LogFile = "C:\Logs\importacion_$(Get-Date -Format 'yyyyMMdd').log"
# Función para escribir log
function Write-Log {
param([string]$Message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp $Message" | Out-File -FilePath $LogFile -Append
Write-Host $Message
}
# Iniciar
Write-Log "Iniciando importación..."
# Verificar archivo
if (-not (Test-Path $InputFile)) {
Write-Log "ERROR: Archivo no encontrado: $InputFile"
exit 1
}
# Ejecutar importación
$process = Start-Process -FilePath "python" `
-ArgumentList "`"$AppPath\xls2sage50.py`" run --template=$Template --file=`"$InputFile`"" `
-Wait -PassThru -NoNewWindow
# Verificar resultado
if ($process.ExitCode -eq 0) {
Write-Log "Importación exitosa"
exit 0
} else {
Write-Log "ERROR: Importación falló (código $($process.ExitCode))"
exit $process.ExitCode
}
Script con Envío de Email (PowerShell)¶
# Script con envío de email usando Gmail
$EmailFrom = "xls2sage50@empresa.com"
$EmailTo = "admin@empresa.com"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = 587
$Username = "usuario@gmail.com"
$Password = ConvertTo-SecureString "contraseña" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential($Username, $Password)
$Subject = "Reporte de Importación"
$Body = Get-Content "C:\Logs\importacion.log" -Raw
Send-MailMessage -From $EmailFrom -To $EmailTo -Subject $Subject -Body $Body `
-SmtpServer $SMTPServer -Port $SMTPPort -Credential $Credential `
-UseSsl
Integración con Otros Sistemas¶
Python¶
import subprocess
import sys
def ejecutar_importacion(plantilla, archivo):
"""Ejecuta una importación desde Python"""
cmd = [
sys.executable,
"xls2sage50.py",
"run",
"--template", plantilla,
"--file", archivo
]
resultado = subprocess.run(cmd, capture_output=True, text=True)
if resultado.returncode == 0:
print("Importación exitosa")
print(resultado.stdout)
return True
else:
print(f"Error en importación: {resultado.stderr}")
return False
# Uso
if ejecutar_importacion("Clientes_Mensual", "clientes.xlsx"):
print("Proceso completado")
else:
print("Proceso fallido")
Node.js¶
const { exec } = require('child_process');
const fs = require('fs');
function ejecutarImportacion(plantilla, archivo) {
return new Promise((resolve, reject) => {
const comando = `python xls2sage50.py run --template=${plantilla} --file=${archivo}`;
exec(comando, (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
resolve(stdout);
});
});
}
// Uso
ejecutarImportacion('Clientes_Mensual', 'clientes.xlsx')
.then(resultado => {
console.log('Importación exitosa:', resultado);
})
.catch(error => {
console.error('Error en importación:', error);
});
Casos de Uso de Automatización¶
Importación Diaria Nocturna¶
REM Ejecutar a las 2 AM todos los días
SCHTASKS /Create /TN "Importacion Diaria" /TR "python C:\xls2sage50\xls2sage50.py run --template=Clientes_Mensual --file=C:\Datos\clientes.xlsx" /SC DAILY /ST 02:00
Importación Semanal¶
REM Ejecutar cada lunes a las 6 AM
SCHTASKS /Create /TN "Importacion Semanal" /TR "python C:\xls2sage50\xls2sage50.py run --template=Articulos --file=C:\Datos\articulos.xlsx" /SC WEEKLY /D MON /ST 06:00
Importación al Inicio de Sesión¶
REM Ejecutar cuando el usuario inicia sesión
SCHTASKS /Create /TN "Importacion al Inicio" /TR "python C:\xls2sage50\xls2sage50.py run --template=Proveedores --file=C:\Datos\proveedores.xlsx" /SC ONLOGON
Monitoreo y Alertas¶
Script con Alerta por Error¶
@echo off
python xls2sage50.py run --template=Clientes --file=clientes.xlsx
if %ERRORLEVEL% NEQ 0 (
REM Enviar alerta
powershell -Command "Send-MailMessage -From 'bot@empresa.com' -To 'admin@empresa.com' -Subject 'ALERTA: Fallo en importacion' -Body 'La importacion de clientes fallo con codigo %ERRORLEVEL%' -SmtpServer 'smtp.empresa.com'"
)
Script con Reintentos¶
@echo off
set MAX_RETRIES=3
set RETRY_COUNT=0
:retry
python xls2sage50.py run --template=Clientes --file=clientes.xlsx
if %ERRORLEVEL% EQU 0 (
echo Importacion exitosa
exit /b 0
)
set /a RETRY_COUNT+=1
if %RETRY_COUNT% LSS %MAX_RETRIES% (
echo Reintento %RETRY_COUNT% de %MAX_RETRIES%...
timeout /t 60 /nobreak >nul
goto retry
)
echo Agotados todos los reintentos
exit /b 1
Prácticas Recomendadas¶
- Siempre registre logs para auditoría y diagnóstico
- Use rutas absolutas en tareas programadas
- Verifique la existencia de archivos antes de procesar
- Implemente manejo de errores robusto
- Configure alertas para fallos críticos
- Pruebe los scripts manualmente antes de automatizar
- Documente los scripts con comentarios detallados
!!! warning "Seguridad de Credenciales**
Nunca incluya contraseñas en texto plano en sus scripts. Use variables de entorno o el Administrador de Credenciales de Windows.
Próximo Paso¶
- Scripts por Lotes - Ejemplos prácticos de scripts