{}const=>[]async()letfn</>var
Desarrollo1C

Big Data en 1C: cómo acelerar el trabajo 100 veces sin muletas

¿Tu informe tarda 5 minutos en cargarse y los usuarios ya se están quejando a la dirección? ¿El procesamiento se bloquea en un millón de registros? Analizamos los principales errores de los desarrolladores novatos y mostramos cómo una línea de código puede convertir un minuto de espera en un segundo de trabajo. Sin magia, solo las consultas correctas y la comprensión de cómo funciona realmente 1C con la base de datos.

К

Kodik

Autor

5 min de lectura

Trabajar con grandes cantidades de datos es uno de los problemas más comunes a los que se enfrentan los desarrolladores de 1C. Informes lentos, procesamientos que se cuelgan y usuarios insatisfechos: todo esto es consecuencia de un enfoque incorrecto para trabajar con los datos. Veamos cómo hacerlo bien.

¿Por qué surgen problemas de rendimiento?

Cuando hay varios miles de documentos en la base de datos, todo funciona rápidamente. Pero tan pronto como los datos crecen a cientos de miles o millones de registros, el código que antes se ejecutaba instantáneamente comienza a funcionar en minutos. La razón es simple: cada acceso a la base de datos lleva tiempo, y las consultas no optimizadas pueden procesar muchos más datos de los necesarios.

🔥 100.000+ estudiantes ya están con nosotros

¿Cansado de leer teoría?
¡Hora de programar!

Kodik — una app donde aprendes a programar con práctica. Mentor IA, lecciones interactivas, proyectos reales.

🤖 IA 24/7
🎓 Certificados
💰 Gratis
🚀 Empezar
Se unieron hoy


Principios básicos del trabajo con macrodatos

1. Usa consultas en lugar de bucles

El error más común de los desarrolladores novatos es el procesamiento de datos en bucles. Por ejemplo, si necesita obtener los saldos de productos en el almacén, no debe ordenar todos los productos en un ciclo y hacer una solicitud por separado para cada uno.

❌ Mal:

Для Каждого Товар Из СписокТоваров Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = "SELECT Remainder WHERE Nomenclature = &Nomenclature";
    Запрос.УстановитьПараметр("Nomenclature", Товар);
    // ¡Se ejecuta cientos de veces!
КонецЦикла;

✅ Bien:

Запрос = Новый Запрос;
Запрос.Текст = 
"SELECT
|    Nomenclature,
|    Balance
|FROM RegisterAccumulation.BalanceGoods.Balance
|WHERE Nomenclature IN (&List of Goods)";
Запрос.УстановитьПараметр("List of goods", СписокТоваров);
// ¡Se ejecuta una vez!

Importante: Una solicitud en lugar de cientos es la diferencia entre un segundo y un minuto de trabajo.

2. Limita la selección de datos

No cargue todos los campos si no son necesarios. No seleccione todas las entradas si solo necesita una parte.

// Seleccionamos solo los campos necesarios
Запрос.Текст = 
"SELECT
|    Document.Number,
|    Document.Date,
| Document.Amount
 | FROM Document.SaleOfGoodsServices AS Document
|WHERE Document.Date BETWEEN &StartDate AND &EndDate
|    AND Document.Posted = TRUE";

Utiliza las condiciones WHERE para filtrar los datos a nivel de base de datos, no en el código después de recibir todos los registros.

3. Aplica índices

Los índices son los que hacen que la búsqueda en la base de datos sea rápida. En 1C, los índices se crean automáticamente para los detalles marcados como indexables. Si filtra datos con frecuencia en función de un atributo específico, asegúrese de que se cree un índice para dicho atributo.

4. Usa tablas temporales

Cuando se necesita hacer varias consultas relacionadas entre sí, las tablas temporales ayudan a guardar los resultados intermedios y no volver a consultar las tablas principales.

Запрос = Новый Запрос;
Запрос.Текст = 
"SELECT 
| Counterparty, 
| AMOUNT (Amount) AS TotalAmount
| PLACE InAmountsByCounterparties | FROM Document.SaleOfGoodsServices
| GROUP BY Counterparty |; | | SELECT
|    InAmountsByCounterparties.Counterparty,
|    InAmountsByCounterparties.TotalAmount
| FROM VtAmountsByCounterparties | WHERE VtAmountsByCounterparties.TotalAmount> 100000";


5. Trabaja por paquetes

Si necesita procesar un millón de registros, no los cargue todos a la vez. Procese los datos en porciones de 1000-10000 registros.

СчётчикПорции = 0;
РазмерПорции = 5000;

Пока Истина Цикл
    Запрос.Текст = 
    "SELECT FIRST " + РазмерПорции + "
    |    Link
    |FROM Reference Book.Nomenclature
    | WHERE Link> & LastLink | SORT BY Link";
    
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        Прервать;
    КонецЕсли;
    
    // Procesando la porción
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
        // Procesamiento del elemento
        ПоследняяСсылка = Выборка.Ссылка;
    КонецЦикла;
КонецЦикла;

6. Utiliza correctamente los registros de acumulación

Los registros de acumulación son una herramienta poderosa para trabajar con datos cuantitativos. Permiten obtener rápidamente saldos y movimientos sin tener que volver a contar todo el historial de movimientos.

// Obtención de saldos en la fecha
Запрос.Текст = 
"SELECT
|    Remainders.Nomenclature,
|    Remainders.QuantityRemainder
| FROM AccumulationRegister. GoodsInWarehouses. Remains (& Date) AS Remains";

7. Optimiza las combinaciones de tablas

Cuando se utilizan combinaciones (JOIN) en una consulta, el orden y el tipo de combinación son importantes. Primero, conecta las tablas con el menor número de registros.

Consejos prácticos

  • Analiza los planes de consulta. En la consola de consultas de 1C, puedes ver exactamente cómo se ejecuta la consulta y dónde se producen los cuellos de botella.

  • Utilice las mediciones de rendimiento. Las herramientas integradas de 1C te permiten encontrar operaciones lentas. ¡No adivines, mide!

  • Evite las consultas anidadas. La mayoría de las veces, se pueden reemplazar por combinaciones o tablas temporales con un mejor rendimiento.

  • Almacena en caché los datos inmutables. Si los datos cambian raramente, guárdelos en las variables del módulo o utilice registros de información con la posibilidad de almacenamiento en caché.

Errores frecuentes

  • Obtener todos los campos a través de "SELECCIONAR *" en lugar de enumerar explícitamente los necesarios

  • Uso de cálculos complejos en condiciones WHERE en lugar de cálculo previo

  • Ausencia de condiciones de filtrado cuando se puede limitar la selección

  • Múltiples llamadas a la base de datos en lugar de una única solicitud por lotes

Conclusión

Trabajar con big data en 1C requiere una comprensión de los principios de la base de datos y las consultas. Las reglas básicas son simples: minimiza el número de llamadas a la base de datos, usa consultas en lugar de bucles, selecciona solo los datos necesarios y usa las herramientas correctas para las tareas correctas.

Recuerda: la optimización no es una complicación prematura del código, sino un diseño competente desde el principio. El hábito de escribir consultas efectivas le ahorrará horas de depuración y semanas de optimización en el futuro.

🚀 ¿Quieres saber más?

Puedes estudiar este y muchos otros temas en Codice — ¡nuestra plataforma para desarrolladores principiantes! Hemos creado cursos estructurados que te ayudarán a dominar el desarrollo desde cero hasta un nivel seguro.

Y también tenemos un canal de Telegram genial con una comunidad amistosa, donde desarrolladores experimentados ayudan a los principiantes, comparten sus experiencias y discuten temas de programación actuales.

Ir a Kodik Únete a la comunidad

🎯Deja de postergar

¿Te gustó el artículo?
¡Hora de practicar!

En Kodik no solo lees — escribes código de inmediato. Teoría + práctica = habilidades reales.

Práctica instantánea
🧠IA explica código
🏆Certificado

Sin registro • Sin tarjeta