Книга знаний

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

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

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

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


 

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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