Как сделать команду в 1с

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

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

Добавление поля ввода управляемой формы

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

Добавление кнопки управляемой формы

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

Добавление надписи (декорации) управляемой формы

Комментарии (0)

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

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

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


Как же тогда быть?

Итак ранее кнопка представляла собой отдельный элемент формы.

Чтобы кнопка при нажатии что-то делала, нужно было для нее подключить функцию языка 1С. Такая функция называется — обработчик.

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

В новой версии 1С 8.2 появился новый объект 1С – команда. Он реализует как раз этот принцип.

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

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

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


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

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

Расширяем сознание дальше. Итак, суть команды 1С – это действие. Оно может быть запрограммировано на языке 1С.

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

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


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

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

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


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


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

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

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

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

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


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

Есть расположенная на форме новая команда, как в 1С её вызвать программно из модуля формы? Перерыл интернет,не нашел четкого объяснения или кода.

Просто вызови процедуру команды, подставив в параметры команду или кнопку.

Для управляемой формы:

Процедура ВызватьКоманду() ИмяНужнойКоманды = “ИмяКомандыФормы”; // Тут просто имя команды как в конфигураторе. НужнаяКоманда = ЭтаФорма.Команды.Найти(ИмяНужнойКоманды); // Находим команду на форме КакаяТоКоманда(НужнаяКоманда); // Вызываем нужную команду, подставив ее в параметры КонецПроцедуры

Процедура КакаяТоКоманда(Команда) // Тут код твоей команды. КонецПроцедуры

Для обычной формы Процедура ВызватьКоманду() ИмяНужнойКнопки = “ИмяКнопкиФормы”; // Тут просто имя команды как в конфигураторе. НужнаяКнопка = ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки[ИмяНужнойКнопки]; КакаяТоКоманда(НужнаяКнопка); // Вызываем нужную команду, подставив ее в параметры КонецПроцедуры

Процедура КакаяТоКоманда(Кнопка) // Тут код твоей команды. КонецПроцедуры


Общие команды — механизм платформы, предназначенный для описания часто используемых команд в конфигурации 1С 8.3.

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

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

Настройка и свойства общей команды в 1С

Добавить новую команду и настроить общую форму достаточно просто, рассмотрим этот процесс подробнее:


Получите 267 видеоуроков по 1С бесплатно:

  • Бесплатный видео самоучитель по 1С Бухгалтерии 8.3 и 8.2;
  • Самоучитель по новой версии 1С ЗУП 3.0;
  • Хороший курс по 1С Управление торговлей 11.
  • Группа — расположение будущей команды на интерфейсе.
  • Тип параметра команды — определяет набор объектов, в котором будет отображаться будущая команда.
  • Режим использования параметра — задает возможность передать в качестве параметра команды одно или несколько значений.
  • Изменяет данные — если галка установлена, то при выполнение команды форма будет пересчитана с сервера.
  • Модуль команды — обработчик выполнения команды, выполняется на клиенте.

Пример модуля команды:

Здесь ПараметрКоманды — объект, вызывающий команду. А в ПараметрыВыполненияКоманды структура, в которой описан Источник (вызываемая Форма), Окно (ОкноКлиентскогоПриложения), Уникальность, указывает, искать ли уже открытую форму или нет.

Группы команд 1С

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


Видео по общим командам от Павла Чистова:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

Расширение управляемой формы для справочника (Managed form extension for catalogs) — Прочитать (Read)
Синтаксис: Прочитать()
Описание: Обновляет объект управляемой формы.
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент.


Похожие FAQ

Еще в этой же категории

Заполнение списка значений в элементе поле выбора на форме 9
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 8
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Как обновить динамический список или реквизит на форме клиента? 6
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Есть расположенная на форме новая команда, как в 1С её вызвать программно из модуля формы? Перерыл интернет,не нашел четкого объяснения или кода.

Просто вызови процедуру команды, подставив в параметры команду или кнопку.

Для управляемой формы:

Процедура ВызватьКоманду() ИмяНужнойКоманды = “ИмяКомандыФормы”; // Тут просто имя команды как в конфигураторе. НужнаяКоманда = ЭтаФорма.Команды.Найти(ИмяНужнойКоманды); // Находим команду на форме КакаяТоКоманда(НужнаяКоманда); // Вызываем нужную команду, подставив ее в параметры КонецПроцедуры

Процедура КакаяТоКоманда(Команда) // Тут код твоей команды. КонецПроцедуры

Для обычной формы Процедура ВызватьКоманду() ИмяНужнойКнопки = “ИмяКнопкиФормы”; // Тут просто имя команды как в конфигураторе. НужнаяКнопка = ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки[ИмяНужнойКнопки]; КакаяТоКоманда(НужнаяКнопка); // Вызываем нужную команду, подставив ее в параметры КонецПроцедуры

Процедура КакаяТоКоманда(Кнопка) // Тут код твоей команды. КонецПроцедуры

В принципе, можешь и не заморачиваться с кнопками и командами, если они не обрабатываются в коде. Хотя что мешает вообще вынести код команды в процедуру и вызывать ее сколько влезет? 🙂

подобный код не прокатывает. Может кто подскажет куда смотреть?!

(1) суть в том что общая команда имеет свойства к каким объектам она относится. Если она не относится к вашему объекту, то чего хотеть?

(2) хм.. если бы так. берем в качестве примера общую команду "СтруктураПодчиненности" - к каким объектам она относится?!

(4) Логично..но я специально привел пример с командой "СтруктураПодчиненности" - у нее нет никаких параметров

(6) Ок, убедили - в Ваше случае есть, в моем случае нету. Я понимаю о чем Вы говорите, но у меня это параметр пустой (смотрю типовую УТ11)

Могу еще цитату с ИТС по подсистеме привести:
"Прежде всего необходимо принять решение по поводу списка документов, справочников и ПВХ для которых требуется выводить отчет Структура подчиненности. Затем задать список типов выбранных объектов в типах параметра общей команды СтруктураПодчиненности"

(3) не каждую команду можно запихнуть.
В УТ 11.3 у данной команды нет оснований и судя по коду она через БСП добавляется!

(27) я изучил этот код до того как написать на форум :) Принцип там похож на (15) т.е. есть клиентская команда в модуле формы и далее по списку.

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

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

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

А у параметрически добавленных общих команд на форме имя именно такое выводит, в стиле "ОбщаяКоманда.СтруктураПодчиненности"?

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

(18) Пробовал - не работает (если создать кнопку без указания "ИмяКоманды" - она даже на форме не отразится)

(20) Странно. Ведь и в СП написано и на твоем скриншоте из (13) видно, что для общих команд в "ИмяКоманды" должна быть пустая строка.

(23) Странно не то слово.
Если в конфигураторе "кинуть" общую команду на форму то в поле "ИмяКоманды" будет заполнено как "ОбщаяКоманда.СтруктураПодчиненности" - в отладчике "ИмяКоманды" будет пустое. но когда программно создаешь кнопку и оставляешь "имя команды" пустое то эффект ровно такой же как если в конфигураторе создать кнопку и не указать "Имя команды". ее просто не будет не форме.

а СП я тоже читал. но видимо чего то не понял, или понял но нет, или не так понял.

(24) Ну, в СП буквально следующее: "Если кнопка связана не с командой формы , содержит пустую строку" (для свойства "ИмяКоманды").
А ты точно пробовал указывать имя команды БЕЗ точки после "ОбщаяКоманда"? Ну и если у тебя общая команда все-таки параметризирована, то не получится, я думаю.
ЗЫ. Ну а на том, что в конфигураторе пишет - можно особо не зацикливаться. Для ТЗ на форме, например, конфигуратор в колонке тип показывает "Таблица значений", хотя на самом деле тип - "ДанныеФормыКоллекция". Т.е. они скорее своими соображениями удобства руководствовались, чем точностью отображения сути.

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

НоваяКоманда = Команды.Добавить(" КакаяТоКоманда ");
НоваяКоманда.Действие = "ОбщаяКоманда.КакаяТоОбщаяКоманда";

Добавляем кнопку на форму:
НоваяКнопкаОбщейКоманды = Элементы.Добавить("НоваяКнопкаОбщейКоманды", Тип("КнопкаФормы"), ЭтаФорма.КоманднаяПанель);
НоваяКнопкаОбщейКоманды.ИмяКоманды ;

(31) Пробовал: команда добавляется, но она никак не связана с общей командой и по нажатию ничего не происходит. Платформа 8.3.10.2580. Могу выгрузить банальную dt-шку, где 1 справочник, 1 команда и 1 форма, но я думаю каждый такую сможет сделать)

(32) получилось решить проблему следующим образом, через гиперссылку (вставьте свою):

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

Кнопка = Элементы.Добавить("МояКнопка", Тип("ДекорацияФормы"), ЭтотОбъект);
Кнопка.Заголовок = Новый ФорматированнаяСтрока(НСтр("ru = 'Сотрудники.'"). "e1cib/command/Справочник.Команда.СотрудникиВнештатные");

TuneSoft; assa; Drivingblind; fvr2000; ivakop; kondratevsergey1985; maxim_1c; Boneman; + 8 – Ответить

Читайте также: