8.3 subir tabla de valores a tabla de valores. Qué métodos existen y cómo buscar varios valores simultáneamente

Aquí hay un pequeño dato para empezar: ejemplos simples de cómo trabajar con una tabla de valores:

1. Crea una tabla de valores.

Tabla de valores = Nueva tabla de valores;


2. Cree columnas para la tabla de valores:

ValueTable.Columns.Add("Nombre");
Tabla de valores.Columnas.Add("Apellido");


3. Agregue nuevas filas usando nombres de columnas:


NewLine.Name = "Vasily";
NewLine.LastName = "Cachorro";


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

FoundRow = ValueTable.Find(SearchValue);


5. Encuentre la primera aparición en ciertas columnas de la tabla de valores.

FoundRow = ValueTable.Find(SearchValue, "Proveedor, Comprador");


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

Estructura de búsqueda = Estructura ("Empleado", Valor de búsqueda);
Matriz de FoundRows = ValueTable.FindRows(SearchStructure);


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

7. Cómo iterar a través de una tabla de valores en orden aleatorio

Para cada fila actual del bucle de la tabla de valores
Informe(CurrentRow.Name);
Fin del ciclo;

Lo mismo usando índices:

SeniorIndex = ValueTable.Cantidad() - 1;
Para cuenta = 0 al ciclo SeniorIndex
Informe(ValoresTabla[Cuenta].Nombre);
Fin del ciclo;


8. Eliminar una fila de la tabla de valores existente

ValueTable.Delete(Fila a eliminar);

por índice

ValueTable.Delete(0);


9. Eliminar una columna existente de la tabla de valores

ValueTable.Columns.Delete(ColumnaDeleted);


por índice

ValueTable.Columns.Delete(0);

Es necesario tener en cuenta que eliminar una fila (o columna) “desde el medio” de la tabla de valores provocará una disminución en uno de los índices de las filas ubicadas “después” de las eliminadas.

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

NuevaFila = ValueTable.Add();
NewRow[ColumnName] = Valor;


11. ¿Cómo llenar toda la columna de la tabla de valores con el valor deseado?
La columna Bandera de Contabilidad Fiscal en la Tabla de Valores debe completarse con el valor Falso

Tabla de Valores. Completar Valores (Falso, “Bandera de Contabilidad Fiscal”);


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

12. ¿Cómo puedo llenar la tabla de valores “Receiver Table” con datos de la tabla de valores “SourceTable”?

Si la tabla de destinatarios aún no existe en el momento de la operación o no es necesario guardar sus columnas anteriores, puede crearla como una copia completa del original.

Tabla de destinatarios = Tabla de origen.Copy();


Opción dos: la tabla ReceiverTable existe y sería una lástima perder sus columnas y las restricciones sobre los tipos de datos de las columnas. Pero debe completar los datos de las columnas cuyos nombres coincidan con los nombres de la tabla de origen.

Transferencia parcial de datos para columnas con nombres coincidentes:

Para cada fila de SourceTable del ciclo SourceTable
FillPropertyValues(NewRow, SourceTableRow);
Fin del ciclo


Para cada fila de la tabla de origen, se agrega una nueva fila a la tabla de recepción 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 los mismos nombres, la tabla de destino terminará conteniendo 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 se encuentra en la matriz de tipos de columnas permitidas 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

Mismas columnas = Nueva matriz();

Para cada columna del ciclo SourceTable.Columns
MatchingColumn = TableReceiver.Columns.Find(Columna.Nombre);

Si la columna coincide<>Indefinido entonces

// Obtener propiedades de la columna.
Nombre = Columna.Nombre;
Tipo de valor = Columna.Tipo de valor;
Encabezado = Columna.Encabezado;
Ancho = Columna.Ancho;

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

TableReceiver.Columns.Delete(Índice);
ReceiverTable.Columns.Insert(Índice, Nombre, Tipo de valor, Encabezado, Ancho);

// Agrega el siguiente nombre de las columnas coincidentes a la matriz.
Mismas columnas. Agregar (Columna. Nombre);

terminara si;

Fin del ciclo;

// Recorre las filas de la tabla fuente.
Para cada fila de SourceTable del ciclo SourceTable

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

// Complete los valores en las celdas coincidentes.
Para cada nombre Columnas de columnas del mismo nombre Ciclo
NewRow[ColumnName] = SourceTableRow[ColumnName];

Fin del ciclo;

Fin del ciclo;


Tendremos que reemplazar la columna de la tabla de destino por una nueva, cuyas propiedades coincidan 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 todas las propiedades de la nueva columna en variables. A continuación, elimine la anterior y cree una nueva columna. Luego recorremos las filas de la tabla fuente.
En el bucle, agregamos una nueva fila a la tabla receptora y abrimos un bucle sobre 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 “ValueTable” con restricciones de tipo?

Al agregar una columna, simplemente puede especificar su nombre y dejar intacto 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

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


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

Agregar una columna que indique el tipo de datos

// Restricciones sobre los tipos de datos de las columnas:
// Sólo elementos del directorio "Contrapartes".
Tabla de Valores.Columnas.Add("Cuenta", Nueva Descripción de Tipos("DirectoryLink.Accounts"));


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

Usar calificadores para especificar el tipo de datos de una columna de la tabla de valores

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


Se pueden realizar acciones similares con respecto a los calificadores de número y fecha.
Tenga en cuenta: el constructor puede crear descripciones de tipo “desde cero” o puede utilizar una descripción de tipo existente como base.

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

// Ampliación de la descripción de tipo utilizada anteriormente.
QualifiersNumbers = Nuevos QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = Nuevos DateQualifiers(DateParts.Date);
ValidTypes extendidos = New TypeDescription(ValidTypes, "Número, Fecha", Calificadores de número, Calificadores de fecha);

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

Saludos a todos los lectores de infostart. Este artículo estará dedicado a la cuestión de la creación de una tabla de valores arbitraria en forma de una aplicación administrada mediante programación.

Características de la tarea.

Cualquiera que haya programado en una aplicación normal se ha enfrentado muchas veces a la tarea de obtener una tabla de valores arbitraria en un formulario. Una tabla de valores arbitraria es una tabla cuyo número y tipo de columnas no se conocen de antemano. Es decir, podría haber 3 columnas, o tal vez 6, o tal vez 8. En una aplicación normal, todo es simple: puede colocar el elemento "Tabla de valores" en el formulario de procesamiento y luego transferir la tabla de valores creada. ​a este elemento mediante programación. Luego con un simple comando:

Elementos de formulario.TableField.CreateColumns();

obtenga una tabla de valores ya preparada en el formulario. Parecería que podría ser más sencillo.

Todo esto estaba en la aplicación normal. En una aplicación gestionada todo ha cambiado. No es tan fácil crear una tabla arbitraria. Ahora necesita parametrizar rígidamente la tabla de valores en el formulario o crearla mediante programación (describa, bueno, esto, de hecho, es la esencia de la aplicación administrada en sí). Esto es lo que intentaremos hacer: crear mediante programación una tabla de valores arbitraria en un formulario controlado.

La solución del problema.

Lo primero que debemos hacer es determinar cómo aparecerá la tabla en el formulario. Lo principal es que no es necesario crear ningún elemento de formulario durante el procesamiento. Lo crearemos programáticamente, como toda la tabla. Es decir, la tabla se describirá y creará en el momento de abrir el formulario o utilizar un botón, dependiendo de quién la necesite.

La creación de una tabla en el formulario se produce a través de la descripción de la tabla de valores como atributo:
SelectionTypeArray = Nueva matriz; Matriz de SelectionType.Add(Type("Tabla de valores")); ChoiceTypeDescription = Nueva descripción de tipo (ChoiceTypeArray); Matriz de detalles = Nueva matriz; Matriz de atributos.Add(Nuevos atributos de formulario ("Tabla de programación", Descripción del tipo de selección, "", "TZN")); Ahora necesitamos crear una tabla de valores programática que contenga los datos. Si la tabla de valores se obtiene de una consulta, entonces todo está más o menos en orden. Si la tabla se crea manualmente, entonces el significado de las columnas que contendrán números o fechas se puede crear a través de la "Descripción de tipos". La cuestión es que las columnas de la tabla de valores deben tener algún tipo. Si, por ejemplo, se espera que el usuario complete los datos de estas columnas de forma interactiva, entonces no se puede agregar una columna de la tabla de valores simplemente con un nombre, debe tener un tipo; Tenga en cuenta que esto es muy importante porque... Transferiremos estos tipos a la tabla del formulario.
Creamos una tabla que contiene varias columnas:
CD = NewDateQualifiers(DateParts.Time); ArrayKD = Nueva matriz; ArrayCD.Add(Tipo("Fecha")); DescripciónTiposHora = Nuevos tipos de descripción(ArrayCD,CD); TZ = Nueva tabla de valores;
TK.Columns.Add("Con", DescripciónTiposHora);
TK.Columns.Add("Antes", DescripciónTiposHora);
TK.Columns.Add("Nombre");
TK.Columns.Add("Nota"); // Nombre completo y Nota - filas A continuación, completaremos la tabla de nuestro programa TK con los datos necesarios. Obtenemos una tabla TK que contiene los valores necesarios y está lista para ser transferida al atributo de formulario creado. Para cada columna del ciclo de columnas TK.

Matriz de atributos.Add(Nuevos atributos de formulario(Column.Name, Column.ValueType,"ScheduleTable"));
Fin del ciclo;
CambiarDetalles(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Esta es una combinación simple y nuestra mesa está lista.

Para cada columna del ciclo de columnas TK.

NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ScheduleTable." + Columna.Nombre;
NuevoElemento.Ancho = 10;
Fin del ciclo;

Diseño condicional, si lo necesitamos, también lo escribimos manualmente, el menú de comandos, manualmente. Los manejadores de mesa también están escritos a mano. Por ejemplo, para agregar un controlador de eventos para la tabla "Selección":

Tabla de SelectionFields.SetAction("Selection","TZNSelection");

Para procesar este evento, se prescribe un procedimiento separado en forma de trámite:

&EnCliente
Procedimiento TKNSelection(TK, fila seleccionada, campo, procesamiento estándar)
//comandos del controlador EndProcedure

Tenga en cuenta que los controladores de tablas se activan en el cliente y, por lo tanto, deben tener un comando de puntero del compilador.

&EnCliente

Bueno, lo último que quería agregar es que después de todos estos pasos, asegúrese de recordar pasar la tabla terminada al atributo del formulario:

ValueВFormAttributes(TdR, "ScheduleTable");

Esto es lo que tenemos como resultado:


Y aquí está el manejo del evento "Selección":



Epílogo.

Espero que el artículo ayude a aquellos programadores de 1C que están comenzando a crear tablas en un formulario mediante programación.

Puede descargar un procesamiento que crea mediante programación una tabla de valores y la muestra en un formulario manejable con comentarios que le ayudarán a crear sus propias tablas.

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

Una tabla enumera las mercancías que se enviarán desde el almacén. Otro cuadro muestra las obligaciones de pago por estos bienes.

Por lo tanto, en 1C, el trabajo con mesas ocupa un lugar destacado.

Las tablas de 1C también se denominan "partes tabulares". Directorios, documentos y otros los tienen.

La consulta, cuando se ejecuta, devuelve una tabla a la que se puede acceder de dos formas diferentes.

La primera selección, más rápida, es posible obtener filas a partir de ella solo en orden. El segundo es cargar 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 la mesa
Seleccionar = Consulta.Ejecutar().Select();
// repasamos todas las líneas del resultado de la consulta en orden
Mientras que el bucle Select.Next()
Informe(Selección.Nombre);
Fin del ciclo;

//Opción 2: cargar en una tabla de valores
Solicitud = Nueva Solicitud ("SELECCIONE Nombre DEL Directorio.Nomenclatura");
//obtener la mesa
Tabla = Consulta.Ejecutar().Descargar().
//además también podemos atravesar todas las líneas
Para cada fila del ciclo de la tabla
Informe(Cadena.Nombre);
Fin del ciclo;
//o acceder arbitrariamente a cadenas
Fila = 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 estrictamente escritas. Esto significa que al solicitar el campo Nombre del directorio de Nomenclatura, recibirá una columna del formato 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 Controles. De manera similar, puede seleccionar Formulario/Insertar control en el menú.

Los datos se pueden almacenar en la configuración; luego debe seleccionar la parte tabular existente (previamente agregada) 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.

Cuando selecciona la parte tabular, el propio 1C agregará columnas a la tabla en el formulario. Las filas ingresadas por el usuario en dicha tabla se guardarán automáticamente junto con el libro/documento de referencia.

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

Esto significa que se ha seleccionado una tabla de valores arbitraria. No agregará columnas automáticamente ni 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 una columna, puede especificar su nombre (como 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 se selecciona una tabla arbitraria, sino una parte tabular).

En las propiedades de la tabla del formulario, puede especificar si el usuario puede agregar o eliminar filas. Una forma más avanzada es la casilla de verificación Ver sólo. Estas propiedades son cómodas de utilizar para organizar tablas destinadas a mostrar información, pero no a editarla.

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

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

Tabla en formulario (cliente ligero/administrado)

En un formulario administrado, estas acciones se ven un poco diferentes. Si necesita colocar una parte tabular en el formulario, expanda la rama Objeto y arrastre una de las partes tabulares hacia la izquierda. ¡Eso es todo!

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

Para agregar columnas, use el menú contextual en este atributo de formulario, seleccione Agregar columna de atributo.

Luego arrastre también la tabla hacia la izquierda.

Para que una 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.

Subir una tabla a Excel

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

Para hacer esto, haga clic derecho en un espacio vacío en la tabla y seleccione Lista.

En un cliente (ligero) administrado, se pueden realizar acciones similares usando el elemento del 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 utilizar durante el desarrollo de software para implementar sus algoritmos. Esencialmente, una tabla de valores 1C es un conjunto dinámico de valores que tienen columnas y columnas.

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

Aprenda a programar en 1C en mi libro "Programación en 1C en 11 pasos"

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

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

  1. Lenguaje de presentación muy accesible y comprensible.
  2. El libro se envía por correo electrónico 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. Aprenda a desarrollar formularios 1C administrados;
  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 donando cualquier cantidad:

Puedes pagar manualmente:

Yandex.Dinero - 410012882996301
Dinero Web - R955262494655

Únete a mis grupos.