Програмне додавання та зміна елементів керованих форм. Перемикачі, звичайна програма, керовані форми 1с поле перемикача керовані форми

Прочитав безліч форумів, і ніде не побачив зрозумілого опису роботи з «Переключателем». Ось вирішив написати сам.

На МІЙ погляд помилка, що найчастіше зустрічається - це неправильне уявлення про «Переключатель». Коли ви розміщуєте кілька "Переключателей", наприклад 3, на формі, багато хто вважає що у логіці програми це 3 різних об'єкта, які впливають друг на друга. Але, по суті, програма сприймає всі три «Перемикачі» як один об'єкт. І вибір одного із них змінює стан цього об'єкта. Розглянемо приклад.

1. Створимо на формі три перемикачі. Для зручності не змінюватимемо назв.
2. Перейдіть до Перемикач1. У його властивості в розділі «ОСНОВНІ» поставте перший галочку в групі. "ТИП ЗНАЧЕННЯ" оберемо число. (Далі розглянемо чому саме число). Довжину можна встановити рівної одиниці, але особливої ​​функціональності це не несе.
3. Виділяємо «Переключатель2» у графі «ВИБИРАЄМО ЗНАЧЕННЯ» поставимо 1.
4. Виділяємо «Переключатель3» у графі «ВИБИРАЄМО ЗНАЧЕННЯ» поставимо 2.
По суті 3 і 4-ма діями ви встановили прапор, який змінюватиметься при виборі відповідного «Переключателя». У «Переключатель1» по дефолту «ЗНАЧЕННЯ, що ВИБИРАЄТЬСЯ» стоїть нуль.
5. Перевірте чи перемикачі стоять в «ПОРЯДКУ ОБХОДУ» по порядку. (Наприклад: 13,14,15)(Рис.1). необхідний нерозривний порядок обходу перемикачем. включений автопорядок обходу (позиції пронумеровані 13, 15, 20)(Рис.2) у разі перемикачі друг під одним працювати не будут.Слежит зняти з форми використання автопорядку і якщо необхідно вручну вказати порядок прямування.

Як встановити порядок обходу реквізитів.Перебуваючи у формі, в меню "Діалог" треба зняти галку. Автоматичний порядокобходу". Після цього можна або скористатися "Діалог"->"Налаштування порядку обходу", або "Діалог"->"Порядок обходу". Найбільш зручним, мені здається другий спосіб. При цьому способі у кожного реквізиту з'являється картинка з номером реквізиту. Вам залишається тільки клацати мишкою за цифрами, вибираючи реквізити в тому порядку, який Вам потрібен.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

6. Виділяємо "Переключатель1" і пишемо в нього потрібну нам процедуру.
Наприклад:

ЕФ = ЕлементиФорми; Якщо Перемикач1=0 Тоді ЕФ.СтанОплати.Значення = "Неоплачено"; ІнакшеЯкщо Перемикач1=1 Тоді ЕФ.СтанОплати.Значення = "Частково оплачено"; ІнакшеЯкщо Перемикач1=2 Тоді ЕФ.СтанОплати.Значення = "Оплачено"; КінецьЯкщо;

7. Тиснемо F7. Тиснемо F5. Дивимося все працює ми молодці. І великий БОС дає нам премію.

ПОЯСНЕННЯ ДО КОДУ

Чому скрізь стоїть "Переключатель1"? Так як вже було сказано, програма сприймає всі три елементи як один, і так як "Переключатель1" є першим у групі, то Його програма і сприймає як весь елемент, якщо ви поставите "Переключатель2" основним у групі, то перевірку правельності треба буде проводити по "Переключатель2".
Ну а звідки "0", "1", "2"? Ті значення, які приймає об'єкт при перемиканнях "Перемикачів", ми задавали в пунктах 3 і 4.

ПІСЛЯМОВА:

Цей код наведено як приклад роботи з перемикачами. На мій погляд так наочніше і зрозуміліше. Але варто згадати, що в "ТипЗначення" можна вибирати одразу те, що потрібно - зумовлене значення довідника, перерахування, наприклад, або рядкове значення. Тобто в зазначеному прикладі можна було відразу призначити перемикачам як значення не 0,1,2, а відразу "Неоплачено", "Частково оплачено", "Оплачено". І тоді код зведеться в один рядок:

ЕлементиФорми.СтанОплати.Значення = Перемикач1;

Результат роботи буде таким самим.

//////////////////////////////////////////////////////////////////////////////////////////

Перемикачі в керованих формах (УФ) зробили інтуїтивнішими.

При створенні Перемикача потрібно пам'ятати про двійку Реквізит, Елемент форми.
В першу чергу вам необхідно створити Реквізит форми. Тип у реквізиту встановлюєте такий, які значення буде приймати ваш перемикач. Я вибрав тип Рядок. Тут у вас є два варіанти: якщо ви створили реквізит Об'єкта, то значення, що приймається вашим перемикачем, буде зберігатися в БД, якщо ви просто додаєте до списку реквізитів форми, то результат приймається вашим перемикачем зберігатися не буде.

Далі перетягуємо потрібний нам Реквізит до ЕлементівФорми. При створенні елемента форми елемент у властивостях "Вигляд" - матиме тип "Поле введення". Вибираємо зі списку "Поле перемикач". В результаті у вас вийде форма приблизно такого вигляду:


Заповнюємо заголовок елемента форми, колір, шрифт, розташування та інші красивості на ваш смак.
У властивості елемента форми є пункт. "Список Вибору" - в ньому ви заводите Значення, які прийматиме ваш перемикач при виборі того чи іншого пункту. У своєму прикладі я додав рядки зі значеннями "Записати", "Скасування Проведення", "Проведення".

Після цього ваш перемикач готовий до роботи.

Залежно від того чи є ваш перемикач реквізитом Об'єкта або Реквізитом Форми для отримання значення, що зберігається в ньому, ви використовуєте наступний код:

ПеремикачЕлементФормиЕлементФорми // звертаєтеся прямо, якщо це реквізит форми Об'єкт.ПереключательВнутріБД // звертаєтеся через елемент Об'єкт. до вашого реквізиту.

Платформа 1С: Підприємство дозволяє програмно додавати та змінювати елементи керованої форми. Розберемося для чого це може знадобитися.

Програмна модифікація форми може знадобитися в кількох випадках:

  • При доопрацюванні типових конфігурацій для полегшення процедури подальшого оновлення. У цьому випадку буде змінено лише модуль форми. Модулі набагато простіше оновлювати, ніж форму.
  • За реалізації деяких загальних алгоритмів. Наприклад, у підсистемі "Заборона редагування реквізитів об'єктів" для всіх підключених до підсистеми об'єктів передбачено програмне створеннякнопки для увімкнення можливості редагування реквізитів.
  • За реалізації деяких специфічних алгоритмів. Наприклад, у довіднику Номенклатура створюються поля для редагування додаткових реквізитів.

У керованій формі можна програмно додати, змінити та видалити:

  • реквізити;
  • локальні команди;
  • елементи.

Всі ці операції можливі лише на сервері.

Програмна зміна форми має обмеження:

  • Видалити можна лише програмно додані реквізити/команди/елементи. Не можна програмно видалити об'єкти, створені у конфігураторі.
  • Не можна призначити реквізит головним.

Зміна команд форми

Для керування складом команд у об'єкта КерованаФормає колекція Команди

    Додати (< ИмяКоманды >)

    Кількість ()

    Знайти (< ИмяКоманды >)

    видалити (< Команда >)

Колекція команди доступна як на клієнті, так і на сервері. Змінювати колекцію (методи Додати () та Видалити () ) можна лише на сервері. Шукати та отримувати кількість елементів (методи Знайти () та Кількість () ) можна як на клієнті, так і на сервері.

Як приклад роботи з командами форми створимо нову команду Історія Змін із заголовком «Історія змін…», яка буде викликати обробник ВідобразитиІсторію(). Створення виконується під час відкриття форми.

&На сервері
Процедура При створенні на сервері (відмова, стандартна обробка)
Команда = Команди. Додати( "Історія змін");
Команда . Дія =;
Команда . Заголовок = "Історія змін…";
КінецьПроцедури
&На Клієнті
Процедура Підключається_ВідобразитиІсторію(Команда)
// дії команди
КінецьПроцедури

Обробник команди повинен розташовуватися у формі та мати директиву компіляції & На Клієнті.

Зміна реквізитів форми

Читання складу реквізитів форми виконується функцією ОтриматиРеквізити(< Путь >) , що повертає масив типу РеквізитФорми . Параметр функції вказує шлях до батьківського реквізиту (у вигляді рядка). Якщо параметр опущено або вказано порожній рядок, повертаються реквізити верхнього рівня.

Зміна реквізитів виконується методом ЗмінитиРеквізити(<Реквізити, що додаються>, <ВидаленіРеквізити>) об'єкта КерованаФорма. У параметри Реквізити, що додаютьсяі ВидаленіРеквізитипередаються масиви з елементами типу РеквізитФорми.

Увага!

Процес зміни складу реквізитів є досить ресурсомістким. Фактично виконується перестворення форми. У зв'язку з цим робота з реквізитами форми виконується пакетному режимі.

Створимо новий реквізит форми з ім'ям Покупець:


Реквізити, що додаються = Новий Масив;
Реквізити, що додаються. Додати(Новий РеквізитФорми(«Покупець», Новий Опис Типів («Довідник Посилання.Контрагенти»), «Клієнт»));

// Зміни складу реквізитів
);

Зміна елементів форми

Для керування складом елементів у об'єкта КерованаФормає колекція Елементи. Колекція має кілька методів:

    Вставити (< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)

    Додати (< Имя>, < ТипЭлемента>, < Родитель >)

    Кількість ()

    Знайти (< Имя >)

    Перемістити(< Элемент>, < Родитель>, < МестоРасположения >)

    видалити (< Элемент >)

Колекція Елементи доступна як на клієнті, так і сервері. Змінювати колекцію (методи Вставити () , Додати () , Перемістити () та Видалити () ) можна лише на сервері. Шукати та отримувати кількість елементів (методи Знайти () та Кількість () ) можна як на клієнті, так і на сервері. Елементами колекції можуть бути:

  • ГрупаФорми;
  • ТаблицяФорми;
  • ПолеФорми;
  • КнопкаФорми.

Елементам форми можна програмно призначити обробники подій. Для цього призначений метод Встановити Дію (< ИмяСобытия>, < Действие >) .

Розглянемо кілька найпоширеніших практично прикладів роботи з командами, реквізитами і елементами форми.

Додавання команди та пов'язаної з нею кнопки:

// Створення команди
Команда = Команди. Додати( "Історія змін");
Команда . Дія = «Підключається_Відобразити Історію»; // У формі має бути процедура із зазначеним найменуванням
Команда . Заголовок = "Історія змін…";
// Створення кнопки та зв'язок її з командою
Елемент = Елементи. Додати( "Історія змін", Тип («КнопкаФорми»));
Елемент.Ім'яКоманди = "Історія змін";

Додавання реквізиту та пов'язаного з ним поля введення:

// Опис реквізитів, що додаються
Реквізити, що додаються = Новий Масив;
Реквізити, що додаються. Додати(Новий РеквізитФорми («Покупець» , Новий ОписТипів ( «ДовідникПосилання.Контрагенти»), «Клієнт»));
// Зміна складу реквізитів
ЗмінитиРеквізити(ДодаютьсяРеквізити));
// Створення поля введення та зв'язок з реквізитом
Елемент = Елементи. Додати («Покупець», Тип («ПолеФорми»));
Елемент . Вигляд = ВидПоляФорми. Поле введення;
Елемент . ШляхДаним= «Покупець»;

Призначення елемента форми обробника події:

ЕлементПокупець. Встановити Дію("При зміні" , «Підключається_ПокупецьПриЗміні»);

&На Клієнті
Процедура Підключається_ПокупецьПриЗміні(Елемент)
// Дії події
КінецьПроцедури

Увага!

Процедурам, які встановлюються як обробники подій з коду за допомогою методу Встановити Дію(), рекомендується задавати префікс Підключається_.

Увага!

Завантажити обробку з прикладами програмного пошуку та зміни реквізитів, команд та елементів керованої форми можна.

1. Поле введення
2. Прапорець
3. Перемикач

Поле введення

Як правило, поле введення пов'язане з реквізитом об'єкта та відображає його дані. Це, мабуть, один із найпоширеніших елементів, він має кілька способів вибору значення:

Вибір зі списку (РежимВиборуСписку)

Вибір з іншої форми (Кнопка вибору)

Кнопки регулювання

Реалізація наведених вище прикладів не вимагає значних зусиль з боку розробника так. наприклад, для режиму списку необхідно заповнити список елемента значеннями, для вибору іншої форми досить просто зв'язати елемент управління з даними довідника. А ось для кнопок регулювання потрібно буде написати більше коду, по обробці натискання по кожній кнопці, хоча і він не буде великий:

Процедура пвВибірНоменклатуриРегулювання(Елемент, Напрямок, СтандартнаОбробка)
//Вибираємо дані для поля введення
// у разі довідник Номенклатура
Запит = Новий Запит;
Запит.Текст=
"ВИБРАТИ
| Номенклатура.Посилання Як Товар

| Довідник Номенклатура ЯК Номенклатура
|Упорядкувати за
| Номенклатура.Код";
ТЗНоменклатура = Запрос.Выполнить().Выгрузить();

//Шукаємо поточний елемент довідника зазначений у полі введення
ТекЭлемент = ТЗНоменклатура.Найти(Элемент.значение);

Якщо ТекЕлемент = Невизначено Тоді
// якщо не знайшли елемент тоді встановлюємо номер індексу
// поза таблиці значень, т.к. найперший елемент у
// таблиці значень має індекс 0
ТекІндекс = -1;
Інакше
// якщо елемент знайдений отримуємо його індекс
ТекІндекс = ТЗНоменклатура.Індекс(ТекЕлемент);
КінецьЯкщо;

// Розраховуємо новий індекс залежно від натискання кнопки
// мінус перед змінною Напрямок стоїть для того, щоб при
// натисканні на верхню стрілку показувався елемент, що стоїть вище
// а отже з меншим індексом
НовІндекс = ТекІндекс-Напрямок;

// отримуємо кількість елементів у довіднику
// віднімаємо одиницю т.к. всі колекції в 8.1 починаються з 0
КількістьЕлементів = ТЗНоменклатура.Кількість()-1;

Якщо НовІндекс< 0 Или НовИндекс >КількістьЕлементів Тоді
// якщо за зміни індекс знаходиться поза таблиці значень
// тобто. його номер більшого найбільшого індексу або менше 0
// не змінюємо значення і повідомляємо про це користувачеві
Повідомити("Ви досягли межі довідника");
Інакше
// привласнюємо нове значення, "Товар" - це назва колонки таблиці значень
Елемент.значення = ТЗНоменклатура.Отримати(НовІндекс).Товар;
КінецьЯкщо;

КінецьПроцедури

Прапорець

У більшості програм прапорець служить для відображення двох станів: встановлено, знято. У 1с прапорець має три стани, у третьому стані прапорець відображається - як і при цьому затінений. Три стани доступні, тільки якщо дані прапорця - число, при цьому стану мають такі значення:

Перемикач

Перемикач використовується для вибору одного значення з невеликої кількості можливих (бажано не більше п'яти), при цьому значення не можуть поєднуватися. Наприклад: підходить для вибору статі людини. Інший приклад: припустимо, фірма дає одну з 3-х знижок на товар, при цьому знижки не підсумовуються:

В даному випадку зручність використання перемикачів може полягати в тому, що кожен з них може мати якесь значення, яке встановлюється у властивості "Вибирається". І тоді "Знижка 5%" може зберігати значення 5 або 0,05.

При використанні перемикачів важливо пам'ятати три речі:

      У першого перемикача має стояти властивість "ПершийВГрупі" (у даному прикладі це перемикач "Знижка 5%").

      Перемикачі, що відносяться за змістом до однієї групи, повинні в налаштуванні порядку обходу йти поспіль, без переривань іншими елементами форми. Порядок обходу визначається з меню "Форма -> Налаштування порядку обходу", для даного прикладуце виглядає так:

  1. Тип обраного значення встановлюється у перемикача має властивість "ПершийВГрупі".

1С створюються системою автоматично під час використання прикладного рішення. Є основою подання (відображення) інформації у системі "1С:Підприємство".

Структура форми 1С

Форма являє собою логічний опис складу форми. елементів описує те, як виглядатиме форма. Розміщення елементів форми виконується системою автоматично під час її відображення.

Частина форми, що відображається (видима користувачеві) описується як дерево, що включає елементи форми (див. рис. нижче, поле "Елементи форми"):

  • групи, що включає інші елементи,
  • поля введення,
  • прапорці,
  • перемикачі,
  • кнопки,
  • таблиці, які включають елементи-колонки тощо.

"Елементи форми 1С"

[згорнути]

Група елементів форми може бути представлена ​​як

  1. панель з рамкою,
  2. панель зі сторінками (закладками),
  3. власне сторінка,
  4. командна панель.

Вся функціональність форми описується як:

  • реквізитів (даних, з якими працює форма);
  • команд (виконуваних дій).

Налаштування зовнішнього вигляду керованої форми

Налаштування зовнішнього вигляду керованої форми користувачем

Налаштування зовнішнього виглядукерованої форми може здійснюватися на рівні користувача. Для даної можливості у діях форми існує команда "Ще" - "Змінити форму" (управління лише тими елементами форми, які визначені на етапі розробки або за стандартними правилами автогенерації форми).

"Ще" - "Змінити форму"

Команда "Ще" - "Змінити форму":

Після натискання "Змінити форму" відображається вікно налаштування форми 1С:

[згорнути]

Крім того, в режимі користувача можливо:


  • змінювати порядок прямування форм, переносити їх з однієї колонки до іншої (якщо робочий стіл організований у дві колонки), проте змінити кількість колонок на робочому столі не можна;
  • виводити інформацію у вигляді окремих вікон (при виклику навігаційної команди потрібно утримувати клавішу Shift).

Якщо використовуються розділи, то під час виклику команди в навігаційній панелі, відповідний їй список відображається в робочій області, замінюючи колишній вміст робочої області.

Налаштування зовнішнього вигляду керованої форми розробником

Розробник може впливати на розташування елементів різними установками. Він може визначати порядок елементів, вказувати їх ширину та висоту, а також використовувати:

  • команди самої форми;
  • глобальні команди, що використовуються у всій конфігурації;
  • команди, що параметризуються, які будуть відкривати інші форми з урахуванням конкретних даних поточної форми.

Малюнок (зміна форми 1С розробником)

[згорнути]

При розробці форми 1С необхідно:

  1. у редакторі форми включити у форму необхідні реквізити та команди;
  2. створити елементи форми, що їх відображають, визначити порядок елементів, вказати ширину і висоту (при необхідності);
  3. скомпонувати елементи групи (якщо необхідно).
  1. Використовувати рольову налаштування видимості в елементах форм (перегляд і редагування реквізитів по , користувальницьку видимість полів форми за ролями, використання команд за ролями) у разі великої кількості ролей у конфігурації (від кількох десятків). Натомість слід дотримуватися наступних підходів:
    • при сильних відмінностях зовнішнього вигляду та функціональності форми залежно від наявності тих чи інших ролей у користувача – розробляти окремі формиспеціалізовані під конкретний набір прав користувача;
    • при незначних відмінностях – виконувати перевірку прав у коді. У цьому слід пам'ятати, що програмне управління видимістю може знизити швидкість відкриття форми, що необхідно враховувати під час виборів між пропонованими підходами.
  2. Використовувати рольове налаштування видимості в командному інтерфейсі конфігурації, командному інтерфейсі основного розділу, а також робочій області початкової сторінки. Натомість слід використовувати налаштування прав на розділи командного інтерфейсу, та об'єкти, включені до командний інтерфейсабо в робочу область. Це дозволяє підвищити передбачуваність поведінки керованого інтерфейсудля користувача, а також спростити розслідування помилок.

Більш детальну інформацію щодо роботи з формами в курсі "Робота з формами в "1С:Підприємстві 8.3", http://www.1c.ru/ukr/partners/training/uc1/course.jsp?id=161.