8.2 управляемое приложение. Управляемое приложение. Рассмотрим каждый из пунктов подробней

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

Что же изменилось в управляемом приложении, по сравнению с обычным?

Интерфейс

Слой системы, работающий с данными информационной базы и отвечающий за бизнес-логику остался без существенных изменений. Обращение к справочникам, документам и прочим объектам конфигурации, а также механизмы запросов и обмена данными осуществляются также, как и в обычном приложении. Полностью изменился слой работы с интерфейсом: переделаны командный интерфейс, оконная система, а также пользовательские формы диалога.

Повышение масштабируемости

Масштабируемость - это способность системы адаптироваться к расширению предъявляемых требований и возрастанию объёмов решаемых задач. Управляемое приложение увеличивает масштабируемость системы за счет нескольких пунктов:

  • За счет переноса нагрузки с клиентской части на серверную. В обычном приложении вся работа с объектами информационной базы, расчётами, выполнением обработок, формированием отчётов выполнялась на компьютере пользователя, лишь некоторые общие модули работали на сервере. В управляемом приложении на клиенте выполняются только такие действия, как:
    • получение, открытие и отображение форм,
    • интерактивный диалог с пользователем,
    • небольшие расчёты,
    • работа с локальными файлами и торговым оборудованием;
  • Если для работы программного продукта 1С: Предприятие используется кластер серверов, то включается динамическое распределение нагрузки на сервера, чего нет при работе в обычном приложении;
  • Сервер 1С переработан в сторону повышения надежности и устойчивости.

Удалённая работа (онлайн)

Удалённая работа с информационной базой в управляемом приложении представлена в двух режимах:

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

Быстрая настройка системы при внедрении

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

Снижение трудоёмкости описания интерфейсов и отчетов

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

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

Возможность централизованного управления интерфейсом

Управление командным интерфейсом и формами осуществляется настройками ролей пользователя , составом функциональных опций и персональными настройками пользователя.

Развитие системы разграничения прав доступа

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

Пользовательские настройки

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

И Data Transfer Object к структуризации кода, управляемой формы в среде 1С 8.2.

Введение

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

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

  • Толстый клиент (обычный и управляемый режим запуска)
  • Тонкий клиент
  • Веб-клиент
В управляемом приложении используются формы, построенные на новой технологии. Они называются Управляемые формы . Для облегчения перехода прежние формы (т.н. Обычные формы) также поддерживаются, но их функциональность не развивается и они доступны только в режиме запуска толстого клиента.
Основные отличия управляемых форм для разработчика:
  • Декларативное, а не «по пикселям» описание структуры. Конкретное размещение элементов выполняется системой автоматически при отображении формы.
  • Вся функциональность формы описывается в виде реквизитов и команд . Реквизиты – это данные, с которыми работает форма, а команды – выполняемые действия.
  • Форма выполняется и на сервере и на клиенте.
  • В контексте клиента, недоступны практически все прикладные типы, и соответственно невозможно изменить данные в информационной базе.
  • Для каждого метода или переменной формы обязательно должна быть указана директива компиляции , определяющая, место выполнения (клиент или сервер) и доступ к контексту формы.
Перечислим директивы компиляции методов формы:
  • &НаКлиенте
  • &НаСервере
  • &НаСервереБезКонтекста
  • &НаКлиентеНаСервереБезКонтекста
Проиллюстрируем перечисленное. На скриншоте пример управляемой формы и ее модуля в режиме разработки. Найдите декларативное описание, реквизиты, директивы компиляции и т.д.

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

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

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

Рассмотрим структуру кода (модуль формы) в нескольких формах одной типовой конфигурации и попробуем найти закономерности.
Под структурой будем понимать секции кода (чаще всего это блоки комментариев) выделенные разработчиком для группировки методов и директивы компиляции этих методов.
Пример 1:
Секция обработчиков событий Метод – наклиенте Метод – насервере Метод - наклиенте Секция служебных процедур и функций Вспомогательные функции управления вводом
Пример 2:
Служебные процедуры и функции Документы оплаты Ценности Обработчики событий
Пример 3:
Служебные процедуры на сервере Служебные процедуры на клиенте Служебные процедуры на сервере без контекста Обработчики событий шапки Обработчики событий команд
Пример 4:
Процедуры общего назначения Обработчики событий формы Процедуры подсистемы «контактная информация»
По сути, структура кода отсутствует, или мягче говоря, она аналогична тому, что было в формах 8.1:

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

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

Клиент-серверное взаимодействие используется в различных программных технологиях не один десяток лет. Ответ на обозначенные в предыдущем разделе вопросы давно известен и суммирован в двух базовых принципах.
  • Remote Facade (далее Интерфейс удаленного доступа)
  • Data Transfer Object (далее Объект переноса данных)
Слово Мартину Фаулеру , его описание данных принципов:
  • каждый объект, потенциально предназначенный для удаленного доступа, должен иметь интерфейс с низкой степенью детализации , что позволит максимально уменьшить количество вызовов, необходимых для выполнения определенной процедуры. … Вместо того, чтобы запрашивать счёт и все его пункты отдельно, надо считать и обновить все пункты счёта за одно обращение. Это влияет на всю структуру объекта.…Запомните: интерфейс удаленного доступа не содержит логики домена .
  • …если бы я был заботливой мамой, то обязательно сказал бы своему ребенку: «Никогда не пиши объекты переноса данных!» В большинстве случаев объекты переноса данных представляют собой не более чем раздутый набор полей … Ценность этого омерзительного монстра состоит исключительно в возможности передавать по сети несколько элементов информации за один вызов - прием, который имеет большое значение для распределенных систем.
Примеры шаблонов в платформе 1С
Прикладной программный интерфейс доступный разработчику при разработке управляемой формы, содержит много примеров данных принципов.
Например метод ОткрытьФорму(), типичный «огрубленный» интерфейс.
ПараметрыОткрытия = Новый Структура("Параметр1, Параметр2, Параметр3", Значение1, Значение2, Значение3); Форма = ОткрытьФорму(ИмяФормы, ПараметрыОткрытия);
Сравните с принятым в v8.1 стилем.
Форма = ПолучитьФорму(ИмяФормы); Форма.Параметр1 = Значение1; Форма.Параметр2 = Значение2; Форма.Открыть();

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

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

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

  • Примитивные типы (строка, число, булево)
  • Структура
  • Соответствие
  • Массив
  • Ссылки на прикладные объекты (уникальный идентификатор и текстовое представление)
Пример: метод принимает список заказов для изменения статуса и возвращает клиенту описание ошибок.
&НаСервереБезКонтекста Функция СерверИзменитьСтатусЗаказов(Заказы, НовыйСтатус) Ошибки = Новый Соответствие(); // [заказ][описание ошибки] Для Каждого Заказ Из Заказы Цикл НачатьТранзакцию(); Попытка ДокОб = Заказ.ПолучитьОбъект(); …. другие действия, возможно не только с заказом… Исключение ОтменитьТранзакцию(); Ошибки.Вставить(Заказ, ОписаниеОшибки()); КонецПопытки; КонецЦикла; Возврат Ошибки; КонецФункции // СерверИзменитьСтатусЗаказов()

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

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

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор="" Дата=""/> // <Описание> // // //////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ //////////////////////////////////////////////////////////////////////////////// // НА СЕРВЕРЕ //******* СОБЫТИЯ НА СЕРВЕРЕ ******* &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Вставить содержимое обработчика КонецПроцедуры //******* ИНТЕРФЕЙС УДАЛЕННОГО ДОСТУПА ******* //******* БИЗНЕС-ЛОГИКА НА СЕРВЕРЕ ******* //////////////////////////////////////////////////////////////////////////////// // ОБЩИЕ МЕТОДЫ КЛИЕНТА И СЕРВЕРА //////////////////////////////////////////////////////////////////////////////// // НА КЛИЕНТЕ //******* БИЗНЕС-ЛОГИКА НА КЛИЕНТЕ ******* //******* КОМАНДЫ ******* //******* СОБЫТИЯ НА КЛИЕНТЕ ******* //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ

Связанные вопросы
В заключение обозначим несколько направлений, о которых полезно подумать при программировании клиент-серверного взаимодействия.
  • Варианты реализации интерфейса удаленного доступа . Асинхронность, степень детализации...
  • Кэширование. В 1С приняли неудачное архитектурное решение, введя кэширование только на уровне вызова методов общих модулей и не предоставив возможности управления (время актуальности, сброс по требованию).
  • Неявные серверные вызовы . Не забывайте о технологических особенностях, многие «безобидные» операции на клиенте провоцируют платформу на обращение к серверу.

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

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

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

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

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

В управляемом приложении настройки прав и интерфейсов были наконец вынесены в пользовательский режим и настраиваются непосредственно из интерфейса программы. Права пользователя назначаются на основе его членства в группах доступа. Перейдем в Администрирование - Настройки пользователей и прав - Группы доступа - Профили групп доступа , где мы увидим уже предустановленные профили для основных групп доступа.

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

А вот если мы попытаемся найти настройки интерфейсов, то нас постигнет фиаско. В управляемом приложении интерфейс рабочей области формируется автоматически, на основе прав доступа. Для примера сравним интерфейсы Панели разделов Администратора и Менеджера по продажам:

В общем - идея здравая, есть права доступа к объекту - показываем его в интерфейсе, нет - скрываем. Это гораздо лучше, чем выскакивающие в обычном приложении сообщения о нарушении прав доступа при несоответствии последних с назначенным интерфейсом. Если вы добавите группе доступа прав или, наоборот, уберете, то связанные с ними элементы интерфейса самостоятельно появятся или исчезнут. Удобно? Да.

Также пользователь может самостоятельно настраивать свое рабочее пространство в пределах имеющихся у него прав доступа. На первый взгляд все выглядит неплохо, но без ложки дегтя не обошлось. Механизма, позволяющего централизованно настроить и назначить пользователям интерфейс "по умолчанию" в управляемом приложении нет.

Если мы заглянем в Администрирование - Настройки пользователей и прав - Персональные настройки пользователей - Настройки пользователей то увидим там перечень всех объектов, настройки которых были изменены пользователем, однако никак не сможем их изменить.

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

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

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

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

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

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

Создав профиль назначаем группу доступа нужным пользователям и запускаем программу под одним из них. В зависимости от назначенных прав вы увидите автоматически сформированный интерфейс.

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

Перейдем в Главное меню - Вид , где увидим целый ряд настроек, касающихся интерфейса.

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

Затем в каждом разделе, нажав на шестеренку в верхнем правом углу, последовательно настроим навигацию и действия. Здесь также уберем все не нужное в повседневной работе, а нужное, наоборот, вынесем на первый план.

Можно даже сравнить, как было и как стало:

И в заключение выполним настройку панелей. Так как разделов у нас немного, то панель разделов имеет смысл переместить вверх, а панель открытых вниз, тем самым расширив рабочее пространство по горизонтали, что актуально для мониторов с небольшой диагональю или формата 4:3.

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

Теперь снова войдем в программу под администратором и перейдем в Администрирование - Настройки пользователей и прав - Персональные настройки пользователей - Копирование настроек . Наша задача распространить сделанные нами изменения на оставшихся пользователей группы Кассиры. Сама операция достаточно проста: выбираем пользователя, настройки которого мы копируем, указываем кому и выбираем что именно.

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

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

  • Теги:

Please enable JavaScript to view the

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

ПолучитьФорму() . Открыть()

Это самый медленный метод открытия форм. Тем не менее, он позволяет программно обработать форму перед открытием. Для обработки код нужно немного изменить:

Форма= ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.ФормаДокумента" ) ;
//Тут выполняем действия с формой
Форма. Открыть() ;

Надо учитывать, что при получении формы будет выполняться еще процедура события ПриСозданииНаСервере.

Рассмотрим другие методы, которые позволяют открывать формы в управляемом приложении 1С быстрее и удобнее. В зависимости от конкретной ситуации могут использоваться разные методы.

1. Как открыть форму объекта в управляемом приложении, если есть ссылка на него.

В этом случае все предельно просто.

СпрСсылка= Справочники. Номенклатура. НайтиПоКоду("000000001" ) ;
ОткрытьЗначение(СпрСсылка) ;

2. Как открыть форму выбора и получить потом выбранное значение.

Для этого существует функция ВвестиЗначение(). У функции 3 параметра:

  • Переменная, в которую будет записано выбранное значение;
  • Подсказка, которая будет отображена в окне выбора;
  • Описание типов выбираемых значений. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

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

Перем Значение;
Массив= новый массив;
Массив. Добавить(Тип("СправочникСсылка.Номенклатура" ) ) ;
Массив. Добавить(Тип("СправочникСсылка.Контрагенты" ) ) ;

ОписаниеТипов= новый ОписаниеТипов(Массив) ;

Рез= ВвестиЗначение(Значение, "Подсказка" , ОписаниеТипов) ;

Предыдущие способы позволяли открывать только формы, установленные для объектов по умолчанию (форму объекта или форму выбора). Если нужно открыть произвольную форму, то можно воспользоваться функцией ОткрытьФорму().

Эта функция имеет довольно много параметров. Рассмотрим некоторые из них:

  • Имя формы — тут можно выбрать либо одну из стандартных форм объекта, например, ФормаВыбора или ФормаСписка . Или конкретную, созданную разработчиками форму.
  • Параметры — позволяет передать в форму в виде структуры некоторые параметры перед ее открытием, тем самым определив выводимые данные. Параметры могут представлять собой любые данные, которые можно передавать с клиента на сервер. Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.
  • Режим открытия формы — имеет 3 варианта: независимый, блокировать весь интерфейс, блокировать форму владельца.

Рассмотрим, как применяется функция ОткрытьФорму() в различных ситуациях.

3. Как открыть форму существующего объекта

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

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;
Параметр. Вставить("Ключ" , НайтиС() ) ;
ОткрытьФорму(, Параметр) ;
КонецПроцедуры

&НаСервере
Функция НайтиС() ;
Возврат Справочники. Контрагенты. НайтиПоРеквизиту ("ИНН" , "745107734623" )
КонецФункции

4. Как открыть форму нового объекта

Тут подойдет просто функция ОткрытьФорму() без всяких параметров.

&НаКлиенте
Процедура Команда1 (Команда)
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта" ) ;
КонецПроцедуры

5. Как открыть форму нового объекта и заполнить ее на основании чего-либо

Нужно передать параметр Основание , значением которого будет являться ссылка на объект-основание заполнения. При этом будет запущена процедура ОбработкаЗаполнения().

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;
Параметр. Вставить("Основание" , СсылкаНаСчетПокупателю) ;
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта" , Параметр) ;
КонецПроцедуры

В этом примере будет создан документ Реализация товаров и услуг и заполнен на основании счета на оплату покупателю, ссылка на который была передана.

6. Как открыть форму и задать на ней отбор

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

Чтобы организовать простой отбор, нужно передать в открываемую форму параметр с ключом Отбор , значением будет являться структура, в которой ключ — имя поля динамического списка, а значение — искомые данные.

Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура .

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;

Отбор= новый Структура;
Отбор. Вставить("Владелец" , СсылкаНаНоменклатуру) ;

Параметр. Вставить("Отбор" , Отбор) ;

ОткрытьФорму("Справочник.НомераГТД.ФормаСписка" , Параметр) ;
КонецПроцедуры

7. Как открыть форму записи регистра сведений

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Алгоритм открытия следующий:

  1. Заносим в структуру данные ключа записи с необходимыми значениями.
  2. Помещаем полученную структуру в массив.
  3. Из массива создаем ключ записи.
  4. Передаем в открываемую форму параметр Ключ с ключом записи из п.3 в качестве значения.

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;

ПараметрыКлюча= новый Структура;
ПараметрыКлюча. Вставить("Номенклатура" , СсылкаНаНоменклатуру) ;
ПараметрыКлюча. Вставить("ТипЦены" , СсылкаНаТипЦен) ;
ПараметрыКлюча. Вставить("Период" , Дата) ;

МассивКлюча = Новый Массив;
МассивКлюча. Добавить(ПараметрыКлюча) ;

КлючЗаписи = Новый("РегистрСведенийКлючЗаписи.ЦеныНоменклатуры" , МассивКлюча) ;

Параметр. Вставить("Ключ" , КлючЗаписи) ;

ОткрытьФорму("РегистрСведений.ЦеныНоменклатуры.ФормаЗаписи" , Параметр) ;
КонецПроцедуры

Здравствуйте.

В прошлом посту писал об обычном и управляемом приложений, обычных и управляемых формах «1С:Предприятия», статья находится здесь .
За управляемым приложением будущее, уже сейчас многие типовые конфигураций построены на основе управляемого приложения, к ним относятся:
1. «1С:Управление торговлей 11»;
2. «1С:Управление небольшой фирмой 8»;
3. «1С:Документооборот 8»;
4. «1С:Бухгалтерия предприятия 3.0»;
5. «1С:Управление производственным предприятием 2.0» (выйдет в ближайшем будущем);

Данные приложения базируются на управляемых формах и автоматически открываются в «тонком» клиенте.

Многие внешние обработки и отчеты не имеют управляемых форм и при открытии в управляемом приложений они откроются, но будут пустыми, т.е. не рабочими они работают в обычном приложений.

Пример открытия обработки описан в посту: « »

Большинство универсальных и других обработок можно запускать только в обычном приложении.

Сейчас рассмотрим следующий вопрос: Как запустить обычное приложение, если по умолчанию приложение запускается в тонком клиенте?

Должен быть задан параметр конфигуратора Управляемое приложение и обычное приложение , а дальше согласно приоритету при выборе запуска приложения.

Приоритет при выборе запуска приложения следующий:
1. Первым анализируется свойство регистрации информационной базы.
2. Вторым анализируется, задана ли у пользователя принудительная настройка обычного или управляемого приложения. Если указано значение Авто, то осуществляется переход к следующему уровню.
3. И последнее анализируется основной режим запуска конфигурации.

Для того чтобы поймать момент запуска приложения и момент завершения работы служит .

Рассмотрим каждый из пунктов подробней

Создание обычных и управляемых форм становится доступным если в режиме конфигуратора задан параметр Сервис – Общие – Управляемое приложение и обычное приложение

Приоритет запуска приложения

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

Вторым анализируется режим запуска приложения для конкретного пользователя. Он задается в списке пользователей. Администрирование – Пользователи выбрать пользователя и на закладке Прочие в поле выбора Режим запуска выбрать значение Управляемое приложение или Обычное приложение .
Для ролей, которые отмечены в списке Доступные роли, необходимо указать право на запуск толстого клиента.




Понравилась статья? Поделиться с друзьями: