Representación en 1s solicitud 8.3. Características de trabajar con el campo Ver y la función Ver() del lenguaje de consulta. Usando la consola de consultas

Para mostrar campos de referencia en un informe, debe obtener una representación del campo de referencia en la solicitud y, al generarla, utilizarla y no el enlace en sí. Esta sección describe algunas características del campo "Ver" y las funciones para obtener vistas - Ver(). Puede leer más sobre cómo generar campos de referencia en la sección "Emitir campos de referencia".

Representación de campo

Cada tabla de objetos en la base de datos tiene un campo virtual: "Ver". Este campo contiene una representación de texto del objeto. En una consulta, es posible obtener este campo de la misma manera que otros campos de la tabla, pero no se pueden realizar operaciones en este campo. Esta característica se debe a que este campo es virtual y, de hecho, al recuperar este campo de la base de datos, la consulta recibe varios campos y, al recibir el valor del campo del resultado de la consulta, convierte los valores recibidos. en una cuerda. Entonces, lo único que puede hacer con el campo Ver es incluirlo en el resultado de la consulta.

Como resultado, no se recomienda ordenar el resultado de la consulta por el campo "Ver", porque esto no producirá el resultado deseado: el resultado de la consulta se ordenará en orden ascendente de referencias de objetos. Puede leer más sobre esto en la sección "Características de ordenar por campos de referencia".

Vista de funciones()

La función de vista está diseñada para obtener una representación textual de cualquier valor que se pueda obtener mediante un lenguaje de consulta. La función View() funciona tanto para tipos de referencia como para tipos primitivos. Para los tipos de referencia, el resultado de la función es completamente similar a recibir el campo "Representación" de la referencia pasada como parámetro a la función. Para los tipos primitivos, el resultado de la función es la cadena en la que se convirtió el valor pasado como parámetro. La peculiaridad de esta función es que su resultado no se puede utilizar en una expresión. Esta característica se debe al hecho de que la conversión de valores a una cadena ya se realiza cuando se reciben datos del resultado de la consulta, porque La conversión de un valor arbitrario a una cadena al ejecutar una solicitud en el servidor no se realiza debido a que al convertir valores a una cadena se deben tener en cuenta las configuraciones locales.

Usar la función Ver() tiene varias ventajas sobre usar el campo Ver. Por ejemplo, en el caso de que el campo del que se deriva una representación pueda contener tipos primitivos y de referencia, recuperar el campo Representación punteado de dicho campo dará como resultado que no se obtengan representaciones de valores del tipo primitivo. Sin embargo, si se utiliza la función Representación() para dicho campo, se obtendrá una representación de cadena independientemente del tipo de valor contenido en el campo. Además, si la función View() se aplica a un campo que es una referencia a más de tres tablas, el lenguaje de consulta recupera solo los valores de referencia de la base de datos y recupera los valores de vista mediante una o más consultas adicionales. Este comportamiento le permite obtener vistas de manera más eficiente para campos que hacen referencia a una gran cantidad de tablas (por ejemplo, a cualquier directorio), debido a que la consulta en ejecución no contendrá una gran cantidad de conexiones necesarias para obtener la campos que componen la vista.

Usar la función Representación() también puede ser útil al obtener una representación de un campo - una enumeración, en el caso de ejecutar una solicitud a través de una conexión COM

El lenguaje de consulta es uno de los mecanismos fundamentales de 1C 8.3 para desarrolladores. Mediante consultas, puede recuperar rápidamente cualquier dato almacenado en la base de datos. Su sintaxis es muy similar a SQL, pero existen algunas diferencias.

Las principales ventajas del lenguaje de consulta 1C 8.3 (8.2) sobre SQL:

  • desreferenciar campos de referencia (referir uno o más puntos a detalles del objeto);
  • trabajar con resultados es muy conveniente;
  • la capacidad de crear tablas virtuales;
  • la solicitud puede redactarse tanto en inglés como en ruso;
  • capacidad de bloquear datos para evitar puntos muertos.

Desventajas del lenguaje de consulta en 1C:

  • a diferencia de SQL, en 1C las consultas no permiten cambiar datos;
  • falta de procedimientos almacenados;
  • imposibilidad de convertir una cadena en un número.

Echemos un vistazo a nuestro mini tutorial sobre las construcciones básicas del lenguaje de consulta 1C.

Debido a que las consultas en 1C solo le permiten recibir datos, cualquier consulta debe comenzar con la palabra "SELECCIONAR". Tras este comando se indican los campos de los que se deben obtener datos. Si especifica “*”, se seleccionarán todos los campos disponibles. Después de la palabra “DESDE”, se indica el lugar desde donde se seleccionarán los datos (documentos, registros, directorios, etc.).

En el ejemplo que se analiza a continuación, los nombres de toda la nomenclatura se seleccionan del directorio "Nomenclatura". Después de la palabra "CÓMO", se indican los alias (nombres) de tablas y campos.

ELEGIR
Nomenclatura Nombre AS Nombre de la Nomenclatura
DE
Directorio.Nomenclatura AS Nomenclatura

Junto al comando "SELECCIONAR" puede especificar palabras clave:

  • VARIOS. La consulta seleccionará solo filas que difieran en al menos un campo (sin duplicados).
  • Primero N, Dónde norte– el número de filas desde el principio del resultado que deben seleccionarse. Muy a menudo, esta construcción se utiliza junto con la clasificación (ORDER BY). Por ejemplo, cuando necesita seleccionar una determinada cantidad de documentos recientes por fecha.
  • PERMITIDO. Este diseño le permite seleccionar de la base de datos solo aquellos registros que están disponibles para el usuario actual. Según el uso de esta palabra clave, el usuario recibirá un mensaje de error al intentar consultar registros a los que no tiene acceso.

Estas palabras clave se pueden utilizar juntas o por separado.

PARA CAMBIAR

Esta propuesta bloquea datos para evitar conflictos mutuos. Los datos bloqueados no se leerán desde otra conexión hasta que finalice la transacción. En esta cláusula, puede especificar tablas específicas que deben bloquearse. De lo contrario, todos serán bloqueados. El diseño es relevante sólo para el modo de bloqueo automático.

La mayoría de las veces, la cláusula "PARA CAMBIO" se utiliza al recibir saldos. Después de todo, cuando varios usuarios trabajan en el programa simultáneamente, mientras uno recibe saldos, otro puede cambiarlos. En este caso, el resto resultante ya no será correcto. Si bloquea los datos con esta propuesta, hasta que el primer empleado reciba el saldo correcto y realice todas las manipulaciones necesarias con él, el segundo empleado se verá obligado a esperar.

ELEGIR
Acuerdos mutuos Empleado,
Liquidaciones mutuas Monto de las liquidaciones mutuas Saldo
DE
Registro de Acumulaciones Liquidaciones mutuas con empleados Saldos AS Liquidaciones mutuas
PARA CAMBIAR

DÓNDE

El diseño es necesario para imponer algún tipo de selección a los datos cargados. En algunos casos de obtención de datos de registros, es más razonable especificar las condiciones de selección en los parámetros de las tablas virtuales. Cuando se utiliza "DÓNDE", primero se recuperan todos los registros y solo después se aplica la selección, lo que ralentiza significativamente la consulta.

A continuación se muestra un ejemplo de una solicitud para obtener personas de contacto para un puesto específico. El parámetro de selección tiene el formato: &ParameterName (el nombre del parámetro es arbitrario).

SELECCIÓN (CASO)

El diseño le permite especificar condiciones directamente en el cuerpo de la solicitud.

En el siguiente ejemplo, el "Campo adicional" contendrá texto dependiendo de si el documento se publica o no:

ELEGIR
AdmisiónT&U.Link,
ELECCIÓN
CUÁNDO AdmisiónT&U.Realizada
ENTONCES “¡El documento ha sido aprobado!”
ELSE “El documento no fue publicado...”
FINALIZAR COMO campo adicional
DE
Documento Recepción de Bienes y Servicios CÓMO Recepción T&C

UNIRSE

Las uniones vinculan dos tablas según una condición de relación específica.

CONEXIÓN IZQUIERDA/DERECHA

La esencia de la unión IZQUIERDA es que la primera tabla especificada se toma en su totalidad y la segunda se vincula a ella de acuerdo con la condición de conexión. Si no hay registros correspondientes a la primera tabla en la segunda, entonces se sustituye NULL como sus valores. En pocas palabras, la tabla principal es la primera tabla especificada y los datos de la segunda tabla (si los hay) ya están sustituidos por sus datos.

Por ejemplo, es necesario obtener artículos de los documentos "Recepción de bienes y servicios" y precios del registro de información "Precios de artículos". En este caso, si no se encuentra el precio de cualquier posición, sustitúyalo por NULL. Se seleccionarán todos los artículos del documento independientemente de si tienen precio o no.

ELEGIR
Recibo y nomenclatura U.,
Precios.Precio
DE
Documento Recepción de Bienes y Servicios Bienes CÓMO Recepción T&C
UNIÓN INTERNA RegisterInformation.PricesNomenclature.SliceLast AS Precios
Recibo de software&U.Nomenclatura = Precios.Nomenclatura

EN LA DERECHA todo es exactamente al revés.

CONEXIÓN COMPLETA

Este tipo de conexión se diferencia de las anteriores en que como resultado se devolverán todos los registros tanto de la primera tabla como de la segunda. Si no se encuentran registros en la primera o segunda tabla según la condición de enlace especificada, se devolverá NULL.

Cuando se utiliza una conexión completa en el ejemplo anterior, se seleccionarán todos los artículos del documento "Recepción de bienes y servicios" y todos los precios más recientes del registro "Precios de artículos". Los valores de los registros no encontrados tanto en la primera como en la segunda tabla serán iguales a NULL.

UNIR INTERNAMENTE

La diferencia entre INNER JOIN y FULL JOIN es que si no se encuentra un registro en al menos una de las tablas, la consulta no lo mostrará en absoluto. Como resultado, solo se seleccionarán aquellos artículos del documento “Recepción de bienes y servicios” para los cuales existan registros en el registro de información “Precios de artículos”, si en el ejemplo anterior reemplazamos “COMPLETO” por “INTERNO”.

AGRUPAR POR

La agrupación en consultas 1C le permite colapsar las filas de la tabla (campos de agrupación) de acuerdo con una determinada característica común (campos de agrupación). Los campos de agrupación solo se pueden mostrar utilizando funciones agregadas.

El resultado de la siguiente consulta será una lista de tipos de productos con precios máximos para ellos.

ELEGIR
,
MAX(Precio.Precio) COMO Precio
DE

AGRUPAR POR
Precios.Nomenclatura.Tipo de Nomenclatura

RESULTADOS

A diferencia de la agrupación, cuando se utilizan totales, se muestran todos los registros y se les agregan filas de totales. La agrupación muestra sólo registros generalizados.

Los resultados se pueden resumir para toda la tabla (usando la palabra clave “GENERAL”), para varios campos, para campos con una estructura jerárquica (palabras clave “JERARQUÍA”, “SÓLO JERARQUÍA”). Al resumir los resultados, no es necesario utilizar funciones agregadas.

Veamos un ejemplo similar al anterior usando agrupación. En este caso, el resultado de la consulta devolverá no sólo campos agrupados, sino también registros detallados.

ELEGIR
Precios.Nomenclatura.Tipo de Nomenclatura AS Tipo de Nomenclatura,
Precios.Precio AS Precio
DE
Registro de Información Precios de Nomenclatura Instantánea de los Últimos Precios de AS
RESULTADOS
MÁXIMO(Precio)
POR
TipoNomenclatura

TENIENDO

Este operador es similar al operador WHERE, pero se usa solo para funciones agregadas. El resto de campos, excepto los utilizados por este operador, deben estar agrupados. El operador WHERE no es aplicable a funciones agregadas.

En el siguiente ejemplo, los precios máximos de un artículo se seleccionan si superan 1000, agrupados por tipo de artículo.

ELEGIR

MAX(Precio.Precio) COMO Precio
DE
Registro de Información Precios de Nomenclatura Instantánea de los Últimos Precios de AS
AGRUPAR POR
Precios.Nomenclatura.Tipo de Nomenclatura
TENIENDO
MÁXIMO(Precios.Precio) > 1000

ORDENAR POR

El operador ORDER BY ordena el resultado de una consulta. Para garantizar que los registros se muestren en un orden coherente, se utiliza ORDEN AUTOMÁTICO. Los tipos primitivos se clasifican según las reglas habituales. Los tipos de referencia están ordenados por GUID.

Un ejemplo de cómo obtener una lista de empleados ordenados por nombre:

ELEGIR
Empleados.Nombre AS Nombre
DE
Directorio.Empleados CÓMO Empleados
ORDENAR POR
Nombre
PEDIDO AUTOMÁTICO

Otras construcciones del lenguaje de consulta 1C

  • COMBINAR– resultados de dos consultas en una.
  • COMBINA TODO– similar a COMBINAR, pero sin agrupar filas idénticas.
  • MESA VACÍA– a veces se utiliza al unir consultas para especificar una tabla anidada vacía.
  • LUGAR– crea una tabla temporal para optimizar consultas complejas de 1C. Estas solicitudes se denominan solicitudes por lotes.

Funciones del lenguaje de consulta

  • SUBCADE trunca una cadena desde una posición especificada hasta un número específico de caracteres.
  • AÑO...SEGUNDO le permite obtener el valor seleccionado de un tipo numérico. El parámetro de entrada es la fecha.
  • INICIO DEL PERIODO y FINAL DEL PERIODO Se utiliza cuando se trabaja con fechas. Como parámetro adicional se indica el tipo de periodo (DÍA, MES, AÑO, etc.).
  • AGREGAR FECHA le permite sumar o restar un tiempo específico de un cierto tipo de una fecha (SEGUNDO, MINUTO, DÍA, etc.).
  • DIFERENCIAFECHA determina la diferencia entre dos fechas, indicando el tipo de valor de salida (DÍA, AÑO, MES, etc.).
  • ES NULO reemplaza el valor faltante con la expresión especificada.
  • REPRESENTACIÓN y ENLACES DE REPRESENTACIÓN obtiene una representación de cadena del campo especificado. Aplicar a cualquier valor y solo a valores de referencia, respectivamente.
  • TIPO, TIPO VALORES se utilizan para determinar el tipo de parámetro de entrada.
  • ENLACE es un operador de comparación lógica para el tipo de valor de atributo.
  • EXPRESAR se utiliza para convertir un valor al tipo deseado.
  • FECHA Y HORA obtiene un valor de tipo "Fecha" a partir de valores numéricos (Año, Mes, Día, Hora, Minuto, Segundo).
  • SIGNIFICADO en una solicitud 1C se utiliza para indicar valores predefinidos: directorios, enumeraciones, planes para tipos de características. Ejemplo de uso: " Donde Persona Jurídica = Valor(Enumeración. Persona Jurídica. Individuo)«.

Consultor de construcción

Para crear consultas con 1C existe un mecanismo integrado muy conveniente: el diseñador de consultas. Contiene las siguientes pestañas principales:

  • “Tablas y campos”: contiene los campos que deben seleccionarse y sus fuentes.
  • “Conexiones”: describe las condiciones para la estructura CONEXIÓN.
  • “Agrupación”: contiene una descripción de las estructuras de agrupación y los campos sumados basados ​​en ellas.
  • “Condiciones” - es responsable de seleccionar los datos en la solicitud.
  • “Avanzado”: ​​parámetros de consulta adicionales, como palabras clave para el comando “SELECT”, etc.
  • “Uniones/Alias”: se indican las posibilidades de unir tablas y se especifican los alias (la construcción “CÓMO”).
  • “Pedido” se encarga de ordenar el resultado de las consultas.
  • “Totales”: similar a la pestaña “Agrupación”, pero se utiliza para la construcción “TOTALES”.

El texto de la solicitud en sí se puede ver haciendo clic en el botón "Solicitar" en la esquina inferior izquierda. De esta forma, se puede corregir manualmente o copiar.


Solicitar consola

Para ver rápidamente el resultado de una consulta en modo empresarial o depurar consultas complejas, utilice . Contiene el texto de la solicitud, establece los parámetros y muestra el resultado.

Puede descargar la consola de consultas en el disco ITS o mediante .

El lenguaje de consulta en 1C 8 es un análogo simplificado del conocido "lenguaje de programación estructurado" (como se le llama más a menudo SQL). Pero en 1C se usa solo para leer datos, para cambiar datos se usa un modelo de datos de objetos.

Otra diferencia interesante es la sintaxis rusa. Aunque en realidad puedes utilizar construcciones en inglés.

Solicitud de ejemplo:

ELEGIR
Bancos.Nombre,
Bancos.CorrAccount
DE
Directorio.Bancos CÓMO Bancos

Esta solicitud nos permitirá ver información sobre el nombre y cuenta corresponsal de todos los bancos existentes en la base de datos.

El lenguaje de consulta es la forma más sencilla y eficaz de obtener información. Como puede verse en el ejemplo anterior, en el lenguaje de consulta es necesario utilizar nombres de metadatos (esta es una lista de objetos del sistema que componen la configuración, es decir, directorios, documentos, registros, etc.).

Descripción de las construcciones del lenguaje de consulta.

Estructura de consulta

Para obtener datos, basta con utilizar las construcciones "SELECT" y "FROM". La solicitud más simple se ve así:

SELECCIONAR * DE Directorios.Nomenclatura

Donde "*" significa seleccionar todos los campos de la tabla y Directorios.Nomenclatura: el nombre de la tabla en la base de datos.

Veamos un ejemplo más complejo y general:

ELEGIR
<ИмяПоля1>CÓMO<ПредставлениеПоля1>,
Suma(<ИмяПоля2>) CÓMO<ПредставлениеПоля2>
DE
<ИмяТаблицы1>CÓMO<ПредставлениеТаблицы1>
<ТипСоединения>COMPUESTO<ИмяТаблицы2>CÓMO<ПредставлениеТаблицы2>
POR<УсловиеСоединениеТаблиц>

DÓNDE
<УсловиеОтбораДанных>

AGRUPAR POR
<ИмяПоля1>

ORDENAR POR
<ИмяПоля1>

RESULTADOS
<ИмяПоля2>
POR
<ИмяПоля1>

En esta consulta, seleccionamos los datos de los campos “FieldName1” y “FieldName1” de las tablas “TableName1” y “TableName”, asignamos sinónimos a los campos usando el operador “HOW” y los conectamos usando una determinada condición “TableConnectionCondition ”.

De los datos recibidos, seleccionamos solo los datos que cumplen con la condición de "DÓNDE" "Condición de selección de datos". Luego, agrupamos la solicitud por el campo "Nombre de campo1", mientras sumamos "Nombre de campo2". Creamos totales para el campo “Nombre de campo1” y el campo final “Nombre de campo2”.

El último paso es ordenar la solicitud utilizando la construcción ORDER BY.

Diseños generales

Consideremos las estructuras generales del lenguaje de consulta 1C 8.2.

PRIMEROnorte

Con este operador, puede obtener el número n de primeros registros. El orden de los registros está determinado por el orden en la consulta.

SELECCIONA LOS PRIMEROS 100
Bancos.Nombre,
Bancos Código AS BIC
DE
Directorio.Bancos CÓMO Bancos
ORDENAR POR
Bancos.Nombre

La solicitud recibirá las primeras 100 entradas del directorio “Bancos”, ordenadas alfabéticamente.

PERMITIDO

Este diseño es relevante para trabajar con el mecanismo. La esencia del mecanismo es restringir la lectura (y otras acciones) a los usuarios de registros específicos en una tabla de base de datos, y no de la tabla en su conjunto.

Si un usuario intenta utilizar una consulta para leer registros a los que no puede acceder, recibirá un mensaje de error. Para evitar esto, debe utilizar la construcción "PERMITIDO", es decir, la solicitud leerá solo los registros que le estén permitidos.

SELECCIONAR PERMITIDO
Repositorio de Información Adicional Enlace
DE
Directorio.Repositorio de Información Adicional

VARIOS

El uso de "DIFERENTE" evitará que líneas duplicadas ingresen al resultado de la consulta 1C. La duplicación significa que todos los campos de la solicitud coinciden.

SELECCIONA LOS PRIMEROS 100
Bancos.Nombre,
Bancos Código AS BIC
DE
Directorio.Bancos CÓMO Bancos

Mesa vacía

Esta construcción rara vez se utiliza para combinar consultas. Al unirse, es posible que deba especificar una tabla anidada vacía en una de las tablas. El operador "EmptyTable" es perfecto para esto.

Ejemplo de ayuda de 1C 8:

SELECCIONE Enlace.Número, TABLA VACÍA.(Nº, Artículo, Cantidad) COMO Composición
DESDE Documento.Factura de Gastos
COMBINA TODO
SELECCIONAR Enlace.Número, Contenido.(Número de Línea, Producto, Cantidad)
DESDE Documento.Factura Documento.Factura.Composición.*

ES NULO

Una característica muy útil que te permite evitar muchos errores. YesNULL() le permite reemplazar el valor NULL por el deseado. Se utiliza muy a menudo para comprobar la presencia de un valor en tablas unidas, por ejemplo:

ELEGIR
Nomenclatura Ref. Enlace,
IsNULL(Artículo restante.Cantidad restante,0) COMO Cantidad restante
DE


Se puede utilizar de otras maneras. Por ejemplo, si para cada fila no se sabe en qué tabla existe el valor:

ISNULL(Fecha de recepción de factura, Fecha de emisión de factura)

CÓMO es un operador que nos permite asignar un nombre (sinónimo) a una tabla o campo. Vimos un ejemplo de uso arriba.

Estas construcciones son muy similares: le permiten obtener una representación en cadena del valor deseado. La única diferencia es que REPRESENTATION convierte cualquier valor a un tipo de cadena, mientras que REPRESENTATIONREF convierte solo valores de referencia. Se recomienda utilizar la REPRESENTACIÓN DE REFERENCIA en consultas del sistema de composición de datos para la optimización, a menos, por supuesto, que se planee utilizar el campo de datos de referencia en las selecciones.

ELEGIR
Ver(Enlace), //cadena, por ejemplo “Informe anticipado No. 123 del 10/10/2015
Ver(DeletionMark) AS DeleteMarkText, //cadena, “Sí” o “No”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //booleano, verdadero o falso
DE
Documento.Informe Anticipado

EXPRESAR

Express le permite convertir valores de campo al tipo de datos deseado. Puede convertir un valor a un tipo primitivo o a un tipo de referencia.

Express para un tipo de referencia se utiliza para restringir los tipos de datos solicitados en campos de un tipo complejo, a menudo utilizado para optimizar el rendimiento del sistema. Ejemplo:

EXPRESS(CostoTabla.Subconto1 Directorio AS.Elementos de costo).Tipo de actividadParaCostosContablesImpuestos

Para tipos primitivos, esta función se usa a menudo para limitar la cantidad de caracteres en campos de longitud ilimitada (dichos campos no se pueden comparar con). Para evitar el error " Parámetros no válidos en la operación de comparación. No puedes comparar campos
longitud ilimitada y campos de tipos incompatibles
", debe expresar dichos campos de la siguiente manera:

EXPRESS(Comentario AS Line(150))

DIFERENCIAFECHA

Obtenga 267 lecciones en video sobre 1C gratis:

Un ejemplo de uso de IS NULL en una solicitud 1C:

ESCOGE DE
Árbitro
CONEXIÓN IZQUIERDA RegistrarAcumulaciones.ProductosEnAlmacén.Restante COMO Producto Restante
Nomenclatura de softwareRef.Link = Productos vendidosComitésRemains.Nomenclature
DONDE NO hay bienes restantes. La cantidad restante es nula

El tipo de datos en una consulta se puede determinar usando las funciones TYPE() y VALUETYPE(), o usando el operador lógico REFERENCIA. Las dos funciones son similares.

Valores predefinidos

Además de utilizar parámetros pasados ​​en consultas en el lenguaje de consulta 1C, puede utilizar valores predefinidos o . Por ejemplo, transferencias, directorios predefinidos, planes de cuentas, etc., para ello se utiliza la construcción “Value()”.

Ejemplo de uso:

DONDE Nomenclatura.Tipo de Nomenclatura = Valor(Directorio.Tipos de Nomenclatura.Producto)

DONDE Contrapartes.Tipo de Información de Contacto = Valor(Enumeración.Tipos de Información de Contacto.Teléfono)

DONDE Saldos de cuentas. Cuenta contable = Valor (Plan de cuentas. Ganancias. Pérdidas de ganancias)

Conexiones

Hay 4 tipos de conexiones: IZQUIERDA, BIEN, COMPLETO, INTERNO.

CONEXIÓN IZQUIERDA y DERECHA

Las uniones se utilizan para vincular dos tablas según una condición específica. Característica cuando UNIRSE A LA IZQUIERDA es que tomamos la primera tabla especificada en su totalidad y vinculamos condicionalmente la segunda tabla. Los campos de la segunda tabla que no pudieron estar vinculados por condición se completan con el valor NULO.

Por ejemplo:

Devolverá la tabla completa de Contrapartes y completará el campo “Banco” solo en aquellos lugares donde se cumpla la condición “Contrapartes.Nombre = Bancos.Nombre”. Si no se cumple la condición, el campo Banco se establecerá en NULO.

ÚNETE DERECHO en lenguaje 1C absolutamente similar conexión IZQUIERDA, con la excepción de una diferencia: en DERECHO DE CONEXIÓN La tabla "principal" es la segunda, no la primera.

CONEXIÓN COMPLETA

CONEXIÓN COMPLETA se diferencia de izquierda y derecha en que muestra todos los registros de dos tablas y conecta solo aquellos que puede conectar por condición.

Por ejemplo:

DE

CONEXIÓN COMPLETA
Directorio.Bancos CÓMO Bancos

POR

El lenguaje de consulta devolverá ambas tablas completamente solo si se cumple la condición para unir los registros. A diferencia de una unión izquierda/derecha, es posible que NULL aparezca en dos campos.

UNIR INTERNAMENTE

UNIR INTERNAMENTE se diferencia del completo en que muestra solo aquellos registros que podrían conectarse según una condición determinada.

Por ejemplo:

DE
Directorio Contrapartes AS Clientes

UNIR INTERNAMENTE
Directorio.Bancos CÓMO Bancos

POR
Clientes.Nombre = Bancos.Nombre

Esta consulta devolverá sólo filas en las que el banco y la contraparte tengan el mismo nombre.

Asociaciones

Las construcciones JOIN y JOIN ALL combinan dos resultados en uno. Aquellos. el resultado de realizar dos se “fusionará” en uno común.

Es decir, el sistema funciona exactamente igual que los normales, solo que para una tabla temporal.

Cómo utilizar ÍNDICE POR

Sin embargo, conviene tener en cuenta un punto. La creación de un índice en una tabla temporal también lleva tiempo. Por lo tanto, es aconsejable utilizar la construcción " " sólo si se sabe con certeza que habrá más de 1 o 2 registros en la tabla temporal. De lo contrario, el efecto puede ser el contrario: el rendimiento de los campos indexados no compensa el tiempo necesario para crear el índice.

ELEGIR
Tipos de cambio Última sección transversal Moneda AS Moneda,
Tipos de cambio Última sección transversal.
Tipos de cambio PUT
DE
Registro de información.Tipos de moneda.Último segmento (y período) AS Tipos de cambioÚltimo segmento
ÍNDICE POR
Divisa
;
ELEGIR
PreciosNomenclatura.Nomenclatura,
PreciosNomenclaturas.Precio,
PreciosNomenclaturas.Moneda,
Tipos de cambio.Tasa
DE
Registro de información.Nomenclatura Precios.Último tramo(&Periodo,
Nomenclatura B (&Nomenclatura) AND PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN Tipos de cambio AS Tipos de cambio
Precios de softwareNomenclaturas.Moneda = Tipos de cambio.Moneda

Agrupamiento

El lenguaje de consulta 1C le permite utilizar funciones agregadas especiales al agrupar los resultados de la consulta. La agrupación también se puede utilizar sin funciones agregadas para "eliminar" duplicados.

Existen las siguientes funciones:

Importe, Cantidad, Número de diferentes, Máximo, Mínimo, Promedio.

Ejemplo 1:

ELEGIR
Ventas de Bienes y Servicios Bienes Nomenclatura,
SUMA(Ventas de BienesServiciosBienes.Cantidad) COMO Cantidad,
SUMA(Ventas de BienesServiciosBienes.Monto) COMO Monto
DE

AGRUPAR POR
Ventas de Bienes y Servicios Bienes Nomenclatura

La solicitud recibe todas las líneas con mercancías y las resume por cantidad y montos por artículo.

Ejemplo No. 2

ELEGIR
Código.de.bancos,
CANTIDAD (DIFERENTES Bancos.Enlace) COMO Número de duplicados
DE
Directorio.Bancos CÓMO Bancos
AGRUPAR POR
Código.de.bancos

Este ejemplo mostrará una lista de BIC en el directorio "Bancos" y mostrará cuántos duplicados existen para cada uno de ellos.

Resultados

Los resultados son una forma de obtener datos de un sistema con una estructura jerárquica. Las funciones agregadas se pueden utilizar para campos de resumen, al igual que para agrupaciones.

Una de las formas más populares de utilizar los resultados en la práctica es la cancelación de bienes por lotes.

ELEGIR




DE
Documento Ventas de Bienes y Servicios Bienes CÓMO Venta de Bienes y Servicios Bienes
ORDENAR POR

RESULTADOS
SUMA(Cantidad),
SUMA(Suma)
POR
Nomenclatura

El resultado de la consulta será el siguiente jerárquico:

Resultados generales

Si necesita obtener totales para todos los "totales", utilice el operador "GENERAL".

ELEGIR
Ventas de Bienes y Servicios Bienes Nomenclatura AS Nomenclatura,
Ventas de Bienes y Servicios Bienes Enlace AS Documento,
Ventas de Bienes y Servicios Bienes Cantidad AS Cantidad,
Ventas de Bienes y Servicios Bienes Monto AS Monto
DE
Documento Ventas de Bienes y Servicios Bienes CÓMO Venta de Bienes y Servicios Bienes
ORDENAR POR
Ventas de Bienes y Servicios Bienes Enlace Fecha
RESULTADOS
SUMA(Cantidad),
SUMA(Suma)
POR
SON COMUNES,
Nomenclatura

Como resultado de ejecutar la solicitud, obtenemos el siguiente resultado:

En el cual 1 nivel de agrupación es la agregación de todos los campos necesarios.

arreglando

El operador ORDER BY se utiliza para ordenar el resultado de una consulta.

La clasificación por tipos primitivos (cadena, número, booleano) sigue las reglas habituales. Para los campos de tipo de referencia, la clasificación se realiza según la representación interna del enlace (el identificador único), en lugar de por código o representación de referencia.

ELEGIR

DE
Directorio.Nomenclatura AS Nomenclatura
ORDENAR POR
Nombre

La solicitud mostrará una lista de nombres en el directorio de nomenclatura, ordenados alfabéticamente.

Pedido automático

El resultado de una consulta sin ordenar es un conjunto de filas presentadas de forma caótica. Los desarrolladores de la plataforma 1C no garantizan que las filas se muestren en la misma secuencia al ejecutar consultas idénticas.

Si necesita mostrar los registros de la tabla en un orden constante, debe utilizar la construcción Orden automático.

ELEGIR
Nomenclatura.Nombre AS Nombre
DE
Directorio.Nomenclatura AS Nomenclatura
PEDIDO AUTOMÁTICO

Mesas virtuales

Las tablas virtuales en 1C son una característica única del lenguaje de consulta 1C que no se encuentra en otras sintaxis similares. Una mesa virtual es una forma rápida de obtener información de perfil de los registros.

Cada tipo de registro tiene su propio conjunto de tablas virtuales, que pueden diferir según la configuración del registro.

  • corte del primero;
  • corte de este último.
  • sobras;
  • revoluciones;
  • saldos y facturación.
  • movimientos desde subconto;
  • revoluciones;
  • velocidad Dt Kt;
  • sobras;
  • saldos y facturación
  • subconto.
  • base;
  • datos gráficos;
  • período de validez real.

Para el desarrollador de la solución, los datos se toman de una tabla (virtual), pero en realidad la plataforma 1C toma de muchas tablas y las transforma al formato requerido.

ELEGIR
Productos en Almacenes Restos y Rotación Nomenclatura,
Productos en almacenes restantes y volumen de negocios. Cantidad inicial restante,
ProductosEnAlmacenesRemainsAndTurnover.CantidadRotación,
GoodsInWarehousesRemainsAndTurnover.CantidadEntrante,
BienesEnAlmacenesRemainsAndTurnover.CantidadConsumo,
ProductosEnAlmacenesRestantesYFacturación.CantidadFinalRestante
DE
RegistrarAcumulaciones.BienesEnAlmacén.RemainsAndTurnover COMO BienesEnAlmacénRemainsAndTurnover

Esta consulta le permite recuperar rápidamente una gran cantidad de datos.

Opciones de mesa virtual

Un aspecto muy importante al trabajar con tablas virtuales es el uso de parámetros. Los parámetros de la tabla virtual son parámetros especializados para selección y configuración.

Para este tipo de tablas, se considera incorrecto utilizar la selección en la construcción "DÓNDE". Además del hecho de que la consulta no es óptima, es posible recibir datos incorrectos.

Un ejemplo de uso de estos parámetros:

Registro de Acumulaciones Mercancías en Almacenes Saldos y Rotaciones (& Inicio del Período, & Fin del Período, Mes, Movimientos y Fronteras del Período, Nomenclatura = & Nomenclatura Requerida)

Algoritmo para tablas virtuales

Por ejemplo, la tabla virtual más utilizada del tipo “Restos” almacena datos de dos tablas físicas: saldos y movimientos.

Cuando se utiliza una mesa virtual, el sistema realiza las siguientes manipulaciones:

  1. Obtenemos el valor calculado más cercano en términos de fecha y medidas en la tabla de totales.
  2. “Sumamos” el importe de la tabla de movimientos al importe de la tabla de totales.


Acciones tan simples pueden mejorar significativamente el rendimiento del sistema en su conjunto.

Usando el generador de consultas

Consultor de construcción– una herramienta integrada en el sistema 1C Enterprise que facilita enormemente el desarrollo de consultas de bases de datos.

El generador de consultas tiene una interfaz bastante sencilla e intuitiva. Sin embargo, veamos con más detalle el uso del constructor de consultas.

El constructor de texto de consulta se inicia desde el menú contextual (botón derecho del mouse) en el lugar deseado en el código del programa.

Descripción del constructor de solicitudes 1C

Veamos cada pestaña del diseñador con más detalle. La excepción es la pestaña Constructor, que es un tema para otra discusión.

Pestaña Tablas y campos

Esta pestaña especifica la fuente de datos y los campos que deben mostrarse en el informe. En esencia, aquí se describen las construcciones SELECT.. FROM.

La fuente puede ser una tabla de base de datos física, una tabla de registro virtual, tablas temporales, consultas anidadas, etc.

En el menú contextual de las tablas virtuales, puede configurar los parámetros de la tabla virtual:

Pestaña de conexiones

La pestaña se utiliza para describir conexiones de varias tablas y crea construcciones con la palabra CONEXIÓN.

Pestaña de agrupación

En esta pestaña, el sistema le permite agrupar y resumir los campos requeridos del resultado de la tabla. Describe el uso de las construcciones GRUPO POR, SUMA, MÍNIMO, PROMEDIO, MÁXIMO, CANTIDAD, NÚMERO DE DIFERENTES.

Pestaña de condiciones

Responsable de todo lo que viene en el texto de la solicitud después de la construcción WHERE, es decir, de todas las condiciones impuestas a los datos recibidos.

Lengüeta avanzada

Pestaña Además repleto de todo tipo de parámetros que son muy importantes. Veamos cada una de las propiedades.

Agrupamiento Seleccionar registros:

  • Primero N– un parámetro que devuelve solo N registros a la consulta (el PRIMER operador)
  • Sin duplicados– asegura la unicidad de los registros recibidos (operador DIFERENTE)
  • Permitido– le permite seleccionar solo aquellos registros que el sistema le permite seleccionar teniendo en cuenta (construcción PERMITIDA)

Agrupamiento Tipo de solicitud determina qué tipo de solicitud será: recuperación de datos, creación de una tabla temporal o destrucción de una tabla temporal.

Debajo hay una bandera Bloquear los datos recibidos para su posterior modificación. Le permite habilitar la capacidad de configurar el bloqueo de datos, lo que garantiza la seguridad de los datos desde el momento en que se leen hasta que se modifican (relevante solo para el modo de bloqueo automático, diseño PARA CAMBIO).

Ficha Uniones/Alias

En esta pestaña del diseñador de consultas, puede configurar la capacidad de unir diferentes tablas y alias (la construcción CÓMO). Las tablas están indicadas en el lado izquierdo. Si configura las banderas frente a la mesa, se utilizará la construcción UNITE; de lo contrario, UNITE ALL (diferencias entre los dos métodos). En el lado derecho se indica la correspondencia de campos en diferentes tablas, si no se especifica la correspondencia la consulta devolverá NULL.

Pestaña de pedido

Esto especifica el orden en que se ordenan los valores (ORDER BY): descendente (DESC) o ascendente (ASC).

También hay una bandera interesante: Pedido automático(en la solicitud - PEDIDO AUTOMÁTICO). De forma predeterminada, el sistema 1C muestra los datos en un orden "caótico". Si configura esta bandera, el sistema ordenará los datos por datos internos.

Pestaña Consultar lote

En la pestaña del diseñador de consultas, puede crear otras nuevas y también utilizarlas como navegación. En el texto de la solicitud, los paquetes están separados por el símbolo “;” (coma).

Botón “Consulta” en el diseñador de consultas

En la esquina inferior izquierda del diseñador de solicitudes hay un botón Solicitar, con el que puede ver el texto de la solicitud en cualquier momento:

En esta ventana, puede realizar ajustes a la solicitud y ejecutarla.


Usando la consola de consultas

Query Console es una forma sencilla y cómoda de depurar consultas complejas y obtener información rápidamente. En este artículo, intentaré describir cómo usar Query Console y proporcionaré un enlace para descargar Query Console.

Echemos un vistazo más de cerca a esta herramienta.

Descargar la consola de consultas 1C

En primer lugar, para comenzar a trabajar con la consola de consulta, debe descargarla desde algún lugar. Los tratamientos suelen dividirse en dos tipos: formas controladas y convencionales (o, a veces, se denominan 8.1 y 8.2/8.3).

Intenté combinar estas dos vistas en un solo procesamiento: el formulario deseado se abre en el modo operativo deseado (en el modo administrado, la consola solo funciona en modo grueso).

Descripción de la consola de consulta 1C

Comencemos mirando la consola de consultas con una descripción del panel de procesamiento principal:

En el encabezado de la consola de consultas, puede ver el tiempo de ejecución de la última consulta con una precisión de milisegundos, esto le permite comparar diferentes diseños en términos de rendimiento.

El primer grupo de botones en la barra de comandos es responsable de guardar las consultas actuales en un archivo externo. Esto es muy conveniente, siempre puedes volver a escribir una solicitud compleja. O, por ejemplo, almacenar una lista de ejemplos típicos de determinados diseños.

A la izquierda, en el campo "Solicitud", puede crear nuevas solicitudes y guardarlas en una estructura de árbol. El segundo grupo de botones se encarga de gestionar la lista de solicitudes. Utilizándolo puede crear, copiar, eliminar y mover una solicitud.

  • Ejecutarpedido– ejecución y resultados simples
  • Ejecutar paquete– le permite ver todas las consultas intermedias en un lote de consultas
  • Ver tablas temporales– le permite ver los resultados que devuelven las consultas temporales en una tabla

Parámetros de solicitud:

Le permite configurar los parámetros actuales para la solicitud.

En la ventana de parámetros de consulta, es interesante lo siguiente:

  • Botón Obtener de la solicitud encuentra automáticamente todos los parámetros en la solicitud para comodidad del desarrollador.
  • Bandera Parámetros comunes para todas las solicitudes.– cuando está instalado, su procesamiento no borra los parámetros al pasar de una solicitud a otra en la lista general de solicitudes.

Establecer un parámetro con una lista de valores Es muy simple, simplemente al elegir un valor de parámetro, haga clic en el botón borrar valor (cruz), el sistema le pedirá que seleccione el tipo de datos, donde deberá seleccionar “Lista de valores”:

También en el panel superior hay un botón para abrir la configuración de la consola de consulta:

Aquí puede especificar parámetros para consultas de guardado automático y parámetros de ejecución de consultas.

El texto de la solicitud se ingresa en el campo de solicitud de la consola. Esto se puede hacer simplemente escribiendo una prueba de consulta o llamando a una herramienta especial: el diseñador de consultas.

El diseñador de consultas 1C 8 se llama desde el menú contextual (botón derecho del mouse) cuando hace clic en el campo de entrada:

Este menú también tiene funciones tan útiles como borrar o agregar saltos de línea (“|”) a la solicitud, o recibir el código de solicitud en esta conveniente forma:

Solicitud = Nueva Solicitud;
Solicitud.Texto = "
|SELECCIONAR
| Monedas.Enlace
|DESDE
| Directorio.Monedas AS Monedas”;
SolicitudResultado = Solicitud.Execute();

El campo inferior de la consola de consultas muestra el campo de resultado de la consulta, razón por la cual se creó este procesamiento:



Además, la consola de consultas, además de la lista, puede mostrar datos en forma de árbol, para consultas que contienen totales.

Optimización de consultas

Uno de los puntos más importantes para aumentar la productividad de 1C Enterprise 8.3 es mejoramientopeticiones. Este punto también es muy importante cuando pasando la certificación. A continuación, hablaremos sobre las razones típicas por las que el rendimiento de las consultas y los métodos de optimización no son óptimos.

Selecciones en una tabla virtual usando la construcción WHERE

Es necesario aplicar filtros a los detalles de la tabla virtual solo a través de los parámetros VT. Bajo ninguna circunstancia debe utilizar la construcción WHERE para seleccionar en una tabla virtual; esto es un grave error desde el punto de vista de la optimización. En el caso de seleccionar mediante DÓNDE, de hecho, el sistema recibirá TODOS los registros y solo entonces seleccionará los necesarios.

BIEN:

ELEGIR

DE
Registro de Acumulaciones Liquidaciones mutuas con Participantes de Organizaciones Saldos (
,
Organización = &Organización
Y Individual = &Individual) CÓMO Liquidaciones mutuas con Participantes de Organizaciones Saldos

EQUIVOCADO:

ELEGIR
Liquidaciones mutuas con Participantes de Organizaciones Saldos Monto Saldo
DE
Registro de Acumulaciones Liquidaciones mutuas con Participantes de Organizaciones Saldos (,) CÓMO Liquidaciones mutuas con Participantes de Organizaciones Saldos
DÓNDE
Liquidaciones mutuas con Participantes de Organizaciones Saldos Organización = & Organización
Y Liquidaciones mutuas con Participantes de Organizaciones Saldos Individual = &Individual

Obtener el valor de un campo de tipo complejo usando un punto

Al recibir datos de tipo complejo en una consulta a través de un punto, el sistema conecta con una unión izquierda exactamente tantas tablas como tipos posibles haya en el campo del tipo complejo.

Por ejemplo, para la optimización es muy indeseable acceder al campo de registro: registrador. El registrador tiene un tipo de datos compuesto, entre los que se encuentran todos los tipos de documentos posibles que pueden escribir datos en el registro.

EQUIVOCADO:

ELEGIR
Conjunto de registros.Grabador.Fecha,
RecordSet.Cantidad
DE
RegistrarAcumulaciones.ProductosOrganizaciones AS SetRecords

Es decir, de hecho, dicha consulta accederá no a una tabla, sino a 22 tablas de bases de datos (este registro tiene 21 tipos de registradores).

BIEN:

ELEGIR
ELECCIÓN
CUANDO ProductosOrg.Registrar LINK Documento.Ventas de Productos y Servicios
ENTONCES EXPRESS(ProductosOrganización.Registrador COMO Documento.Ventas de BienesServicios).Fecha
CUANDO GoodsOrg.Registrar LINK Documento.Recepción de BienesServicios
ENTONCES EXPRESS(GoodsOrg.Registrar AS Documento.Recepción de BienesServicios).Fecha
FINALIZAR COMO FECHA,
ProductosOrg.Cantidad
DE
RegistroAcumulaciones.ProductosOrganizaciones AS ProductosOrganización

O la segunda opción es agregar dicha información a los detalles, por ejemplo, en nuestro caso, agregando una fecha.

BIEN:

ELEGIR
ProductosOrganizaciones.Fecha,
ProductosOrganizaciones.Cantidad
DE
Registro de Acumulaciones Bienes de Organizaciones AS Bienes de Organizaciones

Subconsultas en una condición de unión

Para la optimización, es inaceptable utilizar subconsultas en condiciones de unión, ya que esto ralentiza significativamente la consulta. Es aconsejable utilizar VT en tales casos. Para conectarse, debe utilizar solo metadatos y objetos VT, habiéndolos indexado previamente por campos de conexión.

EQUIVOCADO:

ELEGIR …

UNIRSE A LA IZQUIERDA (
SELECCIONE DE RegisterInformation.Limits
DÓNDE …
AGRUPAR POR...
) POR …

BIEN:

ELEGIR …
Límites de colocación
DESDE Registro de Información.Límites
DÓNDE …
AGRUPAR POR...
ÍNDICE POR...;

ELEGIR …
DE Documento Ventas de bienes y servicios.
Límites de UNIÓN IZQUIERDA
POR …;

Unir registros con tablas virtuales

Hay situaciones en las que, al conectar una mesa virtual a otras, el sistema no funciona de forma óptima. En este caso, para optimizar el rendimiento de la consulta, puede intentar colocar la tabla virtual en una tabla temporal, sin olvidar indexar los campos unidos en la consulta de la tabla temporal. Esto se debe a que los VT suelen estar contenidos en varias tablas DBMS físicas, por lo que se compila una subconsulta para seleccionarlos y el problema resulta similar al punto anterior.

Usar selecciones basadas en campos no indexados

Uno de los errores más comunes al escribir consultas es utilizar condiciones en campos no indexados, esto contradice reglas de optimización de consultas. El DBMS no puede ejecutar una consulta de manera óptima si la consulta incluye una selección en campos no indexables. Si toma una tabla temporal, también necesita indexar los campos de conexión.

Debe haber un índice adecuado para cada condición. Un índice adecuado es aquel que satisface los siguientes requisitos:

  1. El índice contiene todos los campos enumerados en la condición.
  2. Estos campos se encuentran al principio del índice.
  3. Estas selecciones son consecutivas, es decir, los valores que no están involucrados en la condición de consulta no están "encajados" entre ellos.

Si el DBMS no selecciona los índices correctos, se escaneará toda la tabla; esto tendrá un impacto muy negativo en el rendimiento y puede provocar un bloqueo prolongado de todo el conjunto de registros.

Usando OR lógico en condiciones

Eso es todo, este artículo cubrió los aspectos básicos de la optimización de consultas que todo experto de 1C debería conocer.

Un curso en vídeo gratuito muy útil sobre desarrollo y optimización de consultas. Lo recomiendo¡Para principiantes y más!

El artículo proporciona técnicas útiles al trabajar con consultas 1C v.8.2, así como información no tan conocida sobre el lenguaje de consulta. No me esfuerzo por dar una descripción completa del lenguaje de consulta, pero quiero detenerme solo en algunos puntos que pueden ser útiles para alguien.

Vamos a empezar. Una solicitud es un objeto especial en 1C 8.2, que se utiliza para generar y ejecutar consultas en tablas de bases de datos en el sistema. Para ejecutar una consulta, debe redactar un texto de consulta que describa qué tablas se utilizarán como fuentes de datos de consulta, qué campos deben seleccionarse, qué ordenaciones y agrupaciones aplicar, etc. Puede leer más sobre consultas en el libro "Guía del desarrollador de 1C 8.2". El lenguaje de consulta 1C 8.2 es muy similar en sintaxis a otros lenguajes de consulta de bases de datos SQL, pero también existen diferencias. Entre las principales ventajas del lenguaje de consulta integrado, cabe destacar la desreferencia de campos, la presencia de tablas virtuales, el trabajo conveniente con totales y campos sin escribir en las consultas. Las desventajas son que no puede utilizar una consulta como campo de salida, no puede utilizar procedimientos almacenados y no puede convertir una cadena en un número.

Proporcionaré información y recomendaciones sobre el lenguaje de consulta punto por punto:
1. Para aumentar la legibilidad de la solicitud y reducir la cantidad de parámetros de solicitud, puede usar un literal para acceder a datos de configuración predefinidos en la solicitud. VALOR (REPRESENTACIÓN DEL VALOR). Como representación de valores, los valores de enumeraciones, datos predefinidos de directorios, planes de tipos de cálculo, planes de tipos de características, planes de cuentas, enlaces vacíos, valores de puntos de ruta, valores de transferencias del sistema ( por ejemplo, se puede utilizar Tipo de movimiento de acumulación, Tipo de cuenta).
Ejemplos:

DONDE Ciudad = VALOR(Directorio.Ciudades.Moscú)
DONDE Ciudad = VALOR(Directorio.Ciudades.EmptyLink)
DONDEProductType = VALOR(Enumeración.ProductTypes.Service)
DONDETipoMovimiento = VALOR(AcumulaciónTipoMovimiento.Entrante)
DÓNDE está el punto de ruta =
VALOR(Proceso de Negocio.Acuerdo.Punto de Ruta.Acuerdo)

La expresión entre paréntesis siempre comienza con una palabra singular (Directorio, Enumeración, etc.) que coincide con el tipo de valor predefinido.

2.El pedido automático en una consulta puede ralentizar considerablemente el proceso. Si no es necesario clasificar, es mejor no utilizarlo en absoluto. En muchos casos, es más eficaz escribir la clasificación mediante una palabra clave. ORDENAR POR.

3. Debe asegurarse de que al utilizar alias no aparezca un campo ambiguo. De lo contrario, el sistema no entenderá a qué objeto se debe acceder.
Ejemplo de solicitud con un campo ambiguo:
ELEGIR
Nomenclatura.Enlace,
Bienes restantesRemanentes.CantidadRemanente
DE
Directorio.Nomenclatura AS Nomenclatura
CONEXIÓN IZQUIERDA Registro Acumulaciones Resto Bienes Restante AS Resto Bienes Restante
Software Restante ProductosRemaining.Nomenclature = Nomenclature.Link
Es necesario corregir el alias de la tabla, por ejemplo, así: “Directorio.Nomenclatura AS Nomenclatura1”, y “Nomenclatura.Enlace” debe corregirse de acuerdo a “Nomenclatura1.Enlace”.

4.A veces es útil obtener una representación de los campos de referencia mediante una palabra clave. ACTUACIÓN junto con un enlace para que no haya accesos repetidos a la base de datos. Esto es útil cuando se muestra el resultado de una consulta en una tabla.
Ejemplo:
ELEGIR
REPRESENTACIÓN(Documento.Contraparte) COMO Destinatario,
PRESENTACIÓN(Documento.Base)
DE
Documento.Factura AS Documento

5.Usar en una solicitud EXPRESS (campo como tipo) le permite eliminar tablas innecesarias de una conexión con un campo de un tipo de datos complejo. Acelerando así la ejecución de la solicitud.
Ejemplo (registrador es un campo de tipo compuesto para la tabla física del registro de acumulación de Resto de Mercancías, en la solicitud se selecciona Fecha y Número de documentos Recepción de Mercancías, mientras que al acceder al detalle del documento Fecha y Número mediante el Registrador, no existe conexión múltiple de la tabla de registro con tablas de documentos que son registradores para el registro de Restos de Mercancías):
SELECCIONA VARIOS[b] EXPRESS(Bienes Restantes. Registrador COMO Documento. Recibo de Bienes). Número COMO NÚMERO DE RECIBO,
[b] EXPRESS(Mercancías Restantes. Registrador COMO Documento.Recepción de Mercancías).Fecha COMO FECHA DE RECIBO
[b]DESDE Registro de Acumulaciones Bienes Restantes COMO Bienes Restantes DÓNDE (EXPRESS(Bienes Restantes. Registrador AS Documento. Recepción de Bienes) NO ES NULO)

6.Cuando en la configuración 1C hay usuarios que tienen derechos limitados sobre ciertos objetos de configuración, se debe utilizar la palabra clave en la solicitud a dichos objetos. PERMITIDO para que la solicitud se ejecute sin error (Seleccione Permitido...)

7.Al fusionar tablas que contienen tablas anidadas (por ejemplo, un documento con una parte tabular), la palabra clave puede resultar útil MESA VACÍA cuando, por ejemplo, uno de los documentos no tenga parte tabular.
Ejemplo:
SELECCIONE Enlace.Número, TABLA VACÍA.(Nº, Artículo, Cantidad) COMO Composición

COMBINA TODO
SELECCIONAR Enlace.Número, Composición.(Número de Línea, Nomenclatura, Cantidad)
DESDE Documento.Factura

8.Cuando se trabaja con combinaciones de tablas que contienen una fila cada una, puede ser necesario fusionar las filas de las tablas (en ambas tablas no hay ningún campo mediante el cual se puedan unir). Esto se puede lograr utilizando la construcción " Tabla de CONEXIÓN COMPLETA por VERDADERO" Si las tablas tienen más de una fila, el resultado será un número de filas igual al producto del número de filas de ambas tablas. Si hay O filas en una tabla, entonces el número de filas en la tabla resultante será igual al número de filas en la segunda tabla. Además, para conectar dichas tablas, puede utilizar el producto cartesiano de tablas, en el que todas las combinaciones de filas de ambas tablas aparecerán en la tabla resultante. Debemos recordar que si hay 0 filas en una de las tablas, entonces el producto cartesiano será 0, por lo que será mejor una unión completa. En general, en lugar de una conexión completa POR VERDADERO Puede utilizar cualquier otro tipo de combinación, pero en este caso también es posible que la tabla resultante tenga 0 filas, incluso si una de las tablas tiene un número de filas distinto de cero. En el caso de una combinación completa, esta situación solo ocurrirá en un caso, si el número de filas en ambas tablas es 0. Si sabe que hay exactamente al menos una fila en la tabla, entonces puede usar CONEXIÓN IZQUIERDA con otra mesa con condición POR VERDADERO.
Ejemplo (ciertamente artificial, para unión completa):
ELEGIR
Primero 1
Enlace.de.género,
K. Contraparte
DE
Enumeración Género AS Género
CONEXIÓN COMPLETA (Seleccione Primero 1 D. Contraparte DEL Documento. Ventas de bienes CÓMO D Organizar por D. Momento de tiempo) CÓMO
ENCENDIDO (VERDADERO)

9. Para obtener registros únicos para un determinado campo, es más correcto utilizar una palabra clave en lugar de agrupar VARIOS en la solicitud, porque esta construcción es mucho más clara y la palabra clave AGRUPAR POR tiene una aplicación más amplia y se usa a menudo si además es necesario calcular funciones agregadas por agrupaciones. En algunos casos es necesario generar un número limitado de líneas. Para hacer esto, debe especificar la palabra clave en la descripción de la solicitud. PRIMERO y después, el número requerido de líneas.
Ejemplo para PRIMERO:
Seleccione los primeros 5
Directorio.Nomenclatura.Nombre,
Directorio.Nomenclatura.PrecioDeCompra
Ordenar por
Directorio.Nomenclatura.PrecioDeCompra Descendente
Ejemplo para VARIOS:
Seleccione Varios
Documento.Consumible.Contraparte

10. Las funciones de agregación en una consulta se pueden utilizar sin una palabra clave. GRUPO. En este caso, todos los resultados se agruparán en una sola línea.
Ejemplo:
Elegir
Importe(Factura.Importe) Como importe
De
Documento.Factura.Composición Como Factura

11.En consultas en los campos de selección, podrá acceder libremente al detalle de los campos de selección. Esta característica se llama desreferenciación de campos seleccionados. Si la fuente de datos es una tabla anidada (parte tabular del documento), entonces en los campos de selección también puede acceder a los campos de la tabla principal (por ejemplo, a través del campo Enlace, acceder al campo de la tabla principal Cuenta)
Ejemplo:
ELEGIR[b] Recepción de Bienes y Servicios Bienes Cantidad AS Cantidad, Recepción de Bienes y ServiciosBienes.Enlace.Contraparte DE DÓNDE
Existe una peculiaridad al utilizar la desreferenciación de campos si hay agrupaciones en la solicitud. En cualquier consulta con agrupaciones en las listas de campos de consulta, podrá acceder libremente al detalle de los campos de agrupación.
Ejemplo:
ELEGIR
Recepción de Bienes y Servicios Bienes Nomenclatura,
Recepción de Bienes y Servicios Bienes Nomenclatura Código,
SUMA (Recepción de Bienes y Servicios Bienes. Cantidad) AS Cantidad,
Recepción de Bienes y ServiciosBienes.Enlace.Contraparte,
Recepción de Bienes y ServiciosBienes.Enlace.Fecha
DE
Documento Recepción de Bienes y Servicios Bienes CÓMO Recepción de Bienes y Servicios Bienes
DÓNDE
Recepción de Bienes y ServiciosGoods.Link = &Link
AGRUPAR POR
Recepción de Bienes y Servicios Bienes Nomenclatura,
Recepción de Bienes y ServiciosGoods.Link
La ayuda de 1C dice que si hay agrupación, solo los campos de agrupación y las funciones agregadas para los campos de selección pueden participar en los campos de selección de consulta. Hay un caso excepcional en el que se aplican funciones agregadas a campos de una tabla anidada. En este caso, en la lista de campos de selección, es posible acceder a los campos de la tabla de nivel superior, sin agrupar los resultados por estos campos.
Ejemplo:
ELEGIR
Recepción de Bienes y Servicios Bienes (SUM (Cantidad), Nomenclatura),
Recepción de Bienes y Servicios Enlace,
Recepción de Bienes y Servicios Contraparte
DE
Documento Recepción de Bienes y Servicios CÓMO Recepción de Bienes y Servicios
AGRUPAR POR
Recepción de Bienes y Servicios Bienes (Nomenclatura)

12. A veces, en lugar de especificar cualquier campo en la agrupación, es útil incluir el siguiente parámetro en los campos de selección de consulta:
ELEGIR DocProducts.Nomenclatura, &contraparte, &Período, SUMA(DocProducts.Cantidad * DocProducts.K) AS Cantidad, SUM(DocProducts.Importe) COMO Importe DE Documento.Admisión.Productos AS DocProducts DÓNDE DocProducts.Link = &Enlace
AGRUPAR POR DocProducts.Nomenclatura
Y luego configure el parámetro en el cuerpo de la solicitud:
Request.SetParameter("&Cuenta", SeleccionarCuenta);
Query.SetParameter("&Período", Fecha);

13. En consultas universales, los parámetros se pueden utilizar en la descripción de las fuentes de datos de la consulta, en las condiciones DÓNDE, en las condiciones de unión de tablas y parámetros de tablas virtuales. Existen dos técnicas para crear consultas genéricas:
A) utilizando el mecanismo de concatenación de cadenas, agregando variables al texto de la solicitud;
Ejemplo 1:

Tipo de pedido = ?(ALGUNA VARIABLE",","DESC");
Query.Text = "Seleccionar... Organizar POR Campo1 " + Tipo de pedido + "...";
Ejemplo2:
Query.Text = "Seleccione campo1...";

Si ALGUNA VARIABLE = 1 Entonces
Solicitud.Texto = Solicitud.Texto + ",Campo2 ...";
terminara si;
B) usar parámetros en varias partes de la solicitud (por ejemplo, en la sección de fuentes de datos de la solicitud) y luego el método de lenguaje integrado: LUGAR(). Al diseñar consultas universales, es útil acceder a la propiedad de los objetos. METADATOS(), con el que puedes determinar el nombre de la tabla para algún enlace (por ejemplo, para un documento será algo como esto: Enlace . METADATA().NOMBRE), pasado a través de un parámetro a algún procedimiento universal.
Ejemplo:
Elegir
DocTch.Nomenclatura,
...
DE
&Algunos DocTC AS DocTC
Y luego establezca el parámetro en el cuerpo de la solicitud.
Solicitud.Texto = StrReplace(Request.Text, "&SomeDocTCH", "Documento."+Link.Metadata().Nombre+".Productos");

Los parámetros se pueden utilizar en condiciones de consulta para habilitar una condición opcional. &Parámetro O NO AlgunaPropiedad:
Request.SetParameter(“&Parámetro”, “Counterparty.Name=””Ivanov”””);
Usando un literal VERDADERO Puedes eliminar ciertos filtros en la solicitud.
Request.SetParameter("&Parámetro", Verdadero);

14.Muy útil en el diseñador de consultas es el comando del menú contextual de la tabla: " Cambiar nombre de tabla...", con el que puede encontrar algún nombre generalizado para la fuente de datos. Para crear consultas para tablas del mismo tipo, de estructura similar, puede resultar útil que la segunda tabla copie el texto de consulta de la primera tabla, vaya a la ventana del diseñador de consultas y seleccione el elemento en el menú contextual de la tabla - Reemplazar mesa... y seleccione la segunda tabla.

15. Cuando se trabaja con la creación de consultas anidadas en las secciones de condiciones o parámetros de tablas virtuales del diseñador de consultas, se utiliza la técnica de resaltar un espacio entre paréntesis, luego aparece el elemento "Diseñador de consultas" en el menú contextual, y al editar una consulta anidada, la consulta completa entre paréntesis se resalta en la condición.
Ejemplo de una consulta anidada:
Producto B (Seleccionar Producto...)

16. Al diseñar informes ACS en consultas para equilibrar registros, es más conveniente y correcto utilizar la expresión como parámetro Período. AddToDate(EndPeriod(Periodo,DÍA),SEGUNDO,1), ya que los saldos virtuales se obtienen al inicio del período, sin incluir el último segundo. La técnica de +1 segundo no se puede utilizar con documentos: según el nuevo método de contabilización de documentos, los saldos de registro deben recibirse para el Período especificado por el objeto Límite con el momento en el tiempo del documento incluido (y no en la fecha de la documento +1 segundo!), y según el antiguo método de publicación: en el momento del documento (¡y no en la fecha del documento!). Al analizar la facturación o los datos de un período, es conveniente agregar un parámetro con el tipo Periodo estándar(en este caso no es necesario indicar la última fecha del intervalo al final del día). Para el campo estándar “Inicio de Periodo”, en el campo “Expresión” se debe ingresar "&Período.Fecha de inicio" Y para el campo estándar “Fin del período” en el campo “Expresión” escriba “ &Período.Fecha de finalización". Se puede encontrar mucha información útil sobre el lenguaje de consulta no en el asistente de sintaxis, sino en la ayuda completa del configurador 1C 8.2 (botón F1).

17.Función de consulta Es nulo(es más conveniente escribir la versión en inglés Es nulo) se utiliza normalmente para deshacerse de los valores nulos de los campos de consulta numéricos. En algunos casos, por ejemplo, una unión completa de dos tablas, la función Es nulo (parámetro1, parámetro2) puede reemplazar con éxito el diseño ELECCIÓN CUÁNDO... ENTONCES...OTRA COSA...TERMINAR, cuando para cualquier campo los valores NULL pueden estar tanto en la primera tabla como en la segunda (esta construcción le permite obtener un valor no nulo para el campo). Pero debemos recordar que, a diferencia del operador condicional ELECCIÓN función Es nulo convierte el tipo del segundo argumento al tipo del primer argumento, que debe tenerse en cuenta si los tipos de argumentos son diferentes.
Ejemplo:
Es nulo (Reg. restante, 0)
Es nulo(Doc.Producto,Doc1.Artículo)

18. En la construcción condicional. ELECCIÓN Existe una sintaxis alternativa para el caso simple de probar la igualdad con un valor determinado, pero, sin embargo, no está documentada:
Expresión de elección Cuando 1 Luego “Alto” ​​Cuando 2 Luego “Medio” De lo contrario Final “Bajo”

19. Operador de verificación de valor NULO Sí nulo(Podemos recomendar el uso de la versión en inglés Es nulo). Esta construcción apareció porque cualquier operación que compare dos valores, al menos uno de los cuales sea nulo, siempre es falsa. Escribir Donde Nombre = Nulo equivocado. También es interesante la forma de negación de este operador. Sin nulo- mal, pero bien Sí No nulo o forma No (el campo 1 es nulo)- esta es una diferencia significativa con respecto a todos los operadores utilizados junto con el operador He.

20. A veces el formulario del operador es útil. EN para comprobar si hay una coincidencia con uno de los valores enumerados.
Ejemplo:
...¿Dónde está el Nombre del Producto B ("Electrodomésticos","Computadoras")
Para libros de referencia, el formulario del operador puede resultar útil. EN comprobaciones de pertenencia a la jerarquía.
Ejemplo:
...¿Dónde está la Nomenclatura EN LA JERARQUÍA (&Grupo)
Operador EN A menudo se utiliza para comprobar si un valor está incluido en el resultado de una subconsulta.
Ejemplo:
...Donde Nomenclatura.Enlace B (Seleccione Nomenclatura.Enlace...).
En una subconsulta, puede acceder a los campos de consulta externos en una condición.
Ejemplo:
//Selecciona los nombres de los productos que estaban presentes.
// en facturas
ELEGIR
Nombre del producto
DE
Directorio.Nomenclatura CÓMO Productos
DÓNDE
Productos.Enlace B
(ELEGIR
Composición de la factura. Nomenclatura
DE
Documento.Factura.Composición AS ComposiciónFactura
DÓNDE
ContenidoFactura.Nomenclatura = Productos.Enlace)
Operación EN se puede utilizar con matrices, listas de valores, tablas de valores, consultas anidadas. En este caso, es posible reducir las condiciones.
Sintaxis para una subconsulta
(expresión1, expresión2,...,expresiónN) En (Seleccione expresión1, expresión2,...,expresiónN...)
Sintaxis de la tabla de valores
(expresión1, expresión2,...,expresiónN) En (&TK), donde se utilizan las primeras N columnas en la tabla de valores TK

20. Hay un chiste en Internet sobre cómo siempre lo hace el diseñador de consultas. IZQUIERDA unir tablas (e intercambiarlas), sin importar cómo especifiquemos BIEN:
1C: A la empresa le encanta “a la izquierda”.

21. Es conveniente depurar consultas complejas en la consola de consultas. Hay muchos de ellos en Internet. Después de depurar la consulta, puede copiarla y en el diseñador de consultas hay un botón maravilloso “ Pedido", donde podrás pegarlo en el mismo formulario y guardarlo (anteriormente solo era posible copiarlo en el configurador y formatear la solicitud usando el carácter de salto de línea). En la ventana que se abre al hacer clic en el botón "Consulta", puede editar la consulta y ver el resultado de la ejecución, lo cual es bastante conveniente.

22. Al diseñar informes ACS, debe recordar que si necesita proporcionar filtrado por un campo determinado, no es necesario agregar un parámetro al texto de la solicitud. El Generador de consultas tiene una pestaña " Composición de datos", donde puede agregar parámetros a las condiciones. Además, en el nivel del informe ACS hay una pestaña de condiciones donde puede agregar condiciones arbitrarias y guardarlas en configuraciones rápidas. En este caso, las condiciones serán universales (igualdad, desigualdad, pertenencia, inclusión en la lista, etc.).

23. Cuando trabaje con documentos, es posible que necesite agregar clasificación por un campo de tabla virtual MOMENTO DEL TIEMPO, pero mala suerte: en consultas anidadas, la clasificación según este campo no funciona correctamente. Bailar con panderetas ayuda: ordenar por campo virtual MOMENTO DEL TIEMPO se reemplaza por dos clasificaciones: por fecha y por enlace. También puede resolver el problema mediante una tabla temporal moviendo la consulta anidada a una consulta separada. En muchas versiones, esta característica o error no se ha solucionado.
Un ejemplo de una solicitud defectuosa que recibe el último documento publicado para la contraparte especificada (o más bien, la parte tabular del documento):

ELEGIR
Productos consumibles.Enlace,
Consumibles.Número de línea,
Productos consumibles.Producto,
Artículos consumibles. Cantidad,
Productos consumibles Precio,
Artículos consumibles.Cantidad
DE

DÓNDE
Productos consumibles Enlace B
(SELECCIONE EL PRIMER 1
D. Enlace
DE
Documento.Consumible AS D
DÓNDE
D. Enlace Realizado

ORDEN POR D. Enlace (Momento del Tiempo DESCENDENTE)

Soluciones posibles:
A) Reemplazar con ORDENAR POR en
ORDEN POR D.Fecha DESC.
ORDEN POR D.Link DESCENDENTE

B) Puede mover la consulta anidada a una tabla temporal:
SELECCIONAR EL PRIMER 1
D. Enlace
Poner TZLink
DE
Documento.Consumible AS D
DÓNDE
D. Enlace Realizado
Y D.Contraparte = &Contraparte

ORDENAR POR
D. Enlace Momento del Tiempo DESCENDENTE
;

////////////////////////////////////////////////////////////////////////////////
ELEGIR
Productos consumibles.Enlace,
Consumibles.Número de línea,
Productos consumibles.Producto,
Artículos consumibles. Cantidad,
Productos consumibles Precio,
Artículos consumibles.Cantidad
DE
Documento.Consumibles.Bienes AS ConsumiblesBienes
DÓNDE
Productos consumibles Enlace B
(ELEGIR
T.Link
DE
TZLink AS T)
C) Puede consultar la tabla principal del documento, y solo entonces a la parte tabular
SELECCIONAR EL PRIMER 1
Consumible.Enlace,
Consumibles.Bienes.(
Enlace,
Número de línea,
Producto,
Cantidad,
Precio,
Suma
)
DE
Documento.Consumibles AS Consumibles
DÓNDE
Gasto.Contraparte = &Contraparte
Y Consumibles.Realizados

ORDENAR POR
Consumible. Momento de tiempo DISMINUCIÓN

24. Al acceder a la tabla principal de un documento (directorio), también puede acceder a los datos de la tabla subordinada (parte tabular). Esta oportunidad se llama campos de la tabla de desreferenciación. Un ejemplo de tarea es la tarea de buscar documentos que contengan un producto específico en la sección tabular.
Ejemplo:
Seleccione Recibo.Enlace DESDE Documento.Recibo Donde Recibo.Bienes.Nomenclatura = &Nomenclatura.

La ventaja de esta consulta sobre una consulta en la tabla anidada Recibo.Bienes es que si hay duplicados en los documentos, el resultado de la consulta devolverá solo documentos únicos sin usar la palabra clave. VARIOS.
Comparar:
Seleccione Varios Productos.Enlace DESDE Documento.Recibo.Productos como Productos Donde Productos.Nomenclatura = &Nomenclatura.
Probablemente esto sea todo lo que hay que hacer. Está claro que todavía quedan muchas preguntas en el lenguaje de consulta que no he cubierto. Para escribir este artículo, utilicé la información que recibí después de completar el curso básico 1C 8.2 spec8.ru, así como del libro "Guía del desarrollador 1C 8.2" y de Internet.
¡Gracias a todos!

En este artículo queremos comentarlo todo contigo. Funciones del lenguaje de consulta 1C, y construcciones del lenguaje de consulta. ¿Cuál es la diferencia entre función y diseño? La función se llama entre paréntesis y posibles parámetros en ellos, y la construcción se escribe sin paréntesis. Indudablemente todas las estructuras y funciones del lenguaje de consulta 1C hacer que el proceso de adquisición de datos sea flexible y multifuncional. Estas funciones y construcciones se aplican a los campos de consulta y algunas también se aplican a las condiciones.

Funciones del lenguaje de consulta 1C

Porque una descripción clara Funciones del lenguaje de consulta 1C es mucho menos común que las descripciones de estructuras, decidimos comenzar a buscar funciones. Ahora veamos cada uno por separado, describiendo su propósito, sintaxis y ejemplo de uso, así:

1. Función FECHA Y HORA- esta función crea un campo constante con el tipo "Fecha".

Sintaxis: FECHA Y HORA(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Ejemplo de uso:

2. Función DIFERENCIA DE FECHA- devuelve la diferencia entre dos fechas en una de las dimensiones (año, mes, día, hora, minuto, segundo). La medida se pasa como parámetro.

Sintaxis: FECHA DIFERENCIA(<Дата1>, <Дата2>, <Тип>)

Ejemplo de uso:

Query.Text = "SELECCIONAR | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Función VALOR- establece un campo constante con un registro predefinido de la base de datos; también puede obtener un enlace vacío de cualquier tipo.

Sintaxis: VALOR(<Имя>)

Ejemplo de uso:

Request.Text = "SELECT //elemento predefinido | VALOR(Directorio.Currencies.Dollar) AS Dólar, //enlace vacío | VALOR(Documento.Recibo de bienes y servicios.EmptyLink) AS Recibo, //valor de transferencia | VALOR(Transferencia . Persona Jurídica. Individuo) AS Individuo, //cuenta predefinida | VALOR(Plan de Cuentas. Autosostenible. Materiales) AS Cuenta_10" ;

4. Función SELECCIONAR- Tenemos ante nosotros un análogo de la construcción IF, que se usa en el código, solo este se usa en consultas 1C.

Sintaxis: ELECCIÓN CUÁNDO<Выражение>ENTONCES<Выражение>DE LO CONTRARIO<Выражение>FIN

Ejemplo de uso:

Request.Text = //si la cantidad es superior a 7500, entonces debería haber un descuento de 300 rublos, //por lo tanto, si se activa la condición, la función //devuelve Suma - 300 //de lo contrario, la solicitud devolverá simplemente Suma "SELECCIONAR | SELECCIONAR | CUANDO TCReceipts.Amount > 7500 | ENTONCES TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | FINALIZAR COMO MontoConDescuento | DESDE | Documento.Recepción de BienesServicios.Bienes COMO TCReceipts";

5. Función EXPRESA- le permite expresar un campo constante con un tipo específico.

Sintaxis: EXPRESS(Nombre de campo como nombre de tipo)

Ejemplo de uso:

Query.Text = "SELECCIONE VARIOS | Ventas.Registrar.Número, | SELECCIONAR | CUANDO Ventas.Registrar ENLACE Documento.Consumible | ENTONCES EXPRESAR(Ventas.Registrar COMO Documento.Consumible) | ELSE SELECCIONAR | CUANDO Ventas.Registrar ENLACE Documento.Implementación | ENTONCES EXPRESS(Ventas.Registrador COMO Documento.Implementación) | FIN | ... | FINALIZAR Número AS | DESDE | Registrar Acumulaciones.Compras COMO Compras";

¿Existe otra opción para utilizar la función EXPRESS en campos de tipos mixtos, dónde ocurren? El ejemplo más simple es el "Registrador" para cualquier registro. Entonces, ¿por qué podríamos necesitar calificar el tipo en el registrador? Consideremos la situación cuando seleccionamos el campo "Número" del registrador, ¿de qué tabla se seleccionará el número? ¡La respuesta correcta de todas! Por lo tanto, para que nuestra consulta funcione rápidamente, debemos especificar un tipo explícito usando la función EXPRESS

Ejemplo de uso:

Query.Text = "SELECCIONAR | EXPRESS(Nomenclatura.Comentario Línea AS(300)) COMO Comentario, | EXPRESS(Nomenclatura.Suma Número AS(15,2)) AS Suma |DESDE | Directorio.Nomenclatura AS Nomenclatura";

6. función ESNULO(ortografía alternativa ISNULL): si el campo es de tipo NULL, se reemplaza con el segundo parámetro de la función.

Sintaxis: ES NULO(<Поле>, <ПодставляемоеЗначение>)

Ejemplo de uso:

También tenga en cuenta que es aconsejable reemplazar SIEMPRE el tipo NULL con algún valor, porque la comparación con el tipo NULL siempre devuelve FALSO incluso si compara NULL con NULL. La mayoría de las veces, los valores NULL se forman como resultado de unir tablas (todos los tipos de uniones excepto las internas).

Query.Text = //Selecciona el artículo completo y sus saldos //si no hay saldo en algún artículo, entonces habrá un campo //NULL que será reemplazado con el valor 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Resto | FROM | Directorio.Nomenclatura AS No. | CONEXIÓN IZQUIERDA Registrar Acumulaciones. GoodsInWarehouses. Restos AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Nomenclatura = No. Enlace)";

7. Función REPRESENTACIÓN- le permite obtener una representación del campo de solicitud.

Sintaxis: ACTUACIÓN(<НаименованиеПоля>)

Ejemplo de uso:

Query.Text = "SELECCIONAR | REPRESENTACIÓN(FreeRemainingRemaining.Nomenclature) COMO Nomenclatura, | REPRESENTACIÓN(FreeRemaining.Warehouse) COMO Almacén, | FreeRemainingRemaining.InStockRemaining |DESDE |Registro de acumulación.FreeRemaining.Remaining COMO FreeRemainingRemaining";

Construcciones en el lenguaje de consulta 1C.

Hablamos contigo arriba Funciones del lenguaje de consulta 1C, ahora es el momento de considerar construcciones en el lenguaje de consulta 1C, no son menos importantes y útiles, comencemos.

1. ENLACE Construcción- es un operador lógico para comprobar un tipo de referencia. Se encuentra con mayor frecuencia al comparar un campo de un tipo complejo con un tipo específico. Sintaxis: ENLACE<Имя таблицы>

Ejemplo de uso:

Request.Text = //si el tipo de valor del registrador es documento Recibo, //entonces la consulta devolverá "Recepción de mercancías", en caso contrario "Ventas de mercancías" "SELECT | SELECT | WHEN Restos.Registrador LINK Documento.Recepción de mercancías y Servicios | ENTONCES ""Recibo"" | ELSE ""Consumo"" | FINALIZAR COMO Tipo de Movimiento | DESDE | Registro de Acumulación. Resto de Productos en Almacenes COMO Restos" ;

2. Diseño ENTRE- este operador comprueba si el valor está dentro del rango especificado.

Sintaxis: ENTRE<Выражение>Y<Выражение>

Ejemplo de uso:

Request.Text = //obtiene la nomenclatura completa cuyo código está en el rango de 1 a 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code ENTRE 1 Y 100" ;

3. Construcción B y B JERARQUÍA- comprobar si el valor está en la lista transferida (las matrices, tablas de valores, etc. se pueden transferir como lista). El operador EN JERARQUÍA le permite ver la jerarquía (un ejemplo de uso del Plan de cuentas).

Sintaxis: EN(<СписокЗначений>), EN JERARQUÍA(<СписокЗначений>)

Ejemplo de uso:

Request.Text = //seleccione todas las subcuentas de la cuenta "SELECCIONAR | Autosuficiente. Vincular AS Cuenta | DESDE | Plan de cuentas. Autosuficiente AS Autosuficiente | DÓNDE | Autosuficiente. Vincular EN JERARQUÍA VALOR (Gráfico de Cuentas. Autosostenibles. Bienes)";

4. Diseño SIMILAR- Esta función nos permite comparar una cadena con un patrón de cadena.

Sintaxis: COMO "<ТекстШаблона>"

Opciones de patrón de filas:

%: una secuencia que contiene cualquier número de caracteres arbitrarios.

Un personaje arbitrario.

[...] cualquier carácter o secuencia de caracteres enumerados entre corchetes. La enumeración puede especificar rangos, por ejemplo a-z, es decir, un carácter arbitrario incluido en el rango, incluidos los extremos del rango.

[^...] - cualquier carácter o secuencia de caracteres enumerados entre corchetes, excepto aquellos enumerados después del signo de negación.

Ejemplo de uso:

Query.Text = //busca la nomenclatura completa que contiene la raíz TABUR y comienza //ya sea con una letra t minúscula o mayúscula "SELECT | Nomenclatura. Enlace | FROM | Directorio. Nomenclatura AS Nomenclatura | DONDE | Productos. Nombre LIKE "" [Tt ]abur%""" ;

5. Diseño PERMITIDO- este operador le permite seleccionar solo aquellos registros de la base de datos para los cuales la persona que llama tiene permiso de lectura. Estos derechos se configuran a nivel de registro (RLS).

Sintaxis: PERMITIDO está escrito después de la palabra clave SELECT

Ejemplo de uso:

Request.Text = "SELECCIONAR PERMITIDO | Contrapartes. Enlace | DESDE | Directorio. Contrapartes COMO Contrapartes";

6. Diseño VARIOS- le permite seleccionar registros en los que no hay registros duplicados.

Sintaxis: VARIOS se escribe después de la palabra clave SELECCIONAR

Ejemplo de uso:

Request.Text = //selecciona registros sobre los cuales el lector tiene derechos "SELECCIONAR VARIOS | Contrapartes.Nombre |DESDE | Directorio. Contrapartes AS Contrapartes" ;

Además, las VARIAS construcciones se pueden utilizar con el operador PERMITIDO y otros operadores.

Ejemplo de uso:

Request.Text = //selecciona varios registros sobre los cuales el lector tiene derechos "SELECCIONAR VARIOS PERMITIDOS | Contrapartes.Nombre |DESDE | Directorio. Contrapartes COMO Contrapartes";

7. Diseño PRIMERO- selecciona el número de registros especificados en el parámetro del resultado de la consulta.

Sintaxis: PRIMERO<число>

Ejemplo de uso:

Request.Text = //seleccione los primeros 4 números CCD del directorio "SELECCIONE LOS PRIMEROS 4 | Números CCD. Enlace | DESDE | Directorio. Números CCD COMO Números CCD";

8. Diseño PARA EL CAMBIO- le permite bloquear una tabla, funciona solo en transacciones (relevante solo para bloqueos automáticos).

Sintaxis: PARA CAMBIAR<НаименованиеТаблицы>

Ejemplo de uso:

Query.Text = "SELECCIONAR | Restos Libres Restos. Nomenclatura, | Restos Libres Restos. Almacén, | Restos Libres Restos. En Stock Restantes | DESDE | Registro de Acumulaciones. Restos Libres. Restos COMO Restos Libres Restos | POR CAMBIO | Registro de Acumulaciones . Restos Libres. Restos”;

9. Diseño ORDENAR POR- organiza los datos por un campo específico. Si el campo es un enlace, al configurar la bandera PEDIDO AUTOMÁTICO La clasificación se realizará según la representación del enlace; si la bandera está desactivada, los enlaces se ordenarán según la antigüedad de la dirección del enlace en la memoria.

Sintaxis: ORDENAR POR<НаименованиеПоля>PEDIDO AUTOMÁTICO

Ejemplo de uso:

Query.Text = "SELECCIONAR | Restos Libres Restos. Nomenclatura COMO Nomenclatura, | Restos Libres Restos. Almacén COMO Almacén, | Restos Libres Restos. En Stock Restantes | DESDE | Registrar Acumulaciones. Restos Libres. Restos COMO Restos Libres | | ORDER BY | Nomenclatura | RECUPERACIÓN AUTOMÁTICA DE PEDIDOS";

10. Diseño GRUPO POR- Se utiliza para agrupar cadenas de consulta por campos específicos. Los campos numéricos deben usarse con cualquier función agregada.

Sintaxis: AGRUPAR POR<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Ejemplo de uso:

Query.Text = "SELECCIONAR | ProductosEnAlmacén.Nomenclatura AS Nomenclatura, | ProductosEnAlmacén.Almacén, | SUMA(BienesEnAlmacén.EnStock) COMO EN STOCK |DESDE | RegistrarAcumulaciones.ProductosEnAlmacén AS ProductosEnAlmacén | |GRUPO POR | ProductosEnAlmacén.Nomenclatura, | ProductosEn Almacenes.Almacén" ;

11. Diseño TENER- le permite aplicar una función agregada a una condición de selección de datos, similar a la construcción WHERE.

Sintaxis: TENIENDO<агрегатная функция с условием>

Ejemplo de uso:

Query.Text = //selecciona registros agrupados donde el campo InStock es mayor que 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks AS ItemsInStocks | | GRUPO POR | ProductosEnAlmacén.Nomenclatura, | ProductosEnAlmacén.Almacén | |DISPONIBLE | CANTIDAD(ProductosEnAlmacén.EnStock) > 3" ;

12. Construcción ÍNDICE POR- Se utiliza para indexar el campo de consulta. Una consulta con indexación tarda más en completarse, pero acelera la búsqueda en los campos indexados. Sólo se puede utilizar en mesas virtuales.

Sintaxis: ÍNDICE POR<Поле1, ... , ПолеN>

Ejemplo de uso:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | LUGAR DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Diseño DONDE- le permite imponer una condición en cualquier campo de selección. El resultado incluirá sólo los registros que cumplan la condición.

Sintaxis: DÓNDE<Условие1 ОператорЛогСоединения УсловиеN>

Ejemplo de uso:

Query.Text = //se seleccionan todos los registros con CompensationRemaining<>0 y //CantidadParaCalcCompRemaining > 100 "SELECT | CompensaciónRPORemains.Contraparte, |CompensaciónRPORemains.Child, | CompensaciónRPORemains.CompensaciónRemaining, | CompensaciónRPORemains.AmountForCalcCompRemains |Colocar datosTz |DESDE | Registro de acumulación.CompensaciónRP.Remains AS CompensaciónRPOstat ki |DONDE |CompensaciónRPOR restante.CompensaciónRestante<>0 | Y CompensaciónRPORemains.AmountForCalcCompRemaining> 100";

14. Diseño RESULTADOS... GENERAL- se utiliza para calcular totales; el diseño especifica los campos mediante los cuales se calcularán los totales y se aplicarán funciones agregadas a los campos de totales. Cuando se utilizan totales para cada campo después de la construcción TOTAL, los datos se agrupan. Hay una construcción GENERAL opcional; su uso también proporciona agrupación adicional. Verá un ejemplo del resultado de la solicitud a continuación.

Sintaxis: RESULTADOS<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>POR<ОБЩИЕ> <Поле1, ... , ПолеN>

Ejemplo de uso:

Request.Text = "SELECT | Cálculos. Acuerdo de Contraparte. Tipo de Acuerdo AS Tipo de Contrato, | Cálculos. Acuerdo de Contraparte AS Contrato, | Cálculos. Contraparte, | Cálculos. Monto del Saldo de Liquidación Mutua Saldo AS | DESDE | Registro de Acumulaciones. Mutual Liquidación CON Contrapartes Saldos AS Cálculos | TOTAL | IMPORTE (Saldo) |Software | GENERAL, | Tipo de Acuerdo";

La figura describe las agrupaciones que se formaron durante la ejecución de la solicitud, la superior se refiere a la sección GENERAL y la segunda al campo Tipo de Acuerdo Acuerdo de Contraparte.