Книга знаний

1С:Предприятие / v8

v8: Универсальные интерактивные команды для прикладных объектов.

А иногда так хочется добавить какую-нибудь универсальную команду для всех документов или справочников. Но так не хочется ковыряться потом при обновлении с тем, что сотворишь.Автор статьи: TormozIT | Редакторы: KAO111,
Последняя редакция №22 от 06.07.06 | История
URL: http://kb.mista.ru/article.php?id=272

Ключевые слова: универсальные, команды, действия, объекты


 

Идея проста! Используем ввод на основании.


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

Бонус
При обновлении почти никаких забот. Только в случае добавления новых объектов придется доставить для них галочки во вводе на основании.

   Для ввода на основании доступны следующие типы объекты:
  • планы обмена
  • справочники
  • документы
  • планы видов характеристик
  • задачи

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

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

    // Тут удобно передать основание в какой-нибудь отчет или обработку.
    // Но в данном случае мы запоминаем его.
    СохранитьЗначение("БуферОбмена.Ссылка", Основание);

КонецПроцедуры

Открываем модуль формы и добавляем обработчик ПередОткрытием. Он не даст форме открыться.
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    Отказ = Истина;

КонецПроцедуры

Первая команда готова! Аналогично создаем команду "Использовать".
Модуль объекта. Здесь у нас есть только ссылка, на основании которой вызвали команду. Не очень интересно.
Процедура ОбработкаЗаполнения(Основание)
    
    лСсылка = ВосстановитьЗначение("БуферОбмена.Ссылка");
    <Текст программы с использованием ссылки-основания и запомненной ранее ссылки>

КонецПроцедуры

Модуль формы. Хотелось бы получить саму ту форму, из которой вызвали команду. Ведь команду могли вызвать из списка, и ссылка в обработке заполнения нам в таком случае ничего не дает. А вот в модуле формы мы уже можем получить форму-владельца. Вот тут уже можно пофантазировать.
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    Отказ = Истина;
    лСсылка = ВосстановитьЗначение("БуферОбмена.Ссылка");
    <Текст программы с использованием формы-владельца и запомненной ранее ссылки>

КонецПроцедуры


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

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика