Hogar / resumen de ventanas / 1c columna de adición de tabla de valor de formulario administrado. Es importante nunca confundir una propiedad de objeto con un método de objeto.

1c columna de adición de tabla de valor de formulario administrado. Es importante nunca confundir una propiedad de objeto con un método de objeto.

Aquí hay un pequeño hecho para comenzar: ejemplos simples trabajar con una tabla de valores:

1. Crea una tabla de valores

Tabla de valores = Nueva tabla de valores;


2. Crear columnas de la tabla de valores:

ValueTable.Columns.Add("Nombre");
ValueTable.Columns.Add("Apellido");


3. Agregue nuevas filas usando los nombres de las columnas:


NewString.Name = "Vasily";
NewRow.LastName = "Pupkin";


4. Cómo buscar un valor en la tabla de valores:
Es necesario encontrar una fila de la tabla que contenga el valor deseado.

FoundString = ValueTable.Find(LookupValue);


5. Encuentra la primera ocurrencia en ciertas columnas de una tabla de valores

FoundString = ValueTable.Find(LookupValue, "Proveedor, Comprador");


6. Si necesita encontrar todas las apariciones en la tabla de valores:
Utilizamos la estructura de búsqueda.

EstructuraBúsqueda = Estructura("Empleado", ValorBuscado);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Vamos a crear una estructura de búsqueda, cada elemento de la cual contendrá el nombre de la columna como clave y el valor buscado en esta columna como valor. Pasamos la estructura de búsqueda como parámetro al método FindStrings(). Como resultado, obtenemos las filas de la tabla.
Si agregamos la búsqueda del valor deseado a la estructura de búsqueda, por ejemplo, también en la columna Responsable, como resultado de aplicar el método FindRows(), obtendremos todas las filas donde tanto el Empleado como el Responsable son iguales al deseado. valor.

7. Cómo recorrer una tabla de valores en orden aleatorio

Para cada fila actual de ValueTable Loop
Informe (LíneaActual.Nombre);
FinCiclo;

Haz lo mismo usando índices:

SeniorIndex = ValueTable.Count() - 1;
Para MF = 0 por Ciclo SeniorIndex
Informe (Tabla de valores [Cuenta]. Nombre);
FinCiclo;


8. Eliminación de una fila de tabla de valores existente

ValueTable.Delete(RemoveRow);

por índice

ValueTable.Delete(0);


9. Eliminación de una columna existente de la tabla de valores

ValueTable.Columns.Delete(RemoveColumn);


por índice

TablaValor.Columnas.Eliminar(0);

Hay que tener en cuenta que al borrar una fila (o columna) “de la mitad” de la tabla de valores se producirá una disminución de uno de los índices de las filas que quedaron “después” de la borrada.

10. ¿Cómo completar la tabla de valores si los nombres de las columnas están contenidos en variables?

NewRow = ValueTable.Add();
NewRow[NombreColumna] = Valor;


11. ¿Cómo llenar toda la columna de la tabla de valores con el valor deseado?
La columna Indicador de contabilidad fiscal en la tabla de valores de la Tabla de valores debe completarse con el valor Falso

ValueTable.FillValue(False, "Indicador de contabilidad fiscal");


Usamos el método FillValues() para la tabla de valores. El primer parámetro es el valor a rellenar. El segundo parámetro es el nombre de la columna rellena.

12. ¿Cómo llenar la tabla de valores "TableRecipient" con los datos de la tabla de valores "SourceTable"?

Si la Tabla de Receptores aún no existe en el momento de la operación, o no necesita guardar sus columnas anteriores, puede crearla como copia completa original

TableReceiver = TableOriginal.Copy();


Opción dos: la tabla TableReceiver existe y es una pena perder sus columnas y restricciones en los tipos de datos de columna. Pero debe completar los datos de las columnas cuyos nombres coincidan con los nombres de la tabla de origen.

Transferencia de datos parcial para columnas con nombres coincidentes:

Para cada fila de SourceTable desde SourceTable Loop
FillPropertyValues(NewString, SourceTableString);
EndCycle


Para cada fila de la tabla de origen, se agrega una nueva fila a la tabla de destino y los valores se completan en aquellas columnas de la nueva tabla cuyos nombres coinciden con los nombres de las columnas de la tabla de origen

Si las tablas no tienen columnas con el mismo nombre, la tabla de destino terminará con tantas filas con valores nulos como filas había en la tabla de origen.
Si para algunas columnas del mismo nombre el tipo de valor de datos de la tabla de origen no cae en la matriz de tipos permitidos de la columna de la tabla de destino, obtendremos valores vacíos en dichos campos.
Consideremos el tercer caso. En el caso de columnas con el mismo nombre, la columna de la tabla de destino debe cumplir plenamente con la columna de la tabla de origen.

Copia completa de datos para columnas con nombres coincidentes

Columnas Similares = Nueva Matriz ();

Para cada columna de SourceTable.Columns Loop
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Si coincide con la columna<>Indefinido Entonces

// Obtener las propiedades de la columna.
Nombre = Columna.Nombre;
ValueType = Columna.ValueType;
Título = Columna.Título;
Ancho = Columna.Ancho;

// Reemplazar columnas en la tabla de destino.
Índice = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Índice);
TableReceiver.Columns.Insert(Índice, Nombre, Tipo de valor, Título, Ancho);

// Agregue el siguiente nombre de las columnas coincidentes a la matriz.
Misma-nameColumns.Add(Column.Name);

Terminara si;

FinCiclo;

// Recorrer las filas de la tabla de origen.
Para cada fila de SourceTable de SourceTable Loop

// Agregar una nueva fila a la tabla de destino.
NuevaCadena = TableReceiver.Add();

// Completar valores en celdas coincidentes.
Para cada NameColumns Of Same NameColumns Loop
NewString[ColumnName] = SourceTableString[ColumnName];

FinCiclo;

FinCiclo;


Tendremos que reemplazar la columna en la tabla de destino por una nueva, cuyas propiedades coincidirán completamente con la columna de la tabla de origen.
Por lo tanto, si se encuentra una columna con el mismo nombre en la tabla de destinatarios, recopilamos en variables todas las propiedades de la nueva columna. A continuación, elimine el anterior y cree una nueva columna. Luego recorremos las filas de la tabla de origen.
En el ciclo, agregamos una nueva fila a la tabla de destinatarios y abrimos un ciclo a través de los nombres de las columnas en la matriz de columnas coincidentes.
Dentro de este bucle anidado, llenamos las celdas de la tabla de destino con los datos de la celda de la tabla de origen.

13. ¿Cómo agregar columnas a la tabla de valores "Table of Values" con restricciones de tipo?

Al agregar una columna, simplemente puede especificar su nombre y no tocar el segundo parámetro del método Add(). En este caso, el tipo de datos de la columna es arbitrario.

Agregar una columna sin especificar un tipo de datos

// Agregar una columna sin restricciones de tipo.
ValueTable.Columns.Add("Objeto");


Puede completar el valor del segundo parámetro. Es necesario pasar una descripción del tipo permitido para la columna allí. La descripción en sí se puede obtener usando el constructor, pasando el nombre del tipo de cadena como parámetro a este último (si hay muchos tipos, entonces separados por comas) o una matriz de tipos válidos.

Agregar una columna especificando el tipo de datos

// Restricciones en los tipos de datos de columna:
// Solo elementos del directorio "Contratistas".
ValueTable.Columns.Add("Cuenta", New TypeDescription("ReferenceReference.Accounts"));


Si hay una cadena entre los tipos permitidos para completar los datos de la columna, puede limitar su profundidad de bits (longitud), especificar el uso de una longitud variable o fija. Todo esto se proporciona creando un objeto usando el constructor StringQualifiers. Además, este objeto se utilizará como uno de los parámetros del constructor TypeDescription.

Uso de calificadores para especificar el tipo de datos de una columna de tabla de valores

// Preparar y establecer límites para datos de tipo String.
Calificadores de cadena = Nuevos calificadores de cadena (20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Puede hacer lo mismo para los calificadores de número y fecha.
Tenga en cuenta: el constructor puede crear la descripción de tipo "desde cero", y puede usar una descripción de tipo existente como base

Uso de declaraciones de tipos existentes para especificar el tipo de datos de una columna de tabla de valores

// Ampliación de la descripción de tipos utilizada anteriormente.
Calificadores numéricos = Calificadores numéricos nuevos (10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Number, Date",NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add("Nota", ExtendedAllowedTypes);

Para tener en cuenta el dinero y los bienes, se utilizan ampliamente diferentes tablas en los negocios. Casi todos los documentos son una tabla.

Una tabla enumera las mercancías que se enviarán desde el almacén. En otra tabla - la obligación de pagar por estos bienes.

Por tanto, en el s. I, el trabajo con tablas ocupa un lugar destacado.

Las tablas en 1C también se denominan "partes de la tabla". Libros de referencia, documentos y otros los tienen.

La consulta devuelve una tabla como resultado de su ejecución, a la que se puede acceder de dos formas diferentes.

La primera selección, más rápida, obtener filas de ella solo es posible en orden. El segundo es descargar el resultado de la consulta en una tabla de valores y luego acceder aleatoriamente a ella.

//Opción 1: acceso secuencial a los resultados de la consulta

// obtener tabla
Selección = Consulta.Ejecutar().Seleccionar();
// omite todas las filas del resultado de la consulta en orden
Mientras Selección.Siguiente() Bucle
Informe(Selección.Nombre);
FinCiclo;

//Opción 2 - subir a la tabla de valores
Consulta = Nueva Consulta("SELECCIONE Nombre DESDE Directorio.Nomenclatura");
// obtener tabla
Tabla = Consulta.Ejecutar().Subir().
// entonces también podemos pasar por alto todas las líneas
Para cada fila de bucle de tabla
Informe(Cadena.Nombre);
FinCiclo;
//o acceder arbitrariamente a las cadenas
String = Table.Find("Pala", "Nombre");

Una característica importante es que en la tabla, que se obtiene del resultado de la consulta, todas las columnas estarán fuertemente tipadas. Esto significa que al solicitar el campo Nombre de la búsqueda de Nomenclatura, recibirá una columna del tipo Cadena con una longitud permitida de no más de N caracteres.

Tabla en el formulario (cliente pesado)

El usuario trabaja con la tabla cuando se coloca en el formulario.

Discutimos los principios básicos de trabajar con formularios en la lección sobre y en la lección sobre

Entonces, coloquemos la tabla en el formulario. Para hacer esto, puede arrastrar la tabla desde el panel de control. Del mismo modo, puede seleccionar el control Formulario/Insertar del menú.

Los datos se pueden almacenar en una configuración; luego, debe seleccionar una parte tabular existente (agregada previamente) del objeto de configuración cuyo formulario está editando.

Haga clic en el botón "..." en la propiedad Datos. Para ver la lista de partes tabulares, debe expandir la rama Objeto.

Al elegir una parte tabular, 1C agregará columnas a la tabla en el formulario. Las cadenas ingresadas por el usuario en dicha tabla se guardarán automáticamente junto con el directorio/documento.

En la misma propiedad de Datos, puede ingresar un nombre arbitrario y seleccionar el tipo ValueTable.

Esto significa que se ha seleccionado una tabla de valores arbitraria. No agregará columnas automáticamente, no se guardará automáticamente, pero puedes hacer lo que quieras con él.

Al hacer clic derecho en la tabla, puede agregar una columna. En las propiedades de la columna, puede especificar su nombre (para referencia en el código 1C), el encabezado de la columna en el formulario, la conexión con el atributo de la parte tabular (este último, si no es una tabla arbitraria, pero una parte tabular es seleccionado).

En las propiedades de la tabla en el formulario, puede especificar si el usuario puede agregar/eliminar filas. Una forma más avanzada es la casilla de verificación ViewOnly. Estas propiedades son útiles para organizar tablas destinadas a mostrar información, pero no para editar.

Para administrar la tabla, debe mostrar el panel de comando en el formulario. Seleccione el elemento de menú Formulario/Insertar control/Panel de comando.

En las propiedades de la barra de comandos, seleccione la casilla de verificación Autocompletar para que los botones de la barra de herramientas aparezcan automáticamente.

Tabla en formulario (cliente ligero/administrado)

En un formulario administrado, estas acciones se ven un poco diferentes. Si necesita colocar una sección tabular en el formulario, expanda la rama Objeto y arrastre una de las secciones tabulares hacia la izquierda. ¡Y eso es!

Si necesita colocar una tabla de valores, agregue un nuevo atributo de formulario y especifique el tipo en sus propiedades: una tabla de valores.

Para agregar columnas, use el menú del botón derecho del mouse en este atributo de formulario, elemento Agregar columna de atributo.

Luego también arrastre la tabla hacia la izquierda.

Para que la tabla tenga una barra de comandos, en las propiedades de la tabla, seleccione los valores en la sección Uso - Posición de la barra de comandos.

Exportar una tabla a Excel

Cualquier tabla 1C ubicada en el formulario se puede imprimir o cargar en Excel.

Para ello, haga clic con el botón derecho en un espacio vacío de la tabla y seleccione Mostrar lista.

En un cliente administrado (delgado), se pueden realizar acciones similares utilizando el elemento de menú Todas las acciones/Lista de visualización.

La tabla de valores en la plataforma 1C 8.3 (8.2) es una colección universal de valores que un desarrollador puede usar en el desarrollo de software para implementar sus algoritmos. De hecho, la tabla de valores 1C es un conjunto dinámico de valores que tiene columnas y columnas.

Artículos sobre otras colecciones universales de valores en 1C

Aprende programación en 1C en un lugar de mi libro "Programación en 1C en 11 pasos"

  1. El libro está escrito en un lenguaje claro y sencillo, para un principiante.
  2. Aprenda a comprender la arquitectura 1C;
  3. Comenzarás a escribir código en lenguaje 1C;
  4. Dominar las técnicas básicas de programación;
  5. Consolidar los conocimientos adquiridos con la ayuda de un libro de tareas;

Una excelente guía para desarrollar en una aplicación 1C administrada, tanto para desarrolladores principiantes como para programadores experimentados.

  1. Lenguaje muy accesible y comprensible
  2. El libro se envía a Email en formato PDF. ¡Se puede abrir en cualquier dispositivo!
  3. Comprender la ideología de una aplicación 1C administrada
  4. Aprenda a desarrollar una aplicación administrada;
  5. Aprende a diseñar formularios gestionados 1C;
  6. Podrás trabajar con los elementos básicos y necesarios de los formularios gestionados
  7. La programación bajo una aplicación administrada quedará clara

Código promocional para un 15% de descuento - 48PVXHeYu


Si esta lección te ayudó a resolver algún problema, te gustó o te resultó útil, entonces puedes apoyar mi proyecto transfiriendo cualquier cantidad:

se puede pagar manualmente:

Yandex.Dinero — 410012882996301
Dinero Web - R955262494655

Únete a mis grupos.

Publicado el 21 de septiembre de 2011

Tabla de valores 1C - parte 3. metadatos Iterando sobre las columnas de la tabla de valores

En este artículo, le diré cómo trabajar con una tabla de valores de estructura "desconocida", cómo recorrer las columnas de una tabla de valores, cómo extraer datos de columnas y filas sin usar nombres de columna. (Este artículo se refiere a una serie de artículos 1C desde cero; programación 1c desde cero; tabla de valores 1c)

Para explicar el material y poder ejecutar nuestros ejemplos de código de programa "en vivo", necesitamos algunos tabla de prueba de valores 1C. Parte de nuestros ejemplos extraerá datos de una tabla de valores, por lo que crearemos una tabla con tres columnas "Apellido", "Nombre", "Patronímico" e ingresaremos una pequeña cantidad de datos en ella, hasta 3 filas. :)

Entonces, creemos una tabla de prueba de valores 1C y completémosla:

MyTR = Nueva tabla de valores; // crea una nueva tabla de valores almacenados en la variable "MyTR" MyTR.Columns.Add("Last name"); // crea la columna "Apellido" MyTR.Columns.Add("Nombre"); // crea la columna "Nombre" MyTM.Columns.Add("Patronymic"); // crea la columna "Segundo nombre" // agrega la primera fila a nuestra tabla de valores NewRow = MyТЗ.Add(); NewLine.Apellido = "Chapaev"; NewString.Name = "Vasily"; NewString.Patronímico = "Ivanovich"; // agregar la segunda línea NewLine = MyТЗ.Add(); NewLine.Lastname = "Dzerzhinsky"; NewString.Name = "Félix"; NewLine.Patronímico = "Edmundovich"; // agrega la tercera linea NewLine = MyTR.Add(); NewRow.LastName = "Kotovsky"; NuevaCadena.Nombre = "Gregory"; NewString.Patronímico = "Ivanovich";

Nuestra tabla de prueba consta de tres columnas: Nombre, Apellido, Patronímico; y tiene tres líneas completas con los nombres de los héroes de la Guerra Civil.

El primer ejemplo de código está iterando a través de las columnas de la tabla de valores 1C como una colección.

// mostrar los nombres de todas las columnas de TK para cada columna de My TK.Columns Notify loop("Nombre de columna: " + Column.Name); FinCiclo;

Nuestro bucle mostrará todos los nombres de columna en el cuadro de mensaje 1C:

Nombre de columna: Apellido Nombre de columna: Nombre Nombre de columna: Segundo nombre

Vemos que se usa un bucle de colección especial para iterar a través de las columnas, similar al bucle de iteración de fila (en el último artículo). MisTM.Columnas- esta es una colección de columnas de la tabla de valores 1C "MoyaTZ". La colección contiene objetos de tipo "ColumnValueTable" Cada objeto de este tipo es una columna de la tabla de valores y contiene propiedades y métodos. Con referencia a estas propiedades y métodos, obtenemos la información necesaria sobre una columna o realizamos otras acciones con ella.

Por ejemplo, acceder a la propiedad "Nombre" (Columna.Nombre) obtenemos el nombre de la columna actual.

Quiero llamar su atención sobre el título del ciclo: "Para Cada Columna De MyTR.Columns Loop" Variable nombrada "Columna" inventado por nosotros. No es necesario utilizar el mismo nombre. Puedes nombrar esta variable como quieras, por ejemplo "MiColumnaActual" Entonces el ejemplo anterior se vería así:

// imprime los nombres de todas las columnas de TK For Each MyCurrentColumn From MyTK.Columns Notify Loop("Nombre de columna: " + MyCurrentColumn.Name); FinCiclo;

Cuando el subsistema de ejecución 1C encuentra un ciclo de este tipo, en cada paso del ciclo, asigna un elemento de nuestra colección a la variable con el nombre especificado, en este caso - un elemento de la colección columnas de la tabla de valores MisTM.Columnas Y luego nos referimos a la variable que contiene la columna actual, y usamos la propiedad "Nombre".

Sugiero mostrar el número de cada columna en la colección de columnas al lado del nombre de la columna:

// mostrar el número y los nombres de todas las columnas de la tabla de valores para cada columna de MyTR.Columns LoopColumnNumber = MyTR.Columns.Index(Column); // obtener el número de columna ColumnName = Column.Name; // obtener el nombre de la columna Report("Número de columna:" + Número de columna + " Nombre de columna: " + Nombre de columna); FinCiclo;

El texto se mostrará en el cuadro de mensaje 1C:

Número de columna: 0 Nombre de columna: Apellido Número de columna: 1 Nombre de columna: Nombre Número de columna: 2 Nombre de columna: Segundo nombre

Prestemos atención al hecho de que las columnas de la tabla de valores 1C están numeradas a partir de cero, al igual que las filas de la tabla de valores.

El número de columnas en la tabla de valores 1C

Para averiguar el número de columnas en la tabla de valores, usamos el método "Número ()" en la colección de columnas.

Número deColumnas = MyTM.Columns.Number(); Informe (Número de columnas);

El número "3" se mostrará en la pantalla. De hecho, en nuestra tabla hay tres columnas: "Apellido", "Nombre", "Patronímico"

Obtener un objeto de columna por su número (índice) e iterar sobre columnas usando el índice de columna

Hagamos un ciclo a través de todas las columnas de la tabla de valores usando los índices de columna (números). Recuerde que la numeración de columnas comienza desde cero. Por lo tanto, debemos aumentar el contador del ciclo "Sh" de cero a un número igual al número de columnas menos uno.

Para SC = 0 Por MyTM.Columns.Quantity() - 1 Loop CurrentColumn = MyTM.Columns[SC]; Notificar (CurrentColumn.Name); FinCiclo;

En pantalla nos saldrá lo siguiente

Nombre completo

Creo que este ejemplo fue claro. recurrimos al método Cantidad() colecciones de columnas" MisTM.Columnas.Cantidad()", obtuvo el número de columnas e inició un ciclo con un contador de cero antes de número de columnas menos uno. Dentro del bucle, obtenemos cada columna de la colección de columnas y asignamos el objeto de columna actual a una variable Columna actual A continuación, la variable Columna actual accedemos a la propiedad Nombre y mostrar el valor de esta propiedad en la pantalla: Notificar (CurrentColumn.Name);

Es importante nunca confundir una propiedad de objeto con un método de objeto.

Una propiedad es una especie de valor estático y el acceso a ella se escribe sin paréntesis, por ejemplo CurrentColumn.Name. Un método es esencialmente un procedimiento o función de un objeto, y las llamadas a procedimientos y funciones siempre se escriben entre paréntesis (incluso si no hay parámetros de entrada). Por ejemplo: MisTM.Columnas.Cantidad()

Si nos referimos al método, olvidando escribir paréntesis, el intérprete 1C nos dará un mensaje de error y no ejecutará el código para su ejecución. Dado que el intérprete asumirá que no estamos accediendo a un método, sino a una propiedad, porque no hay corchetes. Y no podrá encontrar propiedades con ese nombre (porque solo hay un método con ese nombre), lo que se dirá en el mensaje de error.

Esto es lo que escribirá el intérprete si olvido poner paréntesis en una llamada de método de una manera tan incorrecta MisTM.Columnas.Cantidad(sin paréntesis después de "Cantidad()"):

Campo de objeto no encontrado (Recuento)

En este caso, "campo" y "propiedad" deben entenderse como sinónimos, o una inexactitud en la terminología de los desarrolladores de 1C. Usan ambas palabras para referirse al mismo concepto. Aunque en otros lenguajes de programación estos términos pueden significar conceptos diferentes.

Obtención de datos de la tabla de valores 1C usando números de columna

Les ofrezco, para empezar, un ejemplo simple de obtener datos de la primera fila de nuestra tabla. Tenga en cuenta que estamos utilizando la tabla precargada del principio del artículo. Sabemos con certeza que la tabla tiene la primera fila y al menos una columna. Si aplicamos este ejemplo a una tabla vacía, se producirá un error. Asi que:

PrimeraLínea = MiTR; // obtener la primera fila (numeración desde cero) ColumnFirstValue = RowFirst; // obtener el valor de la primera columna (la numeración de las columnas también es desde cero) Report(FirstColumnValue); // mostrar el valor de la primera columna en la primera fila de la tabla

La pantalla mostrará:

Chapaev

Primero obtuvimos el objeto de fila de la tabla de valores accediendo a la tabla de valores usando el operador [...]. (si olvidó cómo hacer esto, puede consultar los artículos anteriores) Dentro del operador, pasamos el argumento "0". Este es el índice de la primera fila de la tabla de valores. PrimeraLínea = MiTR;

Además, también tenemos el derecho de referirnos al objeto de cadena usando el operador [...]. Dentro de esta sentencia, pasamos el número de columna de la tabla de valores, en este caso también "0". Y así obtuvimos el valor de la columna con el número "0" para línea actual tablas numeradas "0". Mostramos este valor en la pantalla y representa la cadena "Chapaev".

Compliquemos un poco nuestro ejemplo:

PrimeraLínea = MiTR; // obtener la primera línea (numerada desde cero) Report(FirstLine); // mostrar el valor de la primera columna en la primera fila de la tabla Report(FirstRow); // mostrar el valor de la segunda columna en la primera fila de la tabla Report(FirstRow); // mostrar el valor de la tercera columna en la primera fila de la tabla

Ahora hemos mostrado los valores de las tres columnas de la primera fila de nuestra tabla de valores:

Chapaev Vasili Ivanovich

Ahora estoy modificando este ejemplo aún más para que podamos prescindir de una variable "Primera linea"

Notificar (MiTM); // mostrar el valor de la primera columna en la primera fila de la tabla Report(MyTR); // mostrar el valor de la segunda columna en la primera fila de la tabla Report(MyTR); // mostrar el valor de la tercera columna en la primera fila de la tabla

La pantalla será la misma.

Chapaev Vasili Ivanovich

Vimos en el ejemplo anterior que para acceder a un valor que está en una fila específica y columna específica de una tabla de valores, podemos usar la llamada consecutiva de dos operadores [...] de esta forma: Tabla de valores [Filas de índice] [Columnas de índice]

Entonces, estamos listos para crear un bucle y obtener los datos de todas las filas y todas las columnas usando índices de fila y columna:

For RowCount = 0 By MyTM.Quantity() - 1 Bucle // recorrer las filas For ColumnCount = 0 By MyTM.Columns.Quantity() - 1 Bucle // recorrer las columnas anidadas // obtener el valor de la celda (de la fila actual y las columnas actuales) CellValue = MyTR[RowCount][ColumnCount]; // muestra el número de fila, el número de columna y el valor de la celda Report("Line #" + RowCount + "column #" + ColumnCount + " = " + CellValue); FinCiclo; FinCiclo;

En la pantalla se mostrará lo siguiente:

Línea #0 columna #0 = Chapaev Línea #0 columna #1 = Vasily Línea #0 columna #2 = Ivanovich Línea #1 columna #0 = Dzerzhinsky Línea #1 columna #1 = Felix Línea #1 columna #2 = Edmundovich Línea # 2 columna No. 0 = Kotovsky Line No. 2 columna No. 1 = Grigory Line No. 2 columna No. 2 = Ivanovich

Con la ayuda de dos bucles, uno de los cuales está anidado en el otro, mostramos los valores de todas las columnas de todas las filas de la tabla de valores 1C. En este caso, no usamos los nombres de las columnas, sino que nos referimos a las columnas y filas por sus índices. Para una mejor comprensión, preste atención a los comentarios dentro del ejemplo.

En conclusión, propongo cambiar ligeramente nuestro ejemplo para que en lugar de números de columna, muestre sus nombres en la pantalla. Y además haré un diseño más presentable para mostrar contenido en pantalla.

For RowCount = 0 By MyTR.Quantity() - 1 Bucle // recorrer las filas Report(" ======= Row # " + RowCount + " ======="); Para reportar(" "); // salto de línea (insertar línea vacía) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Loop // bucle anidado a través de columnas // obtener el valor de celda (de la fila actual y la columna actual) CellValue = MyTR[RowCount ][ Número de columnas]; // obtener el nombre de la columna ColumnName = MyTR.Columns[ColumnCount].Name; // mostrar el nombre de la columna y el valor de la celda Report(ColumnName + ": " + CellValue); FinCiclo; Para reportar(" "); // nueva línea (insertar línea vacía) EndCycle;

Ahora, en nuestra pantalla, la información comenzó a verse más representativa:

Línea No. 0 ======= Apellido: Chapaev Nombre: Vasily Segundo nombre: Ivanovich ======= Línea No. 1 ======= Apellido: Dzerzhinsky Primer nombre: Felix Segundo nombre: Edmundovich ===== == Línea No. 2 ======= Apellido: Kotovsky Nombre: Grigory Patronímico: Ivanovich

Sí, casi lo olvido. Cuando usamos dos operadores [...][...] seguidos, podemos pasar el nombre de esta columna en lugar del índice de la columna: ValueTable[RowIndex][ColumnName]

For RowCount = 0 By MyTR.Quantity() - 1 Bucle // recorrer las filas Report(" ======= Row # " + RowCount + " ======="); Para reportar(" "); // avance de línea (insertando una línea vacía) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Bucle // bucle anidado a través de las columnas ColumnName = MyTR.Columns[ColumnCount].Name; // obtener el nombre de la columnaCellValue = MyTR[RowCount][ColumnName]; //

Preste atención a la línea marcada con una flecha ". En esta línea, en lugar del índice de la columna actual, le pasamos el nombre de la columna actual al argumento en corchetes[...] El resultado será el mismo.

Y ahora, el último de este artículo.

Recibo CORRECTO de todos los datos de la tabla de valores 1C, usando bucles para iterar sobre la colección de filas y la colección de columnas

Para cada CurrentRow From MyTR Loop // recorrer la colección de cadenas Report(" ======= Line # " + MyTR.Index(CurrentRow) + " ======="); Para reportar(" "); For Each CurrentColumn From MyTR.Columns Loop // bucle anidado a través de la colección de columnas ColumnName = CurrentColumn.Name; // obtener el nombre de la columnaCellValue = CurrentRow[ColumnName]; // obtener el valor de la celda POR el NOMBRE de la columna Report(ColumnName + ": " + CellValue); // mostrar el nombre de la columna y el valor de la celda EndCycle; Para reportar(" "); FinCiclo;

En el ejemplo, se usaron dos bucles. El bucle de colección de columnas está anidado dentro del bucle de fila. Si ha tratado con los ejemplos anteriores y ha leído los artículos anteriores, entonces no tendrá dificultad para entender cómo funciona este ejemplo.

Finalmente, mantendré el número de líneas de código en nuestro último ejemplo lo más corto posible eliminando el uso de variables intermedias. Obtendremos una muestra de "código industrial" que se utiliza en aplicaciones del mundo real.

Esto solo debe hacerse cuando tenga una buena comprensión de lo que está haciendo. Si el código es muy complejo, es aceptable dejar variables intermedias para facilitar la comprensión de su propio código más adelante. Además, cualquier código debe estar mínimamente comentado, para que después de un tiempo sea más fácil comprender los textos del programa.

For Each CurrentRow From MyTR Loop // recorrer las líneas Report(" ======= Line # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); For Each CurrentColumn From MyTr.Columns Loop // iterar sobre las columnas Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); FinCiclo; Para reportar(" "); FinCiclo;

La salida en pantalla no ha cambiado, sigue siendo la misma que en el ejemplo anterior:

CURSO DE 2 SEMANAS

"PROGRAMACIÓN en 1C PARA PRINCIPIANTES"

El curso se le enviará por correo electrónico. Conviértete en programador completando tareas paso a paso.

Todo lo que necesitas para participar es una computadora e internet.

Acceso gratuito al curso:

sp-force-hide (display: none;).sp-form (display: block; background: #eff2f4; padding: 5px; width: 270px; max-width: 100%; border-radius: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; familia de fuentes: Arial, "Helvetica Neue", sans-serif; repetición de fondo: sin repetición; posición de fondo: centro; tamaño de fondo: automático;) .sp-form input (pantalla: bloque en línea; opacidad: 1; visibilidad: visible;).sp-form .sp-form-fields-wrapper (margen: 0 auto; ancho: 260px;).sp-form .sp -control de formulario (fondo: #ffffff; color del borde: #cccccc; estilo del borde: sólido; ancho del borde: 1 px; tamaño de la fuente: 15 px; relleno a la izquierda: 8,75 px; relleno a la derecha: 8,75 px; borde -radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; alto: 35px; ancho: 100%;).sp-form .sp-field label (color: #444444; font- tamaño: 13px; estilo de fuente: normal; peso de fuente: negrita;).sp-form .sp-button (border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; color de fondo: #f4394c; color: #ffffff; ancho: 100%; font-weig altura: 700; estilo de fuente: normal familia tipográfica: Arial, "Helvetica Neue", sans-serif; sombra de caja: ninguna -moz-caja-sombra: ninguno; -webkit-caja-sombra: ninguno; fondo: degradado lineal (hacia arriba, #e30d22, #f77380);).sp-form .sp-button-container (text-align: center; width: auto;)