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С в режиме Предприятие, чтобы начать работать, то в первую очередь он видит интерфейс программы.
В программировании под словом интерфейс могут иметь ввиду несколько разных значений. Мы сейчас имеем ввиду «интерфейс пользователя».
Интерфейс пользователя – это все окна, меню, кнопки и прочее, с чем пользователь работает непосредственно в программе.
Дизайн интерфейса – это использованный шрифт, цвет, фоновая картинка и другие элементы декора. Дизайн не влияет на состав интерфейса.
В платформе 1С реализованы два разных механизма интерфейса пользователя, которые используются в разных . В толстом клиенте 1С свой интерфейс, в тонком (и веб клиенте) – свой.
Поговорим сегодня о пользовательском интерфейсе 1С.
Интерфейс 1С
Интерфейс 1С толстого клиента выглядит так.
В него входят:
- Главное меню
- Панели.
Рабочий стол, используемый в некоторых конфигурациях (бухгалтерия, зарплата) не является частью интерфейса 1С, это обработка, которая делается программистом отдельно и которая открывается в 1С на полный экран в момент входа в программу.
В конфигураторе интерфейс 1С находится в ветке Общие/Интерфейсы.
Программист создает интерфейс 1С с определенным названием и при создании пользователя указывает интерфейс 1С по умолчанию этого пользователя.
В свойствах интерфейса 1С есть галочка «Переключаемый». Если интерфейс 1С не переключаемый (галка снята), то его видят все пользователи, даже если им назначен другой интерфейс 1С. При этом пользователь видит оба интерфейса слитые в один.
При добавлении интерфейса 1С Вы видите список панелей. Всегда есть панель по-умолчанию, на ней располагается главное меню программы.
Если добавить еще панели – то они будут отображены панелями (с кнопками).
При добавлении нового интерфейса 1С с нуля открывается конструктор, который помогает сконструировать меню проставив галочки по нужным объектам.
При редактировании существующего меню, пункты добавляются поштучно, так как при повторном вызове конструктора он пересоздает меню с нуля.
При добавлении верхнего пункта меню, в свойствах можно выбрать одно из типовых меню – Файл, Операции, Сервис, Окна, Справка.
После добавления кнопки или пункта меню нужно выбрать выполняемое действие. Действие может быть двух видов.
Если Вы хотите, чтобы в результате нажатия открывался объект 1С – справочник, документ или отчет – нужно нажать кнопку с тремя точками и выбрать нужный объект, а также нужную форму (возможное действие объекта).
Если Вы хотите, чтобы в результате нажатия выполнялась произвольная команда – нажмите лупу. Функция может располагаться в . После выбора модуля в нем будет создана функция обработчик, модуль будет открыт для редактирования.
Управляемый командный интерфейс 1С
В новой версии 1С 8.2 появились новые виды клиентов – .
Интерфейс 1С тонкого клиента выглядит так.
Интерфейс 1С веб клиента выглядит так.
В идеале они одинаковы, и, как видно, сильно отличаются от интерфейса 1С толстого клиента.
Он теперь состоит не только из меню и панелей, а из:
1) Список разделов учета
2) Навигации по выбранному разделу
3) Команд на выполнение в текущем разделе
4) Формы для выполнения текущей операции.
Для формирования интерфейса 1С управляемого клиента больше не используется «Интерфейсы», он формируется сложно, на основании множества настроек, сделанных в конфигурации.
Дело в том, что теперь интерфейс 1С является единым для всех пользователей и при этом динамическим, работающим в зависимости от набора прав пользователя и доступных ему для выполнения команд.
Также можно сказать, что он формируется на основе , поэтому его также называют командный интерфейс 1С.
Подсистемы 1С
Основой управляемого командного интерфейса 1С является список разделов учета. Например – деньги и товары, два раздела учета.
В конфигурации за разделы учета отвечает объект 1С Подсистемы, который находится в ветке Общие/Подсистемы 1С.
Создав подсистему 1С, в нужных справочниках и документах, на закладке Подсистемы 1С в конструкторе объекта Вы можете включить их в эту подсистему 1С. Это значит, что они относятся к этому разделу учета. Объекты могут быть включены в несколько подсистем 1С.
21. Управляемый интерфейс.
Хотя управляемый командный интерфейс в 1с появился уже довольно давно, и информации о нем в интернете предостаточно я возьму на себя смелость еще раз написать про него. 1с в концепции управляемого интерфейса постаралась отойти от того что программист визуально рисует экранные формы документов, справочников и отчетов. Теперь это делается декларативно: описываете что, в каком порядке, в скольких колонках должно отображаться на экране, а система сама решает, как нарисовать ту или иную форму. Нужно заметить, что это относиться не только к формам, а ко всему интерфейсу вцелом. Такая декларативность интерфейса призвана облегчить переносимость системы, действительно конфигурация, написанная на управляемых формах, может запускаться как в тонком клиенте, так и в веб браузере - веб клиенте, таким чином у нас получается кросплатформенная среда, где с одной базой могут работать клиенты на разных операционных системах виндовс, линукс, макос.… Кроме того данный подход используется в версии 8.3 где к десктопным системам добавились еще и мобильные системы на базе андроида от Гугла и iOS от Еппла. Не смотря на некоторые ограничения по обэктам доступным при програмировании для мобильных клиентов концепция отсается тойже. Таким чином програмируя для мобильной платформы мы етот же код можем использовать и для десктопных систем. Внешний вид программы следующий:
Как видно интерфейс сейчас состоит из 4 основных частей:
- список разделов учета
- команды доступные к выполнению в выбранном разделе
- Навигация по разделу, который вы выбрали
- текущая форма (например, список документов, или список элементов справочника)
Также есть еще всплывающие сообщения такого вида или такого интерфейс у меня стоит украинский, так что не удивляйтесь незнакомым словам:-).
Теперь интерфейс программы формируется динамически, в зависимости от контекста, прав пользователя, доступных команд.
Подсистемы 1с
Подсистемы 1с являются основой командного интерфейса. Про это нужно помнить и логику работы конфигурации строить вокруг подсистем. Объекты конфигурации могут принадлежать сразу нескольким подсистемам. При этом некоторые подсистемы могут быть служебными и в интерфейсе пользователя не отображаться. Например, справочник «Контрагенты» может принадлежать и подсистеме «Закупки» и подсистеме «Продажи».
Статья продолжает цикл статей «Первые шаги в разработке на 1С».
Начиная с версии 8.2 в платформе 1С, параллельно к классическому обычному многооконному интерфесу, был разработан совершенно новый интерфейс, который получил название Управляемый интерфейс. Именно он позволил организовать работу с информационной базой в веб-браузере.
В данной статье представлено знакомство с управляемым интерфейсом со стороны пользователя.
Применимость
В этой статье рассматривается Управляемый интерфейс конфигурации, разработанной на платформе 1C 8.3.4.482. Следует отметить, что сегодня Управляемый интерфейс, разработанный на платформе «1С:Предприятие» редакции 8.2, считается устаревшим и рекомендуется использовать его следующую версию, которая получила название «Такси». Но старый вариант управляемого интерфейса никуда не делся, и чтобы в дальнейшем не возникло путаницы с терминологией, платформа редакции 8.3 стала классифицировать интерфейсы по вариантам: вариант «Версия 8.2» (старый) и вариант «Такси» (новый).
Интерфейс «Такси» является более удобным и эргономичным, он гораздо проще в освоении начинающим пользователям. С точки зрения разработки прикладных решений управляемый интерфейс «Версии 8.2» и «Такси» практически не отличаются друг от друга. Главное отличие наблюдается в пользовательском режиме, но и оно не столь кардинально, как может показаться на первый взгляд. Поэтому рекомендуем ознакомиться с этой информацией.
Управляемый интерфейс
Для начала опишем, как в общем виде выглядит конфигурация с использованием управляемого интерфейса:
- доступ к главному меню и ряд служебных сервисных команд выведены в Верхнюю командную панель и располагаются там же, где выводится заголовок приложения;
- чуть ниже располагается Панель разделов , которая имеет различные варианты отображения (картинки, надписи или картинки и надписи). Каждому разделу в конфигурации соответствует свой объект Подсистема и, кроме того, обязательным элементом в панели разделов является Рабочий стол ;
- слева в каждом разделе может располагаться Панель навигации с ссылками для открытия определенных окон (в том числе форм списков различных документов и справочников). Команды панели навигации можно сортировать по группам;
- под Панелью разделов располагается Панель действий , которая содержит команды по созданию объектов (элементов справочников, документов), а также запуску отчетов, обработок, открытию каких-то служебных окон (например, для записи констант);
- в основной части приложения, которая называется Рабочей областью , отображается окно текущего выбранного элемента. Вызываемое окно занимает всю эту область. При смене окон они замещают друг друга. Открытие отдельных независимых окон (которые можно двигать как угодно) возможно при удержании клавиши Shift. Такие окна открываются как еще один элемент панели задач операционной системы.
Создание новых элементов справочников и документов рекомендуется без использования списков (из Панели действий ).
Это связано с тем, что при работе на тонких каналах связи для открытия списка потребуется какое-то дополнительное время.
Для оптимизации передаваемых данных любое редактирование объекта (элемента справочника) также осуществляется в отдельном диалоговом окне.
При создании новых объектов появляется соответствующее оповещение (Область оповещения – в правом нижнем углу экрана).
Внизу имеется Панель истории , в которой отображаются последние созданные элементы. При необходимости, с помощью мышки можно вернуться к какому-либо из этих элементов и внести изменения.
Главное меню в командном интерфейсе не горизонтальное, а вертикальное. Оно вызывается по нажатию специальной кнопки слева в Верхней панели. В том числе есть меню Все функции .
Меню Все функции отображается, если установлена специальная галочка Отображать команду все функции в окне Параметры .
В этом же окне можно изменить вид интерфейса, выбрав внешний вид Формы в закладках или Формы в отдельных окнах .
Окно Параметры вызывается из главного меню. Для этого следует последовательно выбрать пункт Сервис , а потом Параметры .
В меню Все функции можно выбрать любой объект, к которому у пользователя есть право просмотра, а также есть доступ к набору стандартных функций.
Хотя перечень объектов, которые можно отобразить на рабочем столе, определяется в конфигураторе, существуют некоторые возможности по индивидуализации Рабочего стола в пользовательском режиме:
- во-первых, отображаемые на Рабочем столе формы зависят от наличия к ним прав доступа;
- во-вторых, есть некоторые возможности по настройке Рабочего стола .
Переключитесь на Рабочий стол и в контекстном меню панели разделов выберите пункт .
Появится окно настройки Рабочего стола . Доступные формы, определенные в конфигураторе, можно распределить по колонкам (всего две колонки), можно часть форм не отображать.
Настройки Рабочего стола хранятся индивидуально для каждого пользователя.
Аналогичные возможности по настройке есть для Панели разделов , Панели навигации и Панели действий . Требуемые окна для настройки вызываются с помощью выбора соответствующего пункта контекстного меню. Вызов самого контекстного меню осуществляется в любой из перечисленных панелей.
В окне настройки Панели разделов можно изменять порядок следования разделов, включать и отключать видимость этих разделов (кнопками добавления и удаления) и управлять режимом отображения (Картинка , Текст или Картинка и текст ).
В окне настройки Панели навигации пользователь может перемещать элементы между группами и внутри групп, удалять и добавлять элементы на Панели навигации . Все сделанные настройки также запоминаются для текущего пользователя.
Настройка Панели действий производится аналогично. Следует еще раз отметить, что пользователь может отобразить на той или иной панели только те элементы конфигурации, к которым у него есть доступ.
Ранее мы уже говорили о существовании Области оповещения (при создании новых объектов) и Панели истории (размеры которой ограниченны).
Кроме того, историю действий с объектами можно посмотреть в специальном окне, которое вызывается нажатием одноименной кнопки слева внизу.
История сохраняется также между сеансами, но количество хранимых записей не более 200. Новые записи вытесняют старые.
Еще одна интересная интерфейсная возможность – навигация по действиям, которые выполнялись в рабочей области. Существуют специальные кнопки, которые позволяют перемещаться вперед и назад по принципу браузера.
Данная навигация работает не только в рамках одного раздела. Справа расположена кнопка, с помощью которой можно вернуться к разным действиям, которые выполнялись ранее.
Данная навигация работает только по формам, которые открывались в рабочей области.
Кроме того, имеется возможность передавать ссылки на определенные элементы. Пользователь, принявший ссылку (например, по почте) может ее открыть.
И 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) Автор=""", ИмяПользователя>" Дата=""", ДатаВремя,"ДФ=dd.MM.yyyy">"/> // <Описание> // > // Описание> //////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ //////////////////////////////////////////////////////////////////////////////// // НА СЕРВЕРЕ //******* СОБЫТИЯ НА СЕРВЕРЕ ******* &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Вставить содержимое обработчика КонецПроцедуры //******* ИНТЕРФЕЙС УДАЛЕННОГО ДОСТУПА ******* //******* БИЗНЕС-ЛОГИКА НА СЕРВЕРЕ ******* //////////////////////////////////////////////////////////////////////////////// // ОБЩИЕ МЕТОДЫ КЛИЕНТА И СЕРВЕРА //////////////////////////////////////////////////////////////////////////////// // НА КЛИЕНТЕ //******* БИЗНЕС-ЛОГИКА НА КЛИЕНТЕ ******* //******* КОМАНДЫ ******* //******* СОБЫТИЯ НА КЛИЕНТЕ ******* //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
Связанные вопросы
В заключение обозначим несколько направлений, о которых полезно подумать при программировании клиент-серверного взаимодействия.- Варианты реализации интерфейса удаленного доступа . Асинхронность, степень детализации...
- Кэширование. В 1С приняли неудачное архитектурное решение, введя кэширование только на уровне вызова методов общих модулей и не предоставив возможности управления (время актуальности, сброс по требованию).
- Неявные серверные вызовы . Не забывайте о технологических особенностях, многие «безобидные» операции на клиенте провоцируют платформу на обращение к серверу.