¿Qué significan las líneas que aparecen en los envases de algunos productos o en revistas y libros de grandes tiradas? Por cieno que los lectores que poseen algunos conocimientos de electrónica o informática saben que las barritas sirven para que máquinas de alguna clase puedan "leer" informaciones grabadas y obtener así algún control sobre el proceso de fabricación, distribución o almacenamiento. Cómo funciona el código de barras y cómo leer esas informaciones es lo que tal vez muchos ignoren. En este artículo explicaremos en forma simple lo que es el código de barras y cómo se efectúa su lectura.

Nota: este articulo es de 1988 cuando no existían los códigos bidimensionales.

La idea básica de la codificación por barras es usar sensores ópticos para leer las informaciones. Como esos dispositivos a los que conectamos los sensores son de funcionamiento digital, es decir, trabajan con la base 2, donde la presencia de información significa un "1" y la ausencia un “0“, o nada mejor que adaptar eso a la óptica: el negro significa un nivel de serial (0 o 1) y el blanco, otro nivel (1 o 0).

Vea que no determinamos cuál va a ser uno u otro, pues las variaciones que existen en ellas se aclararán a medida que demos nuestras aplicaciones.

En realidad existe una gran cantidad de códigos que hacen uso de las barras, y la "interpretación" de cada uno debe analizarse en forma separada como haremos a partir de ahora (figura 1).

 

Figura 1
Figura 1

 

 

EI código más simple

Por cierto que el código más simple que podemos imaginar hace ia convención de que una barra negra signifique 1 y una barra blanca o "intervalo" signifique 0, como muestra la figura 2.

 

Figura 2
Figura 2

 

En estas condiciones, las barras y los espacios tendrán el mismo ancho, pero el sistema tiene serios inconvenientes. Uno de ellos es la "longitud" del código.

Si hacemos una numeración en binario puro, como por ejemplo el número 7.895, la grabación sería enorme, como se ve en la figura 3.

 

Figura 3
Figura 3

 

El otro inconveniente proviene del hecho de que el sistema lector no sabe donde comienza, exactamente, el número, sobre todo si tuviera muchos ceros a la izquierda.

 

EI código "2 de 5"

Una mejora considerable para la escritura y la lectura de lo que se pretende colocar en los productos, se obtiene, en un primer paso, con el código denominado 2 de 5.

En este código se usan siempre 2 barras anchas y 3 angostas de color negro (figura 4).

 

Figura 4
Figura 4

 

Observe en la figura que los intervalos tienen ancho constante.

Como el número de combinaciones que se pueden obtener con las 5 barras, es limitado, este código sirve sólo para representar los guarismos y algunos símbolos según la tabla siguiente:

 


 

 

Vea que la barra ancha se representa por 1 y la angosta por 0.

Una característica importante de este sistema es el reconocimiento del principio y final del número por medio de símbolos propios.

Con eso, el sistema lector puede usarse en cualquier sentido. El circuito "graba" el mensaje y si el circuito constatara que está “invertido", la reinversión se efectúa en forma automática. Entonces el producto puede entrar en la máquina de lectura de cualquier lado (figura 5).

 

Figura 5
Figura 5

 

La constancia del número de barras para cada dígito sirve también como elemento de referencia.

El dispositivo usado puede "contar“ las barras, y si tuviéramos un total que no fuera múltiplo de 5 (si el principio o el fin fuera 6) es porque existe error que puede detectarse.

Este código tiene algunas variantes interesantes como, por ejemplo, la llamada "industrial".

 

Código 2 a 5 industrial

En este sistema se usan bandas anchas y angostas de color negro, cada una con un significado "discreto". EI 0 se representa con la banda angosta y el 1 con la ancha. Las bandas blancas siempre del mismo ancho, se usan sólo para espaciar (figura 6).

 

Figura 6
Figura 6

 

 

Código 2 de 5 en matriz

Este código, más interesante, se diferencia del anterior por hacer uso de los colores blanco y negro, tanto para representar dígitos como intervalos y también tiene importancia el ancho.

En la figura 7 tenemos un ejemplo de lo que ocurre.

 

Figura 7
Figura 7

 

Lo que tenemos es una alternancia de negro y blanco en la que el ancho menor (sin importar el color) significa 0 y el ancho mayor (sin importar el color) indica 1 (figura 7).

En resumen: el color sirve para indicar que un nuevo dígito está apareciendo y el ancho indica el dígito.

Vea que .se obtiene una considerable reducción del tamaño de la información pues no necesitamos más los intervalos. En realidad, los intervalos aparecen sólo en la separación de los dígitos pues cada uno debe comenzar siempre con una barra negra (figura 8).

 

Figura 8
Figura 8

 

 

Código 2 de 5 entrelazado

Como muestra la figura 9, en este caso se tiene una disposición bastante ingeniosa de las barras.

 

Figura 9
Figura 9

 

Una cifra está representada por las barras negras y otra, la siguiente, por las barras blancas o intervalos.

Es así que se tiene una orden de lectura en zigzag como se ve en la figura 10.

 

Figura 10
Figura 10

 

Un dígito está "entrelazado con otro" y de ahí la denominación del código.

 

EI código UPC

La sigla µCP proviene de Universal Product Code y es una solución simple para la marcación de productos.

Con este código representamos Ios guarismos de 0 a 9 más el principio y el fin, según la tabla siguiente:

 


 

 

Vea que este código puede leerse tanto desde el principio al fin como desde el fin al principio, lo que resulta interesante ya que no debe preocupamos la "manera" en que el producto entra en el sistema lector.

Los guarismos 1, 2, 3 y 4 corresponden a las relaciones entre los anchos de los trazos.

Es así que para representar el número 5 se tiene:

Una barra (negra 0 blanca) de ancho unitario;

Una barra (negra 0 blanca) de ancho equivalente a 3 unidades;

Una barra (negra 0 blanca) de ancho unitario.

EI símbolo principio/fin, con dos barras oscuras y una clara de ancho unitario también tiene otra utilidad además de mostrar donde comienza el número: sirve para indicar el sistema lector el ancho unitario de las barras, ya que todas las demás se hacen con referencia a esa barra.

 

Código 3 de 9

En este código, cada símbolo tiene 9 señales elementales (trazos o espacios) lo que hace posible la representación de números y de letras, como se ve en la tabla siguiente.

 


 

 

 


 

 

 

En este código, el 0 se representa con una línea angosta (clara u oscura) y el 1, por una línea ancha (clara u oscura).

En la figura 11 se tiene un ejemplo de aplicación de este código, que es el más usado.

 

Figura 11
Figura 11

 

 

El código HP

La Hewlett-Packard que fabrica las calculadoras científicas como la conocida HP-41C, tiene en la posibilidad de accesorios ópticos un ejemplo interesante de aplicación del código de barras.

Utilizando un "lápiz óptico" podemos introducir en la calculadora HP-41C, mediante periféricos adecuados, datos de diversos tipos, como sugiere la figura 12.

 

Figura 12
Figura 12

 

En el código usado por la HP-41C se emplean trazos oscuros de dos anchos. EI más angosto indica 0 y el "más ancho 1, y entre los dos hay una separación uniforme.

La lectura se efectúa en la forma de una sucesión de octetos, es decir grupos de 8 dígitos, como se ve en la figura 13.

 

Figura 13
Figura 13

 

Observe en la figura la existencia de símbolos de principio y fin de la lectura como en los de más códigos analizados.

 

La lectura de los códigos

Varias son las técnicas que se emplean en la lectura. En todas es necesario tener en cuenta lo que se pretende diferenciar para elegir la información correcta.

Tenemos entonces tanto los casos en el que sólo es necesario diferenciar Io claro de lo oscuro, como los casos en que, además de eso, el sistema debe discriminar el ancho de los claros y oscuros.

En la figura 14 tenemos un circuito típico de sistemas de lectura que proporciona en su salida una información digital propia para que sea trabajada por un circuito procesador.

 

Figura 14
Figura 14

 

EI uso de lentes, o de la concentración de la luz en forma especial, es muy importante a veces para facilitar la lectura.

El sensor, como ya explicamos, puede ser un fototransistor sensible.

 

Conclusión

Al visitar el supermercado y advertir Ia existencia de barras de códigos en los productos, el lector no debe asombrarse.

Piense que quizá en un futuro cercano los productos serán controlados mediante máquinas y éstas podrán leer los símbolos adecuados. Las barras son el alfabeto que las lectoras ópticas pueden entender, y como la informática ya es parte integrante de nuestras vidas, tendremos que acostumbrarnos a ella.

 

(Publicado originalmente en 1988)

 

19.02MBMemory Usage60.11msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.16
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.5.22-MariaDB
Collation
latin1_swedish_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
[]
$_SERVER
array:51 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 1 "timer" => array:3 [ "start" => 1741911439 "last" => 1741911439...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.67KB) (504μs)
  • afterInitialise (1.14MB) (4.7ms)
  • afterRoute (179.16KB) (1.55ms)
  • beforeRenderComponent com_content (100.65KB) (376μs)
  • Before Access::preloadComponents (all components) (33.49KB) (156μs)
  • After Access::preloadComponents (all components) (107.06KB) (570μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (6μs)
  • After Access::preloadPermissions (com_content) (16.19MB) (35.12ms)
  • Before Access::getAssetRules (id:8 name:com_content) (480.18KB) (2.73ms)
  • After Access::getAssetRules (id:8 name:com_content) (7.36KB) (46μs)
  • afterRenderComponent com_content (448.16KB) (6.59ms)
  • afterDispatch (2.25KB) (64μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (423.33KB) (2.02ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (15.43KB) (343μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (91μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (63.1KB) (1.09ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (564μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (61μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (188μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (46μs)
  • afterRender (308.23KB) (3.19ms)
  • 1 x After Access::preloadPermissions (com_content) (16.19MB) (58.42%)
    35.12ms
    1 x afterRenderComponent com_content (448.16KB) (10.97%)
    6.59ms
    1 x afterInitialise (1.14MB) (7.82%)
    4.70ms
    1 x afterRender (308.23KB) (5.31%)
    3.19ms
    1 x Before Access::getAssetRules (id:8 name:com_content) (480.18KB) (4.55%)
    2.73ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (423.33KB) (3.36%)
    2.02ms
    1 x afterRoute (179.16KB) (2.57%)
    1.55ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (63.1KB) (1.82%)
    1.09ms
    1 x After Access::preloadComponents (all components) (107.06KB) (0.95%)
    570μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (0.94%)
    564μs
    1 x afterLoad (85.67KB) (0.84%)
    504μs
    1 x beforeRenderComponent com_content (100.65KB) (0.63%)
    376μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (15.43KB) (0.57%)
    343μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (0.31%)
    188μs
    1 x Before Access::preloadComponents (all components) (33.49KB) (0.26%)
    156μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.15%)
    91μs
    1 x afterDispatch (2.25KB) (0.11%)
    64μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (0.1%)
    61μs
    1 x After Access::getAssetRules (id:8 name:com_content) (7.36KB) (0.08%)
    46μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (0.08%)
    46μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.01%)
    6μs
23 statements were executed, 5 of which were duplicates, 18 unique18.94ms1.57MB
  • SELECT @@SESSION.sql_mode;36μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 177μs1.3KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • INSERT INTO `incbmx_session` (`session_id`,`guest`,`time`,`userid`,`username`,`client_id`) VALUES (:session_id, :guest, :time, :user_id, :username, :client_id)237μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`49μs656B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `incbmx_usergroups` AS `a` LEFT JOIN `incbmx_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest72μs1.64KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`605μs20.2KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39)415μs7.44KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 014.52ms1.46MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_assets`296μs2.02KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • SELECT * FROM `incbmx_assets` WHERE `name` = 'com_content.article.750'79μs912B/libraries/src/Table/Table.php:780Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`310μs1.77KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '750'161μs48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)154μs22.13KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`259μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `incbmx_contentitem_tag_map` AS `m` INNER JOIN `incbmx_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)245μs3.97KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`234μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM incbmx_fields AS a LEFT JOIN `incbmx_languages` AS l ON l.lang_code = a.language LEFT JOIN incbmx_users AS uc ON uc.id=a.checked_out LEFT JOIN incbmx_viewlevels AS ag ON ag.id = a.access LEFT JOIN incbmx_users AS ua ON ua.id = a.created_user_id LEFT JOIN incbmx_fields_groups AS g ON g.id = a.group_id LEFT JOIN `incbmx_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform ORDER BY a.ordering ASC495μs6.06KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`170μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1157μs656B/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `incbmx_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)78μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context63μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:403Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)159μs22.17KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `incbmx_scheduler_tasks` AS `a` WHERE `a`.`state` = 172μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content
  • warningassets - No asset found for com_content.article.750, falling back to com_content