Trabajar con grandes cantidades de datos en 1C es una prueba a la que tarde o temprano se enfrenta todo desarrollador. Una consulta que se ejecuta instantáneamente en una base de datos de prueba puede tardar minutos en producción. Analicemos los errores típicos y aprendamos a evitarlos.

Error n.º 1: Uso de SIMILAR en lugar de condiciones exactas.
Muchos desarrolladores novatos abusan del operador COMO, especialmente cuando necesitan encontrar algo en una cadena.
Mal:
Номенклатура.Наименование ПОДОБНО "%Bolt%"Bien:
Номенклатура.Артикул = "12345"El operador LIKE hace que el SGBD escanee toda la tabla, ignorando los índices. Si es posible utilizar una coincidencia exacta o el comienzo de una línea, hazlo. Si la búsqueda de una subcadena es inevitable, al menos evite las máscaras con un porcentaje al principio.
Error n.º 2: Obtener campos innecesarios.
Un error clásico de los principiantes es seleccionar todos los campos, incluso si solo necesitan dos o tres.
Mal:
ВЫБРАТЬ
*
ИЗ
Справочник.КонтрагентыBien:
ВЫБРАТЬ
Контрагенты.Ссылка,
Контрагенты.Наименование,
Контрагенты.ИНН
ИЗ
Справочник.КонтрагентыLa selección de datos innecesarios aumenta la carga en la red y la memoria. Esto es especialmente crítico para los campos como Almacén de valores, ya que pueden contener megabytes de datos.
Error n.º 3: Falta de índices en los criterios de selección.
Si a menudo filtras datos por un campo específico, pero olvidaste crear un índice para él, prepárate para un trabajo lento.
Compruebe qué campos está utilizando en las condiciones WHERE y CONEXIONES. Se deben crear índices para estos campos. En el configurador, esto se hace a través de las propiedades del atributo, estableciendo la marca de verificación "Indexar".
Importante: indexa solo lo que realmente se usa en las consultas. Los índices excesivos ralentizan las operaciones de escritura.
Error n.º 4: Consultas anidadas en lugar de conexiones.
A veces, los desarrolladores intentan obtener datos relacionados a través de consultas anidadas en SELECT.
Mal:
ВЫБРАТЬ
Документы.Номер,
(ВЫБРАТЬ Контрагенты.Наименование
ИЗ Справочник.Контрагенты КАК Контрагенты
ГДЕ Контрагенты.Ссылка = Документы.Контрагент)Bien:
ВЫБРАТЬ
Документы.Номер,
Контрагенты.Наименование
ИЗ
Документ.РеализацияТоваров КАК Документы
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Документы.Контрагент = Контрагенты.СсылкаLas consultas anidadas se ejecutan para cada fila del resultado. Las conexiones son procesadas por el optimizador del SGBD de manera mucho más eficiente.
Error n.º 5: Ignorar las tablas virtuales.
1C proporciona potentes tablas virtuales para trabajar con saldos, facturación y otros cortes de datos. Muchos principiantes intentan calcular esto manualmente.
Mal: cálculo independiente de saldos a través de la facturación de documentos
Bien:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиLas tablas virtuales ya están optimizadas por los desarrolladores de la plataforma y utilizan mecanismos especiales de almacenamiento en caché.
Error n.º 6: Falta de restricciones en el número de entradas.
Cuando introduzca datos en un formulario, limite siempre el número de entradas.
ВЫБРАТЬ ПЕРВЫЕ 1000
// campos de solicitudEsto es especialmente importante para los informes y las listas. El usuario rara vez necesita ver 100 mil líneas al mismo tiempo, pero el rendimiento se ve muy afectado por esto.
Error n.º 7: Expresiones complejas en las condiciones.
Si aplica funciones a campos en condiciones WHERE, no se utilizarán índices.
Mal:
ГДЕ ГОД(Документ.Дата) = 2024Bien:
ГДЕ Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериодаLos parámetros del período se calculan una vez en el lado del cliente, y la propia solicitud puede usar un índice por fecha.
Error n.º 8: Múltiples llamadas a la base de datos en un bucle.
Este es un problema clásico de N+1, cuando primero obtienes una lista de elementos y luego haces una consulta adicional en un bucle para cada uno.
Mal:
// Obteniendo la lista de documentos
Для Каждого Документ Из Выборка Цикл
// Para cada documento, una nueva solicitud a la base de datos
Контрагент = ПолучитьКонтрагента(Документ);
КонецЦикла;Bien: combinar todo en una sola consulta con conexiones o usar tablas temporales.

Consejos prácticos de optimización.
Utiliza tablas temporales.
Si la consulta es compleja y los datos intermedios se utilizan varias veces, las tablas temporales pueden acelerar significativamente la ejecución.
Analiza los planes de consulta.
En el modo de empresa, activa la consola de consultas y estudia qué índices se utilizan y cuáles no.
Recuerda el almacenamiento en caché.
Algunos datos se pueden almacenar en caché en el lado del cliente para no tirar de la base de datos cada vez.
Utiliza operaciones por lotes.
En lugar de muchas entradas pequeñas, realiza una gran transacción.
¿Cómo medir el rendimiento?
Mida el tiempo de ejecución de las consultas en condiciones de combate, en volúmenes de datos reales. Lo que funciona rápidamente en 100 registros puede ralentizar en 100 mil.
Utilice el registro de procesos 1C para buscar consultas lentas. Configúrelo para que registre las consultas que tarden más de un tiempo determinado (por ejemplo, 1 segundo).
Conclusión.
La optimización de consultas en 1C no es una tarea única, sino una práctica constante. Empiece por lo básico: especifique claramente los campos necesarios, utilice índices, evite consultas SIMILARES y anidadas. Estas reglas básicas ya darán un aumento notable en la productividad.
Recuerda que no existe una receta universal. Cada caso requiere análisis y comprensión de cómo funciona exactamente tu solicitud y qué se puede mejorar.
¿Quieres mejorar tus habilidades de programación?
En Codice encontrarás cursos de Python, JavaScript, HTML, CSS y otras tecnologías populares para desarrolladores principiantes. ¡Aprende a un ritmo cómodo y crea proyectos reales!
Y también tenemos un genial Canal de Telegram ¡con una comunidad amistosa donde discutimos programación, compartimos experiencias y nos ayudamos mutuamente a crecer! ¡Únete! 🚀
