Превключватели, редовно приложение, управлявани форми. Радио бутони, обикновено приложение, управлявани формуляри Промяна на елементи на формуляр

1C се създават автоматично от системата при използване на приложното решение. Те са основата за представяне (показване) на информация в системата 1C:Enterprise.

Структура на формуляр 1C

Форма Б е логично описание на състава на формуляра. елементи описва как ще изглежда формулярът. Поставянето на елементите на формуляра се извършва автоматично от системата, когато се показва.

Показаната част от формуляра (видима за потребителя) е описана като дърво, което включва елементи на формуляр (вижте фигурата по-долу, полето „Елементи на формуляр“):

  • група, включваща други елементи,
  • полета за въвеждане,
  • отметки,
  • превключватели,
  • бутони,
  • таблици, които включват елементи на колони и др.

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

[свиване]

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

  1. панел с рамка,
  2. панел със страници (отметки),
  3. самата страница,
  4. команден панел.

Цялата функционалност на формата е описана по следния начин:

  • подробности (данни, с които работи формата);
  • команди (извършени действия).

Персонализиране на външния вид на управляван формуляр

Персонализиране на външния вид на управляван формуляр от потребителя

Външният вид на управляван формуляр може да се персонализира на ниво потребител. За тази функция в действията на формуляра има команда „Още“ - „Промяна на формуляр“ (управлява само тези елементи на формуляра, които са дефинирани на етапа на разработка или според стандартните правила за автоматично генериране на формуляр).

"Още" - "Промяна на формата"

Команда "Още" - "Промяна на формата":

След като щракнете върху „Промяна на формуляра“, се показва прозорецът за настройки на формуляра 1C:

[свиване]

Освен това в потребителски режим е възможно да:


  • променете реда на формулярите, преместете ги от една колона в друга (ако работният плот е организиран в две колони), но не можете да промените броя на колоните на работния плот;
  • показване на информация под формата на отделни прозорци (когато извиквате навигационна команда, трябва да задържите клавиша Shift).

Ако се използват секции, тогава когато извикате команда в навигационния панел, съответният списък се показва в работната област, замествайки предишното съдържание на работната област.

Персонализиране на външния вид на управляван формуляр от разработчик

Разработчикът може да повлияе на подреждането на елементите с различни настройки. Той може да определи реда на елементите, да посочи тяхната ширина и височина, както и да използва:

  • команди на самата форма;
  • глобални команди, използвани в цялата конфигурация;
  • команди с възможност за параметризиране, които ще отварят други формуляри въз основа на специфичните данни на текущия формуляр.

Фигура (промяна на формуляра 1C от разработчика)

[свиване]

Когато разработвате формуляр 1C, трябва:

  1. В редактора на формуляри включете необходимите подробности и команди във формуляра;
  2. създаване на елементи на формуляр, които ги показват, определяне на реда на елементите, определяне на ширината и височината (ако е необходимо);
  3. подредете елементите в групи (ако е необходимо).
  1. Използвайте базирани на роли настройки за видимост в елементите на формуляра (преглед и редактиране на подробности от, персонализирана видимост на полета на формуляр по роля, използване на команди по роля) в случай на голям брой роли в конфигурацията (от няколко десетки). Вместо това трябва да се следват следните подходи:
    • когато има големи разлики във външния вид и функционалността на формата в зависимост от наличието на определени роли за потребителя – разработване на отделни форми, специализирани за определен набор от потребителски права;
    • с малки разлики - извършване на проверки на разрешения в код. Трябва да се има предвид, че програмният контрол на видимостта може да намали скоростта на отваряне на формуляра, което трябва да се вземе предвид при избора между предложените подходи.
  2. Използвайте базирани на роли настройки за видимост в командния интерфейс за конфигурация, командния интерфейс на главния раздел и работната област на началната страница. Вместо това трябва да зададете разрешения за секции от командния интерфейс и обекти, включени в командния интерфейс или работното пространство. Това прави поведението на управлявания интерфейс по-предвидимо за потребителя и също така улеснява разследването на грешки.

За по-подробна информация относно работата с формуляри вижте курса „Работа с формуляри в 1C:Enterprise 8.3“, http://www.1c.ru/rus/partners/training/uc1/course.jsp?id=161.

Прочетох много форуми и никъде не видях разбираемо описание на работата с „Switch“. Затова реших да го напиша сам.

Според мен най-често срещаната грешка е погрешното схващане за „Switch“. Когато поставите няколко „превключвателя“, например 3, на формуляр, много хора смятат, че в логиката на програмата това са 3 различни обекта, които си влияят един на друг. Но всъщност програмата възприема всичките 3 „превключвателя“ като един обект. И избирането на един от тях променя състоянието на този обект. Нека разгледаме един пример.

1. Създайте три бутона за избор във формата. За удобство няма да променяме имената.
2. Маркирайте Switch1. В неговите свойства, в секцията „ОСНОВНИ“, поставете отметка в първото в груповото поле. „TYPE VALUE“ изберете число. (След това ще разгледаме защо точно числото). Дължината може да бъде зададена на единица, но това не осигурява никаква специална функционалност.
3. Изберете “Switch2” в колоната “SELECTED VALUE” и поставете 1.
4. Изберете “Switch3” в колоната “SELECTED VALUE” и поставете 2.
По същество с действия 3 и 4 вие задавате флаг, който ще се промени, когато изберете съответния „Превключване“. В “Switch1” по подразбиране “SELECTED VALUE” е нула.
5. Проверете дали превключвателите са в правилен ред „ПОХОДЯЩ РЕД“. (например: 13,14,15) (фиг. 1). необходим е непрекъснат ред на преминаване чрез превключване. Редът за автоматично заобикаляне е активиран (позициите са номерирани 13, 15, 20) (фиг. 2) в този случай превключвателите един под друг няма да работят, трябва да премахнете използването на автоматичен ред от формата и, ако необходимо, ръчно посочете поръчката.

Как да зададете реда на преминаване за подробности.Докато сте във формата, в менюто "Диалог" трябва да премахнете отметката от квадратчето "Автоматичен ред на преминаване". След това можете да използвате или “Диалог” -> “Задаване на реда на преминаване”, или “Диалог” -> “Нареждане за пътуване”. Вторият метод ми се струва най-удобен. При този метод за всяка опора се появява картина с номера на опората. Всичко, което трябва да направите, е да кликнете върху числата, като изберете детайлите в реда, който ви е необходим.

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

6. Изберете “Switch1” и напишете процедурата, от която се нуждаем за него.
Например:

EF=Елементи на формуляр; Ако Switch1=0 Тогава EF.Payment Status.Value = "Неплатено"; OtherwiseIf Switch1=1 Then EF.Payment Status.Value = "Частично платено"; OtherwiseIf Switch1=2 Then EF.Payment Status.Value = "Paid"; endIf;

7. Натиснете F7. Натиснете F5. Да видим, че всичко работи, страхотни сме. И големият ШЕФ ни дава бонус.

ОБЯСНЕНИЕ КЪМ КОДА

Защо навсякъде има "Switch1"? Тъй като вече беше казано, програмата възприема всичките три елемента като един и тъй като „Switch1“ е първият в групата, тогава програмата го възприема като целия елемент, ако направите „Switch2“ основен в групата , тогава проверката за коректност ще трябва да се извърши съгласно "Switch2".
Е, откъде идват "0", "1", "2"? Задаваме тези стойности, които обектът приема при превключване на „Превключватели“ в параграфи 3 и 4.

ПОСЛЕСЛОВ:

Този код е даден като пример за работа с ключове. Според мен така е по-ясно и разбираемо. Но си струва да споменем, че в „Тип стойност“ можете веднага да изберете това, от което се нуждаете - предварително дефинирана стойност от директория, изброяване, например, или стойност на низ. Тоест, в горния пример беше възможно незабавно да се присвоят превключвателите като стойности не 0,1,2, а веднага „Неплатено“, „Частично платено“, „Платено“. И тогава кодът ще бъде намален до един ред:

Елементи на формуляр.Статус на плащане.Стойност = Switch1;

Резултатът ще бъде същият.

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

Превключвателите в контролирани форми (UF) са направени по-интуитивни.

Когато създавате Switch, трябва да запомните дуото Attributes, Form Element.
На първо място, трябва да създадете атрибути на формуляра. Задавате типа на атрибута какви стойности ще приеме вашият превключвател. Избрах тип String. Тук имате две възможности: ако сте създали атрибут на обект, тогава стойността, приета от вашия превключвател, ще бъде запазена в базата данни, ако просто добавите към списъка с подробности за формуляра, тогава резултатът, приет от вашия превключвател, няма да бъде записан.

След това плъзнете и пуснете необходимите ни атрибути в елементите на формуляра. Когато създавате елемент на формуляр, елементът в свойствата "Изглед" ще има тип "Поле за въвеждане". Изберете „Превключване на полето“ от списъка. В резултат на това ще получите формуляр нещо подобно:


Попълваме заглавие на елемента на формуляра, цвят, шрифт, местоположение и други красоти по ваш вкус.
Има елемент в свойствата на елемента на формуляра. „Списък за избор“ - в него въвеждате стойностите, които вашият превключвател ще вземе, когато изберете един или друг елемент. В моя пример добавих редове със стойностите „Запис“, „Отмяна на публикация“, „Публикуване“.

След това вашият превключвател е готов за употреба.

В зависимост от това дали вашият превключвател е атрибут на обект или атрибут на формуляр, вие използвате следния код, за да получите съхранената в него стойност:

SwitchFormElementFormElement // достъп директно, ако това е атрибут на Object form.SwitchInsideDB // достъп чрез елемента Object. до вашите данни.

1. Поле за въвеждане
2. Кутия за отметка
3. Превключете

Поле за въвеждане

По правило полето за въвеждане е свързано с атрибут на обект и отразява неговите данни. Това е може би един от най-често срещаните елементи, той има няколко начина за избор на стойност:

Избор от списък (Режим за избор на списък)

Избор от друга форма (бутон Избор)

Бутони за управление

Изпълнението на горните примери не изисква значителни усилия от страна на разработчика. например за режим на списък е необходимо да попълните списъка на елемент със стойности; за да изберете от друга форма, достатъчно е просто да асоциирате контролния елемент с данните от директорията. Но за контролните бутони ще трябва да напишете повече код за обработка на щраквания върху всеки бутон, въпреки че няма да е голям:

Процедура pv Избор на номенклатураРегламент (елемент, посока, стандартна обработка)
//Избор на данни за полето за въвеждане
// в този случай, номенклатурната директория
Заявка = Нова заявка;
Заявка.Текст=
"ИЗБИРАМ
| Номенклатура. Връзка като продукт
| ОТ
| Справочник.Номенклатура AS Номенклатура
|ПОРЪЧАЙТЕ ПО
| Номенклатура.Код";
TZNomenclature = Request.Run().Upload();

//търсене на текущия елемент от директорията, посочен в полето за въвеждане
CurrentElement = TZNomenclature.Find(Element.value);

Ако TechElement = Undefined Тогава
// ако елементът не е намерен, задайте номера на индекса
// извън таблицата със стойности, защото първият елемент в
// таблицата със стойности има индекс 0
Технически индекс = -1;
В противен случай
// ако елементът е намерен, получаваме неговия индекс
TechIndex = TZNomenclature.Index(TechElement);
endIf;

// изчисляване на нов индекс в зависимост от натискането на бутона
// минус пред променливата Посоката се поставя така, че когато
// щракването върху горната стрелка показва елемента над него
// и следователно с по-малък индекс
NewIndex = TechIndex-Посока;

// получаваме броя на елементите в директорията
// извадете едно, защото всички колекции в 8.1 започват от 0
Брой на елементите = TZNomenclature.Quantity()-1;

Ако NovIndex< 0 Или НовИндекс >Броят на елементите Тогава
// ако при промяна на индекса е извън таблицата със стойности
// т.е. тогава неговият номер е по-голям от най-големия индекс или по-малък от 0
// не променяйте стойността и информирайте потребителя за това
Уведомете ("Достигнахте ограничението на директорията");
В противен случай
// присвояване на нова стойност, "Продукт" е името на колоната от таблицата със стойности
Element.value = TZNomenclature.Get(NewIndex).Product;
endIf;

EndProcedure

Квадратче за отметка

В повечето програми полето за отметка служи за показване на две състояния: отметнато, неотметнато. В 1c полето за отметка има три състояния; в третото състояние полето за отметка се показва като отметнато и в същото време защриховано. Трите състояния са налични само ако данните в квадратчето за отметка са число и състоянията имат следните значения:

Превключване

Превключвателят се използва за избор на една стойност от малък брой възможни (за предпочитане не повече от пет) и стойностите не могат да се комбинират, например: подходящ за избор на пола на човек. Друг пример: да кажем, че една компания дава една от 3 отстъпки за продукт и отстъпките не се сумират:

В този случай удобството на използването на радио бутони може да се крие във факта, че всеки от тях може да има някаква стойност, която е зададена в свойството „Избираема стойност“. И тогава "5% отстъпка" може да съхранява стойността 5 или 0,05.

Важно е да запомните три неща, когато използвате превключватели:

      Първият превключвател трябва да има свойството "FirstInGroup" (в този пример това е превключвателят "5% отстъпка").

      Превключвателите, които са смислено свързани с една група, трябва да вървят в ред, когато настройвате реда на преминаване, без прекъсване от други елементи на формуляра. Редът на преминаване се задава от менюто "Формуляр -> Настройка на реда на преминаване", за този пример изглежда така:

  1. Типът на избраната стойност е зададен за превключвателя, който има свойството "FirstInGroup".

Платформата 1C:Enterprise ви позволява програмно да добавяте и променяте елементи на управлявана форма. Нека да разберем защо това може да е необходимо.

Софтуерна модификация на формуляра може да се наложи в няколко случая:

  • При финализиране на стандартни конфигурации за улесняване на последващата процедура за актуализиране. В този случай ще бъде променен само модулът на формата. Модулите се актуализират много по-лесно от формулярите.
  • При прилагане на някои общи алгоритми. Например в подсистемата „Забрана за редактиране на детайли на обекта“ може програмно да се създаде бутон за всички обекти, свързани към подсистемата, за да се даде възможност за редактиране на детайли.
  • При прилагане на някои специфични алгоритми. Например в справочника Номенклатура се създават полета за редактиране на допълнителни подробности.

В управлявана форма можете програмно да добавяте, променяте и изтривате:

  • реквизити;
  • местни екипи;
  • елементи.

Всички тези операции са възможни само на сървъра.

Програмното преоформяне има ограничения:

  • Можете да изтриете само програмно добавени подробности/команди/елементи. Не можете програмно да изтривате обекти, създадени в конфигуратора.
  • Не можете да зададете атрибут като основен.

Промяна на командите на формата

За управление на състава на команди за обект ManagedFormима колекция Екипи

    Добавете (< ИмяКоманды >)

    количество ()

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

    Изтрий (< Команда >)

Колекцията Teams е достъпна както на клиента, така и на сървъра. Можете да промените колекцията (методи Add() и Delete()) само на сървъра. Можете да търсите и получавате броя на елементите (методите Find () и Count () както на клиента, така и на сървъра.

Като пример за работа с команди на формуляри, нека създадем нова команда ChangeHistory със заглавие „ChangeHistory...“, която ще извика манипулатора DisplayHistory(). Създаването става при отваряне на формуляра.

&На сървъра
Процедура WhenCreatingOnServer(Failure, StandardProcessing)
Екип = Екипи. Добавяне ( "История на промените");
Екип . Действие = ;
Екип . Заглавие = "История на промените...";
EndProcedure
&На клиент
Процедура Connectable_DisplayHistory(Команда)
// командни действия
EndProcedure

Манипулаторът на командата трябва да се намира във формуляр и да има директива за компилиране &OnClient.

Промяна на детайлите на формуляра

Четенето на състава на детайлите на формуляра се извършва от функцията Получете подробности(< Путь >), връщайки масив от тип FormAttributes. Параметърът на функцията указва пътя до родителския атрибут (като низ). Ако параметърът е пропуснат или е посочен празен низ, се връщат детайлите от най-високо ниво.

Промяната на детайлите се извършва чрез метода Промяна на детайлите(<Добавени подробности>, <Подвижни детайли>) обект ManagedForm. Към параметрите Добавени подробностиИ Подвижни детайлиПредават се масиви с елементи от типа Form Attributes.

внимание!

Процесът на промяна на състава на детайлите е доста ресурсоемък. Формата всъщност се пресъздава. В тази връзка работата с детайлите на формуляра се извършва в пакетен режим.

Нека създадем нов атрибут на формуляр с името Купувач:


AddedDetails = Нов масив;
Добавени подробности. Добавяне (Нови атрибути на формуляр(„Купувач“, Ново описание на типа („DirectoryLink. Контрагенти“), „Клиент“));

// Промени в състава на детайлите
);

Промяна на елементите на формата

Да контролира състава на елементите на даден обект ManagedFormима колекция Елементи. Колекцията има няколко метода:

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

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

    количество ()

    намирам (< Имя >)

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

    Изтрий (< Элемент >)

Колекцията Items е достъпна както на клиента, така и на сървъра. Промяна на колекция (Вмъкване на методи () , Добавяне () , Преместване () и Изтриване () ) са налични само на сървъра. Можете да търсите и получавате броя на елементите (методите Find () и Count () както на клиента, така и на сървъра. Елементите на колекцията могат да бъдат:

  • FormGroup;
  • FormTable;
  • FormField;
  • Бутон за формуляр.

Можете програмно да присвоите манипулатори на събития към елементи на формуляр. Методът е предназначен за тези цели SetAction(< ИмяСобытия>, < Действие >) .

Нека да разгледаме някои от най-често срещаните примери за работа с команди, детайли и елементи на формуляр.

Добавяне на команда и свързания с нея бутон:

// Създаване на команда
Екип = Екипи. Добавяне ( "История на промените");
Екип . Действие = „Plug-in_DisplayHistory“; // Формата трябва да съдържа процедура с посоченото име
Екип . Заглавие = "История на промените...";
// Създайте бутон и го асоциирайте с команда
елемент = Елементи. Добавяне ( "История на промените", Type("FormButton" ));
Element.CommandName = "История на промените";

Добавяне на атрибут и свързаното поле за въвеждане:

// Описание на добавените детайли
AddedDetails = Нов масив;
Добавени подробности. Добавете(Нови реквизити за формуляри („Купувач“, ново описание на типа ( "DirectoryLink. Контрагенти"), "Клиент" ));
// Промяна на състава на детайлите
ChangeDetails(Добавени подробности);
// Създаване на поле за въвеждане и свързване с атрибути
елемент = Елементи. Add("Buyer" , Type("FormField" ));
елемент . Изглед = FormFieldView. Поле за въвеждане;
елемент . Път до данни= "Купувач" ;

Присвояване на манипулатор на събитие към елемент на формуляр:

АртикулКлиент. SetAction(„Когато се промени“, „Connected_BuyerOnChange“);

&На клиент
Процедура Connected_BuyerOnChange(Елемент)
// Действия при събитие
EndProcedure

внимание!

Процедури, които са зададени като манипулатори на събития от код, използващ метода SetAction(), се препоръчва да зададете префикса Connectable_.

внимание!

Можете да изтеглите обработката с примери за програмно търсене и промяна на детайли, команди и елементи на управлявана форма.

Превключвателите (известни още като RadioButtons) в 1C 7.7 са реализирани по много уникален начин. Първото нещо, което трябва да вземете предвид, е фактът, че те винаги образуват група (няма смисъл от еднократно превключване). В 1C няма очевидна връзка между груповите елементи. Избира се първият елемент в групата, за който е зададен идентификатор (това може да бъде числов атрибут на обекта с метаданни). Принадлежността на другите ключове към групата се определя от реда на преминаване.

При отваряне на формата трябва да се инициализира стойността на превключвателя, т.к в противен случай нито един от елементите на групата няма да бъде включен, което не е правилно.

В типична 1C конфигурация инициализирането на комутаторите се изпълнява, както следва: Процедура Въведете ново (копие) // инициализация на други детайли Валута = 1; EndProcedure //Въведете новИзглежда доста просто, но ако вземете предвид, че най-популярната стойност обикновено се поставя на първо място в група превключватели, можем да направим инициализацията автоматично с помощта на средствата на платформата.

Според мен основният недостатък на превключвателя е, че на изхода получаваме безлична числова стойност, за разлика например от изброяването. За съжаление, в 1C 7.7 няма стандартен начин за представяне на изброяване чрез ключове. Но има алтернатива на това - използването на предварително дефинирани променливи (подобно на константите в други езици за програмиране).

Нека да разгледаме пример за използване на превключваща стойност: Ако валута = 2, тогава парична сметка = AccountByCode("50.11"); В противен случай Парична сметка = AccountByCode("50.1"); endIf;За да разберете този код, трябва да отидете във формуляра и да определите, че атрибутът „Валута“ е идентификаторът на първия елемент в групата радиобутони „Касиер“. Самата група се състои от 2 елемента: „рубла (50.1 Kt)“ и „валута (50.11 Kt)“. Едва след това става ясно, че противно на обичайната логика, „Валута = 2“ е знак за обменно бюро, а „Валута = 1 или 0“ е знак за рубла.

Можете да направите кода си по-лесен за разбиране, като дефинирате променливи на модула на формуляр с имена и стойности, които съответстват на позициите на бутоните за избор. За този пример това биха били променливите: Променлива към CashboxType_Ruble, към CashboxType_Valutnaya;

В блока за инициализация на модула дефинираме техните стойности: kCashier_RublevayaType = 1; kCashierType_Currency = 2;

В резултат на това изходният код се преобразува във формата: If Currency = kCashierType_Currency Then Cash Account = AccountByCode("50.11"); OtherwiseIf Currency = kCashType_Ruble Then Cash Account = AccountByCode("50.1"); В противен случай Предупреждение("Типът касов апарат не е посочен."); endIf;

В заключение бих искал да отбележа, че според мен създаването на групи превключватели има смисъл само в случай, че в групата има не повече от 4 (максимум 5) елемента. В противен случай има смисъл да използвате комбинирана кутия, защото... ще заема значително по-малко място във формуляра.



Дял