Как да установите програмно връзка от собственик във формуляр. Как да добавите програмно нов елемент от директория, ако има собственик (1C: Програмист) Как програмно да добавите нов елемент от директория, ако има собственик

21.12.2023

Как да установите програмно връзка от собственик във формуляр. Как да добавите програмно нов елементдиректория, ако има собственик (1C: Програмист)

Въпрос Как да направя връзка по собственик във формуляр?
отговор
Да приемем, че някъде, например, във формуляр на регистърен списък, искате да дадете на потребителя възможност интерактивно да посочи единицата за съхранение на елемент. „Номенклатура” е справочник. „Единица за съхранение“ е директория, подчинена на номенклатурата. Директорията „Номенклатура“ обикновено съдържа много елементи. Ако сме във формата на регистърен списък, просто добавяме две колони - „Единица“ и „Единица за съхранение“, тогава когато се опитаме да изберем интерактивно „единица за съхранение“, тя ще замръзне. Вече писахме за това в статията „Как да зададем избор на подчинен елемент на директория.“ И тук ще разгледаме проблема от малко по-различна гледна точка.
За да се предотврати замразяването, обикновено се задава „Комуникация от собственика“. Вижте снимката. Отляво на фигурата е формулярът за списък на регистъра, отдясно на фигурата са свойствата на полето за въвеждане „ex“ (същото, което е маркирано отляво във формата за списък с регистър с червени букви „ex“) . За еднозначно определяне на собственика (не програмно), за полето за въвеждане „ex“ попълнете полето, отбелязано на фигурата с цифрата „1“ - „Връзка по собственик“, където е посочена връзката с полето „Номенклатура“. .

Въпрос Как да установите програмно връзка от собственик във формуляр?
отговор
Случва се обаче собственикът да трябва да бъде инсталиран програмно, в зависимост от някакво условие.

Да кажем, че полето „EX“ на регистърния списък трябва да бъде свързано с полето на собственика „Транспортна единица“ (което също е елемент от директорията „Номенклатура“), ако транспортната единица е попълнена и ако не е попълнена в, тогава собственикът трябва да се счита за стойността в полето „Номенклатура“ - вижте индекс номер 3 на фигурата.

Как да приложим това?

Въпросът е в това в този случай поле 1 „Връзка по собственик” не е необходимо да се попълва. Но в поле 2 „Начало на избора“ трябва да посочите процедурата, при която връзката от собственик ще бъде програмно определена с помощта на директива „Избор от собственик“.
Примерна процедура:

Информация за процедурата Списък на регистъра Избор на единица за съхранение Начало (елемент, стандартна обработка) // определя собственика на текущия EXСобственик = FormElements. Информационен регистърСписък. CurrentData. номенклатура; If ValueFilled(FormElements.InformationRegisterList.CurrentData.TransportUnit) Then IfFormElements. Информационен регистърСписък. CurrentData. Транспортна единица. Тип артикул = Трансфери. USTYPESНоменклатура. Заредете след това собственик = FormElements. Информационен регистърСписък. CurrentData. TransportUnit EndIf; EndIf ;// задаване на избор от собственик

Въпрос елемент. SelectByOwner = Собственик;
отговор
Край на процедурата
Как да добавите програмно нов елемент на директория, ако има собственик.

Да приемем, че искате програмно да създадете нов елемент на директория „Единици за съхранение“, чийто собственик е директорията „Номенклатура“Това се прави по следния начин: // създайте нов елемент на директория "Единици за съхранение": EX = Директории. Единици за съхранение. CreateItem() ; // запишете собственика за него - връзка към номенклатурата, където "Номенклатура" е елемент от директорията "Номенклатура", дефинирана по-рано EX. Собственик = Артикул. връзка; // дефинирайте името и други подробности: EX. Име = "Нашето име" ; EX. Коефициент = 1;

// ... - тук е същото, попълваме всички необходими данни

// всъщност запишете създадената единица за съхранение в базата данни:

EX. Write() ;

Информацията е взета от сайта

Да предположим, че под формата на регистърен списък е необходимо да се предостави на потребителя възможност интерактивно да посочи единицата за съхранение на артикула. „Номенклатура” е справочник. „Единица за съхранение“ е директория, подчинена на номенклатурата. Директорията на номенклатурата обикновено съдържа много елементи. Ако сме във формата на регистърен списък, просто добавяме две колони - „Единица“ и „Единица за съхранение“, тогава когато се опитаме да изберем интерактивно „единица за съхранение“, тя ще замръзне.

Нека да погледнем на проблема от малко по-различна гледна точка.

Например, полето „IST“ на регистърния списък трябва да бъде свързано с полето на собственика „Транспортна единица“ (което също е елемент от директорията „Номенклатура“), ако транспортната единица е попълнена и ако не попълнено, то стойността в полето „Номенклатура” трябва да се счита за собственик – виж индекс № 3 на фигурата.
Как се изпълнява това?
В този случай поле 1 „Връзка по собственик” не е необходимо да се попълва. Но в същото време е необходимо в поле 2 „Начало на избора“ да посочите процедурата, при която връзката от собственик ще бъде програмно определена с помощта на директивата „Избор от собственик“.
Примерна процедура:

Информация за процедурата Списък на регистъра Избор на единица за съхранение Начало (елемент, стандартна обработка)

Собственик = Form Elements.Information RegisterList.CurrentData.Nomenclature;
Ако ValueFilled(FormElements.InformationRegisterList.CurrentData.TransportUnit) Тогава
Ако Form Elements.Information RegisterList.CurrentData.Transport Unit.Item Type = Transfers.usItem Types.Cargo Тогава
Собственик = Form Elements.Information RegisterList.CurrentData.TransportUnit
endIf;
endIf;

Item.SelectByOwner = Собственик;

Край на процедурата

Как да добавите програмно нов елемент на директория, ако има собственик

Трябва програмно да създадем нов елемент на директория „Единици за съхранение“, чийто собственик е директорията „Номенклатура“

Това се прави по следния начин:
// създайте нов елемент на директория "Единици за съхранение":
IST = Directories.StorageUnits.CreateItem();
// запишете собственика за него - връзка към номенклатурата, където "Номенклатура" е елемент от директорията "Номенклатура", дефинирана по-рано
HIST.Owner = Nomenclature.Link;
// дефинирайте името и други подробности:
IST.Name = "ABS модул";
HIST.Коефициент = 1;
//... попълнете останалите подробности
// всъщност запишете създадената единица за съхранение в базата данни:
IST.Write();