Як програмно встановити зв’язок по власнику у формі

ПитанняЯк встановити зв'язок по власнику у формі? Відповідь Припустимо, що десь, наприклад, у формі списку регістру, потрібно дати користувачеві можливість інтерактивно вказати одиницю зберігання номенклатури. "Номенклатура" - це довідник. "Одиниця зберігання" - довідник, підпорядкований номенклатурі. Довідник "Номенклатура" зазвичай містить дуже багато елементів. Якщо ми у формі списку регістру, просто додамо дві графи – «Номенклатура» та «Одиниця зберігання», то при спробі інтерактивно вибрати «одиницю зберігання» відбуватиметься зависання. Ми вже писали про це у статті «Як встановити вибір підлеглого елемента довідника». А тут розглянемо завдання трохи в іншому ракурсі. Щоб не відбувалося зависання, зазвичай призначають зв'язок по власнику. Див. малюнок. Зліва малюнку — форма списку регістру, праворуч малюнку — властивості поля введення «ех»(того самого, що зазначено ліворуч у вигляді списку регістру червоними літерами «ех»). Щоб однозначно визначити власника (не програмним шляхом), для поля введення «ex» заповнюється поле, позначене малюнку цифрою «1» — «Зв'язок по власнику», де вказується зв'язок із полем «Номенклатура».ПитанняЯк програмно встановити зв'язок за власником у формі? Відповідь Однак, буває так, що власника потрібно встановити програмно, залежно від якоїсь умови.

Припустимо, поле «ЕХ» списку регістру потрібно зв'язати із власником-полем «Транспортна одиниця» (яке також є елементом довідника «Номенклатура»), якщо транспортна одиниця заповнена, а якщо не заповнена, то власником потрібно вважати значення в полі «Номенклатура». див. покажчик№3 малюнку.

Як це реалізувати?

Справа в тому, щоу такому разі поле 1 «Зв'язок по власнику» заповнювати не потрібно. Натомість потрібно в полі 2 «Початок вибору» вказати процедуру, в якій програмно визначатиметься зв'язок по власнику за допомогою директиви «Вибір По Власнику». Приклад процедури:

ПитанняЯк програмно додати новий елемент довідника, якщо він має власник. Відповідь Допустимо, потрібно створити програмним шляхом новий елемент довідника «Одиниці зберігання», у якого у власниках — довідник «Номенклатура» Це робиться так:

5 thoughts on “ Як програмно встановити зв'язок по власнику у формі. Як програмно додати новий елемент довідника, якщо він має власник (1С: Программісту) ”

Стаття не відповідає на запитання «Як програмно встановити зв'язок по власнику?», а лише показує, як відкрити форму з відбором по власнику.

Олексію, уточніть, що саме потрібно. Ймовірно, дійсно варто додати якусь інформацію, але не зрозуміло, що саме залишилося незрозумілим. Ви уважно прочитали другу частину, те, що написано після картинки? Там пояснюється, як програмно поставити власника за якоюсь умовою. Звернули увагу на слова, виділені жирним шрифтом? Чи зрозуміли наведену процедуру?

Запитання залишилося незрозумілим. Під час створення елемента форми (дякую Євгенії за підказку) Ви призначаєте йому Тип. Допустимо, Тип - це Довідник, у якого є Власник. Якщо ми правильно зрозуміли, питання в тому, як призначити конкретного Власника цьому елементу форми, що здається, щоб при спробі вибору користувачем, відкривався список, підпорядкований заданому Власнику?

Взагалі, вибір за власником задається в процедурі «ПіСпершу Вибору» командою виду Елемент.ВибірПо Власнику = Власник;

Ми поки що придумали, як саме це зробити для програмно створюваного елемента форми (якщо у когось виникнуть думки, просимо допомогти). Можливо, допоможе призначити процедуру-обробник використовуючи метод «Встановити Дію»:

Розширення елементів керування, розташованих у формі Встановити Дію (SetAction) Синтаксис: ВстановитиДію( , ) Параметри: (обов'язковий) Тип: Рядок. Ім'я події. (обов'язковий) Тип: Дія, Невизначено. Встановлювана дія. У разі встановлення значення Невизначено при отриманні від елемента керування зазначеної події жодної дії не буде виконано. Опис: Встановлює нову процедуру-обробник (дія) для зазначеної події. Недоступний на сервері 1С:Підприємство. Не використовується у модулі зовнішнього з'єднання. Примітка: Процедура повинна бути експортованою та розміщуватись у модулі форми, при цьому кількість параметрів повинна співпадати з необхідною кількістю параметрів події, що ініціює виклик дії.

Або питання у тому, як програмно додати новий елемент довідника, якщо у нього є власник? Допустимо, потрібно створити програмним шляхом новий елемент довідника «Одиниці зберігання», у якого у власниках — довідник «Номенклатура». Це робиться так:

Команда програмного додавання елемента форми: ЕлементиФорми (Controls) Додати (Add) Синтаксис: Додати( , , , ) Параметри: (обов'язковий) Тип: Тип. Тип елемента керування Індикатор ПолеКалендаря Кнопка КоманднаПанель Напис Панель Перемикач ПолеТабличногоДокументу ПолеHTMLДокумента ПолеТекстовогоДокументу ПолеВведення >ПолеВибору ПолеСписку ПолеКартинки СмугаРегулювання Розділювач РамкаГрупи ТаблічнеПоле Прапорець ПолеГрафічноїСхеми ПолеГеографічноїСхеми (обов'язковий) Тип: Рядок. Ім'я елемента управління, що створюється. Ім'я має бути зазначене у відповідності до правил написання імен системи 1С:Підприємство 8. В іншому випадку виконання методу викличе виняток. (необов'язковий) Тип: Бульово. Визначає, чи створювати новий елемент управління форми видимим чи ні. Істина – елемент створюється видимим. Значення за замовчуванням: Істина (необов'язковий) Тип: Панель, ПолеТабличногоДокумента. Визначає, якій панелі форми або якому табличному документу належить створюваний елемент. Якщо вказана панель, то елемент, що додається, розміщується на поточній сторінці панелі. Якщо не вказано, створюваний елемент належатиме безпосередньо формі. Повертається: Елемент управління форми. Опис: Додає елемент керування на форму. Недоступний на сервері 1С:Підприємство. Не використовується у модулі зовнішнього з'єднання. Приклад: // Розташуємо на сторінці табличне поле ПолеРегістра = ЕлементиФорми.Додати(Тип(«ТабличнеПоле»), РядокТаблиці.Ім'я, Істина, ЕлементиФорми.ОсновнаПанель) ; ПолеРегістра.Дані = «ДокументОб'єкт.Руху.» + РядокТаблиці.Ім'я;

Якщо НЕ ЦеНовий() Тоді ПолеРегістра.Значення.Прочитати(); КінецьЯкщо;

ПолеРегістра.Верх = 30; ПолеРегістра.Лево = 6; ПолеРегістра.Ширіна = ЕлементиФорми.ОсновнаПанель.Ширіна - 14; ПолеРегістра.Висота = ЕлементиФорми.ОсновнаПанель.Висота - 56; ПолеРегістра.ТількиПерегляд = Брехня; ПолеРегістра.ЗмінюватиПорядокСторок = Істина; ПолеРегістра.ЗмінюватиСкладСторок = Істина;

ПолеРегістра.ВстановитиПрив'язку(КордонЕлементуУправління.Верх, Командна ПанельРегістра, КордонЕлементуУправління.Низ); ПолеРегістра.ВстановитиПрив'язку(КордонЕлементуУправління.Низ, ЕлементиФорми.ОсновнаПанель, КордонЕлементуУправління.Низ); ПолеРегістра.ВстановитиПрив'язку(КордонЕлементуУправління.Право, ЕлементиФорми.ОсновнаПанель, КордонЕлементуУправління.Право);

Якщо Метадані.РегістриНакопичення[РядокТаблиці.Ім'я].ВиглядРегістра = Метадані.ВластивостіОб'єктів.ВиглядРегістраНакопичення.Залишки Тоді

КолонкаВиглядРухи = ПолеРегістра.Колонки.Вставити(1, «Вигляд руху»); КолонкаВідРуху.Ім'я = «ВідРухуРегістраНакопичення»; КолонкаВідРуху.ВстановитиЕлементУправління(Тип(«ПолеВводу»)); КолонкаВідРуху.Дані = «ВідРуху»; КолонкаВідРуху.ЕлементУправління.КнопкаВибору = Істина; КолонкаВідРуху.ЕлементУправління.ВибиратиТип = Брехня;

ПолеРегістра.Колонки.Реєстратор.Видимість = Брехня; ПолеРегістра.Колонки.Період.Видимість = Брехня; ПолеРегістра.Колонки.НомерРядки.Видимість = Брехня;