Por qué es posible que el estilo condicional no funcione en un formulario administrado. Diseño condicional de formas controladas 1C Diseño condicional de la parte tabular formas controladas.

Estilo condicional de formularios administrados.

La mayoría de quienes han trabajado con sistemas de control de acceso y han creado informes sobre sistemas de control de acceso conocen de primera mano el diseño condicional. Cambiar la fuente, el color de la celda o la presentación de un campo en función del valor de otro campo ya es bastante común.

Pero nos encontramos con menos frecuencia con el diseño condicional de formas controladas. Aunque este no es un mecanismo menos poderoso, funcional y necesario.
¿Cómo es él? Pero todo es igual. En función de cualquier condición, podemos configurar las vistas o propiedades de los campos de los elementos del formulario tabular y cambiarán sobre la marcha.

Me refiero a campos de lista dinámicos y campos de tabla. Aquí, desde el código, podemos acceder a una columna separada y establecer propiedades para toda la columna a la vez, pero no podemos establecer las propiedades de un campo individual.

Cita

¡¡¡Importante!!! Mucha gente lucha con esto y pierde el tiempo. El estilo condicional no funciona para los campos de formulario normales (no para los campos de tabla).

¿Dónde se puede utilizar esto además de los campos para colorear? Bueno, un ejemplo clásico es la presentación de vistas en una sección tabular. Para contabilidad, puede haber tres como estándar. Y normalmente están alineados en un campo, uno debajo del otro. Dado que cada línea puede tener su propia cuenta, la composición de los análisis puede diferir. Y, en general, si muestra 3 análisis en cada línea, ocupa mucho espacio. ¿Por qué hacer esto si se nos permite tener un subconto en alguna parte o dos en alguna parte?

Establecer propiedades del formulario

Veamos el ejemplo de una sección de tabla que creamos durante el procesamiento.

Creemos un procesamiento donde agregaremos una parte tabular con tres detalles de Subconto, y también agregaremos el atributo Cantidad de Subconto, que indicará la cantidad de subcontos en la línea.

La configuración de la apariencia condicional del formulario se encuentra en las propiedades del formulario en la pestaña Apariencia.

Ahora nuestra tarea es indicarle al programa que si el valor en la línea del campo Cantidad de Subconto es 1, solo se debe mostrar el Subconto1, con valor 2: Subconto1 y Subconto2, con valor 3: Subconto1, Subconto2 , Subconto3.

Para hacer esto, use el formulario de configuración de apariencia condicional.

En la columna Campos formateados indicamos los campos Subconto1, Subconto2, Subconto3. Como cada campo tendrá un diseño diferente, crearemos 3 líneas.

Indiquemos que diseñaremos la propiedad de visibilidad.

También configuraremos una condición bajo la cual se desactivará la visibilidad.

Veamos qué pasó en la empresa. Al mismo tiempo, agregaremos filas a la parte tabular y organizaremos los valores del número de subcontos.

Como puede ver, se muestran diferentes números de campos en diferentes líneas.

Configuración por código

Además de configurar mediante propiedades, esta configuración se puede realizar mediante código de programa.
Si usa una configuración integrada, se verá así (esto se aplica a todas las estándar):

ElementUO = DiseñoCondicional.Elementos.Add();
DataCompositionClientServer.AddDesignField(ElementUO.Fields, "TabularPartSubconto2");

GeneralPurposeClientServer.AddLayoutElement(ElementUO.Selection,
"TabularPartQuantitySubconto", DataCompositionComparisonType.Less, 2);

ElementUO.Design.SetParameterValue("Visibilidad", Falso);


Si no se utiliza el BSP, el código será un poco más largo. Simplemente daré procedimientos estándar del mismo BSP.

Función Agregar campo designable (colección de campos designables, nombre de campo) Exportar

ElementField = Colección de FormattedFields.Elements.Add();
ItemField.Field = NewDataCompositionField(FieldName);

returnItemField;

Función final


Función AddLayoutElement(AddArea,
valor de nombre de campo,
Tipo de comparación de valores,
Valor RightValue = Indefinido,
Representación del valor = Indefinido,
Uso del valor = Indefinido,
valueDisplayMode = Indefinido,
valueUserSettingsIdentifier = Indefinido) Exportar

Elemento = AdditionArea.Elements.Add(Type("Elemento de selección de composición de datos"));
Item.LeftValue = NewDataCompositionField(FieldName);
Element.ComparisonView = Tipo de comparación;

Si DisplayMode = Indefinido Entonces
Element.DisplayMode = ElementDisplayModeDataCompositionSettings.Unavailable;
De lo contrario
Element.DisplayMode = Modo de visualización;
terminara si;

Si el valor correcto<>Indefinido entonces
Elemento.RightValue = RightValue;
terminara si;

Si Representación<>Indefinido entonces
Artículo.Ver = Ver;
terminara si;

Si uso<>Indefinido entonces
Artículo.Uso = Uso;
terminara si;

// Importante: se debe realizar la configuración de ID
// al final de configurar el elemento; de lo contrario, se copiará
// en la configuración del usuario parcialmente lleno.
Si la configuración del identificador de usuario<>Indefinido entonces
Element.UserSettingsIdentifier = UserSettingsIdentificador;
ElseIf Elemento.DisplayMode<>ItemDisplayModeDataLayoutSettings.Unavailable Entonces
Item.UserSettingIdentifier = Nombre del campo;
terminara si;

Devolver objeto;

En esta publicación, veremos un ejemplo de cómo colorear líneas de documentos vencidos en el registro de documentos (lista dinámica) a partir de la fecha y hora actuales.

Nuestra tarea es colorear la línea de rosa si la fecha objetivo es menor que la fecha actual, teniendo en cuenta el hecho de que la fecha actual cambia constantemente. Es decir, la fecha actual debe leerse dinámicamente y no determinarse en la primera apertura.

Aprenderemos cómo, de forma controlada:

Utilice un controlador de espera;

Configurar mediante programación la apariencia condicional de una lista dinámica

Digamos que tenemos un documento “Pedido Inteligente” con el atributo “Fecha de Control” y el tipo “Fecha” (composición de la fecha “Fecha y Hora”):

Y el diario documental “SmartOrder” con la columna “Tiempo de Control” correspondiente a este detalle:

Nuestra tarea es colorear la fila de rosa si la Fecha objetivo es menor que la Fecha actual, teniendo en cuenta que la fecha actual cambia constantemente.

Creemos un formulario administrado:

Ahora, al crear en el servidor, llamaremos al procedimiento para colorear las líneas “UpdatesDisplayOverdueOnServer”. Y llamaremos a este procedimiento con una frecuencia determinada.

Tenemos algún tipo de lista, por ejemplo, de elementos del plan del tipo de característica "Derechos de usuario" en la configuración "Manufacturing Enterprise Management" versión 1.3.

La forma, como puedes ver, es manejable. Necesitamos diseñar la lista de tal manera que todas las filas de grupos de elementos estén resaltadas en verde. ¡Empecemos!

Ejemplo

A los elementos de los formularios administrados se les aplica un estilo de formulario condicional:

Para resolver nuestro problema, agreguemos un elemento de diseño condicional con la siguiente configuración:


La próxima vez que abra el formulario, las filas de grupo del plan de tipo de característica deberían resaltarse en verde. Pero... ¡esto no sucede!


El hecho es que la lista de elementos y grupos del plan de tipos de características se muestra en el formulario mediante un objeto de formulario del tipo "Lista dinámica". Las listas dinámicas aprovechan las capacidades del sistema de composición de datos, incluidas las selecciones y el formato condicional. Este último determina el diseño final de la lista, ignorando la configuración del diseño condicional del propio formulario. Agreguemos configuraciones de apariencia condicional similares para la lista dinámica.


La única diferencia es que debe agregar todos los campos visibles de la lista a la lista de campos a formatear a los que se debe aplicar el diseño condicional.

Conclusión

A menudo he oído que el estilo condicional en formularios administrados no siempre funciona. Al final, resultó que simplemente estaba configurando el formulario y no la lista dinámica.

Espero que este artículo le ahorre tiempo a alguien a la hora de resolver problemas con el formato condicional.