1С параметры формы на клиенте

У многих начинающих программистов, особенно у тех, кто впервые сталкивается с управляемым приложением в 1С, возникает вопрос: как программным способом открыть управляемую форму. Еще больше вопросов возникает с передачей данных, когда одна форма открывается с другой формы. Многих этот момент ставит в тупик.

В этой статье я разберу оба этих момента.

Для тренировки создадим в конфигураторе 1С внешнюю обработку, в которой сделаем две формы. Назовем их: Данные и Расчёт. Причем форма Данные это основная форма обработки, т.е. будет открываться при запуске обработки.

В этой тренировке в форме Данные будем вводить некоторые числовые значения, которые потом используем в форме Расчёт. Сделаем простой пример: решим линейное уравнение тип ax + b = c. Для этого на форме Данные зададим величины a,b и с соответственно, а при открытии формы Расчёт вычислим значение x. Пример больше учебный, нужный для того, чтобы показать, как передавать данные с одной формы на другую. a, b и с – это реквизиты управляемой формы Данные с типом число (10,2). Создадим эти реквизиты и перетащим их на форму.

Следующим шагом создадим команду на форме Данные, при выполнении которой откроется форма Расчёт, где мы увидим решение линейного уравнения. Назовем команду«Решить уравнение» и поместим её на форму в виде простой кнопки.

Открывать управляемые формы следует в клиентском контексте. Причем не важно, какой это будет клиент: тонкий, толстый или веб-клиент.

Подробно о клиентском и серверном контексте управляемой формы читайте в статье:

Поэтому создадим обработчик команды «Решить уравнение» на клиенте.

В процедуре-обработчике этой команды откроем форму Расчёт, для этого необходимо использовать метод глобального контекста ОткрытьФорму.

&НаКлиенте
Процедура РешитьУравнение ( Команда )

Синтаксис этого метода имеет много параметров, но обязательным является только один – первый, в котором задается путь к управляемой форме.

При работе с этим методом, можно воспользоваться контекстными подсказками: достаточно написать после открывающей скобки параметров кавычки, и выйдут различные варианты, по которым можно получить нужную форму.

Причем в контекстной подсказке можно выбрать, как конкретную форму, так и какую-то основную форму нужного объекта.

В нашем случае мы выбираем форму Расчет обработки.

Подготовим форму Расчёт – создадим у этой формы реквизит x, который поместим на форму.

А так же установим у формы в свойство Режим открытия окна значение Блокировать окно владельца. Тогда форма Расчёт будет открываться в отдельном окне.

Всё! Если мы сейчас сохраним обработку, запустим её и выполним команду «Решить уравнение» формы Данные, то откроется форма Расчёт. На которой, естественно, ни чего пока ещё не рассчитано.

И первое что нам бросается в глаза, это заголовок в названии управляемой формы. Переименуем. Для этого в палитре свойств формы нужно снять флаг у свойства Автозаголовок и написать какой-то заголовок в свойстве Заголовок.

С открытием форм все просто и понятно. Но как передать данные с одной формы на другую? Для этого у управляемой формы 1С есть закладка Параметры. В этой закладке перечисляются данные, которые будут использоваться при создании управляемой формы на сервере.

Создадим у управляемой формы Расчёт параметры a,b,c.

Замечу, что к параметрам можно обращаться только в событии управляемой формы ПриСозданииНаСервере. Это событие возникает тогда, когда форма была создана на сервере, но еще не была передана в клиентский контекст.

Если Вы хотите, чтобы параметр был доступен все время существования формы, то у него необходимо установить свойство Ключевой параметр.

У формы Расчёт создадим событие формы ПриСозданиеНаСервере. Для этого в палитре свойств формы нужно найти это событие и кликнуть на кнопку «Лупа».

Решим в этом событие линейное уравнение. Для того, чтобы обратиться к нужному параметру формы, необходимо использовать коллекцию Параметры. И через точку получать значение интересующего нас параметра.

&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )

x = ( Параметры . c — Параметры . b )/ Параметры . a ;

Теперь нам осталось передать параметры при открытии формы. Для этого на форме Данные в обработчике команды «Решить уравнение» создадим структуру, в которой перечислим все передаваемые параметры. Ключ этой структуры должен соответствовать названию параметра в открываемой форме.
И эту структуру будем указывать в качестве второго параметра метода ОткрытьФорму.

&НаКлиенте
Процедура РешитьУравнение ( Команда )

Если a = 0 Тогда
Возврат;
КонецЕсли;

СтруктураПараметров = Новый Структура ;
СтруктураПараметров . Вставить ( «a» , a );
СтруктураПараметров . Вставить ( «b» , b );
СтруктураПараметров . Вставить ( «c» , c );

ОткрытьФорму ( «ВнешняяОбработка.ОткрытиеУправляемойФормы.Форма.Расчёт» ,
СтруктураПараметров );

Посмотрим, как будет работать этот код.

Как видите, в управляемом приложении 1С нет ничего сложного в передачи данных с одной формы на другую. Для этого просто необходимо использовать параметры управляемой формы.

Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
Читайте также:  Micro usb и mini usb отличия

Промо-код на скидку в 15% — 48PVXHeYu

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

Все параметры формы можно разделить на две группы: стандартные и заданные разработчиком. Большим плюсом стандартных параметров является отсутствие необходимости какой-либо обработки: задал параметр — получил результат. Список этих параметров, определяется типом объекта.

Например, параметр «ТекущееЗначение», позволяет позиционировать форму выбора справочника на определенном элементе. Большим плюсом является, что в самой форме не требуется писать обработчиков для предопределенных параметров, сокращает количество кода.

Также у разработчика есть возможность определять свои параметры на вкладке «Параметры» конструктора управляемой формы. Время жизни параметров ограничено обработчиком ПриСозданииНаСервере() , что логично т.к. параметры требуются только при создании формы. Но, если данный параметр определяет уникальность формы (установлен флаг «ключевой параметр» в свойствах параметра), он будет доступен и в других обработчиках.

Передача параметров при открытии формы:

Обработка передаваемого параметра в модуле открываемой формы:

Стандартные параметры

Стандартные параметры формы динамического списка

  • ВыборГруппИЭлементов . Тип: ИспользованиеГруппИЭлементов . По данному параметру устанавливается свойство ВыборГруппИЭлементов таблицы основного реквизита формы.
  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • КлючПользовательскихНастроек . Тип: Произвольный . Содержит ключ пользовательских настроек, которые нужно использовать для основного динамического списка формы. Если не установлен параметр ПользовательскиеНастройки , то будут загружены пользовательские настройки по указанному ключу.
  • МножественныйВыбор . Тип: Булево . Устанавливает для основной таблицы свойства МножественныйВыбор и РежимВыделения .
  • Отбор . Тип: Структура . Используется для установки отбора в динамическом списке. Ключ структуры — имя поля основной таблицы. Значение элемента структуры содержит значение отбора. Если значение является массивом, фиксированным массивом или списком значений с не одним элементом, то отбор будет применяться с видом сравнения ВСписке .
  • ПользовательскиеНастройки . Тип: ПользовательскиеНастройкиКомпоновкиДанных . Пользовательские настройки, которые будут использоваться в основном динамическом списке формы.
  • РазрешитьВыборКорня . Тип: Булево . Определяет возможность выбора корня в форме с динамическим списком, отображаемом в виде дерева.
  • РежимВыбора . Тип: Булево . Открывать форму в режиме выбора.
  • ТекущаяСтрока . Строка динамического списка, на которую будет установлен курсор после открытия формы. В качестве значения для параметра используются значения ссылок на объекты, которые содержит главная таблица динамического списка. Например, СправочникСсылка.Товары .
  • ФиксированныеНастройки . Тип : НастройкиКомпоновкиДанных. Настройки, помещаемые в фиксированные настройки отчета.

Стандартные параметры формы документа

  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • ЗначениеКопирования . Значение для копирования. Тип параметра соответствует типу объекта, копия которого будет создана.
  • ЗначенияЗаполнения . Тип: Структура . Параметры заполнения нового объекта. Ключ структуры — имя реквизита формы, значение — заполняемое значение.
  • Ключ . Тип: ДокументСсылка.ИмяДокумента . Ключ объекта. В случае отсутствия или неверного значения создается новый объект с использованием остальных параметров.
  • Основание . Тип: Произвольный . Объект, являющийся основанием для создания нового объекта.
  • ПараметрыВыбора . Тип: Структура . Содержит значения, по которым проверяется возможность выбора для форм, находящихся в режиме выбора.
  • РежимВыбора . Тип: Булево . Позволяет открывать форму в режиме выбора.
  • ТекстЗаполнения . Тип: Строка . Текст, введенный в поле ввода, при открытии формы в режиме выбора.

Стандартные параметры формы справочника

  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • ЗначениеКопирования . Значение для копирования. Тип параметра соответствует типу объекта, копия которого будет создана.
  • ЗначенияЗаполнения . Тип: Структура . Параметры заполнения нового объекта.
  • Ключ . Тип: СправочникСсылка.ИмяСправочника . Ключ объекта. В случае отсутствия или неверного значения создается новый объект с использованием остальных параметров.
  • Основание . Тип: Произвольный . Объект, являющийся основанием для создания нового объекта.
  • ПараметрыВыбора . Тип: Структура . Содержит значения, по которым проверяется возможность выбора для форм, находящихся в режиме выбора.
  • РежимВыбора . Тип: Булево . Позволяет открывать форму в режиме выбора.
  • ТекстЗаполнения . Тип: Строка . Текст, введенный в поле ввода, при открытии формы в режиме выбора.
  • ЭтоГруппа . Тип: Булево . Определяет вид нового объекта — группа или элемент.

Стандартные параметры формы плана видов характеристик

  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • ЗначениеКопирования . Значение для копирования. Тип параметра соответствует типу объекта, копия которого будет создана.
  • ЗначенияЗаполнения . Тип: Структура . Параметры заполнения нового объекта.
  • Ключ . Тип: ПланВидовХарактеристикСсылка.ИмяПВХ . Ключ объекта. В случае отсутствия или неверного значения создается новый объект с использованием остальных параметров.
  • ОбъектОтбораВидовХарактеристик . Тип: Произвольный . Содержит объект отбора видов характеристик. Если значение данного параметра не равно Неопределено , то определяется тип значения.
  • Основание . Тип: Произвольный . Объект, являющийся основанием для создания нового объекта.
  • ПараметрыВыбора . Тип: Структура . Содержит значения, по которым проверяется возможность выбора для форм, находящихся в режиме выбора.
  • РежимВыбора . Тип: Булево . Позволяет открывать форму в режиме выбора.
  • ТекстЗаполнения . Тип: Строка . Текст, введенный в поле ввода, при открытии формы в режиме выбора.
  • ЭтоГруппа . Тип: Булево . Определяет вид нового объекта — группа или элемент.
Читайте также:  Win 7 сервер терминалов

Справка

  • ИмяФормы (обязательный, тип: Строка ). Образуется как полный путь к объекту метаданных Форма (например, "Справочник.Контрагенты.Форма.ФормаОбъекта" , "ОбщаяФорма.ФормаСохраненияФайла" ) или как полный путь к прикладному объекту, дополненный именем формы по умолчанию (например, "Справочник.Товары.ФормаВыбора" ).
  • Параметры (необязательный, тип: Структура ). Ключ структуры — имя параметра, а значение — значение параметра формы. Имя элемента должно совпадать с именем параметра структуры.
  • Владелец (необязательный). Форма или элемент управления другой формы.
  • Уникальность (необязательный, тип: Произвольный ). В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
  • Ложь — искать форму с ключом уникальности по умолчанию
  • Истина — не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск
  • Значение по умолчанию: Ложь
  • Окно (необязательный, тип: ОкноКлиентскогоПриложения ; ВариантОткрытияОкна ). Окно приложения, в котором будет открыта форма. Применимо только для управляемой формы. Окном может быть только основное окно приложения или вспомогательное окно формы. Если указан тип ВариантОткрытияОкна , окно формы будет создано согласно выбранному варианту.
  • НавигационнаяСсылка (необязательный, тип: Строка ; Неопределено ). Если содержит значение, отличное от Неопределено , то это значение присваивается свойству НавигационнаяСсылка формы, полученной в результате вызова данного метода, и свойство АвтоНавигационнаяСсылка этой формы устанавливается в Ложь . Значение по умолчанию: Неопределено .
    • Тип: Форма ; УправляемаяФорма ; Неопределено . Неопределено — если в обработчике ПриСозданииНаСервере установлен признак отказа от создания формы.
    • Получает форму или управляемую форму. Перед получением осуществляется поиск уже открытой такой же формы. Поиск осуществляется по типу формы, значениям ключевых параметров формы, владельцу формы, пользовательскому ключу уникальности. Если в параметре Уникальность передано значение Истина , то поиск уже открытых форм не осуществляется.
    • Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение (клиент). Вызов метода выполняет обращение к серверу.
    • Отказ (Тип: Булево ). Признак отказа от создания формы. Если в теле процедуры-обработчика установить данному параметру значение Истина , то форма создана не будет. Значение по умолчанию: Ложь .
    • СтандартнаяОбработка (Тип: Булево ). В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь , стандартная обработка события производиться не будет. Значение по умолчанию: Истина .
    • Возникает на сервере при создании формы.

    Цель статьи – показать применение шаблонов Remote Facade и Data Transfer Object к структуризации кода, управляемой формы в среде 1С 8.2.

    Введение

    Начнем с небольшого описания понятия «управляемая форма» и связанных концепций платформы 1С. Знатоки платформы могут пропустить этот раздел.

    В 2008 году стала доступна новая версия платформы 1С: Предприятие 8.2 (далее Управляемое приложение), которая полностью меняет весь слой работы с интерфейсом. Сюда относится и командный интерфейс, и формы, и оконная система. При этом не только меняется модель разработки пользовательского интерфейса в конфигурации, но и предлагается новая архитектура разделения функциональности между клиентским приложением и сервером.
    Управляемое приложение поддерживает следующие типы клиентов:

    • Толстый клиент (обычный и управляемый режим запуска)
    • Тонкий клиент
    • Веб-клиент

    В управляемом приложении используются формы, построенные на новой технологии. Они называются Управляемые формы. Для облегчения перехода прежние формы (т.н. Обычные формы) также поддерживаются, но их функциональность не развивается и они доступны только в режиме запуска толстого клиента.
    Основные отличия управляемых форм для разработчика:

    • Декларативное, а не «по пикселям» описание структуры. Конкретное размещение элементов выполняется системой автоматически при отображении формы.
    • Вся функциональность формы описывается в виде реквизитов и команд. Реквизиты – это данные, с которыми работает форма, а команды – выполняемые действия.
    • Форма выполняется и на сервере и на клиенте.
    • В контексте клиента, недоступны практически все прикладные типы, и соответственно невозможно изменить данные в информационной базе.
    • Для каждого метода или переменной формы обязательно должна быть указана директива компиляции, определяющая, место выполнения (клиент или сервер) и доступ к контексту формы.

    Перечислим директивы компиляции методов формы:

    • &НаКлиенте
    • &НаСервере
    • &НаСервереБезКонтекста
    • &НаКлиентеНаСервереБезКонтекста

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

    Все дальнейшие рассуждения будут о правой части иллюстрации, о том, как структурировать код модуля и какие принципы позволят реализовать эффективное клиент-серверное взаимодействие.

    Обозначим проблему

    Прошло уже несколько лет как новая версия платформы 1С активно используется и выпущено множество решений (конфигураций) как фирмой 1С, так и ее многочисленными партнерами.
    Сложилось ли за это время у разработчиков единое понимание принципов клиент-серверного взаимодействия при создании форм, и изменился ли подход к реализации программных модулей в новых архитектурных реалиях?

    Рассмотрим структуру кода (модуль формы) в нескольких формах одной типовой конфигурации и попробуем найти закономерности.
    Под структурой будем понимать секции кода (чаще всего это блоки комментариев) выделенные разработчиком для группировки методов и директивы компиляции этих методов.
    Пример 1:

    Читайте также:  Видеокарта радеон hd 4650

    По сути, структура кода отсутствует, или мягче говоря, она аналогична тому, что было в формах 8.1:

    • Неинформативные слова «Общие, Служебные, Вспомогательные».
    • Робкие попытки разделить клиентские и серверные методы.
    • Часто методы группируются по интерфейсным элементам «Работа с табличной частью Товары, Контактной информацией».
    • Произвольное расположение методов и групп кода. Например, Обработчики событий могут быть в одной форме вверху, в другой внизу, в третьей вообще не выделены и т.д.
    • И не будем забывать, что это все в рамках одной конфигурации.
    • Да бывают конфигурации, в которых слова «Общие, Служебные, Вспомогательные» всегда находятся на одних и тех же местах но…

    Зачем нужна структура кода?
    Почему существующий стандарт разработки от фирмы 1С не помогает?

    Посмотрим опубликованные на дисках ИТС и в различных «Пособиях разработчика…» принципы, рекомендуемые при написании управляемой формы.

    • Минимизируйте число серверных вызовов.
    • Максимум вычислений на сервере.
    • Неконтекстные вызовы сервера быстрее контекстных.
    • Программируйте с учетом клиент-серверного взаимодействия.
    • и т.п.

    Это лозунги, абсолютно верные, но как их реализовать? Как минимизировать число вызовов, что значит программировать в клиент-серверном режиме?

    Шаблоны проектирования или мудрость поколений

    Клиент-серверное взаимодействие используется в различных программных технологиях не один десяток лет. Ответ на обозначенные в предыдущем разделе вопросы давно известен и суммирован в двух базовых принципах.

    • Remote Facade (далее Интерфейс удаленного доступа)
    • Data Transfer Object (далее Объект переноса данных)

    Слово Мартину Фаулеру, его описание данных принципов:

    • каждый объект, потенциально предназначенный для удаленного доступа, должен иметь интерфейс с низкой степенью детализации, что позволит максимально уменьшить количество вызовов, необходимых для выполнения определенной процедуры. … Вместо того, чтобы запрашивать счёт и все его пункты отдельно, надо считать и обновить все пункты счёта за одно обращение. Это влияет на всю структуру объекта.…Запомните: интерфейс удаленного доступа не содержит логики домена.
    • …если бы я был заботливой мамой, то обязательно сказал бы своему ребенку: «Никогда не пиши объекты переноса данных!» В большинстве случаев объекты переноса данных представляют собой не более чем раздутый набор полей … Ценность этого омерзительного монстра состоит исключительно в возможности передавать по сети несколько элементов информации за один вызов — прием, который имеет большое значение для распределенных систем.
    Примеры шаблонов в платформе 1С

    Прикладной программный интерфейс доступный разработчику при разработке управляемой формы, содержит много примеров данных принципов.
    Например метод ОткрытьФорму(), типичный «огрубленный» интерфейс.

    Сравните с принятым в v8.1 стилем.

    В контексте управляемой формы множество «Объектов переноса данных». Можно выделить системные и определяемые разработчиком.
    Системные моделируют на клиенте прикладной объект, в виде одного или несколько элементов данных формы. Создать их вне привязки к реквизитам формы нельзя.

    • ДанныеФормыСтруктура
    • ДанныеФормыКоллекция
    • ДанныеФормыСтруктураСКоллекцией
    • ДанныеФормыДерево

    Преобразование системных объектов переноса данных в прикладные типы и обратно выполняется методами:

    • ЗначениеВДанныеФормы()
    • ДанныеФормыВЗначение()
    • КопироватьДанныеФормы()
    • ЗначениеВРеквизитФормы()
    • РеквизитФормыВЗначение()

    Часто явное преобразование используется при адаптации существующего решения. Методы могут ожидать (использовать особенности) входные параметры, например ТаблицаЗначений, а не ДанныеФормыКоллекция, или метод был определен в контексте прикладного объекта и стал недоступен для прямого вызова из формы.
    Пример 1С v8.1:

    Объекты переноса данных, структура которых определяется разработчиком это небольшое подмножество типов доступных и на клиенте и на сервере. Наиболее часто в качестве параметров и результатов методов «огрубленного» интерфейса используются:

    • Примитивные типы (строка, число, булево)
    • Структура
    • Соответствие
    • Массив
    • Ссылки на прикладные объекты (уникальный идентификатор и текстовое представление)

    Пример: метод принимает список заказов для изменения статуса и возвращает клиенту описание ошибок.

    Структурируем код

    Главные цели, которые должен отражать модуль управляемой формы и подходы к решению.

    • Четкое разделение клиентского и серверного кода. Не будем забывать, в момент выполнения это два взаимодействующих процесса, в каждом из которых существенно отличается доступный функционал.
    • Четкое выделение интерфейса удаленного доступа, какие методы сервера можно вызывать с клиента, а какие нельзя? Названия методов удаленного интерфейса начинаются с префикса «Сервер». Это позволяет, читая код сразу видеть переход управления на сервер, и упрощает использование контекстной подсказки. Отметим, что официальная рекомендация (ИТС) предлагает именовать методы с постфиксами, например, так ИзменитьСтатусЗаказовНаСервере(). Однако повторим не все серверные методы можно вызывать с клиента, и поэтому более важна логическая доступность, а не место компиляции. Поэтому префиксом «Сервер» отмечаем только методы доступные для клиента, метод-пример назовем СерверИзменитьСтатусЗаказов().
    • Удобочитаемость. Дело вкуса, принимаем порядок, когда модуль начинается с процедур создания формы на сервере и методов удаленного доступа.
    • Сопровождаемость. Должно быть однозначно определено место для добавления нового кода. Важный момент, автоматически создаваемые конфигуратором заготовки методов добавляются в конец модуля. Т.к чаще всего автоматически создаются обработчики событий элементов формы, то соответствующий блок расположен последним, чтобы не перетаскивать каждый обработчик в другое место модуля.

    Ниже приведена базовая структура модуля, реализующая перечисленные цели.

    • Графический вариант – наглядно показывает основной поток выполнения.
    • Текстовый вариант — это пример оформления шаблона для быстрой вставки структуры в новый модуль формы.