Командная панель документа. Как управлять расположением команд в командной панели формы? Почему нет команд формы 1с

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Создание конфигураций 1С: добавляем команду

Продолжаем изучение азов создания конфигураций на 1С.

Вернёмся в конфигуратор и откроем дерево конфигурации:

Где находится форма у обработки

Откроем окно настроек обработки "УдалениеУволенныхСотрудников":

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

На этот раз нас интересует закладка "Формы" - откроем её:

Найдите на этой закладке объект с именем "Форма" - это и есть наше визуальное представление обработки:

Давайте откроем его двойным щелчком:

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

Меняем код на встроенном языке 1С для формы

Ну прежде всего обратим внимание в самый низ открывшегося окна. Там мы найдём две закладки "Форма" и "Модуль".

Закладка "Форма" - это и есть визуальное представление. Сейчас на форме находится всего лишь одна кнопка "Удалить сотрудников".

Закладка "Модуль" - это код на встроенном языке 1С, который содержит процедуры и функции, определяющие поведение формы для пользователя.

Попробуем переключиться на закладку "Модуль":

Здесь присутствует всего одна процедура с именем "УдалитьСотрудников". Очевидно именно она и вызывается при нажатии на кнопку.

Код процедуры сейчас свёрнут - нажмём на плюсик, чтобы развернуть его (не поместился на рисунке справа):

Точно, так и есть. Вот оно место, где выдаётся сообщение о том, что я не стал писать код этой обработки

Изменим этот код следующим образом:

Снова запустим режим 1С:Предприятие (меню "Отладка"->"Начать отладку"), откроем обработку и нажмём кнопку "Удалить сотрудников":

И получим то самое сообщение, которое написали только что:

Закладка "Элементы" у формы

Вернёмся в конфигуратор в нашу форму на закладку "Форма":

Обратите внимание на закладку "Элементы" в верхней части формы. Содержимое этой закладки дублирует визуальное представление формы. Вы читаете ознакомительную версию урока, полноценные уроки находятся . Можно сказать ещё, что всё, что вы видите в визуальной части формы можно найти на закладке "Элементы".

Например, чтобы открыть свойства кнопки "Удалить сотрудников" на форме - найдём эту кнопку на закладке "Элементы" и сделаем на ней двойной щелчок:

Откроется окно со свойствами кнопки:

Давайте установим для кнопки заголовок "БАХ":

Форма теперь будет выглядеть так:

Закладка "Реквизиты" у формы

Теперь перейдём к закладке "Реквизиты":

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

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

Закладка "Команды" у формы

Заключительная закладка, которую мы рассмотрим сегодня это закладка "Команды":

Вообще все команды, которые вы видите на одной из закладок ("Команды формы", "Стандартные команды" и "Глобальные команды"), можно смело перетаскивать на закладку "Элементы" и они "волшебным образом" превратятся в кнопки на форме.

Как вы понимаете, нажатие на эти кнопки, будет приводить к выполнению этих команд.

Ну, например, перейдём на закладку "Стандартные команды" и перетащим на закладку "Элементы" команду "Закрыть":

На форме появилась кнопка закрыть. Запустим 1С:Предприятие (меню "Отладка"->"Начать отладку"), откроем обработку и убедимся, что кнопка работает:


Вернёмся в конфигуратор в форму обработки и перейдём на закладку "Команды формы":

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

Откроем свойства этой команды (двойным щелчком).

Нас интересует прежде всего поле "Действие", нажмите на кнопку с лупой рядом с ним:

Нас перенесло в процедуру "УдалитьСотрудников" в модуле формы. Это означает, эта команда и эта процедура связаны между собой. И выполнение команды (например, при нажатии на кнопку, в которую она превратилась) приведёт к выполнению кода процедуры.

Добавляем новую команду для формы

Давайте создадим ещё одну команду формы. Для этого вернёмся на закладку "Команды формы" и нажмём зелёную кнопку с плюсом:

Откроем её свойства и установим имя "Привет", а затем нажмём на лупу рядом с полем "Действие":

Нас спрашивают какой именно вид обработчика мы хотим создать.

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

Выбираем вариант "НаКлиенте" и нажимаем "ОК":

Нас перенесло в модуль формы в автоматически созданную процедуру "Привет". Теперь эта процедура связана с командой формы "Привет":

Давайте напишем в ней вывод строки привет пользователю:

Но как нам теперь заставить выполнять команду (а значит и процедуру) "Привет"? Для этого вернёмся на закладку "Команды формы" и перетащим наш "Привет" на форму, так как мы это сделали ранее с командой "Закрыть":

На форме появилась ещё одна кнопка. Запустим 1С:Предприятие, откроем обработку и нажмём на кнопку "Привет". Должно получиться вот так:

Вводим от пользователя имя и говорим ему привет

А теперь давайте поставим себе такую задачу. Нужно, чтобы пользователь ввёл своё имя, мы нажали на кнопку и вывелось, например, "Привет, Алексей".

Чтобы мы смогли разместить на форме элементы для ввода данных нам потребуется реквизит формы (закладка "Реквизиты") с которым этот элемент будет связан.
Так как закладка "Реквизиты" у нас практически пустая - создадим новый реквизит.

Переходим на закладку "Реквизиты" и нажимаем зелёную кнопку плюс:

В окне свойств этого реквизита установим имя "Имя" и тип "Строка":

После этого перетащим уже привычным образом реквизит "Имя" на закладку "Элементы":

Ага, на форме появился элемент для ввода строки! Что нам и требовалось

Запустим 1С:Предприятие, откроем обработку и попробуем туда ввести своё имя:

Всё получилось, но вот нажатие на кнопку "Привет" пока работает по-прежнему.

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

Перепишем её таким образом, чтобы к строке "Привет, " добавлялось значение реквизита "Имя", который связан с элементом ввода на форме:

Теперь снова запустим 1С:Предприятие, обработку, введём своё имя и нажмём кнопку "Привет":

То что надо!

Команды, элементы, реквизиты, объект... вы ещё не запутались?

Думаю запутались Спешу вас успокоить, что не стоит переживать по этому поводу. Со временем ситуация прояснится.

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

Итак, форма - это визуальное представление нашей программы: кнопки, надписи, рисунки, списки... да много чего! Всё это ЭЛЕМЕНТЫ формы.

Кнопка - элемент. Надпись - элемент. Поле ввода - тоже элемент

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

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

Вот например.

Кнопка

Очевидно, что кнопка не может быть сама по себе. Когда пользователь нажимает на неё - должно произойти некоторое действо, задуманное программистом.

Это действо и называется командой

Команды бывают встроенные (закладки "Стандартные команды" и "Глобальные команды") и те, что программист придумывает сам (закладка "Команды формы").

Ну встроенные команды - они на то и встроенные. Что их действие придумано уже до нас. Мы можем лишь перетащить эти команды на форму и превратить их в кнопки. К таким командам относится, например, команда закрытия формы. Нам не нужно ничего программировать - достаточно перетащить стандартную команду "Закрыть" на форму и всё

А команда формы - это команда придуманная нами самими. Это та команда, которую мы сами добавили на закладку "Команды формы", затем нашли в её свойствах пункт "Действие", ткнули на него и запрограммировали код на встроенном языке в автоматически созданном обработчике в модуле формы (например, команда "Привет" из этого урока).

Ну в общем вы поняли: команда - это некоторое действие, запрограммированное на языке 1С (или уже встроенное в программу). А кнопка - это визуальный элемент формы, который при своём нажатии запускает связанную с собой команду.

Надпись

Это просто текст на форме. У такого элемента есть свойство "Заголовок", значение которого мы задаём в редакторе и оно отображается в виде текста.

Поле

А вот это уже интересно. Потому что это такой особый элемент, который не сам по себе (как надпись), а обязательно должен быть связан с какими-то данными или по-другому РЕКВИЗИТАМИ (закладка "Реквизиты").

Можно сказать, что реквизит - это переменная формы, которую мы объявляем на закладке "Реквизиты", а элемент связанный с реквизитом ("Поле") это его представление на форме. Но у самого реквизита есть только имя , тип и значение.

Ну вот представьте, что у нас на форме есть поле для ввода числа. Если бы не было реквизитов - как бы мы из кода узнали, какое число ввёл пользователь? Мы бы обратились к элементу ввода по имени и прочитали некоторое его свойство, отвечающее за значение введённое пользователем.

Так вот в 1С так нельзя. Тут (начиная с "управляемых" форм) представление данных отделено от самих данных.

Получается, что элемент ввода - это элемент формы. А число, которое вводит пользователь, хранится не в самом элементе, а в реквизите, который связан с этим элементом.

Ещё раз. Реквизит - это именно данные (строка, число, дата) . Не визуальное представление (надпись с текстом, поле для ввода числа, поле для ввода даты). Визуальным представлением реквизита является как раз элемент формы "Поле".

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

И наоборот. Пользователь вводит на форме значения в элементы ввода (числа, текст, даты) и значения реквизитов также меняются автоматически.

Какие преимущества даёт такое отделение элементов формы от данных (реквизитов)? Большие! Программист создает нужные ему реквизиты (для хранения, отображения и ввода некоторых полей на форме) и пишет программный код работая только с этими реквизитами (данными). Он совершенно не задумывается пока как всё это будет выглядеть на форме. Оно ему и не надо! Он пока пишет только программный код.

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

Ещё пример. Пусть у нас есть реквизит "Возраст" с типом "Число". Этот реквизит хранит только само число, больше ничего. Он не отвечает за то, как будет выглядеть это число, и в каком месте (или на какой закладке) будет располагаться элемент ввода на форме, связанный с этим числом. Реквизит - это только число! Обращаясь к реквизиту мы никак не сможем поменять размер элемента ввода на форме, цвет, видимость... За всё это отвечает не реквизит, а элемент! Меняя реквизит, мы меняем только число, которое отображается в элементе ввода на форме.

В общем: РЕКВИЗИТ - это переменная формы . Поэтому все данные храним в реквизитах (переменных), а для их вывода на форму (или ввода с формы) используем элементы. Именно это отделение логики от представления позволяет 1С с легкостью отображать одни и те же формы на разных клиентах: "толстый", "тонкий", "веб-браузер".

Чтобы обратиться к реквизиту "Возраст" из модуля формы достаточно сразу использовать его имя:

Что такое Объект?

Ну и, наконец, объект. Судя по-тому, что он находится на закладке "Реквизиты" - это тоже реквизит. Всё верно. Но он особенный.

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

Рядом с ним бы появился плюсик и мы могли бы его раскрывать и перетаскивать отдельные его части на форму и они бы также превращались в элементы.

Пройдите тест

Начать тест

1. Форма обработки может содержать

2. Форма у обработки находится на закладке

Печать (Ctrl+P)

Команды формы

1. Общая информация

Действия в форме выполняются с помощью команд формы. Сами команды служат лишь описанием выполняемых действий. Для того чтобы команда стала выполнять свою функцию, она должна быть привязана к элементу формы (типа Кнопка ). Можно выделить несколько групп команд, которые присутствуют в форме:
● Команды, создаваемые разработчиком в процессе проектирования формы. Для них необходимо создавать обработчик непосредственно в модуле формы.
Стандартные команды , которые предоставляются расширением основного реквизита формы и расширениями реквизитов, которые являются списками (например, табличная часть объекта, динамический список, набор записей регистра сведений и т. д.), если с этим реквизитом есть связанный элемент формы.
Глобальные команды – команды, предоставленные глобальным командным интерфейсом. Такие команды могут быть непараметризованными и параметризованными. Параметризованные глобальные команды будут предоставлены форме только в
том случае, если на форме есть источники параметров с соответствующими типами.
Доступность стандартных команд формы и элементов формы определяется свойством Состав команд соответствующего элемента формы.
Команды, которые предоставляет глобальный командный интерфейс (закладка Глобальные команды) , могут быть размещены в любом месте формы, точно так же, как и команды формы.
В свойстве Действие указывается обработчик, который реализует действие, выполняемое командой. Если обработчик не задан, то команда будет недоступна для использования. К выбору в этом поле доступны только процедуры и функции без параметров, которые являются клиентскими
Если команда изменяет данные формы, то следует указать на это установкой свойства Изменяет сохраняемые данные. Тогда при попытке выполнения команды будут выполняться следующие действия:
● Попытка выполнить блокировку основного реквизита формы. Если попытка закончится неудачей – команда не будет выполнена.
● Установлен признака изменения у формы (флаг Модифицированность ).
Если для команды установлено свойство Изменяет сохраняемые данные и форма находится в режиме Только просмотр , то все элементы формы, связанные с этой командой, также будут находиться в состоянии Только просмотр .
Кроме того, исполнение параметризованной глобальной команды, для которой параметр предоставляется реквизитом с установленным свойством Сохраняемые данные , для нового и несохраненного объекта приведет к попытке записать объект. При этом пользователю будет задан вопрос о необходимости записи. Если ответ будет отрицательный – команда не будет выполнена.
ПРИМЕЧАНИЕ . При автоматическом заполнении командных панелей и контекстных меню, для которых указан источник команд, стандартные команды не добавляются, если в данном элементе есть кнопки, добавленные вручную с такими же командами. Данная логика не распространяется на команды, добавляемые из фрагмента глобального командного интерфейса.
Для упрощения разработки различных диалогов в стандартные команды формы добавлены команды Да, Нет, ОК, Отмена, Повторить, Прервать,Игнорировать. Если такая команда добавлена в форму, то при нажатии пользователем этой кнопки будут выполнены следующие действия:
● Для формы, открытой в модальном режиме, выполняется закрытие формы и возвращается соответствующее значение типа КодВозвратаДиалога.
● Для формы, открытой в немодальном режиме, выполняется только закрытие формы.
При формировании имени обработчика выполнения команды будет использоваться свойство команды Имя .
Стандартная команда формы Справка служит для открытия справочной информации по форме/объекту конфигурации. Расположение этой кнопки на командной панели формы определяется свойством ТолькоВоВсехДействиях этой кнопки. Если данное свойство установлено в значение Авто (и для командной панели с автоматическим заполнением), то фактическое расположение будет следующим:
Интерфейс Такси – если у формы или родительского объекта конфигурации имеется справочная информация, то кнопка будет располагаться на командной панели. В противном случае кнопка будет располагаться только в меню Еще .
● Другие интерфейсы – кнопка всегда располагается на командной панели формы.
Функциональные опции – определяет, с какими функциональными опциями связан данный реквизит формы.

2. Особенности применения различных команд

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

Форма = ПолучитьФорму (“Справочник.Контрагенты.ФормаСписка”);
Форма.ВыполнитьПереход(Объект.Ссылка) ;

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

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


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

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

Произвольные общие команды

Для примера рассмотрим, как сделать и настроить все свойства команду “Настроить сканер штрих-кодов” . На торговых предприятиях часто требуется автоматизировать процесс регистрации продаваемого товара. Для этого используются сканеры штрих-кода. Однако технологическая платформа ничего «не знает» об этих устройствах и не имеет средств работы с ними. Следовательно, для работы со сканером штрих-кода требуется подключать специальную программу – драйвер. Для подключения такого драйвера реализована общая произвольная команда Установить сканер штрих-кодов. Установив определенные значения свойств этой команды, разработчик обеспечил ее доступность пользователям.

Произвольная общая команда «Настроить сканер»

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

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

Произвольная подчиненная команда «Печать расходной накладной»

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

Отключение использования стандартных команд

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

Произвольная подчиненная команда «Административный сервис»

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

Размещение по умолчанию в командном интерфейсе для произвольных команд определяется:

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

ВНИМАНИЕ!
Свойство команды Группа обязательно должно быть заполнено. В противном случае возникнет ошибка при обновлении конфигурации базы данных, и обновление не выполнится.

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

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

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

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

Состав допустимых типов параметров для параметризуемой команды определяется ее свойством «Тип параметра команды»

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

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


  • печать ценников на все товары по всем существующим видам цен,
  • печать ценников на все товары по одному виду цен.

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

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

Результате будет добавлена общая команда, и для нее откроется окно свойств и окно редактирования модуля команды.

Свойства и модуль общей произвольной команды

В группе свойств Основные зададим значения свойств команды:


  • Имя – «ПечатьЦенниковТовары»;
  • Синоним – оставим автоматически сформированный синоним;
  • Комментарий – заполнять не будем.

Следующий шаг – выбор категории команды и группы для ее размещения по умолчанию. Наша команда для своего исполнения не требует параметров – она независимая. Команда выполняет действия по обработке данных, хранимых в информационной базе, с целью получения набора ценников, а не изменяет контекст решения какой-либо задачи. Следовательно, для команды установим категорию Панель действий. А в какой группе она будет отображаться? Логичнее всего поместить ее в группу Сервис .
Поэтому для свойства Группа открываем окно со списком групп и выбираем элемент панель действий.Сервис .

ПРИМЕЧАНИЕ
Обратите внимание на свойства Тип параметра команды , Режим использования параметра и изменяет данные – они недоступны для заполнения. Свойства предназначены для описания параметризуемой команды и становятся доступны только при выборе группы с категориями Панель навигации формы или Командная панель формы.

Задание места размещения произвольной общей команды

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

Включение произвольной общей команды в подсистемы

Наша команда доступна пользователям с ролью Администратор за счет установленного свойства роли Устанавливать права для новых объектов. От нас требуется обеспечить ее доступность и для роли Менеджер по ценам.
Как и для других объектов конфигурации, для общей команды настройку доступности можно выполнить в окне редактирования роли.
А можно – в уже открытом окне Дополнительно на закладке Права. В списке Роли выбираем настраиваемую роль и в списке Права устанавливаем право Просмотр для созданной команды

Настройка доступности команды для роли «Менеджер по ценам»

Настройка видимости команды по ролям для произвольной независимой команды выполняется аналогично настройке для стандартных команд – в редакторе командного интерфейса.
Наша команда по умолчанию должна быть видима пользователю с ролью Менеджер по ценам, а от пользователя с ролью Администратор ее необходимо скрыть. Для этого в редакторе командного интерфейса подсистемы Ценообразование снимем флажок общей видимости в колонке Видимость . Это обеспечит нам невидимость команды для всех ролей, в том числе и вновь создаваемых. А для роли Менеджер по ценам явным образом установим флажок в соответствующей колонке.
Сохраним конфигурацию, запустим приложение от имени пользователя Менеджер по ценам и выберем раздел Управление ценами.

Настройка видимости произвольной общей команды

В командном интерфейсе команда Печать ценников товары доступна в разделе Управление ценами (за счет указания принадлежности к подсистеме Ценообразование). Команда размещена в группе Сервис панели действий (за счет указания соответствующего значения свойства Группа).

Таким образом, для произвольной общей независимой команды:

  • размещение в командном интерфейсе по умолчанию определяется значением свойства Группа;
  • включение в раздел командного интерфейса определяется принадлежностью к соответствующей подсистеме;
  • доступность для пользователя определяется значением права Просмотр.

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

Справочная информация по произвольной общей команде

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

Измененное представление команды, подсказка, справка

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

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

Произвольная группа команд «Печать»

Как и для других объектов конфигурации, для объекта Группа команд определены универсальные свойстваИмя, Синоним, Комментарий.
Для определения места размещения группы используется свойство Категория .


Давайте включим произвольную команду печати ценников по виду цен в группу Печать. Для этого в свойстве Группа нашей подчиненной команды установим произвольную группу Командная панель формы.Печать.

Кроме того, для свойства Отображение установим значение Авто

Включение произвольной команды в произвольную группу


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

ПРИМЕЧАНИЕ
В командной панели формы кнопками отображаются команды из группы Важное. Команды остальных групп отображаются в виде подменю.

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

Настройка представления произвольной группы команд


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

Ролям со сброшенным свойством «Просмотр» произвольная команда недоступна


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

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

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

  • Перетащить на панель кнопку
  • Добавить функцию — кнопки
  • В данной функции прописать код на языке 1С, который выполнит требуемые действия.

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

Например, если перетащить просто на форму – будет кнопка, если в группу командной панели – то кнопка командной панели (плоская), а можно перетащить в меню – тогда это будет пункт меню.

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

Стандартные команды 1С

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

Да, и теперь они называются – стандартные команды 1С. Свои стандартные команды 1С есть у справочников, документов, форм и прочих .

Стандартные команды 1С можно отключить у конкретного с помощью галочки «Использовать стандартные команды 1С» в 1С на закладке «Команды 1С».

Владелец команды 1С

Команды 1С находятся во вложенной ветке своего владельца. Например, Справочники/Контрагенты/Команды 1С.

Также есть команды 1С, которые не имеют владельца, так как они являются общими. Такие команды 1С не привязаны к объектам и находятся в ветке Общие/Общие команды 1С.

Параметры команды 1С

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

Например, для справочника Контрагенты, юридический и физический адрес хранятся в связанном регистре Контактные данные. Чтобы перейти в него, необходимо было выбрать меню в форме контрагента(ов) — Перейти/Контактные данные.

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

В свойствах команды 1С возможно указать:

  • Тип параметра команды 1С – тип объекта 1С, который будет использован в качестве параметра, например, справочник Контрагенты
  • Режим использования параметры – нужно одно значение или список (массив).

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

Или просто перетащить команду в список элементов формы.