Contactos

Complete la tabla de valores del formulario 1c 8.2. Qué métodos existen y cómo buscar varios valores simultáneamente

Una tabla de valores es un objeto universal específico diseñado para almacenar datos en una representación tabular. La diferencia clave entre una tabla y los objetos de la aplicación es la falta de vinculación a las tablas físicas de la base de datos. La tabla de valores existe solo en la RAM, lo que, por un lado, brinda oportunidades únicas y, por otro, impone ciertas restricciones. Sin embargo, las posibilidades de interacción con la tabla son comparables a la interacción con objetos que realmente existen en la base de datos.

Históricamente, la tabla de valores en 1C tiene un doble propósito, siendo un análogo virtual de las tablas existentes, pero al mismo tiempo también es un elemento de control. Con el paso a una aplicación administrada, gran parte de esta funcionalidad ha quedado obsoleta, pero ahora también puede ser un elemento de la interfaz de usuario, aunque con algunas limitaciones importantes.

Estructura de una tabla de valores como objeto.

Las propiedades de una tabla de valores están determinadas por combinaciones de dos colecciones predefinidas: sus columnas y filas.

Tabla de valores Columnas

Una columna de una tabla de valores es su propiedad definitoria. Es el conjunto de columnas de la tabla lo que determina su estructura. Las columnas corresponden a los campos de tablas físicas o columnas familiares de la interfaz de usuario de una sección tabular o diario de documentos. Una columna puede tener un nombre interno, un tipo de valor y un título que se muestra cuando se trabaja interactivamente con la tabla.

Dado que las columnas son una colección de objetos, puede agregar, eliminar y editar columnas.

Fila de la tabla de valores

Desde la perspectiva de la interfaz del software, las cadenas son una colección separada integrada en una tabla de valores. Son análogos a los registros de las tablas físicas, es decir, filas familiares para el usuario en una sección tabular o diario de documentos. Cada fila individual es un objeto con un conjunto de propiedades con nombre, cuyos nombres corresponden a los nombres de las columnas de la tabla.

Por tanto, interactuar con una cuerda es muy similar a interactuar con otros objetos. Puede leer y escribir sus propiedades, incluido el uso de la función predefinida "FillPropertyValues()". Dado que las filas son la colección principal de la tabla de valores, el método Clear() se utiliza para eliminar todas las filas de la tabla.

Crear tabla de valores

Hay muchas formas de tener una tabla de valores lista para usar. Veamos algunos de ellos. Cada ejemplo se proporcionará como listados de códigos con comentarios.

Creando una tabla usando el constructor

El método principal que le permite crear exactamente la tabla que el desarrollador necesita es, desafortunadamente, el que requiere más mano de obra, ya que requiere especificar manualmente todas las propiedades necesarias de la tabla.

DemoTable = Nueva tabla de valores; // En primer lugar, inicializamos el TK // A continuación, determinamos los parámetros necesarios para las nuevas columnas y los agregamos a la colección // Creamos la columna "Nomenclatura" Nombre = "Nomenclatura"; ValueType = Nueva descripción de tipo ("DirectoryLink.Nomenclature"); Título = "Nomenclatura (producto)"; DemoTable.Columns.Add(Nombre, Tipo de valor, Encabezado); // Creando la columna "Cantidad" Nombre = "Cantidad"; Tipo de valor = Nueva descripción de tipo ("Número"); DemoTable.Columns.Add(Nombre, Tipo de valor); // Como resultado de estas manipulaciones, creamos una tabla vacía con columnas escritas // Si necesita usar una escritura más precisa de tipos primitivos, entonces debe usar la sintaxis extendida del constructor "Descripción de tipos"

Crear una tabla copiando

Si tiene a mano una referencia con una estructura y/o composición adecuada, puede copiar o descargar la tabla de valores de referencia. Si la tabla de referencia es otra tabla, entonces debe utilizar el método "Copiar tablas de referencia". Si se trata de una parte tabular o de un conjunto de registros registrales, se debe utilizar el método “Descargar tabla de valores”. Si solo necesita la estructura, puede utilizar el método "Copiar columnas".

// Opción de copiar todas las filas del estándar de especificación técnica pero conservando solo las dos columnas especificadas del estándar = "Nomenclatura, Cantidad"; DemoTable = TableEtalon.Copy(, ColumnsEtalon); // Opción para copiar filas preseleccionadas del estándar de especificación técnica, conservando las dos columnas especificadas del estándar = SelectIntoArrayThe Rows We Need From the Table of the Standard(); ColumnsStandard = "Nomenclatura, Cantidad"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Opción para copiar filas del estándar de especificación técnica usando el filtro especificado, conservando una columna “Nomenclatura” // Se seleccionarán todas las filas donde el valor en la columna Cantidad sea 0, solo la columna Nomenclatura Selección de fila = Nueva estructura(" En la tabla resultante aparecerá "Cantidad", 0); ColumnasEstándar = "Nomenclatura"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Opción con una copia completa de la tabla y posterior eliminación de una fila con el valor del campo de cantidad igual a cero y eliminación de toda la columna “Cantidad” Selección de fila = Nueva estructura("Cantidad", 0); ColumnasEstándar = "Nomenclatura"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); TableRow = DemoTable.Find(0, "Cantidad"); DemoTable.Delete(TableRow); DemoTable.Columns.Delete("Cantidad"); // Se pueden aplicar opciones similares y sus modificaciones a partes tabulares y conjuntos de registros

Creando una tabla con una consulta

Si existe una plantilla de la tabla que necesita en la base de datos, puede utilizar una consulta para crear rápidamente una tabla con la estructura deseada.

// Un ejemplo de cómo crear una tabla vacía basada en la estructura del registro de acumulación // Es fácil adivinar que de esta manera también puede obtener una tabla completa Consulta = Nueva consulta("SELECT FIRST 0 * From Accumification Register. Productos En Almacén"); SolicitudResultado = Solicitud.Execute(); DemoTable = Resultado de la consulta.Descargar(); // Un ejemplo de creación de una tabla vacía utilizando tipos y nombres de campos especificados explícitamente Query = New Query; Query.Text = "SELECCIONE TOP 0 | Valor(Directory.Nomenclature.EmptyLink) COMO Nomenclatura, | EXPRESS(0 COMO NÚMERO(15, 3)) COMO Cantidad"; SolicitudResultado = Solicitud.Execute(); DemoTable = Resultado de la consulta.Descargar(); // ¡IMPORTANTE! No olvide que los tipos de valores de columna obtenidos de una solicitud siempre contienen el tipo Null // Por lo tanto, el TK creado por la solicitud siempre tiene tipos de columna compuestos

Conclusión

En este breve artículo, analizamos las propiedades básicas y técnicas prácticas para crear una tabla de valores, suficientes para comprenderlas y comenzar a usarlas. El objeto de la tabla de valores en sí es tan multifacético que una descripción detallada de sus capacidades requiere escribir un artículo separado sobre técnicas y métodos de trabajo.

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 iterar a través de 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 (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.

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.

Buscar en la tabla de valores 1C.

Qué métodos existen y cómo buscar varios valores simultáneamente.

Hay dos métodos especiales para buscar una tabla de valores:

1. Encuentra

TVHorizon = Directorios.Nomenclatura.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//también podemos especificar en qué columnas buscar para acelerar la búsqueda
FoundString = TZNomenclature.Find(TVHorizon, "Nomenclatura");

Este método devuelve la primera fila encontrada con el valor deseado, o Indefinido si no lo encuentra. Por lo tanto, es conveniente usarlo para buscar valores únicos, porque de lo contrario, cuando se encuentre un valor, deberá eliminarlo de la tabla para encontrar el siguiente.

Para evitar esta molestia, existe el siguiente método que le permite encontrar una matriz de cadenas coincidentes:

2. Buscar cadenas


Estructura de selección.Insert("Nomenclatura", TVHorizon); // primero indica la columna dónde buscar y luego qué buscar.

Este método siempre devuelve una matriz, pero puede estar vacía si no se encuentra nada. Y este método, como el anterior, devuelve las filas de la tabla de valores en sí, y no los valores en sí en una matriz separada. Por lo tanto, al cambiar los valores en la cadena de la matriz o, como en el método anterior, para la cadena encontrada, cambiará el valor en la tabla de valores procesada.

Otra ventaja de este método es que puede buscar en varias columnas de la tabla de valores a la vez:


SelectionStructure = Nueva estructura;
Estructura de selección.Insert("Nomenclatura", TVHorizon);
Estructura de selección.Insert("Cantidad", 10);
FoundArray de filas = TZNomenclature.FindLines(SelectionStructure);

Lo único negativo, como ves, es que no se pueden utilizar otros tipos de comparación que no sean “iguales”

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:

ÍndiceSenior = 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();
Nueva fila [Nombre de columna] = 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 se encuentra 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 nuestra tabla de programa TK con los datos necesarios. Recibimos 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 procesador 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ВFormProperties(TdR, "ScheduleTable");

Esto es lo que tenemos como resultado:


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



Epílogo.

Espero que este 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.



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