Книга знаний

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

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

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

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


 

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


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

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

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

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

1. Команда "Запомнить".


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

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

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

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

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

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

2. Команда "Использовать".


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

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

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

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

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


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

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

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

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