1c elimine los espacios adicionales en la línea. Comparando cadenas entre sí

💖 ¿Te gusta? Comparte el enlace con tus amigos.

A menudo sucede que al cargar y descargar datos de 1C 8.2 y 8.3, aparecen espacios en los números que interfieren con el procesamiento normal de los datos. La solución a este problema es muy sencilla.

Veamos qué tipos de espacios hay.

Los espacios pueden ser de dos tipos:

  • espacio irrompible;
  • espacio "normal".

Eliminar espacios que no se rompan

StringRepresentation = String(Número); // el sistema escribirá “10,000” en la variable

Es muy fácil eliminar dichos espacios en 1C usando la función de formato de número:

Número = Formato(10000, “NH=”);

StringRepresentation = String(Número); // el sistema escribirá “10000” en la variable

Establecemos la agrupación en la cadena de formato en valor vacío (también puede escribir "0").

Si el tipo de datos ya es "cadena", se puede utilizar el siguiente método:

StringRepresentation = StrReplace(String(StringRepresentation), Characters.NPP, ""); // en la variable StringRepresentation era “10,000”, se convirtió en “10000”

Es decir, simplemente reemplazamos el espacio sin separación (Characters.NPP) en la línea con un valor vacío.

Espacios regulares

Eliminar un espacio regular en una línea es tan fácil como pelar peras. Basta con realizar la siguiente función:

StringRepresentation = StrReplace(String(StringRepresentation), " ", ""); // "10.000", se convirtió en "10.000"

El ejemplo es similar al método anterior. Sin embargo, en lugar de Characters.NPP, utilizamos una cadena con un espacio.

Si está empezando a aprender a programar 1C, le recomendamos nuestro curso gratis(no lo olvide suscríbete a youtube — se publican nuevos vídeos periódicamente).

Las filas en 1C 8.3 en el lenguaje 1C integrado son valores de 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 entre comillas.

Ejemplo 1. Creemos una variable de cadena con texto.

StringVariable = "¡Hola mundo!";

Funciones para trabajar con cadenas en 1s 8.3

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

Longitud de cadena

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

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

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

El resultado de ejecutar este código será la visualización del número de caracteres en la línea: 11.

AbrL

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

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

Ejemplo 3. Elimine todos los espacios del lado izquierdo de la línea "¡mundo!" y agregue la línea "Hola".

Cadena = Abreviatura ("¡mundo!"); Cadena = "Hola"+Cadena; Informe (cadena);

El resultado de ejecutar este código será la visualización de la línea "¡Hola mundo!" en la pantalla.

Abreviado

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

Ejemplo 4. Forma a partir de las líneas "¡Hola" y "paz!" la frase "¡Hola mundo!"

Línea = Abreviatura("Hola ")+" "+ Abreviatura(" ¡mundo!"); Informe (cadena);

AbbrLP

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

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

Contraparte = Directorios. Contrapartes.Buscar por detalles("TIN", "0777121211"); AccountObject = Cuenta.GetObject(); CounterpartyObject.Name = AbbrLP(CounterpartyObject.Name); AccountObject.Write();

un leon

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

Ejemplo 6. Dejar entrar la estructura. Empleado contener el nombre, apellido y patronímico del empleado. Obtenga una cadena con apellido e iniciales.

NombreInicial = Lev(Empleado.Nombre, 1); Inicial patronímico = Leo(Empleado. Patronímico, 1); Nombre Completo = Empleado.Apellido + " " + Inicial del Nombre + "." + Inicial del segundo nombre + ".";

Bien

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

Ejemplo 7. Deje que se escriba una fecha en el formato “aaaammdd” al final de una variable de cadena, obtenga una cadena con la 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 como parámetro Línea, comenzando por el carácter cuyo número se especifica en el parámetro Número inicial y la longitud pasada al parámetro Número de caracteres. La numeración de caracteres en una línea comienza desde 1. Si en el parámetro Número inicial 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 línea.

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

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

Buscar página

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

  • Línea. Cadena fuente;
  • Buscar subcadena. Subcadena de búsqueda;
  • Dirección de búsqueda. Especifica la dirección para buscar una subcadena en una cadena. Puede tomar valores:
    • Dirección de búsqueda. Desde el inicio;
    • Búsqueda. Dirección final;
  • Posición inicial. Especifica la posición en la cadena en la que comienza la búsqueda;
  • Número de ocurrencias. Especifica el número de aparición de la subcadena buscada en la cadena de origen.

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

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

El resultado de ejecutar este código será mostrar el número de la última aparición del símbolo “y”: 9.

VReg

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

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

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

El resultado de ejecutar este código será la visualización de la línea "¡HOLA MUNDO!"

NReg

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

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

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

El resultado de ejecutar este código será la visualización de la línea "¡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: Escriba en mayúscula las primeras letras de las palabras en la línea "¡hola mundo!"

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

El resultado de ejecutar este código será la visualización de la línea "¡Hola mundo!"

Símbolo

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

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

StringWithStars = Símbolo("9733")+"¡Hola mundo!"+Símbolo("9733"); Informe (StringWithStars);

El resultado de ejecutar este código será la visualización de la línea “★Hello World!★”

Código de símbolo

Código de símbolo (<Строка>, <НомерСимвола>) . 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. Descubra el código del último carácter de la línea "¡Hola mundo!"

Cadena = "¡Hola mundo!"; Código de carácter = Código de carácter (Cadena, Longitud de cadena (Cadena)); Notificar (Código de carácter);

El resultado de ejecutar este código será la visualización del código de símbolo “!” - 33.

linea vacia

Línea vacía (<Строка>) . Comprueba si la cadena consta únicamente de caracteres insignificantes, es decir, si está vacía.

Ejemplo 15. Compruebe si una cadena que consta de tres espacios está vacía.

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

El resultado de ejecutar este código será la visualización de la palabra "Sí" (una expresión de cadena de un valor lógico Verdadero).

Reemplazar página

StrReemplazar(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Encuentra 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!" sustituir la palabra “Paz” por la palabra “Amigos”.

String = StrReplace("¡Hola mundo!", "Mundo", "Amigos"); Informe (cadena);

El resultado de ejecutar este código será la visualización de la línea "¡Hola amigos!"

StrNumberLines

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

Ejemplo 17. Determine el número de líneas del texto:
"Primera linea
Segunda linea
Tercera línea"

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

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

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Obtiene una línea 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 línea"

Texto = "Primera línea" + Símbolos PS + "Segunda línea" + Símbolos PS + "Tercera línea"; Última fila = StrGetRow(Texto, StrNumberLines(Texto)); Informe (Última línea);

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

Número de páginaOcurrencias

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

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

Línea = "Líneas en 1s 8.3 y 8.2"; NúmeroOcurrencias = StrNumberOcurrencias(Vreg(Cadena), "Con"); Informe (Número de ocurrencias);

El resultado de ejecutar este código será la visualización del número de ocurrencias: 2.

La página comienza con

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

Ejemplo 20. Determinar si el TIN de la contraparte seleccionada comienza con el número 1. Dejemos entrar la variable Contraparte Contrapartes.

TIN = Contraparte.TIN; StartsUNits = StrStartsWith(TIN, "1"); Si comienza con unidades Entonces //Tu código EndIf;

Fin de página activado

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

Ejemplo 21. Determinar si el TIN de la contraparte seleccionada termina en el número 2. Dejemos entrar la variable Contraparte se almacena una referencia a un elemento del directorio Contrapartes.

TIN = Contraparte.TIN; TerminaConDos = StrEndsWith(TIN, "2"); If EndsInTwo Then //Tu código EndIf;

División de página

StrDivid(<Строка>, <Разделитель>, <ВключатьПустые>) . Divide una cadena en partes utilizando los caracteres delimitadores especificados y escribe las cadenas resultantes en una matriz. El primer parámetro almacena la cadena fuente, el segundo contiene la cadena que contiene el separador, el tercero indica si las cadenas vacías deben escribirse en la matriz (por defecto Verdadero).

Ejemplo 22. Tengamos una cadena que contenga números separados por el símbolo “;”, obtengamos una matriz de números de la cadena.

Cadena = "1; 2; 3"; Matriz = StrDivide(Cadena, ";"); Para Count = 0 By Array.Quantity() - 1 intento de ciclo Array[Count] = Number(AbbrLP(Array[Count])); Matriz de excepciones[Sch] = 0; EndAttemptsEndCycle;

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

PáginaConectar

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

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

Para Cuenta = 0 Por Array.Quantity() - 1 Ciclo Array[Act] = String(Array[Act]); Fin del ciclo; Fila = StrConnect(Matriz, "; ");

Preguntas frecuentes o plataforma 8 para tontos.

A juzgar por los foros dedicados a temas de 1C, los programadores que se encontraron por primera vez con la plataforma 1C v 8 o que están pasando de 7.7 a menudo tienen las mismas preguntas. Aquí decidí recopilar los más comunes, en mi opinión...

EN:¿Cómo quitar el espacio en el número 12.600,00?
ACERCA DE: Es importante entender que aquí no se utiliza el carácter de espacio, sino el llamado “espacio sin separación”, así, por ejemplo, esta construcción:

StrReplace(NúmeroVariable", ","");

no funcionará. Hay dos opciones para resolver el problema: especificar Symbols.NPP para reemplazarlo en lugar de un espacio, o usar la función Format().

StrReplace(NúmeroVariable,Caracteres.NPP,""); // 1ra opción
Formato(NúmeroVariable,"HG="); // 2da opción

EN:¿Cómo establecer una condición en una consulta para que solo se incluyan documentos de un determinado tipo en la selección resultante?
ACERCA DE: Esto se puede hacer utilizando el operador del lenguaje de consulta REF, que le permite verificar si el valor de la expresión especificada a la izquierda es una referencia a la tabla especificada a la derecha. Veamos un ejemplo, seleccione del registro de acumulación Ventas de Servicios solo aquellos registros cuyo registrador es el documento Ventas de Bienes y Servicios:

Solicitud=Nueva solicitud("
|SELECCIONAR
| Implementación de Servicios.
| Ventas de Servicios.
|DESDE
| Registro de Acumulaciones de Implementación de Servicios CÓMO Implementación de Servicios.
|DONDE
| Documento ENLACE del Registrador. Ventas de Bienes y Servicios");

EN:¿Cómo transferir ciertos documentos/libros de referencia entre configuraciones idénticas?
ACERCA DE: Esto se puede hacer utilizando el procesamiento estándar UploadLoadDataXML.epf, suministrado en sus discos.

EN:¿Cómo transferir datos entre diferentes configuraciones (o de 7.7 a 8)?
ACERCA DE: La mejor opción, en mi opinión, es utilizar la configuración estándar de "Conversión de datos", que se suministra en los discos ITS. También hay varios artículos que describen el uso de esta configuración;

EN:¿Cómo puedo agregar una cadena específica a un campo que no es de tipo cadena en una consulta, por ejemplo SELECT Sales of Goods and Services Amount + " RUR "?
ACERCA DE: De ninguna manera. La conversión de tipos no es posible en una consulta. Algunas personas se dejan engañar por la construcción del lenguaje de consulta EXPRESS, pero solo convierte el valor de un tipo compuesto a uno de los tipos que componen ese valor y de ninguna manera convierte el tipo, por lo que no es aplicable en esta situación.

EN:¿Cómo puedo establecer una condición en una consulta en un campo con un tipo de cadena de longitud ilimitada, por ejemplo, seleccionar todos los documentos con un comentario determinado?
ACERCA DE: Para hacer esto, debe limitar la longitud del campo utilizando el operador de lenguaje de consulta EXPRESS. Por ejemplo:

Solicitud=Nueva solicitud("
|SELECCIONAR
| Enlace de Ventas de Bienes y Servicios.
|DESDE
| Documento Ventas de Bienes y Servicios CÓMO Ventas de Bienes y Servicios.
|DONDE
| EXPRESS(SalesProductsServices.Comentario AS FILA(100)) = &Comentario");

EN:¿Existe un análogo de la función 7.7 CatalogIB() en la versión 8?
ACERCA DE: No, ya que una función de este tipo no tendría sentido en un modo de funcionamiento cliente-servidor. Sin embargo, para el modo de operación de archivo es posible obtener un directorio base de información utilizando la siguiente construcción:

CatalogIB=NStr(InformationBaseConnectionString(),"Archivo");

EN:¿Cómo desconectar un nodo de una base de datos distribuida?
ACERCA DE: Usando la siguiente construcción:

ExchangePlans.SetMainNode(indefinido);

O ejecute el configurador con el parámetro línea de comando/ResetMasterNode (no utilizado para versiones básicas).

EN:¿Cómo obtener el nombre del documento (análogo al método 7.7 Ver())?
ACERCA DE: Usando metadatos. Por ejemplo:

EN:¿Cómo seleccionar documentos de todo tipo en una sola consulta?
ACERCA DE: Uso de metadatos y capacidad de combinar consultas. EN:

Solicitud=Nueva Solicitud;
Texto="";
Para cada documento del ciclo Metadata.Documents
Texto=Texto+"SELECCIONAR Enlace DEL Documento."+Documento.Nombre+"FUSIONAR";
Fin del ciclo;
Query.Text=Left(Texto,StrLength(Texto)-StrLength(" COMBINAR "));
Seleccionar=Query.Run().Select();

EN:¿Cómo interrumpir el informe/procesamiento?
ACERCA DE: Al utilizar el operador UserInterrupt Handling(), se recomienda utilizarlo dentro de bucles. Cuando el usuario presiona la combinación de teclas Ctrl+Interrupción, la ejecución se interrumpe y se muestra el mensaje correspondiente. Por ejemplo:

Mientras que el bucle Select.Next()
Manejo de interrupción de usuario();

Fin del ciclo;

EN: El formulario tiene un TableField con el tipo ValueTree y la propiedad Tree establecida. ¿Por qué no se muestra el árbol de valores?
ACERCA DE: Además, debe establecer la propiedad Mostrar jerarquía para una de las columnas.

EN:¿Cómo utilizar tareas rutinarias en el modo de archivo de la base de datos?
ACERCA DE: A diferencia del cliente-servidor, en modo archivo, la responsabilidad de implementar el inicio automático tareas de rutina recae en el desarrollador. Para implementar el inicio automático de tareas, necesita un controlador de espera que verifique periódicamente las tareas "vencidas" y las inicie. Se recomienda encarecidamente que utilice una sesión separada para esto. Ejemplo:

Procedimiento CheckTasks()
EjecutarProcesamientoTarea();
Procedimiento final
ConnectWaitingHandler("Tareas de comprobación",3);

EN:¿Cómo obtener una matriz a partir de una cadena delimitada?
ACERCA DE: Como ejemplo, daré mi versión de una función que funciona "en ambas direcciones", es decir al pasar una cadena delimitada, forma una matriz, y al pasar una matriz, forma una cadena delimitada a partir de ella.

Función StringArray (Valor Valor, Separador)
Si TypeValue (Valor) = Tipo ("Cadena") Entonces
MnStr = StrReplace(Valor, Separador, Caracteres.PS);
Matriz=Nueva matriz;
Para n=1 por ciclo StrNumber Of Rows(MnStr)
Array.Add(StrGetString(MnStr,n));
Fin del ciclo;
Matriz de retorno;
ElseIfTypeValue(Valor)=Tipo("Matriz") Entonces
Línea="";
Para cada elemento del ciclo de valor
Cadena=Cadena+?(Cadena"",Separador,"")+Elemento;
Fin del ciclo;
devolver cadena;
De lo contrario
Devolver indefinido;
terminara si;
Función final

EN:¿Cómo habilitar la capacidad de realizar cambios en el configurador en una configuración estándar?
ACERCA DE: Dado que se admiten configuraciones estándar (lo que permite modo automatico actualización), entonces, de forma predeterminada, la capacidad de realizar cambios en la configuración está deshabilitada. Para habilitar esta función, debe seleccionar el elemento del menú "Configuración > Soporte > Configuración de soporte" en el configurador y en la ventana que se abre, hacer clic en el botón "Habilitar la capacidad de cambiar".

EN:¿Cómo establecer una contraseña de procesamiento/configuración?
ACERCA DE: En 1C v 8, las contraseñas solo se pueden configurar para módulos de objetos. Para establecer una contraseña, debe abrir el módulo de objeto y seleccionar el elemento del menú "Texto > Establecer contraseña". También es posible suministrar una configuración sin el código fuente de los módulos objeto (configurados en “Configuración > Entrega de Configuración > Ajustes de Entrega”). Me gustaría señalar que en este momento, ninguno de estos métodos es una protección confiable contra la visualización del código fuente del módulo.

EN:¿Por qué no se busca un documento utilizando el método FindByNumber?<Номер документа>)?
ACERCA DE: Hay que recordar que si en el configurador se establece una numeración periódica para este tipo de documento, además del número de documento, se debe especificar como segundo parámetro la fecha del intervalo. De lo contrario, se realizará una búsqueda de un documento con la fecha vacía, lo que evidentemente no conducirá al resultado deseado.

EN: En 1C 8.1, si necesita conectarse a una aplicación que ya se está ejecutando para depurar (Configurador > Depuración > Conexión), los elementos de depuración disponibles están vacíos. ¿Cuál es la razón?
ACERCA DE: El punto es que para la aplicación que vamos a depurar, debemos permitir explícitamente la depuración. Menú Herramientas > Opciones > pestaña Sistema > indicador “Depuración habilitada”.

EN: Cómo organizar iterar sobre cadenas lista dinámica(por ejemplo, DirectoryList o DocumentList)?
ACERCA DE: Esto se puede hacer usando el Generador de informes, por ejemplo:

Constructor=NuevoConstructor de informes;
Builder.DataSource=NewDataSourceDescription(DocumentList);
Selección=Constructor.Resultado.Select();
Mientras que el bucle Select.Next()
Informe(Selección.Enlace);
Fin del ciclo;

Nota: la selección incluirá filas de acuerdo con la selección seleccionada actualmente.

EN:¿Cómo comprobar los valores de propiedad de los objetos de metadatos? Por ejemplo, ¿el tipo de jerarquía del directorio o el modo de registro del registro, o la frecuencia del número de documento?
ACERCA DE: Todas estas propiedades son propiedades enumerables de objetos de metadatos. También puedes obtener valores de este tipo a través de metadatos. Ejemplos:

// Ejemplo 1. Tipo de Jerarquía del directorio
Si Metadatos.Directorios[Nombre del directorio].Vista de jerarquía = Metadatos.Propiedades del objeto.Vista de jerarquía.Jerarquía de grupos y elementos Entonces...
// Ejemplo 2. Modo RegistroRegistro
Si Metadata.InformationRegisters[RegisterName].RegisterRecordMode = Metadata.ObjectProperties.RegisterRecordMode.Submission toRegistrar Entonces...
// Ejemplo 3. Periodicidad del número de documento
Si Metadata.Documents[DocumentName].PeriodicityNumbers = Metadata.ObjectProperties.PeriodicityDocumentNumbers.Non-periodic Entonces...

EN:¿Cómo implementar una casilla de verificación con tres estados en un árbol de valores?
ACERCA DE: Consideremos la formulación del problema con más detalle. El formulario tiene un campo de tabla, cuya fuente de datos es un árbol de valores. En una de las columnas hay un elemento de control "Casilla de verificación". Es necesario que pueda aceptar tres estados: “Encendido”, “Apagado” y “Indefinido”. En este caso, el estado es "Indefinido" o la llamada "bandera gris", es decir parcialmente seleccionado se establece si no todas las filas subordinadas tienen el mismo estado de casilla de verificación. Además, si una fila tiene filas subordinadas, cuando se cambia su bandera, las banderas de todas las filas subordinadas deberían cambiar en consecuencia.
Primero, agreguemos nuestra columna de casilla de verificación al árbol de valores:

Tree.Columns.Add("Marca", Nueva descripción de tipo ("Número"));
FormElements.Tree.CreateColumns();
TreeColumns=FormElements.Tree.Columns;
TreeColumns.Mark.FlagData="Marca";
TreeColumns.Mark.SetControlElement(Tipo("Casilla de verificación"));
Árbol de columnas.Mark.EditMode=EditModeColumns.Directly
absolutamente;
TreeColumns.Mark.ThreeStatesFlag=Verdadero;

En segundo lugar, al cambiar una casilla de verificación, debe establecer los valores correspondientes en las filas subordinadas y controlar el valor de la casilla de verificación en la "fila principal":

Árbol de procedimientos al cambiar bandera (elemento, columna)
CurrentRow=Elemento.CurrentRow;
Si CurrentLine.Mark = 2 Entonces
LíneaActual.Mark=0;
terminara si;
Configuración de banderas (CurrentRow,CurrentRow.Mark);
Mientras que CurrentRow.Parent bucle indefinido
CurrentRow.Parent.Mark=?(SetForAll(CurrentRow),CurrentRow.Mark, 2);
FilaActual = FilaActual.Parent;
Fin del ciclo;
Procedimiento final

Aquí, el procedimiento SetFlags() establece de forma recursiva las casillas de verificación en las filas subordinadas:

Procedimiento Configuración de banderas (fila actual, valor)
Para cada página del ciclo CurrentRow.Rows
Marcadepágina=Valor;
SetChecks(Página,PageMark);
Fin del ciclo;
Procedimiento final

Y la función SetForAll() comprueba si se establece el mismo valor para todas las filas en el nivel actual:

Función SetForAll (Cadena)
Para cada página del ciclo Row.Parent.Rows
Si Page.MarkLine.Mark Entonces
Falso retorno;
terminara si;
Fin del ciclo;
Devuelve verdadero;
Función final

EN:¿Cómo puedo implementar la clasificación por mis propios atributos en el formulario de lista?
ACERCA DE: Si el atributo es de tipo primitivo, basta con establecer la propiedad del atributo "Índice" en el valor "Índice" o "Índice con adicional". ordenar" (no disponible para atributos del tipo Almacenamiento de valor). Si el atributo es un tipo de referencia, debe permitir explícitamente la disponibilidad de clasificación para él. Por ejemplo:

Elemento UP=Elementos de formulario.DirectoryList.Order Settings.Find("Props1");
Si el elemento UP no está definido, entonces
ElementUP.Disponibilidad=Verdadero;
terminara si;

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 veremos más de cerca. varias maneras trabajar con tipos de cadenas en 1C 8.3 y 8.2 usando ejemplos.

Línea

Para convertir una variable de cualquier tipo en una cadena, existe una función del mismo nombre “String()”. El parámetro de entrada será la propia variable, cuya representación en cadena debe obtenerse.

Cadena(Falso) // devuelve "No"
Cadena(12345) // devuelve "12,345"
Cadena (Fecha actual ()) //"21/07/2017 11:55:36″

Es posible convertir no sólo tipos primitivos en una cadena, sino también otros, por ejemplo, elementos de directorios y documentos.

SokrLP, SokrL, SokrP

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

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

Leo, Derecha, Medio

Estas funciones le permiten recortar parte de una cuerda. La función "Left()" devolverá la porción de una cadena desde su lado izquierdo de la longitud especificada. La función "Derecha()" es similar, pero recorta desde la derecha. La función “Avg()” le permite especificar el número del carácter a partir del cual se seleccionará la línea y su longitud.

Lev("variable de cadena", 4) // devuelve "Str"
Right("variable de cadena", 7) // devuelve "variable"
Medio("variable de cadena", 2, 5) // devuelve "troco"

Longitud de cadena

La función determina la cantidad 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 parte de una cadena en una variable de cadena. El valor de retorno será un número que muestra la posición del comienzo de la cadena encontrada. Si no se encuentra ninguna coincidencia, 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.

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

linea vacia

El uso de esta función le permite determinar si una cadena está vacía. No se tienen en cuenta los caracteres menores como espacios, retornos de carro y otros.

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

VReg, NReg, TReg

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

VReg("DIRECTOR GENERAL") // valor de retorno - "DIRECTOR GENERAL"
NReg(“CEO DIRECTOR”) // valor de retorno – “CEO”
TREG(“CEO DIRECTOR”) // valor de retorno – “Director General”

Reemplazar página

Esta función es análoga a la sustitución en editores de texto. Le permite reemplazar un carácter o conjunto de caracteres por otro en variables de cadena.

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

StrNumberLines

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

El bucle en el siguiente ejemplo pasará por tres rondas porque la función LineNumberRow devolverá el valor 3:

Para ind = 1 por StrNumber of Strings("Line1" + Symbols.PS + "Line2" + Symbols.PS + "Line3") Ciclo
<тело цикла>
Fin del ciclo;

StrGetString

Esta función funciona 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" + Caracteres.PS + "Cadena2" + Caracteres.PS + "Cadena3", 2) // devuelve "Cadena2"

Número de páginaOcurrencias

La función cuenta el número de apariciones de un carácter o subcadena en la cadena de búsqueda.

StrNumberAttachments("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 en codificación Unicode, así como determinar este código por el carácter mismo.

SymbolCode("A") // la función devolverá el número 1.040
CharacterCode(1040) // la función devolverá “A”

Tareas comunes al trabajar con cuerdas

Concatenar cadenas

Para combinar varias cadenas (para realizar la concatenación), basta con utilizar el operador de suma.

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

Conversión de tipo

Para convertir un tipo en una cadena, por ejemplo, un enlace a un elemento de directorio, un número, etc., basta con utilizar la función “String()”. Funciones como “ScrLP()” también convertirán variables en una cadena, pero inmediatamente cortarán los caracteres insignificantes.

Cadena(1000) // devuelve "1000"

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

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

String(Formato(1000,"HG=")) // devuelve "1000"

Citas en una cadena

Muy a menudo tendrás que lidiar con la necesidad de especificar comillas en una variable de cadena. Puede ser el texto de la solicitud escrito en el configurador o simplemente una variable. Para resolver este problema, sólo necesita poner dos comillas.

Header = String("Horns and Hooves LLC - ¡somos nosotros!") // devolverá "Horns and Hooves LLC - ¡somos nosotros!"

Multilínea, salto de línea

Para crear texto de varias líneas, simplemente agréguele saltos de línea (Symbols.PS).

MultilineText = “Primera línea” + Símbolos.PS + “Segunda línea”

Cómo eliminar espacios

Para eliminar espacios a la derecha o a la izquierda, puede utilizar la función “ScrAP()” (así como “ScrL()” y “ScrP()”):

StringNoSpaces = Abreviatura("Muchas letras") // la función devolverá el valor "Muchas letras"

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

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

Los programadores también suelen utilizar la siguiente construcción, que permite eliminar o reemplazar con otro carácter todos los espacios en una variable de texto:

StringNoSpaces = 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" // devuelve Falso
"Hola" = "Hola" // devuelve Verdadero
"Hola" = "Adiós" // devolverá Falso

decirles a los amigos
Con el advenimiento...
Artículo siguiente