Управляемый интерфейс 1с 8.3. Работа с избранным из встроенного языка
Но слева у нас остается пустое поле. В него можно выводить команды подсистемы:

для этого необходимо настроить командный интерфейс подсистемы:

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

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

После этого мы можем добавить эти отчеты и обработки в командный интерфейс:

После этого данные команды появятся в командной панели:

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

в третьих, у отчета обязательно должны быть макет:

Для того, что бы был доступен сервис, у обработки так же должны быть права, во вторых, эта обработка так же должна быть включена в соответствующую подсистему, ну а в третьих, у нее должна быть команда.
И 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С Бухгалтерия 8 ред. 3.0 – первое знакомство вы, вероятно, обратили внимание, что мы нигде не говорили о специальных интерфейсах для того или иного пользователя. Не говорили, так как их просто нет в программе 1С Бухгалтерия 8 редакция 3.0.
Скорее всего, это вызовет удивление у пользователей программы 1С Бухгалтерия 8 редакция 2.0. Ведь в ней есть такие интерфейсы.
- Бухгалтерский.
- НДФЛ предпринимателя.
- Административный.
- Полный.
Это так. Ну и, что? Что нам давали эти интерфейсы. Допустим, в бухгалтерии есть кроме главного бухгалтера еще два бухгалтера. Один занимается только банковскими и кассовыми операциями, а другой ведет учет основных средств. В этом случае надо было приглашать программиста, чтобы он разработал специализированные интерфейсы для каждого из этих пользователей. Только специалист, хорошо знающий конфигурацию, может создать и грамотно описать новые роли и права. Разумеется, такие изменения возможны лишь при снятии конфигурации с поддержки.
Напротив, в программе 1С Бухгалтерия 8 ред. 3.0 пользователь может самостоятельно или с помощью более подготовленного коллеги сформировать нужный для своей работы командный интерфейс. Давайте на некоторых примерах рассмотрим, как это делается.
1. Командный интерфейс это управляемый интерфейс 1С
Командный интерфейс в программе 1С Бухгалтерия 8 ред. 3.0 является управляемым интерфейсом. Это означает, что пользователь может самостоятельно управлять им непосредственно в режиме 1С Предприятие. Да, именно пользователь, а не только программист в режиме Конфигуратор.
Для этого на панели системных команд, в главном меню есть пункт «Вид», который открывает доступ к командам редактирования панелей управляемого интерфейса.
Пояснения требуют лишь две команды.
- Панель разделов . Включает и отключает отображение панели разделов на командном интерфейсе.
- Панель навигации и действий . Включает и отключает отображение панели навигации и панели действий на командном интерфейсе.
2. Создать интерфейс для расчетчика
Создание и настройку интерфейса рассмотрим на простом примере. Допустим, что нашему пользователю нужны для работы только два раздела: «Банк и касса» и «Сотрудники и зарплата». Удалить ненужные ему разделы можно в форме, которая вызывается по команде «ИНФОРМАЦИОННАЯ ПАНЕЛЬ \ Главное меню \ Вид \ Настройка панели разделов».

С помощью кнопки «Удалить» удалите не нужные нашему пользователю разделы. Оставьте только «Банк и касса» и «Сотрудники и зарплата». После сохранения изменений (кнопка ОК) получим следующий вид интерфейса.

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

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

Для редактирования панели навигации выполните команду «ИНФОРМАЦИОННАЯ ПАНЕЛЬ \ Главное меню \ Вид \ Настройка панели навигации».

Манипулируя кнопками «Добавить», «Добавить все», «Удалить» и «Удалить все», оставьте в правом окне только навигационную команду «Кассовые документы».

Теперь отредактируем панель действий раздела рабочий стол. Для этого выполните команду «ИНФОРМАЦИОННАЯ ПАНЕЛЬ \ Главное меню \ Вид \ Настройка панели действий».

Манипулируя кнопками «Добавить», «Добавить все», «Удалить» и «Удалить все», оставьте в правом окне только команды, очерченные красными прямоугольниками.
Мы предположили, что наша организация не занимается розничными продажами. Поэтому документ «Отчет о розничных продаж» кассиру не нужен. Мы также предположили, что кассиру не нужны стандартные бухгалтерские отчеты. Поэтому мы их тоже удалили с панели действий.
По команде «ИНФОРМАЦИОННАЯ ПАНЕЛЬ \ Главное меню \ Вид \ Панель разделов» отключите отображение панели разделов. Завершите работу с программой и вновь откройте ее от имени кассира. Вот так будет выглядеть его интерфейс.

Ничего лишнего! Только необходимые кассиру документы и два отчета. При необходимости список кассовых документов он может открыть, кликая по навигационной команде «Кассовые документы». Она расположена на навигационной панели.
4. Интерфейс программы 1С Бухгалтерия 7.7
Разработчики 1С прекрасно понимают, что, как бы хорош не был новый интерфейс, но многие из нас живут по принципу: лучшее – враг хорошего. Так при переходе с программы 1С Бухгалтерия 7.7 частенько можно услышать. Я ничего не понимаю в новом интерфейсе, мне некогда разбираться с ним, у меня срочная работа.
Такие пользователи в несколько кликов могут установить у себе в программе 1С:Бухгалтерия 8 ред. 3.0 так полюбившийся им семерочный интерфейс. Выглядит он, как показано на рисунке.

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

Затем на панели разделов активизируйте раздел «Администрирование» и щелкните в панели действий по ссылке «Настройка программы».

В открывшейся в рабочей области форме «Настройка программы» перейдите на закладку «Интерфейс» и активизируйте радио кнопку «Интерфейс, аналогичный 1С:Бухгалтерия 7.7».

Все. Сохраните результат, нажав на кнопку ОК. Работайте с привычным вам семерочным интерфейсом. В тоже время не забывайте в демонстрационной базе находить время, чтобы освоить оригинальный интерфейс. Когда вы привыкните к родному интерфейсу программы 1С:Бухгалтерия 8 ред. 3.0, то очень быстро можете его восстановить.
Для этого на панели разделов щелкните по ссылке «Сервис». В панели навигации щелкните по ссылке «Настройка программы». Активизируйте закладку «Интерфейс» и укажите «Стандартный интерфейс 1С:Бухгалтерия 8». Ну и, конечно, ОК.

6. Управление формами объектов
Программа 1С Бухгалтерия 8 ред. 3.0 предоставляет пользователю не только возможность управления командным интерфейсом. В ней можно управлять и формами отдельных объектов. Это формы журналов (списков) документов, формы самих документов и справочники. Для управления этими формами в правом верхнем углу открытой в рабочей области формы есть кнопка «Все действия». А в ней команда «Изменить форму».
Конечно, у программиста больше возможностей при создании форм объектов. И тем не менее, давайте рассмотрим один простой пример.
Первоначально форма документа «Счет на оплату покупателям» выглядит так, как показано на рисунке.

А теперь предположим, что наша организация занимается только оказанием услуг. Следовательно, реквизиты «Склад» и «Адрес доставки» нам не нужны. В табличной части нам также не нужны закладки «Товары» и «Возвратная номенклатура». Чтобы избавиться от них, нажмите на кнопку «Все действия» и выберете пункт «Изменить форму».

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

Для осторожных пользователей хочется отметить следующее.
Внимание. Не бойтесь экспериментировать с настройками форм объектов. Они не изменяют учетного содержимого информационной базы.
Конечно, лучше тренироваться на демонстрационной базе. Но, если в рабочей базе при настройке какой-то формы вам что-то не понравилось, то нет необходимости последовательно восстанавливать первоначальное состояние формы.
Для этого на форме объекта выполните команду «Все действия \ Изменить форму». Откроется уже известная нам «Настройка формы». В ней выполните команду «Все действия \ Установить стандартные настройки».
7. Информирование об ошибках
Программа 1С Бухгалтерия 8 ред. 3.0 контролирует заполнение обязательных реквизитов. Впрочем, это делали и предыдущие редакции. Но в отличие от предыдущих редакций диагностические сообщения 1С Бухгалтерия 8 редакции 3.0 стали более информативными. Они показывает, в каком реквизите и, какая содержится ошибка.
Например, начинающие пользователи часто совершают такую ошибку. Они пытаются заполнять реквизиты документов не путем подбора из соответствующих справочников, а вручную забивают нужные значения. На рисунке показано, что пользователь вручную в реквизите «Контрагент» вбил ООО «Заря». Такого контрагента программа 1С Бухгалтерия ред. 2.0 не нашла в справочнике «Контрагенты». Поэтому при записи документа она сообщили об ошибке, как показано на рисунке.

Но, если пользователь не проходил обучение, если он не знает, что большая часть реквизитов заполняется путем подбора из соответствующих справочников, то подобное сообщение у него кроме недоумения ничего не вызовет.
А вот, как реагирует на такую же ошибку программа 1С Бухгалтерия ред. 3.0.

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

Перемещаться от ошибке к ошибке можно двумя способами. Либо используя навигационные стрелки в диагностическом сообщении, либо кликая по ссылкам в панели сообщений.
Вот, пожалуй, и все. Надеюсь, что управляемый командный интерфейс программы 1С Бухгалтерия 8 ред. 3.0 не будет камнем преткновения при освоении этой программы. Он действительно более удобен, но необходимо затратить чуть-чуть своего драгоценного времени для его освоения.
После того, как я три дня пощупал на практике управляемые формы, я их полюбил. Не нужно расставлять мышкой поля на форме, мучиться с привязками. Все просто и делается в несколько кликов.
Мне даже стало жалко, что 1С полностью не отказалась от обычных форм из-за того, что они используются в режиме рабочего стола. Ведь можно было бы дать возможность в УФ точного пиксельного позиционирования, и обычные формы бы отмерли со временем. А так приходится распылять силы еще и на знание старого функционала.
А так, конечно, УФ намного быстрее обычных, т.к. работают по трехзвенной схеме между клиентом и сервером.
Кроме того, сам функционал УФ намного богаче и шире, чем у обычных - неудивительно, прошло много времени, и в них попали многие интерфейсные находки.
Например, вывод динамической таблицы с группировками, или вытаскивание реквизитов объектов напрямую в динамический список. Или даже радиокнопка не в виде точек, а в виде тумблеров.
На практике их не так страшно использовать, как казалось изначально, я освоился быстро. В свое время я достаточно программировал общих модулей, которые работали только на сервере, и сталкивался с преобразованиями мутабельных значений для передачи их на сервер, поэтому управляемые формы были доступны моему пониманию.
Модальности, событийность и блокировки интерфейса
Я слышал, что в 8.3 появился отказ от модальных функций вроде Вопрос , Предупреждение , ОткрытьФормуМодально . Для меня было непонятно, зачем это было сделано.
Каково же было мое удивление, когда в одном из примеров преподаватель вызвал открытие формы с параметром «Заблокировать весь интерфейс», т.е. по сути модально.
Я-то был уверен, что от модальности отказались.
Понимание пришло не сразу.
В 1С не отказались от модальных окон. Есть новые функции, чтобы вывести предупреждение, задать вопрос, открыть модально диалог выбора файла.
Нюанс в том, что после вызова этих модальных окон управление не замораживается, как раньше, в ожидании, когда форма закроется, а продолжается. Форма вызывает оповещение, что она закрылась, и нужно обработать это оповещение.
Т.е. платформа 1С избавилась от рудимента замораживания выполнения кода и перешла на полностью событийное управление формами.
Конечно же, это никоим образом не связано с тем, что браузеры испытывают сложности с показом модальных окон. Это заблуждение и предрассудок - забудьте его как дурной сон. Все логично. По сути теперь выполнение полностью событийное и асинхронное, от синхронного выполнения удалось избавиться.
В 1С появились мини-конструкторы - рефакторинг. Это упрощает написание обработчиков оповещения для асинхронного режима работы, чтобы не писать их вручную.
В конфигурации есть возможность отключить все синхронные вызовы (они будут вызывать ошибку), в итоге она будет полностью асинхронна и соответствовать последним требованиям организации событийной модели.
Новые возможности интерфейса
Меню
Если управляемые формы выглядят вполне логичным и правильным направлением развития, то направление развития системы меню для меня так и осталось непонятым.
Несомненно, меню, где показывается только один уровень, затем нужно заходить в следующий подуровень и так до выбора нужного пункта уже морально устарело, и ему на смену пришла карта меню, где развернуты сразу несколько пунктов меню. Это было сделано в типовых еще до выхода новых интерфейсов меню в 8.2.
В свое время еще на 8.1 я делал систему меню в виде прикрепленного слева иерархического справочника, где видимость каждого пункта определялась правами доступа пользователя, для которого отображалось меню.
Я так понял, что 1С посчитало неправильным, что прикладной объект Интерфейс не используют, и решила выпустить ему новую, продвинутую альтернативу.
Получилось как-то мудрено, на мой взгляд. Опять же все завязано на настраиваемые галочками роли, которые я никогда не любил - лучшая система ролей пишется на уровне программного кода, доказательством этого является система дополнительных прав пользователей, которая позволяет гибко и без лишних проблем настроить права доступа в типовых конфигурациях.
В общем, новые способы организации меню пришли, на мой взгляд они не очень удачные, но альтернативы нет, и их применяют в типовых.
Я спросил преподавателя: «Мне понятно насчет управляемых форм, но зачем нужно было развивать интерфейсы, почему было нельзя немного доработать классическое меню»?
Он мне ответил, что система 1С развивается в направлении увеличения комфорта и скорости работы пользователя. На мой взгляд все же, такие грандиозные изменения в системе меню этого не стоят.
Порядок обхода
Кстати, для производительной работы пользователей важен порядок обхода - многие на автомате уже заучили определенный порядок обхода полей. Так вот, как раз от порядка обхода в 8.2 отказались. Он строго соответствует порядку размещения элементов. К счастью, есть возможность программного перехвата выхода из поля и передачи фокуса другому полю, иначе было бы совсем плохо с заявленной производительностью.
Рабочая область и вложенные формы
Рабочая область - всего одна. Поэтому приходится запихивать в неё формы практически всех пользователей и определять их видимость правами. Все это должно приводить в больших конфигурациях к хаосу.
Намного проще было бы создавать её программным кодом или использовать механизм вложенных форм.
Что так и не реализовано в 8.2-8.3
Я так и не дождался вложенных форм. Увы, их нет, хотя они использовались еще в древнем Access .
Перетаскивания через буфер обмена нет. Т.е. приходится тащить мышкой, нельзя указать - я тащу отсюда и помещаю здесь, не разрывая жесть мышью, увы. Хотя, возможно, здесь на помощь может прийти сторонний софт, т.к. перетаскивание - это системная вещь в Windows .
Функциональные опции и видимость элементов
В своё время RLS были созданы для того, чтобы показывать пользователям только отдельные записи таблиц.
Дальнейшим развитием видимости стали функциональные опции и настройки отображения полей по ролям. Все вместе это составляет некий разнообразный зоопарк, нет общей стройности и слаженности.
На мой скромный взгляд, видимостью полей все же проще управлять программным путем, чем декларативно, расставляя галочки и делая сложный механизм функциональных опций.
В свое время я доказал, что RLS на изменение уступает программному контролю записи на уровне модуля объекта/подписки. Точно так же подозреваю, что любая функциональная опция уступает обычному алгоритмическому описанию контроля видимости элементов - как в простоте использования, так и в универсальности подхода.
Пользователь конфигуратора вынужден очень много думать, как контролировать видимость - ролями или через функциональные опции. Один раз написав универсальный алгоритм определения видимости полей, он мог бы применять его всегда без всяких этих платформенных костылей.
Приговор - функциональные опции и видимость через роли - малоэффективны, но их надо знать, т.к. они используются в типовых конфигурациях.
Интерфейс 8.2 и интерфейс Такси
Интерфейс 8.2 и интерфейс такси совместимы, т.е. новых объектов не появилось. Конфигурация может работать или в 8.2 или в Такси, можно позволить пользователю переключаться между этими интерфейсами.
Главное отличие - расположение объектов главного меню. В 8.2 они занимали много места слева и сверху, в итоге под рабочую область для пользователя оставлялось мало места в правом нижнем углу. В интерфейсе Такси меню автоматически скрывается, оставаясь в виде небольшого меню слева, в итоге под рабочую область отводится практически весь экран.
Непонятно, зачем было идти таким запутанным путем, если в итоге базовая система меню в 8.1 еще более экономно расходовала рабочее пространство экрана?
Также в Такси изменились принципы отображения окон, в итоге код форм для 8.2 в некоторых местах неудобен. Но в этом направлении разницы я еще не осознал, хотя преподаватель и пытался рассказать основные принципы Такси. Попробую разобраться на практике, хотя и считаю все эти усовершенствования интерфейса избыточными и ненужными на практике пользователям бизнес-приложений.
Кстати, в 8.2 нельзя поменять палитру, это как бы визитная карточка платформы 1С. Точно также и система организации меню в виде 8.2 или Такси приучает пользователей к некоторому стандарту. Однако практика показывает, что на новую систему меню пользователь переучивается практически мгновенно. Вот поменять навыки работы с документами и отчетами намного сложнее.
Поэтому весь этот шум и споры вокруг системы меню мне не очень понятны - это не основной момент в платформе 1С, оставим его на совести архитекторов платформы и указывающих им направление развития руководителей.
Не проработанная идеология
Преподаватель правильно заметил, хотя это понятно и так, что разработчики платформы не создали новых сущностей там, где это нужно.
Например, подсистемы используются и для разделения объектов конфигурации на блоки, и для организации функциональных меню (новая альтернатива привычному меню приложения). Хотя логично было бы создать отдельный прикладной объект, который назывался бы «Функциональное меню».
Также приходится организовывать пустые роли (интерфейсные роли), которые нужны только для того, чтобы указать, какие объекты будут отображаться в той или иной форме. Хотя логичным было бы развить в этом направлении прикладной объект «Интерфейс».
Сомнения в эффективности
Некоторые подходы 1С к usability вызывают сомнения.
Например, много внимания на курсах было уделено, чтобы печатная форма документа показывалась в отдельной подчиненной форме документа и когда документ менялся, чтобы она очищалась. Смысла в этом не очень много, иногда нужно напечатать несколько экземпляров - например до правки и после. Запутаться в паре документов и нескольких печатных формах невозможно с практикой, поэтому распыление энергии в этом направлении мне показалось сомнительным.
Также, например, в платформе невозможно сделать поле ввода в ячейке динамического списка, если источником является не базовая таблица. Не потому что это технически сложно, а из соображений usability .
Возможности сохранения настроек
Настройки формы сохраняются напрямую в базу, а не в сеансе. При аварийном завершении они не теряются. Соответственно, появился новый механизм работы с этими настройками, где можно сохранять и свои данные. Альтернатива СохранитьЗначение /ВосстановитьЗначение .
Теперь все сохраненные настройки при необходимости можно программно перебрать, а значит, выгрузить другому пользователю, в файл и т.п.
Остальные вопросы
Что такое управляемые формы?
В управляемых формах код выполняется на клиенте и на сервере.
Под клиентом подразумевается слабая машина, им может быть даже обычный браузер.
А сервер находится в непосредственном и быстром соединении с базой данных.
Клиент не может работать с базой данных, он может выполнять мелкие математические операции и управлять элементами своих форм. Если требуется получить что-то из базы данных или отправить туда данные - клиент обращается к серверу.
Именно так работают управляемые формы. При должной сноровке постоянное обращение к серверу не является сложностью.
Подобная организация эффективнее, чем подключение к серверу через удаленный доступ, кроме того, работа возможна непосредственно через браузер, т.е. на любой платформе - Windows, Linux , Android , Mac OS .
Заметки по 1С россыпью
Здесь приведу заметки, которые писал для себя, они содержат ценные знания:
- В окне запуска 1С прописываются уже не информационные базы, а точки входа. Т.е. одна база может присутствовать несколько раз, но прописана для разных пользователей и разных инструментов работы - браузер, тонкий/толстый клиент, вход для администратора.
- Для администратора появился ключ, который отключает контроль ролей. Войти в Предприятие таким способом можно, только если доступны административные права на конфигурацию.
- Общие реквизиты - не путать их с общими реквизитами в 1С7, в 82 они используются для разделения доступа в интерфейсе.
- Часто использовал минимальную высоту списка в форме, чтобы избавиться от лишней полосы прокрутки формы.
- Не стоит хранить картинки в реквизите справочника, это приводит к падению производительности справочников, надо использовать регистр сведений.
- В процедурах сервера при передаче параметров нужно использовать ЗНАЧ, чтобы параметр не передавался обратно на сервер.
- Новые функции СтрНачинаетсяС и СтрЗаканчиваетсяНа , возможно и другие, с платформы 8.3.6.
- В 1с 8.2 появился привилегированный режим, т.е. можно отключать контроль прав доступа на уровне ролей на участках кода.
- Элементы формы список, таблица значений и дерево значений отличаются тем, что список на сервере и клиенте имеет одинаковое представление, а для таблицы и дерева создаются специальные объекты и их надо преобразовывать на сервере.
- Порадовало, что преподаватель любит называть объекты в единственном числе и называть модули с подчеркивания, чтобы эти модули шли первым по порядку в контекстной подсказке.
О жизни и вокруг 1С
Преподаватель утверждал:
- Разработку нужно вести с интерфейса.
Мое мнение : Утверждение сомнительное, т.к. знание и опыт использование архитектуры платформы позволяет сразу идти от прикладных объектов, а интерфейс уже строить потом. - Руководитель не вводит данные, только смотрит отчеты. А управляет не вводом данных в 1С, а телефоном и через секретаря. Поэтому руководителю достаточно браузера, а поля ввода нужны только для фильтрации данных.
Мое мнение : Да, это похоже на истину. - Критиковал БСП (Библиотека Стандартных Подсистем). В том плане, что из нее невозможно и очень сложно выделить необходимые модули.
Мое мнение : Т.к. даже БСП не удалось разбить на модули, то и УПП не получается разбить на модули УТ, ЗУП, БП, Производство. И тут не платформа виновата, а неправильная методология написания типовых - не соблюдается модульность. Тот же Navision давно имеет возможность сначала продать клиенту бухгалтерию, а потом он может докупить торговлю, производство и зарплату при необходимости, без переписывания кода и перехода на новую программу. - Типовые стали очень сложными, их затруднительно изменять. Опять же не из-за сложности платформы, а из-за неправильной организации типовых. При этом теряется основной принцип - быстрое и экономное сопровождение и доработка типовых конфигураций при необходимости.
- Был продемонстрирован вариант оформления заказа, когда слева в рабочей области находится номенклатура, справа - список заказов. Напротив номенклатуры можно ставить количество, затем перетаскивать ее в список заказов и формируется заказ. Преимущество - не блокируется таблица заказов для создания нового заказа.
Мое мнение : Преимущество надуманное - все же пользователям привычнее видеть отобранный товар в табличной части, можно сохранить этот заказ как черновик или скопировать заказ из шаблона. В общем, документы придуманы не зря. - Объяснял разницу между разделами «Главное», «Важное», «Перейти», «Смотри также».
Мое мнение : Лично я понял смутно, а значит, большинство так и не поймет эти заложенные в платформу нюансы usability в Такси. Поэтому интерфейсы будут выглядеть как раньше, как уже привыкли и пользователи, и программисты в 1С. - В ячейке табличного поля на форме, источником которого является произвольный запрос, нельзя вводить данные, как в поле ввода. Это сделано в интересах
usability
, чтобы пользователь фокусировался на вводе данных в отдельном окошке.
Мое мнение : Я привел пример с вводом в табличные части, где такое поле имеется, смысл запрета мне не понятен. - Разводы возникают от сравнения супруга с другими людьми. Меньше сравнений - крепче брак.
- Иностранные языки легче изучать, когда изучаешь их сразу несколько, снимается зашоренность и зацикленность на одном родном языке.
- Иностранные языки невозможно изучать, если привязывать иностранное слово к слову на родном языке, нужно привязывать к образу. Цепочка иностранное слово - образ короче чем цепочка иностранное слово - родное слово - образ. В последнем случае мыслить на иностранном не получится.
Заключение
Выражаю благодарность преподавателю.
Посещение этого курса избавило меня от предубеждения относительно управляемых форм, я четко уяснил для себя нюансы модальности, различия между интерфейсами 8.2 и Такси.
Теперь управляемые формы не пугают меня, а, наоборот, влекут познать их.
Надеюсь, и вы, читающие эту статью, по достоинству оцените управляемые формы.
Статья входит в цикл «Первые шаги в разработке на 1С». В ней мы продолжаем знакомиться с управляемым интерфейсом «Такси» и приступаем непосредственно к его конфигурированию.
Как известно, разработка интерфейса информационной базы начинается с создания структуры его меню, ведь насколько удобным и логичным оно будет, настолько понятным пользователю будет вся система в целом.
Прочитав статью, вы узнаете:
- Какую роль в формировании структуры меню играет подсистема?
- Как сформировать разделы меню 1-го и 2-го уровня?
- Как настроить состав команд, отображаемых в разделах меню?
- Для чего нужен редактор Командного интерфейса и как с ним работать?
- Как настроить Командный интерфейс основного раздела?
Применимость
В статье рассматривается интерфейс «Такси» конфигурации, разработанной на платформе 1C 8.3.4.496. Информация актуальна для текущих релизов платформы.
Подсистемы. Настройка интерфейса с помощью подсистем
Подсистемы относят к общим объектам . Они обеспечивают возможность классификации объектов конфигурации по Подсистемам .
Для указания принадлежности объекта к подсистемам в Окне редактирования объекта существует соответствующая закладка, на которой флагами отмечается, к каким подсистемам относится объект.
В дальнейшем можно выстроить фильтр дерева объектов по Подсистемам .
При этом имеется возможность управления: включать для выбранных Подсистем объекты подчиненных Подсистем и родительских Подсистем или нет.

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

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

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

Для существующих Подсистем можно определять вложенные (подчиненные). Данные Подсистемы будут образовывать группы Панели навигации .



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


В принципе, Подсистемы являются не обязательным объектом. Т.е. конфигурация, разработанная на Платформе 8.3, вполне сможет работать без каких-либо Подсистем.
Но в этом случае Панели разделов вообще не будет, все будет отображаться на Рабочем столе. Очень простые конфигурации с малым набором объектов смогут работать и без Подсистем.
Но если в конфигурации достаточно много Документов, Справочников и Регистров, использование Подсистем существенно облегчает работу пользователя.

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

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

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

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

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

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


Можно для каждой Подсистемы вызвать данный редактор. Из редактора имеется возможность управлять открытием списков в Панели навигации , доступностью команд в Панели действий .
По умолчанию флажки для команд по созданию элементов Справочников и Документов сняты, но их можно проставить. В Панели действий можно также открывать отчеты.
Элементы в редакторе можно перемещать. При этом из Панели навигации в Панель действий и в обратном направлении перемещение невозможно. Перемещать элементы можно либо внутри Панели навигации , либо внутри Панели действий .
Существуют колонка общей видимости и колонки видимости по ролям. Для каждой роли, определенной в конфигурации, будет своя колонка. То значение, которое установлено в колонке общей видимости, является значением по умолчанию для видимости по ролям.
Видимость по ролям может принимать три значения: либо для данной роли элемент будет невидимым (1); либо будет виден всегда, не зависимо от того, какой флаг выставлен в колонке видимости (2); либо флаг видимости по роли будет наследоваться от флага общей видимости (3).
Если пользователю назначены две роли и для одной их них указан флажок, а для другой нет, то будет работать стандартное правило системы 1С:Предприятие 8 – действие пользователю разрешено, если оно разрешено в одной из ролей.
Иногда бывает необходимо сразу менять командный интерфейс в нескольких Подсистемах . В платформе 1C:Предприятие 8 существует сервисный инструмент, который позволяет редактировать командный интерфейс сразу нескольких Подсистем .
Данный инструмент вызывается из контекстного меню корневого узла ветки Подсистемы .


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


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