Contactos

Trabajar con cadenas en una consulta 1c 8.2. Una característica de la ejecución de la función substring(). Usar OR lógico en condiciones

En el lenguaje de consulta 1C:Enterprise, la función SUBCADENA() v SUBCADENA(<Исходная строка>, <Начало>, <Длина>) se puede aplicar a datos de tipo cadena y le permite seleccionar un fragmento<Исходной строки>, comenzando con un carácter de número<Начало>(los caracteres de una cadena se numeran a partir del 1) y la longitud<Длина>caracteres. El resultado del cálculo de la función SUBSTRING() tiene un tipo de cadena de longitud variable, y la longitud se considerará ilimitada si<Исходная строка>tiene longitud y parámetro ilimitados<Длина>no es una constante o mayor que 1024.

Cálculo de la función SUBSTRING() en SQL Server:
En la versión cliente-servidor del trabajo, la función SUBSTRING() se implementa utilizando la función SUBSTRING() del correspondiente instrucción SQL pasado al servidor de la base de datos datos SQL Server, que calcula el tipo de resultado de la función SUBSTRING() según reglas complejas, según el tipo y los valores de sus parámetros, así como según el contexto en el que se utiliza.

En la mayoría de los casos, estas reglas no afectan la ejecución de una consulta 1C:Enterprise, sin embargo, hay casos en los que la longitud máxima de la cadena de resultado calculada por servidor SQL. Es importante tener en cuenta que en algunos contextos cuando se usa la función SUBSTRING(), la longitud máxima de su resultado puede ser igual a la longitud máxima de una cadena de longitud limitada, que es de 4000 caracteres en SQL Server. Esto puede hacer que la consulta se bloquee inesperadamente.

Por ejemplo, una solicitud:
Código 1C v 8.x SELECCIONAR
ELECCIÓN

DE LO CONTRARIO NULO
TERMINAR COMO UNA VISTA,
ELECCIÓN
WHEN Tipo = &Dirección LegalPersonas
ENTONCES SUBCADENA (Ver, 0, 200)
DE LO CONTRARIO NULO
TERMINAR COMO UNA VISTA1
DESDE

ORDENAR POR
Representación,
Sumisión1
termina anormalmente con el mensaje DBMS error:
Proveedor Microsoft OLE DB para SQL Server: advertencia: el procesador de consultas no pudo producir un plan de consulta desde el optimizador porque la longitud total de todas las columnas en la cláusula GROUP BY u ORDER BY supera los 8000 bytes.
HRESULT=80040E14, SQLSTATE=42000, nativo=8618

Esto se debe a que Microsoft SQL Server calculó la longitud máxima de cadena que resulta de la expresión:
Código 1C v 8.x SELECCIONAR
WHEN Tipo = &Dirección LegalPersonas
ENTONCES SUBCADENA (Ver, 0, 200)
DE LO CONTRARIO NULO
TERMINAR COMO UNA VISTA,
equivale a 4000 caracteres. Por lo tanto, la longitud de un registro que consta de dos de estos campos supera los 8000 bytes permitidos para una operación de ordenación.

Debido a la característica descrita de la ejecución de la función SUBSTRING() en SQL Server, no se recomienda el uso de la función SUBSTRING() para convertir cadenas de longitud ilimitada en cadenas de longitud limitada. En su lugar, es mejor usar el operador de conversión EXPRESS(). En particular, el ejemplo anterior se puede reescribir como:
Código 1C v 8.x SELECCIONAR
ELECCIÓN
WHEN Tipo = &Dirección LegalPersonas
DE LO CONTRARIO NULO
TERMINAR COMO UNA VISTA,
ELECCIÓN
WHEN Tipo = &Dirección LegalPersonas
ENTONCES EXPRESS (Representación COMO Cadena (200))
DE LO CONTRARIO NULO
TERMINAR COMO UNA VISTA1
DESDE
Registro de Información Información de Contacto AS Información de Contacto
ORDENAR POR
Representación,
Sumisión1

El tipo String se encuentra en todos los lenguajes de programación. Es primitivo, y en 1C hay muchas funciones para trabajar con él. En este artículo, vamos a echar un vistazo más de cerca a varias maneras trabajar con tipos de cadena en 1C 8.3 y 8.2 con ejemplos.

Línea

Para convertir una variable de cualquier tipo en una cadena, existe la función "String ()" del mismo nombre. El parámetro de entrada será la propia variable cuya representación en forma de cadena se desea obtener.

Cadena (Falso) // devuelve "No"
Cadena (12345) // devuelve "12 345"
Cadena(FechaActual()) //"21.07.2017 11:55:36"

Es posible convertir a una cadena no solo tipos primitivos, sino también otros, por ejemplo, elementos de directorios y documentos.

LP abreviado, L abreviado, P abreviado

Los parámetros de entrada de estas funciones son una variable de tipo cadena. Las funciones eliminan caracteres insignificantes (espacios, retornos de carro, etc.): de los lados izquierdo y derecho, solo del lado izquierdo y solo del lado derecho, respectivamente.

abbrl("Se eliminarán los espacios en ambos lados") // "Se eliminarán los espacios en ambos lados"
abbr("Se eliminarán los espacios de ambos lados") // "Se eliminarán los espacios de la izquierda"
abbr("Se eliminarán los espacios en ambos lados") // "Se eliminarán los espacios a la derecha"

Leo, Derecha, Medio

Estas funciones le permiten cortar parte de una cadena. La función Lion() devolverá la parte de la cadena en su lado izquierdo de la longitud especificada. La función "Derecha()" es similar, pero el recorte se realiza a la derecha. La función "Wed ()" le permite especificar el número de carácter desde el cual se seleccionará la cadena y su longitud.

Lion("String variable", 4) // devuelve "Stro"
Right("String variable", 7) // devuelve "variable"
avg("Variable de cadena", 2, 5)// devuelve "troco"

StrLength

La función determina el número de caracteres contenidos en una variable de cadena.

StrLength("Palabra") // el resultado de la ejecución será el número 5

Encontrar

La función permite buscar una parte de una cadena en una variable de cadena. El valor devuelto será un número que indica la posición del comienzo de la cadena encontrada. Si no se encuentran coincidencias, se devuelve cero.

Tenga en cuenta que la búsqueda distingue entre mayúsculas y minúsculas. Si hay más de una aparición de la subcadena de búsqueda en la cadena original, la función devolverá el comienzo de la primera aparición.

Find("uno, dos, uno, dos, tres", "dos") // la función devolverá el número 6

línea vacía

El uso de esta función le permite determinar si una cadena está vacía. Los caracteres insignificantes, como el espacio, el retorno de carro y otros, no se tienen en cuenta.

EmptyString("Vasily Ivanovich Pupkin") // la función devolverá False
EmptyString(" ") // la función devolverá True

V Reg, N Reg, TR Reg

Estas funciones son muy útiles al comparar y convertir variables de cadena. "Vreg()" devolverá la cadena original en mayúsculas, "HReg()" en minúsculas y "TReg()" la formateará de modo que el primer carácter de cada palabra individual esté en mayúscula y todos los caracteres subsiguientes en minúsculas.

VReg("DIRECTOR GENERAL") // valor de retorno - "DIRECTOR GENERAL"
HReg("DIRECTOR GENERAL") // valor de retorno - "CEO"
TReg("DIRECTOR GENERAL") // valor de retorno - "Director General"

StrReemplazar

Esta función es un análogo del reemplazo en editores de texto. Le permite sustituir un carácter o conjunto de caracteres por otro en las variables de cadena.

StrReplace("rojo, blanco, amarillo", ",", ";") // devuelve "rojo; Blanco; amarillo"

StrNumberRows

La función le permite determinar el número de líneas separadas por un retorno de carro en una variable de texto.

El ciclo en el ejemplo a continuación pasará por tres círculos porque la función StrNumberRows devolverá el valor 3:

Para ind \u003d 1 por StrNumber of Lines ("Line1" + Symbols.PS + "String2" + Symbols.PS + "Line3") Bucle
<тело цикла>
FinCiclo;

StrGetString

Esta función trabaja con texto multilínea de la misma forma que la anterior. Le permite obtener una cadena específica de una variable de texto.

StrGetString("Cadena1" + Símbolos.PS + "Cadena2" + Símbolos.PS + "Cadena3", 2) // devuelve "Línea2"

StrNumberOcurrencias

La función cuenta el número de ocurrencias de un carácter o subcadena en la cadena buscada.

StrNumberInstallations("a;b;c;d; ", ";") // la función devolverá el número 4

Símbolo y código de símbolo

Estas funciones le permiten obtener un carácter por su código Unicode, así como determinar este código por el carácter mismo.

SymbolCode("A") // la función devolverá el número 1 040
SymbolCode(1040) // la función devolverá "A"

Tareas frecuentes cuando se trabaja con cadenas

Concatenación de cadenas

Para concatenar varias cadenas (concatenar) simplemente use el operador de suma.

"Línea 1" + "Línea 2" //el resultado de sumar dos líneas será "Línea 1 Línea 2"

Tipo de conversión

Para convertir un tipo en una cadena, por ejemplo, una referencia a un elemento de diccionario, un número, etc., basta con usar la función "Cadena ()". Funciones como "ShortLp()" también convertirán las variables en una cadena, pero inmediatamente cortando los caracteres insignificantes.

String(1000) // devolverá "1000"

Tenga en cuenta que al convertir un número en una cadena, el programa agrega automáticamente un espacio que separa el millar. Para evitar esto, puede utilizar las siguientes estructuras:

StrReplace(String(1000),Personajes.NPP,"") // devuelve "1000"

String(Format(1000,"CH=")) // devolverá "1000"

Citas en una cadena

Muy a menudo, tendrá que lidiar con la necesidad de incluir comillas en una variable de cadena. Puede ser un texto de solicitud escrito en el configurador o simplemente una variable. Para resolver este problema, solo necesita establecer dos caracteres de comillas.

Header = String("¡Nosotros somos Horns and Hooves LLC!") // devuelve "¡Somos nosotros Roga and Hooves LLC!"

Multilínea, salto de línea

Para crear un texto de varias líneas, es suficiente agregarle caracteres de salto de línea (Symbols.PS).

MultilineText = "Primera línea" + Caracteres.PS + "Segunda línea"

Cómo eliminar espacios

Para eliminar espacios a la derecha o a la izquierda, puede usar la función "StretchLp()" (así como "Scrpt()" y "ScreenP()"):

StringWithoutSpaces = ShortLP(" Muchas letras ") // la función devolverá el valor "Muchas letras"

Si, después de convertir un número en una cadena, necesita eliminar los espacios que no se separan, use la siguiente construcción:

StringWithoutSpaces = StrReplace(String(99999),Characters.NPP,"") // devuelve "99999"

Además, los programadores a menudo usan la siguiente construcción, que le permite eliminar o reemplazar todos los espacios de una variable de texto con otro carácter:

StringWithoutSpaces = StrReplace(" hola", " " ,"") // devuelve "hola"

Comparando cadenas entre sí

Puede comparar términos con el signo igual habitual. La comparación distingue entre mayúsculas y minúsculas.

"hola" = "hola" // devolverá falso
"Hola" = "Hola" // devolverá True
"Hola" = "Adiós" // devolverá Falso

Las cadenas en 1C 8.3 en el lenguaje incorporado 1c son valores de un tipo primitivo Línea. Valores de este tipo contener una cadena Unicode de longitud arbitraria. Las variables de tipo cadena son un conjunto de caracteres encerrados entre comillas.

Ejemplo 1. Vamos a crear una variable de cadena con texto.

StringVariable = "¡Hola mundo!";

Funciones para trabajar con cadenas en 1s 8.3

Esta sección le brindará las principales funciones que le permitirán cambiar líneas en 1s, o analizar la información contenida en ellas.

StrLength

StrLength(<Строка>) . Devuelve el número de caracteres contenidos en la cadena pasada en el parámetro.

Ejemplo 2. Contemos el número de caracteres en la cadena "¡Hola mundo!".

Cadena = "¡Hola mundo!"; Número de Caracteres = StrLength(String); Informe (Número de Caracteres);

El resultado de ejecutar este código será mostrar el número de caracteres de la cadena: 11.

Abreviado

Abr(<Строка>) . Recorta los caracteres no significativos a la izquierda del primer carácter significativo de una cadena.
Caracteres insignificantes:

  • espacio;
  • espacio irrompible;
  • tabulación;
  • retorno de carro;
  • traducción de línea;
  • traducción del formulario (página).

Ejemplo 3. Elimina todos los espacios del lado izquierdo de la cadena "peace!" y añádale la cadena "Hola".

Cadena = abbr("¡mundo!"); Cadena = "Hola"+Cadena; Notificar (Cadena);

El resultado de la ejecución de este código será la visualización de la cadena "¡Hola mundo!".

Abreviatura

abr(<Строка>) . Recorta los caracteres no significativos a la derecha del primer carácter significativo de una cadena.

Ejemplo 4. Forma a partir de las cadenas "Hola" y "mundo!" frase "¡Hola mundo!"

String = abbr("Hola")+" "+abbr("¡mundo!"); Notificar (Cadena);

LP abreviado

abrl(<Строка>) . Recorta los caracteres no significativos a la derecha del primer carácter significativo de la cadena, también recorta los caracteres no significativos a la izquierda del primer carácter significativo de la cadena. Esta función se usa con más frecuencia que las dos anteriores, ya que es más versátil.

Ejemplo 5. Eliminar caracteres insignificantes a la izquierda y derecha del nombre de la contraparte.

Contratista = Directorios.Contratistas.FindBy Details("TIN", "0777121211"); ContratistaObjeto = Contratista.ObtenerObjeto(); ContractorObject.Description = LP abreviado(ContractorObject.Description); ContratistaObject.Write();

un leon

Un leon(<Строка>, <ЧислоСимволов>) . Obtiene los primeros caracteres de una cadena, el número de caracteres se especifica en el parámetro Número de caracteres.

Ejemplo 6. Deja que la estructura Empleado contener el nombre, apellido y patronímico del empleado. Obtenga una cadena con el apellido y las iniciales.

NombreInicial = León(Empleado.Nombre, 1); Patronímico Inicial = Leo(Empleado.Patronímico, 1); Nombre completo = Empleado.Apellido + " " + Inicial del nombre + "." + Inicial del patronímico + ".";

Derechos

Correcto(<Строка>, <ЧислоСимволов>) . Obtiene los últimos caracteres de una cadena, el número de caracteres se especifica en el parámetro Número de caracteres. Si el número de caracteres especificado supera la longitud de la cadena, se devuelve la cadena completa.

Ejemplo 7. Deje que se escriba una fecha al final de una variable de cadena en el formato "aaaammdd", obtenga una cadena con una fecha y conviértala a tipo fecha.

cadena = " la fecha actual: 20170910"; StringDate = Derechos (String, 8); Fecha = Fecha (StringDate);

miércoles

Miércoles(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Obtiene una subcadena de la cadena pasada en el parámetro Línea, a partir del carácter cuyo número se especifica en el parámetro NúmeroInicial y la longitud pasada al parámetro Número de caracteres. La numeración de caracteres en una cadena comienza desde 1. Si el parámetro NúmeroInicial se especifica un valor menor o igual a cero, entonces el parámetro toma el valor 1. Si el parámetro Número de caracteres no se especifica, se seleccionan los caracteres hasta el final de la cadena.

Ejemplo 8. Deje que la variable de cadena contenga el código de región a partir de la novena posición, debe obtenerlo y escribirlo en una línea separada.

String = "Región: 99 Moscú"; Región = Promedio(Fila, 9, 2);

Buscar página

StrBuscar(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Busca la subcadena especificada en una cadena, devuelve el número de posición del primer carácter de la subcadena encontrada. Considere los parámetros de esta función:

  • Línea. cadena de origen;
  • Búsqueda de subcadenas. La subcadena deseada;
  • DirecciónBúsqueda. Especifica la dirección para buscar una subcadena en una cadena. Puede tomar valores:
    • Dirección de búsqueda.Desde el principio;
    • Dirección de búsqueda.Desde el final;
  • Posición de salida. Especifica la posición en la cadena en la que se inicia la búsqueda;
  • Número de entrada. Especifica el número de apariciones de la subcadena buscada en la cadena de origen.

Ejemplo 9. En la línea "¡Hola mundo!" determinar la posición de la última aparición del carácter "y".

PositionNumber = StrFind("¡Hola mundo!", "y", SearchDirection.From End); Notificar (Número de Posición);

El resultado de la ejecución de este código será la visualización del número de la última aparición del símbolo "y" en la pantalla: 9.

Vreg

VReg(<Строка>) . Convierte todos los caracteres de la cadena especificada a 1s 8 a mayúsculas.

Ejemplo 10. Convierte la cadena "¡hola mundo!" a mayúsculas.

StringVreg = Vreg("¡hola mundo!"); Informe (StringVreg);

El resultado de la ejecución de este código será la visualización de la cadena "¡HOLA MUNDO!"

HReg

Hreg(<Строка>) . Convierte todos los caracteres de la cadena especificada a 1s 8 a minúsculas.

Ejemplo 11. Convierta la cadena "¡HOLA MUNDO!" a minúsculas.

StringNreg = NReg("¡HOLA MUNDO!"); Informe (StringVreg);

El resultado de la ejecución de este código será la visualización de la cadena "¡Hola mundo!"

TReg

TReg(<Строка>) . Convierte una cadena de la siguiente manera: el primer carácter de cada palabra se convierte a mayúsculas, los caracteres restantes de la palabra se convierten a minúsculas.

Ejemplo 12. Ponga en mayúsculas las primeras letras de las palabras en la cadena "¡Hola mundo!".

StringTreg = TReg("¡hola mundo!"); Informe (StringTreg);

El resultado de la ejecución de este código será la visualización de la cadena "¡Hola mundo!"

Símbolo

Símbolo(<КодСимвола>) . Obtiene un carácter por su código Unicode.

Ejemplo 13. Agregue izquierda y derecha a la línea "¡Hola mundo!" símbolo ★

StringWithStars = Carácter("9733")+"¡Hola Mundo!"+Carácter("9733"); Informe(CadenaConEstrellas);

El resultado de la ejecución de este código será la visualización de la cadena "★Hello World!★"

SímboloCódigo

SímboloCódigo(<Строка>, <НомерСимвола>) . Obtiene el código de carácter Unicode de la cadena especificada en el primer parámetro, ubicada en la posición especificada en el segundo parámetro.

Ejemplo 14. Averigüe el código del último carácter de la cadena "¡Hola mundo!".

Cadena = "¡Hola Mundo!"; CharacterCode =CharacterCode(String, StrLength(String)); Notificar (Código de carácter);

El resultado de la ejecución de este código será la visualización del código del símbolo "!" — 33.

línea vacía

línea vacía (<Строка>) . Comprueba si la cadena consta solo de caracteres no significativos, es decir, si está vacía.

Ejemplo 15. Comprueba si la cadena está vacía y consta de tres espacios.

Vacío = Cadena Vacía(" "); Informe (Vacío);

El resultado de la ejecución de este código será la visualización de la palabra "Sí" (expresión en cadena de un valor booleano Cierto).

StrReemplazar

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Busca todas las apariciones de la subcadena de búsqueda en la cadena de origen y la reemplaza con la subcadena de reemplazo.

Ejemplo 16. En la línea "¡Hola mundo!" reemplace la palabra "Mundo" con la palabra "Amigos".

String = StrReplace("¡Hola mundo!", "Mundo", "Amigos"); Notificar (Cadena);

El resultado de la ejecución de este código será la visualización de la cadena "¡Hola amigos!"

StrNumberRows

StrNúmero de líneas(<Строка>) . Le permite contar el número de líneas en una cadena de varias líneas. para cambiar a nueva línea en 1s 8 se usa el símbolo PD(carácter de salto de línea).

Ejemplo 17. Determinar el número de líneas del texto:
"Primera linea
Segunda linea
tercera linea"

Número = StrNúmero de Líneas("Primera línea"+Símbolos.PS +"Segunda línea"+Símbolos.PS +"Tercera línea"); Numero de reporte);

El resultado de la ejecución de este código será la visualización del número de líneas en el texto: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Obtiene una cadena en una cadena multilínea por su número. La numeración de líneas comienza desde 1.

Ejemplo 18. Obtenga la última línea del texto:
"Primera linea
Segunda linea
tercera linea"

Texto = "Primera línea"+Caracteres.PS +"Segunda línea"+Caracteres.PS +"Tercera línea"; LastLine = StrGetLine(Text, StrNumber of Lines(Text)); Notificar (Última línea);

El resultado de la ejecución de este código será la visualización de la línea "Tercera línea".

StrNumberOcurrencias

StrNumberOcurrences(<Строка>, <ПодстрокаПоиска>) . Devuelve el número de ocurrencias de la subcadena especificada en una cadena. La función distingue entre mayúsculas y minúsculas.

Ejemplo 19. Determinar cuántas veces entra la letra “c” en la línea “Líneas en 1s 8.3 y 8.2”, independientemente de su caso.

String = "Líneas en 1s 8.3 y 8.2"; Número de Ocurrencias = StrNúmero de Ocurrencias(Vreg(String), "C"); informe (número de ocurrencias);

El resultado de ejecutar este código mostrará el número de ocurrencias en la pantalla: 2.

PageBeginsFrom

StrBeginsFrom(<Строка>, <СтрокаПоиска>) . Comprueba si la cadena dada en el primer parámetro comienza con la cadena en el segundo parámetro.

Ejemplo 20. Determinar si el TIN de la contraparte seleccionada comienza con el número 1. Sea la variable contraparte contrapartes.

TIN = Contratista.TIN; StartsCUnits = StrStartsC(TIN, "1"); If StartsFROM1 Then //Su código EndIf;

La página termina el

StrEndsOn(<Строка>, <СтрокаПоиска>) . Comprueba si la cadena pasada en el primer parámetro termina con la cadena en el segundo parámetro.

Ejemplo 21. Determinar si el NIF de la contraparte seleccionada termina en el número 2. Sea la variable contraparte el enlace al elemento de directorio se almacena contrapartes.

TIN = Contratista.TIN; termina en dos = Str termina en (TIN, "2"); Si termina en dos, entonces //Tu código EndIf;

división de página

DividirCadena(<Строка>, <Разделитель>, <ВключатьПустые>) . Divide una cadena en partes por los caracteres delimitadores especificados y escribe las cadenas resultantes en una matriz. El primer parámetro almacena la cadena original, el segundo parámetro contiene la cadena que contiene el delimitador, el tercer parámetro especifica si escribir en la matriz líneas vacías(defecto Cierto).

Ejemplo 22. Supongamos que tenemos una cadena que contiene números separados por el símbolo ";", obtenga una matriz de números de la cadena.

Cadena = "1; 2; 3"; Matriz = StrSplit(Cadena, ";"); For Count = 0 By Array.Quantity() - 1 Loop Attempt Array[Count] = Number(Ablp(Array[Count])); Matriz de excepciones[W] = 0; EndTry EndCycle;

Como resultado de la ejecución se obtendrá una matriz con números del 1 al 3.

Conexión de cadena

StrConnect(<Строки>, <Разделитель>) . Convierte una matriz de cadenas del primer parámetro en una cadena que contiene todos los elementos de la matriz utilizando el delimitador especificado en el segundo parámetro.

Ejemplo 23. Usando la matriz de números del ejemplo anterior, obtenga la cadena original.

For Count = 0 By Array.Quantity() - 1 Loop Array[Count] = String(Array[Count]); FinCiclo; Cadena = StrConnect(Array, "; ");

String es uno de los tipos de datos primitivos en los sistemas 1C:Enterprise 8. Variables con tipo línea contener texto.

Escriba los valores de las variables línea se encierran entre comillas dobles. Se pueden añadir varias variables de este tipo.

por1 = "Palabra 1" ;
Per2 = "Palabra 2" ;
Per3 = Per1 + " " + Per2 ;

Finalmente por3 importará" Palabra 1 Palabra 2″.

Además, los sistemas 1C:Enterprise 8 proporcionan funciones para trabajar con cadenas. Considere los principales:

EntrarCadena(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — la función está destinada a mostrar un cuadro de diálogo en el que el usuario puede especificar un valor variable de tipo Línea. Parámetro <Строка> es obligatorio y contiene el nombre de la variable en la que se escribirá la cadena introducida. Parámetro <Подсказка> opcional es el título del cuadro de diálogo. Parámetro <Длина> opcional, espectáculos longitud máxima cadena de entrada El valor predeterminado es cero, lo que significa una longitud ilimitada. Parámetro <Многострочность> Opcional. Especifica el modo de entrada de texto de líneas múltiples: Verdadero: entrada de texto de líneas múltiples con separadores de línea; Falso: ingrese una cadena simple.

Se puede ingresar una cadena y, conociendo el código de carácter en Unicode:

Símbolo(<КодСимвола>) — El código se ingresa como un número.

Letra= Símbolo(1103 ) ; // YO SOY

También hay una función inversa que te permite averiguar el código de un personaje.

SímboloCódigo(<Строка>, <НомерСимвола>) — Devuelve el número Unicode del carácter especificado como un número.

Funciones de conversión de mayúsculas y minúsculas:

VReg(<Строка>) - Convierte todos los caracteres de una cadena a mayúsculas.

Hreg(<Строка>) - Convierte todos los caracteres de una cadena a minúsculas.

TReg(<Строка>) - convierte todos los caracteres de la cadena a mayúsculas y minúsculas. Es decir, las primeras letras de todas las palabras se convierten a mayúsculas y las letras restantes se convierten a minúsculas.

Funciones para buscar y reemplazar caracteres en una cadena:

Encontrar(<Строка>, <ПодстрокаПоиска>) - encuentra el número de carácter de la aparición de la subcadena de búsqueda. Por ejemplo:

Buscar ("Cadena", "ojo"); // 4

StrBuscar(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — encuentra el número de carácter de la ocurrencia de la subcadena de búsqueda, el número de ocurrencia se especifica en el parámetro correspondiente. En este caso, la búsqueda comienza desde el carácter, cuyo número se especifica en el parámetro Posición de salida. La búsqueda es posible desde el principio o desde el final de la cadena. Por ejemplo:

Número4 Entrada= StrFind( "Estar a la defensiva", "o", dirección de búsqueda. Primero, 1, 4); // 7

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) Busca todas las apariciones de la subcadena de búsqueda en la cadena de origen y la reemplaza con la subcadena de reemplazo.

StrReplace("Cadena", "ojo", ""); // Página

línea vacía (<Строка>) - comprueba la cadena en busca de caracteres significativos. Si no hay caracteres significativos, o ningún carácter, se devuelve el valor Cierto. De lo contrario - Mentir.

StrNumberOcurrences(<Строка>, <ПодстрокаПоиска>) – calcula el número de ocurrencias de la subcadena de búsqueda en la cadena fuente.

StrNumberOcurrencias ( "Estudia, estudia y vuelve a estudiar", "para estudiar" , "" ) ; // 3

Plantilla de cadena(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — sustituye los parámetros en la cadena por número. La cadena debe contener marcadores de sustitución de la forma: "%1..%N". La numeración de los marcadores comienza desde 1. Si el valor del parámetro Indefinido, se sustituye la cadena vacía.

Patrón de cadena ( "Opción 1 = %1, Opción 2 = %2", "1" , "2" ) ; // Parámetro 1= 1, Parámetro 2 = 2

Funciones de conversión de cadenas:

Un leon(<Строка>, <ЧислоСимволов>) devuelve los primeros caracteres de la cadena.

Correcto(<Строка>, <ЧислоСимволов>) - devuelve los últimos caracteres de la cadena.

Miércoles(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - devuelve una cadena de longitud<ЧислоСимволов>, comenzando con un símbolo<НачальныйНомер>.

Abr(<Строка>) trunca los caracteres no significativos a la izquierda del primer carácter significativo de la cadena.

abr(<Строка>) - corta los caracteres insignificantes a la derecha del último carácter significativo de la cadena.

abrl(<Строка>) - recorta los caracteres no significativos a la izquierda del primer carácter significativo de una cadena ya la derecha del último carácter significativo de una cadena.

StrGetString(<Строка>, <НомерСтроки>) – obtiene la cadena de una cadena multilínea por número.

Otras características:

StrLength(<Строка>) - devuelve el número de caracteres en una cadena.

StrNúmero de líneas(<Строка>) - devuelve el número de filas en una cadena de varias líneas. Una línea se considera nueva si está separada de la línea anterior por un carácter de nueva línea.

StrCompare(<Строка1>, <Строка2> ) - compara dos cadenas de mayúsculas y minúsculas sin distinción. La función funciona como un objeto. Comparando valores. Devoluciones:

  • 1 - si la primera línea es mayor que la segunda
  • -1 - si la segunda línea es mayor que la primera
  • 0 - si las cadenas son iguales

StrCompare("Primera fila", "Segunda fila"); // una

El lenguaje de consulta en 1C 8 es un análogo simplificado del conocido "lenguaje de programación estructurado" (como suele llamarse, SQL). Pero en 1C se usa solo para leer datos, para cambiar datos se usa modelo de objeto datos.

Otra diferencia interesante es la sintaxis rusa. Aunque de hecho puedes usar construcciones inglesas.

Ejemplo de solicitud:

SELECCIONE
Bancos.Nombre,
Bancos.CorrectAccount
DESDE
Directorio Bancos AS 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 el más simple y metodo efectivo obteniendo informacion. Como puede ver en el ejemplo anterior, en el lenguaje de consulta, debe apelar con nombres de metadatos (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 solicitud

Para obtener datos basta con utilizar las construcciones SELECT (seleccionar) y FROM (desde). La consulta más sencilla como sigue:

SELECT * FROM Directorios Nomenclatura

Donde "*" significa selección de todos los campos de la tabla y Referencias.Nomenclatura - el nombre de la tabla en la base de datos.

Considere un ejemplo más complejo y general:

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

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

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

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

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

V solicitud dada seleccionamos los datos de los campos "FieldName1" y "FieldName1" de las tablas "TableName1" y "TableName", asignamos sinónimos a los campos usando el operador "CÓMO", los conectamos de acuerdo con una determinada condición "Condición de conexión de tabla".

De los datos recibidos, seleccionamos solo los datos que cumplen la condición de "DONDE" "Condición de selección de datos". A continuación, agrupamos la consulta por el campo "FieldName1", mientras sumamos "FieldName2". Creamos totales para el " FieldName1” y el campo final “FieldName2”.

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

Diseños generales

Considere las construcciones generales del lenguaje de consulta 1C 8.2.

PRIMEROnorte

Vía operador dado puede obtener n número de primeros registros. El orden de los registros está determinado por el orden en la consulta.

SELECCIONE LOS PRIMEROS 100
Bancos.Nombre,
Bancos.Código AS BIC
DESDE
Directorio Bancos AS Bancos
ORDENAR POR
Bancos Nombre

La solicitud recibirá las 100 primeras 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 para registros específicos en la tabla de la base de datos, y no la tabla como un todo.

Si el usuario intenta leer registros que no están disponibles para él con una consulta, recibirá un mensaje de error. Para evitar esto, debe usar la construcción "PERMITIDO", es decir, la solicitud leerá solo los registros permitidos.

SELECCIONAR PERMITIDO
RepositorioInformación adicional.Enlace
DESDE
Directorio.Almacenamiento de Información Adicional

VARIOS

El uso de "DIFERENTE" permitirá excluir filas duplicadas de ingresar el resultado de una consulta 1C. La duplicación significa que todos los campos de la solicitud coinciden.

SELECCIONE LOS PRIMEROS 100
Bancos.Nombre,
Bancos.Código AS BIC
DESDE
Directorio Bancos AS Bancos

Mesa vacía

Esta construcción se usa muy raramente para combinar consultas. Al unirse, puede ser necesario especificar una tabla anidada vacía en una de las tablas. El operador "EmptyTable" es perfecto para esto.

Ejemplo de ayuda 1C 8:

ELEGIR Número de referencia, TABLA VACÍA.(Nom, Tov, Cant.) COMO COMPOSICIÓN
DESDE Documento.Factura
UNIR TODOS
SELECCIONE Número de enlace, Composición. (Número de línea, Producto, Cantidad)
FROM Documento.Factura Documento.Factura.Composición.*

ES NULO

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

SELECCIONE
NomenclaturaRef.Referencia,
IsNULL(Producto restante.Cantidad restante,0) COMO Cantidad restante
DESDE


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

ISNULL(FacturaFacturaRecibida.Fecha, FacturaEmitida.Fecha)

AS 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 de cadena del valor deseado. La única diferencia es que VIEW convierte cualquier valor en un tipo de cadena, mientras que REF VIEW convierte solo valores de referencia. Se recomienda el uso de REPRESENTACIÓN DE REFERENCIA en las consultas del sistema de composición de datos para la optimización, a menos, por supuesto, que se planee usar el campo de datos de referencia en las selecciones.

SELECCIONE
Ver(Enlace), //cadena, por ejemplo "Informe avanzado No. 123 con fecha 10/10/2015
Representación (DeletionMark) AS DeleteMarkText, //cadena, "Sí" o "No"
ReferenceRepresentation(DeletionMark) AS DeletionMarkBoolean //booleano, verdadero o falso
DESDE
Document.AdvanceReport

RÁPIDO

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

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

EXPRESS(Tabla de Costos.Subconto1 AS Directorio.Artículos de Costo).Tipo de ActividadPara Contabilidad Fiscal de Costos

Para tipos primitivos, esta función se usa a menudo para limitar el número de caracteres en campos de longitud ilimitada (no se puede comparar con dichos campos). Para evitar el error " Parámetros no válidos en la operación de comparación. No puedo comparar campos
longitud ilimitada y campos de tipos incompatibles
”, es necesario expresar tales campos de la siguiente manera:

EXPRESS(Comentario COMO Cadena(150))

DIFERENCIA DE FECHA

Obtenga lecciones en video de 267 1C gratis:

Un ejemplo del uso de IS NULL en una consulta 1C:

ESCOGE DE
Árbitro
UNIRSE A LA IZQUIERDA
Software
DONDE NO Restos de Mercancías Cantidad Restos ES NULA

El tipo de datos en una consulta se puede determinar de la siguiente manera: usando las funciones TYPE() y VALUETYPE(), o usando operador lógico ENLACE. Estas dos funciones son similares.

Valores predefinidos

Además de usar parámetros pasados ​​en consultas en el lenguaje de consulta 1C, puede usar valores predefinidos o . Por ejemplo, enumeraciones, directorios predefinidos, planes de cuentas, etc.. Para esto se utiliza la construcción “Valor ()”.

Ejemplo de uso:

DONDE

WHERE Contrapartes.TipodeInformaciónDeContacto = Valor(Enumeración.Tipos deInformaciónDeContacto.Teléfono)

DONDE Saldos de Cuenta.Cuenta Contable = Valor(Plan de Cuentas.Autosuficiente.Pérdida de Ganancias)

Conexiones

Las conexiones son de 4 tipos: IZQUIERDA, DERECHO, COMPLETO, INTERNO.

UNIÓN IZQUIERDA y DERECHA

Las combinaciones se utilizan para vincular dos tablas mediante una determinada condición. Característica en UNIRSE A LA IZQUIERDA en que tomamos la primera tabla especificada por completo y vinculamos la segunda tabla por condición. Los campos de la segunda tabla que no se pudieron vincular por condición se llenan 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 la condición no se cumple, el campo Banco se establecerá en NULO.

JOIN DERECHO en lenguaje 1C absolutamente similar Unión IZQUIERDA excepto por una diferencia - en UNIÓN DERECHA la mesa “maestra” es la segunda, no la primera.

CONEXIÓN COMPLETA

CONEXIÓN COMPLETA se diferencia de la izquierda y la derecha en que muestra todos los registros de dos tablas, une solo aquellos que se pueden unir por condición.

Por ejemplo:

DESDE

CONEXIÓN COMPLETA
Directorio Bancos AS Bancos

SOBRE

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

UNIR INTERNAMENTE

UNIR INTERNAMENTE se diferencia del completo en que muestra solo aquellos registros que podrían conectarse de acuerdo con una condición dada.

Por ejemplo:

DESDE
Directorio Contrapartes AS Clientes

UNIR INTERNAMENTE
Directorio Bancos AS Bancos

SOBRE
Clientes.Nombre = Bancos.Nombre

Esta consulta devolverá solo las filas donde el banco y la contraparte tengan el mismo nombre.

Asociaciones

La construcción UNION y UNION ALL combina dos resultados en uno. Aquellos. el resultado de ejecutar dos se "fusionará" en uno, común.

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

Cómo usar ÍNDICE POR

Sin embargo, hay que tener en cuenta un punto. La creación de un índice en una tabla temporal también lleva tiempo. Por lo tanto, es recomendable usar la construcción " " solo si se sabe con certeza que habrá más de 1-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 de creación del índice.

SELECCIONE
MonedasCurrencySliceLast.Currency AS Moneda,
MonedasCurrencySliceLast.Course
Tipos de cambio PUT
DESDE
DataRegister.Currency Rates.SliceLast(&Period,) AS Moneda RatesSliceLast
ÍNDICE POR
Divisa
;
SELECCIONE
PreciosNomenclatura.Nomenclatura,
PreciosNomenclatura.Precio,
PreciosNomenclaturas.Moneda,
TarifasMoneda.Curso
DESDE
RegisterInformation.PricesNomenclature.SliceLast(&Period,
Artículo B (&Nomenclatura) AND PriceType = &PriceType) COMO Precios de artículos
LEFT JOIN Monedas Tasas AS Monedas Tasas
Precios de softwareNomenclatura.Divisa = TarifasDivisa.Divisa

agrupamiento

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

Existen las siguientes funciones:

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

Ejemplo 1:

SELECCIONE
Realización de Bienes, Servicios, Bienes.Nomenclatura,
SUMA (Venta de Bienes, Servicios, Bienes. Cantidad) AS Cantidad,
SUMA(Venta de Bienes, Servicios, Bienes. Monto) AS Suma
DESDE

AGRUPAR POR
Realización de Bienes, Servicios, Mercancías Nomenclatura

La consulta recibe todas las líneas con bienes y las resume por cantidad e importes en el contexto del artículo.

Ejemplo #2

SELECCIONE
Bancos.Código,
NÚMERO(DIFERENTES Bancos.Referencia) AS Número de Duplicados
DESDE
Directorio Bancos AS Bancos
AGRUPAR POR
Bancos.Código

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

Resultados

Los totales son una forma de obtener datos de un sistema con una estructura jerárquica. Las funciones agregadas se pueden usar para campos de resumen, como para agrupaciones.

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

SELECCIONE




DESDE
Documento.Venta de BienesServicios.Bienes AS Realización de BienesServiciosBienes
ORDENAR POR

RESULTADOS
SUMA(Número),
SUMA(Cantidad)
SOBRE
Nomenclatura

La consulta dará como resultado la siguiente jerarquía:

Resultados generales

Si necesita obtener totales para todos los "totales", use el operador "TOTAL".

SELECCIONE
Realización de Bienes, Servicios, Bienes Nomenclatura AS Nomenclatura,
Realización Bienes Servicios Bienes Referencia AS Documento,
Ventas de Bienes, Servicios, Bienes Cantidad AS Cantidad,
Realización de Bienes de Bienes de Servicios Monto AS Monto
DESDE
Documento.Venta de BienesServicios.Bienes AS Realización de BienesServiciosBienes
ORDENAR POR
Realización de Bienes y Servicios Bienes Referencia Fecha
RESULTADOS
SUMA(Número),
SUMA(Cantidad)
SOBRE
SON COMUNES,
Nomenclatura

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

En el que 1 nivel de agrupación es la agregación de todos los campos obligatorios.

ordenando

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

La clasificación de tipos primitivos (cadena, número, booleano) se produce por reglas usuales. Para los campos de tipos de referencia, la ordenación ocurre en la representación interna de la referencia (identificador único), y no en el código o en la representación de la referencia.

SELECCIONE

DESDE
Directorio Nomenclatura AS Nomenclatura
ORDENAR POR
Nombre

La consulta mostrará una lista de nombres del libro de referencia de nomenclatura, ordenados alfabéticamente.

Organización automática

El resultado de una consulta no ordenada es un conjunto de filas representado aleatoriamente. Los desarrolladores de la plataforma 1C no garantizan la salida de líneas en la misma secuencia al ejecutar las mismas consultas.

Si necesita mostrar los registros de la tabla en un orden constante, debe usar la construcción "Ordenación automática".

SELECCIONE
Nomenclatura Nombre AS Nombre
DESDE
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. mesa virtual - manera rápida 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.

  • cortar primero;
  • rebanada de este último.
  • sobras;
  • pérdidas de balón;
  • saldos y rotaciones.
  • movimientos desde el subconto;
  • pérdidas de balón;
  • revoluciones Dt Kt;
  • sobras;
  • saldos y rotaciones
  • subconto
  • base;
  • datos gráficos;
  • período de validez real.

Para el desarrollador de soluciones, los datos se toman de una tabla (virtual), pero de hecho, la plataforma 1C toma de muchas tablas y las convierte en la forma deseada.

SELECCIONE
Mercancías En Almacenes Restos Y Rotaciones. Nomenclatura,
MercancíasEn AlmacenesRestosY Rotaciones.Cantidad
MercancíasEnAlmacenesRestosYFacturación.CantidadFacturación,
Mercancías En Almacenes Restos Y Rotaciones. Cantidad Entrante,
Mercancías En Almacenes Restos Y Rotaciones. Cantidad Consumo
MercancíasEn AlmacenesRestos y Rotaciones Cantidad
DESDE
Registro de Acumulación Mercancías en Bodegas Restos y Rotaciones COMO Mercancías en Bodegas Restos y Rotaciones

Tal solicitud le permite obtener rápidamente un gran número de datos.

Opciones de mesa virtual

Muy aspecto importante trabajando con tablas virtuales - usando parámetros. Las opciones de mesa virtual son opciones especializadas para la selección y personalización.

Para tales tablas, se considera incorrecto usar la selección en la cláusula WHERE. Además del hecho de que la consulta se vuelve subóptima, es posible recibir datos incorrectos.

Un ejemplo del uso de dichos parámetros:

Registro de Acumulación.MercancíasEnAlmacenes.RestosYFacturación(&PeríodoInicio, &PeríodoFin, Mes, Movimientos YFronterasPeríodo, Nomenclatura = &NomenclaturaNecesaria)

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.

Al usar una tabla virtual, el sistema realiza las siguientes manipulaciones:

  1. Obtenemos el valor calculado más cercano por fecha y dimensiones en la tabla de totales.
  2. “Suma” el importe de la tabla de movimientos al importe de la tabla de totales.


Semejante pasos simples puede mejorar significativamente el rendimiento del sistema en su conjunto.

Uso del 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 un bastante simple, intuitivo interfaz clara. No obstante, consideremos el uso del constructor de consultas con más detalle.

El constructor de texto de consulta se inicia mediante el menú contextual (clic derecho) en el lugar correcto en el código del programa.

Descripción del constructor de consultas 1C

Consideremos cada pestaña del diseñador con más detalle. La excepción es la pestaña Generador, este es un tema para una discusión por separado.

Pestaña de tablas y campos

Esta pestaña especifica la fuente de datos y los campos que se mostrarán en el informe. De hecho, 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 mesas virtuales, puede configurar los parámetros de la mesa virtual:

Pestaña de enlaces

La pestaña se usa para describir conexiones de varias tablas, crea construcciones con la palabra JOIN.

Pestaña de agrupación

En esta pestaña, el sistema le permite agrupar y resumir los campos deseados del resultado de la tabla. Se describe el uso de las estructuras AGRUPACIÓN POR, SUMA, MÍNIMO, PROMEDIO, MÁXIMO, NÚMERO, NÚMERO DE DIFERENTES.

Pestaña Condiciones

Responsable de todo lo que se incluye 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 Adicionalmente repleto de todo tipo de parámetros que son muy importantes. Veamos cada una de las propiedades.

agrupamiento Selección de registros:

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

agrupamiento Tipo de solicitud determina qué tipo de consulta será: obtener datos, crear una tabla temporal o destruir 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 Modo automatico enclavamientos, construcción PARA EL CAMBIO).

Pestaña Uniones/Alias

En esta pestaña del diseñador de consultas, puede establecer la capacidad de unir diferentes tablas y alias (la construcción AS). Las tablas se enumeran en el lado izquierdo. Si configura las banderas frente a la tabla, se utilizará la construcción JOIN, de lo contrario, JOIN ALL (diferencias entre los dos métodos). En el lado derecho se indican las correspondencias de campos en diferentes tablas, si no se especifica una correspondencia la consulta devolverá NULL.

Pestaña de pedidos

Aquí especifica el orden de clasificación de los valores (ORDENAR POR) - descendente (DESC) o ascendente (ASC).

También hay una bandera interesante: Organización automática(en la consulta - AUTOORDER). De forma predeterminada, el sistema 1C muestra los datos en un orden "caótico". Si establece este indicador, el sistema ordenará los datos por datos internos.

Pestaña Lote de consultas

Puede crear nuevos en la pestaña Diseño de consulta y también usarlo como navegación. En el texto de la solicitud, los paquetes están separados por el símbolo “;” (punto y coma).

Botón de consulta en el generador de consultas

Hay un botón Solicitar en la esquina inferior izquierda del generador de consultas, con el que puede ver el texto de la consulta en cualquier momento:

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


Uso de la consola de consulta

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

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

Consola de solicitud de descarga 1C

En primer lugar, para comenzar con la consola de consulta, debe descargarla de algún lugar. Los tratamientos generalmente se dividen en dos tipos: formularios gestionados y normal (o, a veces, se llaman en 8.1 y en 8.2/8.3).

Traté de combinar estas dos vistas en un solo procesamiento: en el modo de operación deseado, se abre el formulario deseado (en modo controlado la consola solo funciona en modo grueso).

Descripción de la consola de consulta 1C

Comencemos nuestra consideración de 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 de la barra de comandos se encarga de guardar las consultas actuales en un archivo externo. Esto es muy conveniente, siempre puede volver a escribir una consulta compleja. O, por ejemplo, almacenar una lista de ejemplos típicos de ciertas construcciones.

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

  • Correrconsulta– ejecución simple y obtención de resultados
  • Ejecutar paquete- le permite ver todas las solicitudes intermedias en un lote de solicitudes
  • Visualización de tablas temporales- le permite ver los resultados que devuelven las consultas temporales en una tabla

Solicitar parámetros:

Le permite establecer 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 la conveniencia del desarrollador.
  • Bandera Parámetros únicos para todas las solicitudes- cuando se establece, su procesamiento no borra los parámetros al pasar de una solicitud a otra en lista general peticiones.

Establecer un parámetro como una lista de valores muy simple, basta con hacer clic en el botón de borrar valor (cruz) al elegir un valor de parámetro, el sistema le pedirá que seleccione el tipo de datos, donde debe seleccionar "Lista de valores":

También en el panel superior hay un botón para llamar a la configuración de la consola de consultas:

Aquí puede especificar opciones de guardado automático de consultas y opciones de ejecución de consultas.

El texto de la solicitud se ingresa en el campo de solicitud de la consola. Esto se puede hacer con un conjunto de prueba de consulta simple o llamando a una herramienta especial: el constructor de consultas.

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

También en este menú están características útiles, como limpiar o agregar caracteres de nueva línea ("|") a la solicitud, u obtener el código de solicitud en esta forma conveniente:

Solicitud = Nueva Solicitud;
Consulta.Texto = ”
|ELIGE
| Monedas.Enlace
| DESDE
| Manual Monedas COMO Monedas”;
Resultado de la consulta = Consulta. Ejecutar ();

El campo inferior de la consola de consulta muestra el campo de resultado de la consulta, para el 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 mejorar la productividad de 1C Enterprise 8.3 es mejoramientopeticiones. Este punto también es muy importante para aprobación de la certificación. La siguiente es una discusión de las razones típicas para rendimiento óptimo consultas y métodos de optimización.

Selecciones en una tabla virtual usando la construcción WHERE

Es necesario aplicar filtros sobre los detalles de una mesa virtual solo a través de los parámetros BT. En ningún caso debe usar la construcción WHERE para la selección en una tabla virtual, esto es un grave error desde el punto de vista de la optimización. En el caso de selección usando DONDE, de hecho, el sistema recibirá TODOS los registros y solo luego seleccionará los necesarios.

DERECHO:

SELECCIONE

DESDE
Registro de acumulación. Liquidaciones mutuas con Depositantes de Organizaciones. Saldos (
,
Organización = &Organización
AND Individuo = &Individual) CÓMO Liquidaciones mutuas conDepositantesOrganizacionesSaldos

NO ADECUADAMENTE:

SELECCIONE
Liquidaciones mutuas conDepositantesOrganizacionesSaldos.CantidadSaldo
DESDE
Registro de Acumulación Liquidaciones Mutuas con Depositantes de Organizaciones Saldos(,)
DONDE
Liquidaciones mutuas con DepositantesOrganizacionesSaldos.Organización = &Organización
Y Liquidaciones mutuas con DepositantesOrganizacionesSaldos.Individual = &Individual

Obtener el valor de un campo de un tipo compuesto a través de un punto

Al recuperar datos de un tipo compuesto en una consulta punteada, el sistema une a la izquierda exactamente tantas tablas como tipos posibles hay en el campo del tipo compuesto.

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

NO ADECUADAMENTE:

SELECCIONE
RecordSet.Registrar.Date,
RecordSet.Number
DESDE
Registro de Acumulación. Organización de Mercancías COMO Conjunto de Registros

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

DERECHO:

SELECCIONE
ELECCIÓN
CUÁNDO BienesOrg.Registrar ENLACE Documento.Venta de BienesServicios
ENTONCES EXPRESS(BienesOrg.Registrar AS Documento.Venta de BienesServicios).Fecha
CUANDO BienesOrg.Registrar ENLACE Documento.Recepción de BienesServicios
ENTONCES EXPRÉS (Documento AS del Registrador de la Organización de Bienes. Recepción de Bienes/Servicios). Fecha
FIN COMO Fecha,
BienesOrg.Cantidad
DESDE
RegisterAccumulation.GoodsOrganizations AS GoodsOrg

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

DERECHO:

SELECCIONE
BienesOrganizaciones.Fecha,
BienesOrganizaciones.Cantidad
DESDE
RegistroAcumulación.BienesOrganizaciones AS BienesOrganizaciones

Subconsultas en una condición de combinación

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

NO ADECUADAMENTE:

SELECCIONE …

UNIRSE A LA IZQUIERDA (
SELECCIONA DE Registro de información.Límites
DONDE …
AGRUPAR POR…
) SOBRE …

DERECHO:

SELECCIONE …
Límites de PONER
DESDE Registro de información.Límites
DONDE …
AGRUPAR POR…
ÍNDICE POR…;

SELECCIONE …
DE Documento.Realización de BienesServicios
Límites de UNIÓN IZQUIERDA
SOBRE …;

Vinculación de registros a 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, recordando indexar los campos unidos en la consulta de la tabla temporal. Esto se debe a que los VT suelen estar contenidos en varias tablas físicas del DBMS, por lo que se compila una subconsulta para su selección y el problema es similar al del párrafo anterior.

Uso de filtros en campos no indexados

Uno de los errores más comunes al compilar consultas es el uso de condiciones en campos no indexados, esto contradice Reglas de optimización de consultas. El DBMS no puede realizar la consulta de manera óptima si la consulta se filtra por campos no indexados. Si se toma una tabla temporal, también es necesario indexar los campos de conexión.

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

  1. El índice contiene todos los campos enumerados en la condición.
  2. Estos campos están al principio del índice.
  3. Estas selecciones van en fila, es decir, los valores que no participan en la condición de consulta no se “encajan” entre ellos.

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

Usar 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 en 1C debería conocer.

Un curso de video gratuito muy útil sobre el desarrollo y la optimización de consultas, fuertemente recomendado principiantes y más allá!



¿Te gustó el artículo? Compártelo