Crear y trabajar con solicitudes (para principiantes). Crear y trabajar con solicitudes (para principiantes) 1 s 8,3 si está en una solicitud

La programación 1C consiste en algo más que escribir un programa. 1C es un lingote de acciones y datos del usuario con los que trabaja.

Los datos se almacenan en una base de datos. Las consultas 1C son una forma de recuperar datos de una base de datos para mostrárselos al usuario en un formulario o procesarlos.

La parte fundamental del informe es la solicitud 1C. En el caso de un informe, la ACS es la parte más grande del informe.

Siéntate. Toma un respiro. Cálmate. Ahora os contaré las novedades.

Para programar en 1C no basta con conocer el lenguaje de programación 1C. También necesita conocer el lenguaje de consulta 1C.

El lenguaje de consulta 1C es un lenguaje completamente separado que nos permite especificar qué datos necesitamos obtener de la base de datos.

También es bilingüe, es decir, puede escribir en ruso o inglés. Es extremadamente similar al lenguaje de consulta SQL y quienes lo conocen pueden relajarse.

Cómo se utilizan las solicitudes 1C

Cuando un usuario inicia 1C en modo Enterprise, no hay ni un solo gramo de datos en el cliente en ejecución. Por lo tanto, cuando necesita abrir un directorio, 1C solicita datos de la base de datos, es decir, realiza una solicitud 1C.

Las consultas 1C son:

  • Consultas automáticas 1C
    Generado automáticamente por el sistema. Ha creado un formulario de lista de documentos. Se agregó una columna. Esto significa que al abrir este formulario en modo Enterprise, habrá una consulta y se solicitarán los datos de esta columna.
  • Consultas semiautomáticas 1C.
    Hay muchos métodos (funciones) en el lenguaje 1C; cuando se accede, se realiza una consulta a la base de datos. Por ejemplo.GetObject()
  • Consultas manuales 1C (escritas por el programador específicamente como una consulta)
    Puede escribir una solicitud 1C usted mismo en código y ejecutarla.

Crear y ejecutar consultas 1C

Una solicitud 1C es el texto real de la solicitud en el idioma de solicitud 1C.
El texto se puede escribir con bolígrafos. Es decir, tómalo y escríbelo (si conoces este idioma).

Dado que 1C promueve el concepto de programación visual, donde se puede hacer mucho o casi todo sin escribir código a mano, existe un objeto Query Constructor especial que le permite dibujar el texto de una consulta sin conocer el lenguaje de consulta. Sin embargo, los milagros no suceden; para ello es necesario saber cómo trabajar con el constructor.

Una vez que el texto de la solicitud 1C esté listo, es necesario ejecutarlo. Para ello existe un objeto en el código 1C Request(). He aquí un ejemplo:

Solicitud = Nueva Solicitud();
Consulta.Texto = "SELECCIONAR
| Nomenclatura.Enlace
|DESDE
| Directorio.Nomenclatura AS Nomenclatura
|DONDE
| Nomenclatura.Servicio";
Seleccionar = Consulta.Ejecutar().Select();

Informe(Selección.Enlace);
Fin del ciclo;

Como puedes ver en el ejemplo, luego de ejecutar la solicitud 1C, nos llega el resultado y debemos procesarlo. El resultado es una o varias filas de la tabla (en una forma especial).

El resultado se puede cargar en una tabla normal:
Recuperar = Consulta.Ejecutar().Descargar(); //Resultado – tabla de valores

O simplemente recorra línea por línea.
Seleccionar = Consulta.Ejecutar().Select();
Mientras que el bucle Select.Next()
//Hacer algo con los resultados de la consulta
Fin del ciclo;

Trabajar con solicitudes 1C

Principios básicos de las consultas 1C.

Principios básicos para construir una solicitud 1C:
SELECCIONE Lista de campos DESDE el título de la tabla DONDE Condiciones

Un ejemplo de cómo construir una solicitud 1C de este tipo:

ELEGIR
//lista de campos para seleccionar
Enlace,
Nombre,
Código
DE
//nombre de la tabla de la que seleccionamos datos
//lista de tablas es una lista de objetos en la ventana del configurador
Directorio.Nomenclatura
DÓNDE
//indicar selección
Tipo de Producto = &Servicio //selección por valor externo
O Servicio // Atributo “Servicio” de tipo booleano, selección por valor Verdadero
ORDENAR POR
//Clasificación
Nombre

Lista de tablas 1C

Puede ver los nombres de las tablas en la ventana del configurador. Basta con escribir “Directorio” en lugar de “Directorios”, por ejemplo “Directorio.Nomenclatura” o “Documento.Ventas de Bienes y Servicios” o “Registro de Acumulación.Ventas”.

Existen tablas adicionales (virtuales) para registros que permiten obtener los números finales.

Registro de información.Nombre del registro.Último segmento(&Fecha) – Solicitud 1C del registro de información, si es periódica, para una fecha específica

Registro de acumulación. Nombre del registro. Saldos (y fecha): solicitud 1C del registro de saldos para una fecha específica

Registro de acumulación. Nombre del registro. Volumen de negocios (& fecha de inicio, & fecha de finalización): solicitud 1C del registro de volumen de negocios para el período desde la fecha de inicio hasta la fecha de finalización.

Principios adicionales

Cuando solicitamos una lista de algunos datos, los principios básicos funcionan. Pero también podemos solicitar números y la solicitud puede contarlos por nosotros (sumarlos, por ejemplo).

ELEGIR
//Cantidad(Nombre de campo) – cuenta la cantidad
//Campo AS OtroNombre – cambia el nombre del campo
Cantidad (Enlace) AS Cantidad de documentos publicados
DE

DÓNDE
Realizado

Esta solicitud 1C nos devolverá el número total de documentos. Sin embargo, cada documento tiene un campo Organización. Digamos que queremos contar la cantidad de documentos de cada organización mediante una consulta 1C.

ELEGIR
//sólo un campo de documento
Organización,
//cuenta la cantidad
Cantidad(Enlace) AS CantidadPor Organizaciones
DE
Documento Ventas de Bienes y Servicios
DÓNDE
Realizado
AGRUPAR POR

Organización

Esta solicitud 1C nos devolverá la cantidad de documentos para cada organización (también llamada "por organización").

Calculemos adicionalmente el monto de estos documentos usando una solicitud 1C:

ELEGIR
//sólo un campo de documento
Organización,
//cuenta la cantidad

//cuenta la cantidad

DE
Documento Ventas de Bienes y Servicios
DÓNDE
Realizado
AGRUPAR POR
//debe usarse si la lista de campos tiene una función count() y uno o más campos al mismo tiempo - entonces necesitas agrupar por estos campos
Organización

Esta solicitud 1C también nos devolverá la cantidad de documentos.

ELEGIR
//sólo un campo de documento
Organización,
//cuenta la cantidad
Cantidad(Enlace) AS CantidadPor organizaciones,
//cuenta la cantidad
Importe(DocumentoImporte) AS Importe
DE
Documento Ventas de Bienes y Servicios
DÓNDE
Realizado
AGRUPAR POR
//debe usarse si la lista de campos tiene una función count() y uno o más campos al mismo tiempo - entonces necesitas agrupar por estos campos
Organización
RESULTADOS DEL PO General

El lenguaje de consulta 1C es extenso y complejo, y no consideraremos todas sus capacidades en una sola lección; lea nuestras próximas lecciones.

Brevemente sobre las características adicionales del lenguaje de consulta 1C:

  • Unir datos de varias tablas
  • Consultas anidadas
  • Solicitud por lotes
  • Creando tus propias mesas virtuales
  • Consulta desde la tabla de valores.
  • Uso de funciones integradas para obtener y manipular valores.

Generador de consultas 1C

Para no escribir el texto de la solicitud a mano, existe un diseñador de solicitudes 1C. Simplemente haga clic derecho en cualquier parte del módulo y seleccione 1C Query Designer.

Seleccione la tabla deseada a la izquierda en el diseñador de consultas 1C y arrástrela hacia la derecha.

Seleccione los campos obligatorios de la tabla en el diseñador de consultas 1C y arrástrelos hacia la derecha. Si desea no solo seleccionar un campo, sino también aplicarle algún tipo de función de suma, después de arrastrarlo, haga clic en el campo dos veces con el mouse. En la pestaña Agrupación, deberá seleccionar (arrastrar) los campos requeridos para la agrupación.

En la pestaña Condiciones en el diseñador de consultas 1C, puede seleccionar las selecciones necesarias de la misma manera (arrastrando los campos mediante los cuales realizará la selección). Asegúrese de seleccionar la condición correcta.

En la pestaña Orden, se indica la clasificación. En la pestaña Resultados, resumiendo los resultados.

Con el diseñador de consultas 1C, puede estudiar cualquier consulta existente. Para hacer esto, haga clic derecho en el texto de una solicitud existente y también seleccione Diseñador de consultas 1C, y la solicitud se abrirá en el Diseñador de consultas 1C.

El lenguaje de consulta 1C 8 es una herramienta indispensable para un programador de 1C, le permite escribir código más conciso, simple y comprensible y utilizar menos recursos del sistema cuando trabaja con datos. Este artículo abre una serie de lecciones dedicadas al lenguaje de consulta 1C 8. En la primera lección veremos la estructura del operador principal de este lenguaje: ELEGIR. Con este operador, puede crear selecciones a partir de tablas de bases de datos. Los datos de la tabla seleccionada se pueden ordenar, imponerles condiciones, vincularlos y combinarlos con datos de otras tablas, agruparlos por varios campos y mucho más.

Lenguaje de consulta 1C Enterprise 8 - Estructura del operador SELECCIONAR

Veamos la estructura del operador SELECT (las partes opcionales del operador se indican entre corchetes). El lenguaje de consulta 1C proporciona una amplia gama de herramientas para crear muestras de datos.

SELECCIONE [PERMITIDO] [DIFERENTE] [PRIMERA A] [Campo1] [COMO Alias1], [Campo2] [COMO Alias2], ... [CampoM] [COMO AliasB] [PONER NombreTablaTemporal] [DESDE Tabla1 COMO AliasTableTable1 [[UNIÓN INTERNA ][UNIÓN IZQUIERDA][UNIÓN COMPLETA] Tabla2 COMO Alias ​​Tabla2 [[UNIÓN INTERNA][UNIÓN IZQUIERDA][UNIÓN COMPLETA] TablaC COMO Alias ​​TablasC POR Expresión1 [Y Expresión2]...[Y ExpresiónD]] .. . ... POR Expresión1 [Y Expresión2]...[Y ExpresiónE]] ... [TableF COMO Alias ​​de TablaF] ... ] [GRUPO POR GroupingField1[,] ... [GroupingFieldG]] [WHERE Expresión1 [Y Expresión2]... [Y ExpresiónH]] [UNAR TODOS...] [; ...] [ÍNDICE POR Alias1 ... AliasB] [TOTALES [FunciónAggregation(Campo1)][,] [FunciónAggregation(Campo2)][,] ... [FunciónAggregation(CampoI)] POR [GENERAL][,] [ GroupingField1][,] ... [GroupingFielddj]]

Palabras clave y bloques para trabajar con campos.

  • ELEGIR— una palabra clave que indica el comienzo del operador;
  • PERMITIDO indica que la selección debe incluir registros de tabla que tengan acceso de lectura para el usuario determinado;
  • VARIOS indica que la muestra debe incluir solo flujos diferentes (en todos los campos). En otras palabras, las filas duplicadas se excluirán de la muestra;
  • PRIMERO UN si especifica esta palabra clave, solo se incluirá en la selección la primera A de las filas seleccionadas por la consulta, donde A es un número natural;
  • bloque de campo— este bloque indica los campos que deben incluirse en la selección. Estos campos serán columnas seleccionadas. En el caso más simple, el campo se ve así: Table Alias.TableFieldName AS Field Alias

    De esta forma indicamos de qué tabla estamos tomando este campo. El lenguaje de consulta 1C le permite especificar cualquier alias, pero no deben repetirse en la misma declaración SELECT. Un campo puede ser más complejo y constar de varias combinaciones de campos de tabla, funciones de lenguaje de consulta y funciones agregadas, pero no cubriremos esos casos en este tutorial;

Palabras clave y bloques para trabajar con tablas.

  • PUT nombre de tabla temporal- palabra clave LUGAR está destinado a crear una tabla temporal con un nombre específico, que se almacenará en la RAM en una sesión determinada de 1C 8 hasta que finalice o hasta que se destruya la tabla temporal. Cabe señalar que los nombres de las tablas temporales en una sesión de 1C 8 no deben repetirse;
  • Bloque de tablas y relaciones.— el bloque indica todas las tablas utilizadas en esta consulta, así como las relaciones entre ellas. El bloque comienza con una palabra clave. DE, seguido del nombre y alias de la primera tabla. Si esta tabla está relacionada con otras tablas, se indican las relaciones. El lenguaje de consulta 1C contiene el siguiente conjunto de tipos de conexión:
    • UNIR INTERNAMENTE— un registro de la tabla de la izquierda se incluirá en la selección sólo si se cumple la condición de conexión, un registro de la tabla de la derecha se incluirá en la selección sólo si se cumple la condición de conexión;
    • CONEXIÓN IZQUIERDA— un registro de la tabla de la izquierda se incluirá en la selección en cualquier caso, un registro de la tabla de la derecha se incluirá en la selección sólo si se cumple la condición de conexión;
    • CONEXIÓN COMPLETA— un registro de la tabla de la izquierda se incluirá primero en la selección en cualquier caso, luego solo si se cumple la condición de conexión, un registro de la tabla de la derecha se incluirá primero en la selección en cualquier caso, luego solo si se cumple la condición de conexión se cumple. En este caso, las filas duplicadas resultantes se excluyen de la muestra.

    Después del tipo de conexión, se indica el nombre y alias de la segunda tabla. Luego viene la palabra clave POR, seguido de condiciones de comunicación conectadas entre sí por operadores lógicos Y, O. Cada expresión de la condición debe devolver un valor booleano (Verdadero, Falso). Si la primera tabla está conectada a otras tablas además de la segunda, se vuelve a indicar el tipo de conexión, y así sucesivamente. Cada una de las tablas que participan en la conexión, a su vez, se puede conectar a otras tablas, esto se muestra en el diagrama de estructura de consulta. Si la tabla no está relacionada con la primera, entonces se indica sin tipo de conexión, luego pueden seguir sus conexiones, y así sucesivamente;

Bloques de conversión de datos y palabras clave

  • bloque de grupo— este bloque se utiliza para agrupar filas de la tabla. Las filas se combinan en una si los valores de los campos especificados después de la palabra clave AGRUPAR POR resulta ser el mismo. En este caso, todos los demás campos se suman, promedian, maximizan o minimizan mediante funciones agregadas. Las funciones agregadas se utilizan en un bloque de campo. Ejemplo: Máximo(TableAlias.TableFieldName) AS FieldAlias
  • Bloque de condición- en este bloque después de la palabra clave DÓNDE Se indican expresiones condicionales separadas por operadores lógicos. Y, O, para que cualquiera de las filas seleccionadas se incluya en la muestra, es necesario que todas las condiciones del agregado tengan un valor Verdadero.
  • COMBINA TODO— esta palabra clave se utiliza para combinar consultas (operadores ELEGIR). El lenguaje de consulta 1C le permite combinar varias consultas en una. Para que las consultas se combinen, deben tener el mismo conjunto de campos;
  • «;» - El punto y coma se utiliza para separar declaraciones que son independientes entre sí. ELEGIR;
  • ÍNDICE POR— la palabra clave se utiliza para indexar los campos especificados a continuación;
  • bloque resumen- utilizado para construir muestras en forma de árbol. Para cada uno de los campos de agrupación especificados después de la palabra clave POR, Se creará una fila separada en la selección. En esta línea, utilizando funciones agregadas, se calcularán los valores totales de los campos especificados después de la palabra clave. RESULTADOS.

¿Quieres seguir aprendiendo el lenguaje de consulta 1C 8? Entonces lee el siguiente artículo.

Pedido . Texto = "ELEGIR | Unidades de almacenamiento.Enlace |DESDE | Directory.usStorageUnits CÓMO usarStorageUnits // Ejemplo 1: comparación con un valor booleano vacío: |DONDE | StorageUnits.AllowSelectionFromReserveZone = Falso // Ejemplo 2. pero si este booleano está definido, entonces es mejor así: // condición para un booleano negativo: |DONDE | NO unidades de almacenamiento. Permitir selección desde zona de reserva. // Ejemplo 3. selección basada en la condición de un campo vacío que tiene el tipo “directorio de un tipo específico” |DONDE | StorageUnits.ActiveSelectionArea = VALOR(Directory.usSelectionArea.EmptyRef) // Ejemplo 3a. selección basada en la condición de un campo vacío que tiene el tipo "documento de un tipo específico" |DONDE | NuestroRegistroInformación.Documento = VALOR(Documento.NuestroDocumento.EnlaceEmpty) // Ejemplo 3b. selección basada en la condición de un campo vacío que tenga el tipo “documentos de diferentes tipos” ( campo compuesto) |DONDE | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | O OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | O... (etc. - enumeramos secuencialmente las condiciones para todos los tipos posibles de este campo compuesto) ) // Ejemplo 4. o viceversa, si necesita seleccionar un valor completo del tipo "cadena", la condición le ayudará: |DÓNDE | Unidad de almacenamiento.Nombre > """" // Ejemplo 5. Si necesita seleccionar documentos de un tipo específico, con un tipo de datos compuesto, por ejemplo, en el registro "RunningTasks", el recurso "Tarea" tiene un tipo compuesto, entre cuyos valores se encuentra el documento "Selección" es posible |DONDE | EXPRESS(Registro de informaciónTareas ejecutadas.Tarea AS Documento.Selección) ENLACE Documento.Selección // Ejemplo 5a. Otro ejemplo similar cuando necesitas seleccionar documentos de un tipo específico. | ELECCIÓN | CUÁNDO EXPRESAR (ag Correspondencia de Documentos. DocumentoBU AS Documento. Recepción de Bienes y Servicios) ENLACE Documento.Recepción de Bienes y Servicios | ENTONCES ""Recepción de Bienes y Servicios"" | CUÁNDO EXPRESAR (ag Correspondencia de Documentos. DocumentoBU Documento AS. Ventas de Bienes y Servicios) Documento ENLACE Ventas de Bienes y Servicios | ENTONCES ""Ventas de Bienes y Servicios"" | MÁS """" | FINALIZAR COMO Vista de documento // Ejemplo 6. selección por condición de un valor indefinido: |DONDE | SavedSettings.Usuario = INDEFINIDO // Ejemplo 7. selección por tipo de movimiento "Entrante" del registro de acumulación, "Gastos" - de manera similar): |DONDE | RegProductsInRetail.MovementType = VALOR(Acumulación de tipo de movimiento.Entrante) // Ejemplo 8. Cómo indicar en una solicitud que no es necesario ejecutar la solicitud (por ejemplo, debe devolver mediante programación, dependiendo de alguna condición, un resultado de solicitud vacío - Request.Text = StrReplace(Request.Text, "DÓNDE Doc.Link = &DocumentLink", "DÓNDE ESTÁ LA MENTIRA");). Para hacer esto, simplemente agregue la condición "Dónde es falso". Por cierto, independientemente del volumen de datos solicitados en la muestra, dicha solicitud se ejecutará instantáneamente. |DÓNDE ESTÁ LA MENTIRA // Ejemplo 9. Comprobando que el resultado de la consulta contiene datos: Si noPedido.Ejecutar().Vacío() Entonces // Ejemplo 10. selección basada en una fecha vacía: |DONDE | tbStrings.CancellationDate = FECHA Y HORA (1, 1, 1)

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 solicitud 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ónRemains, | 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.

En este artículo examinaremos el tema de las tablas anidadas en el lenguaje de consulta 1C.

Puede utilizar una tabla de origen de consulta anidada en los campos de selección de consulta. Por ejemplo, el documento “Prestación de servicios” tiene una parte tabular de Servicios, por lo que esta parte tabular también se puede mostrar en el campo de selección. Ahora verás cómo se puede implementar esto.

En mi base de datos de capacitación, iniciaré la consola de consultas, abriré el diseñador de consultas y seleccionaré la tabla "Provisión de servicios".

Ampliemos esta tabla

Y en él vemos la parte tabular “Servicios”.

Seleccionemos toda esta parte de la tabla.

Como puede ver, toda la parte tabular del servicio se ha incluido completamente en los campos.

Tenga en cuenta que la parte tabular, de hecho, viene como un campo separado llamado "Servicios" y cuyo tipo será "Solicitar resultado". Aprendamos a utilizar una tabla anidada en una consulta.

Dejemos tres campos de la tabla anidada y agreguemos algunos campos del encabezado del documento.

Hagamos clic en Aceptar en el diseñador y veamos cómo se verá nuestra solicitud.

Como puede ver, en la solicitud hay un punto después del campo "Servicios" y los campos seleccionados se enumeran entre paréntesis después de él.

Cumplamos el pedido.

En la figura vemos que todos los campos seleccionados en la parte tabular del documento aparecen separados por comas en el campo “Servicios”. No todas las consolas de consulta tienen una pantalla como la de la figura anterior; a veces puede decir simplemente " ".

Otro punto interesante: en una tabla anidada puedes poner un asterisco en lugar de campos, entonces aparecerán todos los campos de la parte tabular. Esto no se puede hacer en el constructor, sólo manualmente en la solicitud. La solicitud tomará la siguiente forma:

Veamos cómo se ejecutará dicha solicitud.

Lo único es que este asterisco no se guardará si abrimos el constructor de consultas.

Hemos aprendido a hacer una consulta con una tabla anidada en la consola, ahora aprenderemos a usar una tabla anidada en una selección.

En realidad, no es tan difícil acceder a una tabla anidada al procesar una consulta. Simplemente accedes a la selección por el nombre de tu tabla, y obtienes una variable del tipo “Resultado de la consulta”. Y luego lo procesa como el resultado de una solicitud normal: si quiere, obtenga una muestra, si quiere, cárguela.

A continuación se muestra un pequeño ejemplo de código que funciona con una tabla anidada:


&En el servidor
Procedimiento FillOnServer()
Solicitud = Nueva Solicitud;
Pedido. Texto = "ELEGIR
| Venta de Producto.Enlace,
| Venta de Producto.Productos.(
| Producto,
| Cantidad
|DESDE
| Documento Venta de Productos CÓMO Vender Productos"
;
Recuperar = Consulta. Correr(). Elegir();
Adiós selección. Siguiente() Bucle
Línea Superior del Árbol = Venta de Productos. ObtenerArtículos();
Nueva fila = Árbol de fila superior. Agregar();
Nueva línea. Enlace = Selección. Enlace;
ProductosTabla = Selección. Bienes;
ProductosSelección = ProductosTabla. Elegir();
Mientras que la Selección de Productos. Siguiente() Bucle
TreeChildRow = Nueva fila. ObtenerArtículos();
ProductRow = ChildTreeRow. Agregar();
Cadena de producto. Enlace = Selección de Producto. Producto;
Cadena de producto. Cantidad = Artículos de muestra. Cantidad ;
Fin del ciclo;
Fin del ciclo;
Fin del Procedimiento

Déjame explicarte el código anterior.

En primer lugar, obtuvimos una selección lineal y repasamos esta selección en un bucle, en el que creamos la línea superior del árbol de valores (está en el formulario) y escribimos en ella un enlace a nuestro documento.

Y luego, lo más interesante, incluso puedes verlo más tarde en el depurador, pasamos al campo de selección de Productos y, para mayor comodidad, escribimos este campo en una variable separada en TableProducts. Esta variable es del tipo “Resultado de la consulta”. Y puede obtener fácilmente una muestra de este resultado. Éso es lo que hacemos. Queda por omitir esta selección usando la siguiente función y el bucle while.

Y dentro de este bucle nos referiremos a los campos de selección como campos de una tabla anidada y los escribiremos en las filas secundarias del árbol del formulario.

Este es el resultado que devolverá este código.

¿Aún tienes preguntas?

Las responderás tú mismo cuando estudies mi curso "Consultas en 1C para principiantes". Donde estos y muchos otros temas se tratan con más detalle. Toda la información se proporciona de forma sencilla y accesible y es comprensible incluso para aquellos que no están muy familiarizados con la programación en 1C.

Código promocional con 20% de descuento: hrW0rl9Nnx

Apoya mi proyecto donando cualquier cantidad

Únete a mis grupos.