Hogar / Ajuste / 1c pasar parámetros al formulario de selección. Pasar parámetros a formularios administrados y regulares. Cómo abrir un formulario de selección y luego obtener el valor seleccionado

1c pasar parámetros al formulario de selección. Pasar parámetros a formularios administrados y regulares. Cómo abrir un formulario de selección y luego obtener el valor seleccionado

Imprimir (Ctrl+P)

Opciones de formulario

1. Información General

Los parámetros de formulario (pestaña Parámetros) tienen dos propósitos:
● Describir el conjunto de datos que afectarán la apertura del formulario (parametrización del formulario). Para hacer esto, debe enumerar todos los parámetros necesarios y especificar sus tipos.
● Definir los parámetros que afectarán la clave de unicidad de la forma. Para hacer esto, necesita establecer la propiedad Parámetro clave aquellos parámetros que deben participar en la formación de la clave de unicidad de forma. Cuando intenta abrir un formulario, el sistema busca un formulario existente utilizando la clave de exclusividad del formulario generado. Si existe un formulario con la clave recibida en el sistema
unicidad, se devuelve este formulario; si no, se crea un nuevo formulario.
Cuando se invoca un formulario, los valores de los parámetros creados por el desarrollador se pueden especificar en la estructura de parámetros, junto con los parámetros del sistema del formulario (si corresponde).
Los parámetros del formulario se pueden pasar al formulario en el momento de su creación. El análisis de los parámetros pasados ​​se puede realizar en caso de OnCreateOnServer() (la colección de Parámetros es una propiedad del objeto Formulario administrado):

// En el lugar de la llamada.
// Formar el parámetro de formulario.
Parámetros = Nueva Estructura();
Opciones.Pegar("Importancia", Valor predefinido(“Enumeración.Importancia.Importante”));
// Abre el formulario con parámetros.
OpenForm("GeneralForm.ViewForm", Parámetros);

// En el módulo de formulario.
&En el servidor
Procedimiento OnCreateOnServer (Error, Procesamiento estándar)
si un Parámetros.Importancia = Enumeraciones.Importancia.Importante Oh entonces

Terminara si;
Procedimiento final

ATENCIÓN! Después de llamar al controlador de eventos OnCreateOnServer todos los parámetros de formulario no clave se eliminan de la colección Parámetros.
Consejo. Los parámetros de formulario no clave, necesarios para el trabajo posterior, deben almacenarse en los datos del formulario.

2. Opciones de formulario estándar

Para soportar la interacción automática entre formularios, el sistema proporciona una serie de parámetros estándar, que se utilizan para gestionar los formularios cuando se abren. Con la ayuda de estos parámetros, el sistema implementa en los campos de formulario la selección desde los formularios de selección, la apertura de formularios de objetos, la operación de comandos estándar, etc. Es decir, proporcionan varios escenarios de operación de interfaz integrados en el sistema.
Pero el desarrollador también puede usar estos parámetros en el lenguaje 1C:Enterprise pasándolos al llamar al método OpenForm().
La lista de parámetros de formulario estándar según el tipo de extensión de formulario se puede encontrar en las secciones Idioma integrado: interfaz
(administrado) - Formulario administrado - Extensión... en línea referencias

3. Un ejemplo de trabajo con parámetros de formulario

Para demostrar cómo funcionan los parámetros del formulario, consideremos la implementación de seleccionar un elemento en el campo de entrada. La esencia del ejemplo será la implementación del mecanismo para seleccionar un elemento de la lista en el lenguaje integrado.
Para cuando comience a trabajar con el ejemplo, debe tener una configuración que tenga las siguientes propiedades:
● existe un directorio de Bienes con una jerarquía de grupos y elementos;
● existe un directorio Analogues con el atributo SelectedProduct de tipo DirectoryLink.Productos;
● Ambos libros de referencia tienen formularios de elementos.
Ahora implementamos en esta configuración todos los mecanismos que usa la plataforma para seleccionar un elemento de la lista, en el lenguaje incorporado. Al hacerlo, veremos:
● cómo se utilizan los parámetros de formulario estándar;
● cómo los utiliza el sistema;
● cómo un desarrollador puede usarlos.
agreguemos parámetro adicional que controlará el cierre del formulario de selección después de seleccionar un elemento. Llamemos a este parámetro Cerrar después de la selección(tipo booleano). Vamos a agregarlo como un parámetro del formulario Formulario de selección del directorio de Bienes.
Para abrir el formulario de selección de elementos, es necesario crear un controlador de eventos para el evento SelectStart en el elemento de formulario SelectedItem en forma de elemento de directorio Analogues.

&EnCliente
Procedimiento SelectedItemSelectionStart(Item, StandardProcessing)
Procesamiento estándar= falso;
Opciones de elección= Nueva Estructura ;
SelectionParameters.Insert(“ModoSelección”, Verdadero);
SelectionParameters.Insert(“SeleccionarGruposYElementos”, UsandoGroupsAndItems.Items);
SelectionParameters.Insert("PermitirSelecciónRaíz", Falso);
SelectionParameters.Insert("LíneaActual", Objeto.Elemento seleccionado);
SelectionParameters.Insert("CloseAfterSelection", Falso);
OpenForm(“Catálogo.Productos.ChoiceForm”, Opciones de elección, Artículos.Producto seleccionado);
Procedimiento final
Deberíamos detenernos por separado en el tercer parámetro del método OpenForm(). Este parámetro determina quién será el propietario del formulario de selección y quién será notificado de la selección realizada. A este caso hemos especificado el propio elemento de formulario como el propietario del formulario de selección, pero también podemos especificar el propio formulario con este parámetro. En este caso, será necesario implementar el controlador ManejoElección módulo de formulario y decidir en qué atributo de formulario colocar los datos seleccionados.
NOTA. Si no implementamos el controlador de eventos StartChoice, entonces el propio sistema realizará sus acciones. Esto es cierto para todos los controladores adicionales que se utilizan en el ejemplo.
Ahora necesitamos procesar los parámetros pasados ​​en el formulario de selección. Hagámoslo en el controlador. OnCreateOnServer() del módulo de formulario de selección.

&En el servidor
Procedimiento OnCreateOnServer(Error, StandardProcessing)
Procesamiento estándar= falso;
Elements.List.SelectGroupsAndItems = Parámetros.SelectGroupsAndItems;
Elements.List.AllowSelectRoot = Parámetros.AllowSelectRoot;
Items.List.CurrentRow = Parámetros.CurrentRow;
CloseOnSelection = Parámetros.CloseAfterSelection;
Procedimiento final
Para verificar el rendimiento de los parámetros del formulario establecidos por nosotros, estableceremos, utilizando el configurador, la propiedad Lista de la tabla del formulario de selección Seleccionar grupos y elementos al valor de Grupos (sin aplicar el parámetro, la selección de elementos del diccionario no estará disponible).
NOTA. Si la tabla List, que muestra una lista de productos, no tiene la propiedad SelectionMode establecida en True , la selección de productos no estará disponible.
Ahora debemos manejar la selección del elemento deseado en el formulario de selección. Para hacer esto, debe definir un controlador de eventos para el evento SelectValues ​​​​de la tabla de formulario.

&EnCliente
Procedimiento ListSelectionValues ​​(elemento, procesamiento estándar, valor)
Procesamiento estándar= falso;
NotifySelection(Valor);
Procedimiento final
Nos queda implementar el procesamiento de seleccionar un elemento en el propio campo de entrada. Para hacer esto, necesita manejar el evento ManejoElección nuestro campo de entrada Producto Seleccionado.

&EnCliente
Procedimiento SelectedItemProcessingChoice(Item, SelectedValue, StandardProcessing)
Procesamiento estándar= falso;
Objeto.ElementoSeleccionado = ValorSeleccionado;
Procedimiento final
Implementamos de forma independiente un mecanismo de sistema para seleccionar un valor en el campo de entrada del formulario.
¡ATENCIÓN! Este ejemplo no está completo. Su único propósito es demostrar la mecánica de trabajar con parámetros de formulario.
Si al crear parámetros (handler ElementoSeleccionadoSelectionStart()) reemplaza la línea:

SelectionParameters.Insert("CloseAfterSelection", True);
a la línea:
SelectionParameters.Insert("CloseAfterSelection", Falso) ;
entonces el formulario de selección dejará de cerrarse después de realizar la selección. Esto se puede usar, por ejemplo, para implementar un formulario de selección (seleccionar múltiples productos sin cerrar el formulario de selección).

Para admitir la interacción automática entre formularios, el sistema proporciona una serie de opciones estándar que se utilizan para controlar los formularios cuando se abren. Con la ayuda de estos parámetros, el sistema implementa en los campos de formulario la selección desde los formularios de selección, la apertura de formularios de objetos, la operación de comandos estándar, etc. Es decir, proporcionan varios escenarios de operación de interfaz integrados en el sistema. Pero el desarrollador también puede usar estos parámetros en el lenguaje 1C:Enterprise pasándolos al llamar al método OpenForm().

Enumeramos los parámetros proporcionados por el sistema y su propósito:

  • Modo de selección– el formulario se abre en modo de selección. Proporcionado por extensión formulario administrado lista dinámica.
  • Línea actual– una cadena que se activará en la lista cuando se abra. Se pasa un valor que identifica la cadena. Proporcionado por la extensión de formulario administrado de lista dinámica.
  • Seleccionar grupos y elementos– este parámetro establece la propiedad SelectGroupAndItems de la tabla del atributo principal del formulario. Proporcionado por la extensión de formulario administrado de lista dinámica.
  • AllowSelectionRoot– determina si la raíz se puede seleccionar en el formulario con una lista dinámica que se muestra como un árbol. Proporcionado por la extensión de formulario administrado de una lista dinámica que se muestra como un árbol.
  • Selección– conjunto de selección en una lista dinámica. Representa una estructura. Los nombres de los elementos corresponden a los nombres de los campos por los que se realiza la selección, y los valores contienen los valores de la selección. Proporcionado por la extensión de formulario administrado de lista dinámica.
  • Llave– valor que identifica el objeto que se está editando en el formulario. Si falta el valor o es incorrecto, se crea un nuevo objeto utilizando los parámetros restantes. Proporcionado por formularios de objetos y extensiones de administrador de registros de registro de información.
  • Copia de valor– un valor que identifica el objeto que se utilizará para copiar al crear un nuevo objeto. Proporcionado por formularios de objetos y extensiones de administrador de registros de registro de información.
  • Valores de relleno– valores para completar los detalles del nuevo objeto. Representa una estructura. Los nombres de los elementos corresponden a los nombres de los atributos, y los valores contienen los datos que se utilizarán para completar los atributos especificados. Proporcionado por formularios de objetos y extensiones de administrador de registros de registro de información.
  • Base– un valor que identifica el objeto que se utilizará como base al crear un nuevo objeto mediante entrada sobre la base. Proporcionado por extensiones de formulario de objeto.
  • Este grupo– define el tipo del nuevo objeto: grupo o elemento. Proporcionado por extensiones de formulario de objeto.

Ejemplo de trabajo con parámetros de formulario

Para demostrar cómo funcionan los parámetros del formulario, consideremos la implementación de seleccionar un elemento en el campo de entrada. La esencia del ejemplo será la implementación del mecanismo para seleccionar un elemento de la lista en el lenguaje integrado.

Para cuando comience a trabajar con el ejemplo, debe tener una configuración que tenga las siguientes propiedades:

  • El modo de inicio principal es Aplicación administrada;
  • existe un directorio de Bienes con una jerarquía de grupos y elementos;
  • existe un directorio Analogues con el atributo SelectedItem del tipo DirectoryReference.Goods;
  • ambos libros de referencia tienen formularios de elementos administrados.

Ahora implementamos en esta configuración todos los mecanismos que usa la plataforma para seleccionar un elemento de la lista, en el lenguaje incorporado. Al hacerlo, veremos cómo se utilizan los parámetros de formulario estándar; cómo los utiliza el propio sistema; cómo un desarrollador puede usarlos.

Agreguemos una bandera adicional que controlará el cierre del formulario de selección después de seleccionar un elemento. Llamemos a esta bandera CloseAfterSelection (tipo booleano). Vamos a agregarlo como un parámetro de formulario del formulario de selección del directorio de bienes.

Para abrir el formulario de selección de elementos, es necesario crear un controlador de eventos para el evento SelectStart para el elemento de formulario SelectedItem en forma de elemento de directorio Analogues:

&EnCliente

Procedimiento SelectedItemSelectionStart(Item, StandardProcessing)

ProcesamientoEstándar = Falso;

ChoiceParameters = Nueva Estructura; SelectionParameters.Insert("SelectionMode", True); SelectionParameters.Insert("SelectGroupsAndItems", UseGroupsAndItems.Elements); SelectionParameters.Insert("AllowRootSelection", False); ChoiceParameters.Insert("CurrentRow", Object.SelectedItem); SelectionParameters.Insert("CloseAfterSelection", False); OpenForm("Catálogo.Productos.ChoiceForm", ChoiceParameters, Elements.SelectedProduct);

Procedimiento final

Deberíamos detenernos por separado en el tercer parámetro del método OpenForm(). Este parámetro determina quién será el propietario del formulario de selección y quién será notificado de la selección realizada. En este caso, especificamos el propio elemento de formulario como el propietario del formulario de selección, pero también podemos especificar el propio formulario con este parámetro. En este caso, será necesario implementar el controlador SelectProcess del módulo de formulario y decidir en él en qué atributo de formulario colocar los datos seleccionados.

Abrir formularios mediante programación en una aplicación 1C administrada es significativamente diferente de abrirlos en una aplicación normal. Comencemos con el método antiguo. Consiste en recibir el formulario y su posterior apertura en modo normal o modal (cuando se abre en modo modal, el formulario bloquea el programa).

ObtenerFormulario() . Abierto()

Este es el método más lento para abrir formularios. Sin embargo, le permite procesar el formulario mediante programación antes de abrirlo. Para el procesamiento, el código debe modificarse ligeramente:

Formulario= ObtenerFormulario( "Documento. Recepción de Bienes y Servicios. Formulario de Documento") ;
//aqui realizamos acciones con el formulario
La forma. Abierto() ;

Hay que tener en cuenta que al recibir el formulario se realizará otro trámite de evento OnCreateOnServer.

Considere otros métodos que le permitan abrir formularios en una aplicación 1C administrada de manera más rápida y conveniente. Se pueden usar diferentes métodos dependiendo de la situación específica.

1. Cómo abrir el formulario de un objeto en una aplicación administrada si hay un enlace a él.

En este caso, todo es extremadamente simple.

RefReference= Referencias. Nomenclatura. BuscarPorCódigo("000000001" );
OpenValue(ReferenciaReferencia) ;

2. Cómo abrir un formulario de selección y luego obtener el valor seleccionado.

Hay una función para esto IntroduzcaValor(). La función tiene 3 parámetros:

  • La variable en la que se escribirá el valor seleccionado;
  • La sugerencia que se mostrará en el cuadro de selección;
  • Descripción de los tipos de valores seleccionados. Puede haber varios tipos, luego, antes de elegir un valor específico, se le pedirá que seleccione un tipo.

Como resultado de la ejecución de la función, se abrirá el formulario de selección predeterminado para el objeto del tipo especificado.

Valor variable;
Matriz= nueva matriz;
Formación. Añadir(Tipo( "DirectoryLink.Nomenclatura") ) ;
Formación. Añadir(Tipo( "DirectoryLink. Contrapartes") ) ;

TypeDescription= new TypeDescription(Array) ;

Res= EnterValue(Valor, "Sugerencia", TipoDescripción) ;

Los métodos anteriores permitían abrir solo los formularios configurados para objetos por defecto (formulario de objeto o formulario de selección). Si necesita abrir un formulario arbitrario, puede usar la función Formulario Abierto().

Esta función tiene bastantes parámetros. Consideremos algunos de ellos:

  • Nombre del formulario- aquí puede seleccionar cualquiera de las formas estándar del objeto, por ejemplo, Seleccionar formulario o Lista de formularios. O un formulario específico creado por los desarrolladores.
  • Opciones- le permite transferir al formulario en el formulario estructuras algunos parámetros antes de abrirlo, determinando así los datos de salida. Los parámetros pueden ser cualquier dato que se pueda pasar del cliente al servidor. Los parámetros pasados ​​al abrir el formulario se pueden procesar en el procedimiento OnCreateOnServer() en el formulario abierto.
  • Modo de apertura de formulario- tiene 3 opciones: independiente, bloquear toda la interfaz, bloquear el formulario de propietario.

Veamos cómo se usa la función. Abrir formulario () en diversas situaciones.

3. Cómo abrir el formulario de un objeto existente

Cada formulario tiene un atributo clave. Está resaltado en negrita en la lista de atributos del formulario y normalmente se llama Un objeto a las formas de los elementos de los directorios, los documentos. Otros objetos pueden tener un nombre diferente. Para abrir el formulario de un objeto existente, debe pasar el parámetro al formulario abierto Llave con valor como referencia de objeto.

&EnCliente
Procedimiento Command1 (Comando)
Parámetro= nueva estructura;
Parámetro. Insertar("Clave", BuscarC() );
OpenForm(, Parámetro) ;
Procedimiento final

&En el servidor
función BuscarC();
Manuales de devolución. Contrapartes. Buscar por atributo ("TIN", "745107734623")
funciones finales

4. Cómo abrir el formulario de un nuevo objeto

esto es solo una funcion Abrir formulario () sin ningún parámetro.

&EnCliente
Procedimiento Command1 (Comando)
formulario abierto( "Libro de referencia. Contrapartes. Formulario de objeto") ;
Procedimiento final

5. Cómo abrir un nuevo formulario de objeto y completarlo en base a algo

Necesidad de pasar un parámetro Base, cuyo valor será una referencia al objeto base de relleno. Esto iniciará el procedimiento. ManejarRellenar().

&EnCliente
Procedimiento Command1 (Comando)
Parámetro= nueva estructura;
Parámetro. Insertar("Motivo", EnlaceACuentaAComprador) ;
formulario abierto( "Documento. Realización de Bienes y Servicios. Formulario Objeto", Parámetro) ;
Procedimiento final

Este ejemplo creará un documento Venta de bienes y servicios y completado sobre la base de la factura de pago al comprador, cuyo enlace fue transferido.

6. Cómo abrir un formulario y establecer una selección en él

La selección en formularios 1C puede ser simple y compleja. La selección simple implica expresiones como Organización = Horns and Hooves LLC. La selección compleja implica otros tipos de comparación, por ejemplo, listado. En este artículo, consideraremos la organización de una selección simple, y se dedicará un artículo separado a la compleja.

Para organizar una selección simple, debe pasar un parámetro con la clave al formulario abierto Selección, el valor será una estructura en la que la clave es el nombre del campo de lista dinámica y el valor son los datos que se van a buscar.

Por ejemplo, abramos el formulario de lista de búsqueda No GTE y haremos una selección allí por el propietario: el elemento del directorio Nomenclatura.

&EnCliente
Procedimiento Command1 (Comando)
Parámetro= nueva estructura;

Selección= nueva Estructura;
Selección. Insert("Propietario", LinkToNomenclature);

Parámetro. Insertar("Seleccion", Seleccion) ;

formulario abierto( "Directorio.Números GTE.Formulario de lista", Parámetro) ;
Procedimiento final

7. Cómo abrir el formulario de ingreso al registro de información

Para hacer esto, necesita una clave de registro del registro de información.

Clave de registro son los valores de todas las medidas y el periodo (si el registro es periódico). Es decir, la clave del registro son los parámetros mediante los cuales el registro puede identificarse de manera única.

El algoritmo de apertura es el siguiente:

  1. Ingresamos los datos clave del registro con los valores necesarios en la estructura.
  2. Colocamos la estructura resultante en una matriz.
  3. Desde la matriz creamos la clave de registro.
  4. Pasar un parámetro al formulario abierto Llave con la clave de registro del elemento 3 como valor.

&EnCliente
Procedimiento Command1 (Comando)
Parámetro= nueva estructura;

KeyParameters = nueva estructura;
Parámetros clave. Insert("Nomenclatura", LinkToNomenclature) ;
Parámetros clave. Insert("TipoPrecio", LinkToPriceType) ;
Parámetros clave. Insertar("Periodo", Fecha) ;

ArrayKey = Nueva matriz;
ArrayKey. Agregar (parámetros clave) ;

RecordKey = Nuevo( "Información RegistroRegistroClave.NomenclaturaPrecios", ArrayKey) ;

Parámetro. Insertar("Clave", ClaveRegistrar) ;

formulario abierto( "Registro de Información. Nomenclatura Precios. Formulario de Registro", Parámetro) ;
Procedimiento final

Este artículo describe cómo pasar un valor como parámetro al abrir un formulario administrado 8.2 en comparación con cómo se podría implementar una operación similar en formularios regulares.

Cómo se pasan los parámetros en formularios normales

En formas normales, había 2 posibilidades para pasar un parámetro:
1) un método menos común: en forma de objeto en la pestaña "Detalles", se agregó un accesorio, si es necesario, el acceso se determinó por medios visuales
2) una forma más común: se declaró una variable de exportación en el módulo de formulario y el valor se procesó en el controlador "BeforeOpening"

en ambos casos, la llamada al formulario se parecía a esto:

Formulario = Object.GetForm("ChoiceForm",FormOwner,UniqueKey);
Formulario.Parámetro = ValorParámetro;
Formulario.Abrir();

Cómo se pasan los parámetros en formularios administrados

Los formularios administrados ahora tienen la capacidad de pasar parámetros inmediatamente cuando se recibe el formulario. Los parámetros se pasan como una estructura:

Parámetros = Nueva Estructura("CurrentValue",LastItem);
ChoiceForm = GetForm("Catálogo.Nomenclatura.ChoiceForm",Parámetros);
ElementoEncontrado = ChoiceForm.OpenModal();

Además, el formulario administrado tiene "extensiones de formulario" (objeto, directorio, documento, informe). Según el tipo de objeto, se determina la lista de parámetros disponibles. Por ejemplo, si necesita posicionarse en un determinado elemento en el formulario de selección del diccionario, entonces se usa el parámetro "ValorActual". La gran ventaja es que en el formulario en sí no se requiere escribir controladores para parámetros predefinidos, lo que reduce la cantidad de código.

Además, el desarrollador tiene la oportunidad de definir sus propios parámetros (en el diseñador del formulario administrado, la pestaña "Parámetros"). La duración de los parámetros está limitada por el controlador OnCreateOnServer, lo cual es lógico porque los parámetros son necesarios solo cuando se crea el formulario, pero si este parámetro determina la unicidad del formulario (el indicador "parámetro clave" se establece en las propiedades del parámetro), estará disponible en otros controladores.

Para pasar un parámetro de manipulación específico, debe hacer un poco más:

1) Definir un parámetro en un formulario administrado.
En el controlador OnCreateAtServer, defina el procesamiento de este parámetro (accediendo a los parámetros pasados ​​a través de la propiedad "Parameters" del tipo FormDataStructure)
2) Describa la recepción del formulario y pase el valor del nuevo parámetro en los parámetros de la función GetForm.
Entonces el código se verá así:
- En el lugar de recepción del formulario

Parámetros = Nueva Estructura("NuevoParámetro",ÚltimoElemento);
ChoiceForm = GetForm("Catálogo.Nomenclatura.ChoiceForm",Parámetros);

En un módulo de formulario administrado

&En el servidor
Procedimiento en CreationOnServer (Error, StandardProcessing)
Si Parámetros.Propiedad("NuevoParámetro") Entonces
// código de procesamiento de parámetros aquí
Terminara si;
Procedimiento final

Conclusión

Quizás este artículo sea útil para alguien, ahorra tiempo y le ahorra código innecesario. Para obtener información más detallada sobre lista completa parámetros de un formulario administrado, se recomienda consultar la ayuda "Interfaz administrada \ Formulario administrado".

[es necesario registrarse para ver el enlace]