Como estabelecer programaticamente uma conexão por proprietário em um formulário. Como adicionar programaticamente um novo elemento de diretório se ele tiver um proprietário (1C: Programador) Comunicação por formulário controlado pelo proprietário

31.10.2021

Como estabelecer programaticamente uma conexão por proprietário em um formulário. Como adicionar programaticamente novo elemento diretório, se tiver proprietário (1C: Programador)

Pergunta Como vincular por proprietário em um formulário?
Responder
Vamos supor que em algum lugar, por exemplo, em um formulário de lista de registro, você queira dar ao usuário a oportunidade de especificar interativamente a unidade de armazenamento de um item. "Nomenclatura" é um livro de referência. “Unidade de armazenamento” é um diretório subordinado à nomenclatura. O diretório “Nomenclatura” geralmente contém muitos elementos. Se estivermos na forma de uma lista de registros, simplesmente adicionamos duas colunas - “Item” e “Unidade de armazenamento”, então quando tentarmos selecionar interativamente uma “unidade de armazenamento” ela irá congelar. Já escrevemos sobre isso no artigo “Como definir a seleção de um elemento subordinado de um diretório”. E aqui veremos o problema de uma perspectiva um pouco diferente.
Para evitar o congelamento, geralmente é atribuída “Comunicação pelo proprietário”. Veja a foto. À esquerda da figura está o formulário da lista de registros, à direita da figura estão as propriedades do campo de entrada “ex” (o mesmo que está marcado à esquerda no formulário da lista de registros com letras vermelhas “ex”) . Para determinar de forma única o proprietário (não de forma programática), para o campo de entrada “ex”, preencha o campo marcado na figura com o número “1” - “Relacionamento por proprietário”, onde é indicada a ligação com o campo “Nomenclatura” .

Pergunta Como estabelecer programaticamente um link por proprietário em um formulário?
Responder
Porém, acontece que o proprietário precisa instalar programaticamente, dependendo de alguma condição.

Digamos que o campo “EX” da lista de cadastros precise ser associado ao campo proprietário “Unidade de Transporte” (que também é um elemento do diretório “Nomenclatura”), caso a unidade de transporte esteja preenchida, e caso não esteja preenchida in, então o proprietário deverá ser considerado o valor no campo “Nomenclatura” - ver índice número 3 na figura.

Como implementar isso?

A questão é que neste caso, o campo 1 “Relacionamento por proprietário” não precisa ser preenchido. Mas no campo 2 “Início da seleção” é necessário indicar o procedimento no qual a conexão por proprietário será determinada programaticamente por meio de uma diretiva "Escolha pelo Proprietário".
Procedimento de exemplo:

Procedimento Lista de Registro de Informações Seleção de Início da Unidade de Armazenamento (Elemento, Processamento Padrão) //determina o dono do EX atual Proprietário = FormElements. Lista de registro de informações. Dados atuais. Nomenclatura; Se ValueFilled(FormElements.InformationRegisterList.CurrentData.TransportUnit) Então IfFormElements. Lista de registro de informações. Dados atuais. Unidade de Transporte. Tipo de item = Transferências. USTYPESNomenclatura. Carregar então proprietário = FormElements. Lista de registro de informações. Dados atuais. TransportUnit EndIf ; EndIf ;//define a seleção por proprietário

Pergunta Elemento. SelectByOwner = Proprietário;
Responder
Fim do procedimento
Como adicionar programaticamente um novo elemento de diretório se ele tiver um proprietário.

Digamos que você deseja criar programaticamente um novo elemento de diretório “Unidades de Armazenamento”, cujo proprietário é o diretório “Nomenclatura” Isso é feito assim: // cria um novo elemento de diretório "Unidades de Armazenamento": EX = Diretórios. Unidades de armazenamento. CriarItem() ; // anote o proprietário dele - um link para a nomenclatura, onde "Nomenclatura" é um elemento do diretório "Nomenclatura" definido anteriormente EX. Proprietário = Item. Link; //defina o nome e outros detalhes: EX. Nome = "Nosso nome" ; EX. Coeficiente = 1;

// ... - aqui é igual, preenchemos todos os dados necessários

// na verdade, escreve a unidade de armazenamento criada no banco de dados:

EX. Escrever() ;

Informações retiradas do site

Suponha que na forma de uma lista de registro seja necessário fornecer ao usuário a oportunidade de especificar interativamente a unidade de armazenamento do item. "Nomenclatura" é um livro de referência. “Unidade de armazenamento” é um diretório subordinado à nomenclatura. O diretório Nomenclature geralmente contém muitos elementos. Se estivermos na forma de uma lista de registros, simplesmente adicionamos duas colunas - “Item” e “Unidade de armazenamento”, então quando tentarmos selecionar interativamente uma “unidade de armazenamento” ela irá congelar.

Vejamos o problema de uma perspectiva ligeiramente diferente.

Por exemplo, o campo “IST” da lista de registos necessita de ser associado ao campo proprietário “Unidade de Transporte” (que também é um elemento do directório “Nomenclatura”), caso a unidade de transporte esteja preenchida, e caso contrário preenchido, então o valor do campo “Nomenclatura” deverá ser considerado proprietário - ver índice nº 3 da figura.
Como isso é implementado?
Neste caso, o campo 1 “Relacionamento por titular” não precisa ser preenchido. Mas ao mesmo tempo é necessário no campo 2 “Início da seleção” indicar o procedimento no qual a conexão por proprietário será determinada programaticamente através da diretiva “Selecionar pelo proprietário”.
Procedimento de exemplo:

Procedimento Lista de Registro de Informações Seleção de Início da Unidade de Armazenamento (Elemento, Processamento Padrão)

Proprietário = Formulário Elements.Information RegisterList.CurrentData.Nomenclature;
Se ValueFilled(FormElements.InformationRegisterList.CurrentData.TransportUnit) Então
Se Form Elements.Information RegisterList.CurrentData.Transport Unit.Item Type = Transfers.usItem Types.Cargo Então
Proprietário = Elementos do formulário.Information RegisterList.CurrentData.TransportUnit
fimSe;
fimSe;

Item.SelectByOwner = Proprietário;

Fim do procedimento

Como adicionar programaticamente um novo elemento de diretório se ele tiver um proprietário

Precisamos criar programaticamente um novo elemento de diretório “Unidades de Armazenamento”, cujo proprietário é o diretório “Nomenclatura”

Isso é feito assim:
// cria um novo elemento de diretório "Unidades de Armazenamento":
IST = Diretórios.StorageUnits.CreateItem();
// anote o proprietário dele - um link para a nomenclatura, onde "Nomenclatura" é um elemento do diretório "Nomenclatura" definido anteriormente
HIST.Proprietário = Nomenclatura.Link;
//defina o nome e outros detalhes:
IST.Name = "Unidade ABS";
HIST.Coeficiente = 1;
//... preencha os detalhes restantes
// na verdade, escreve a unidade de armazenamento criada no banco de dados:
IST.Write();