Всем добрый день!
"Давным давно, кажется в позапрошлую пятницу" (с), появилась у меня необходимость удалить пару строчек в табличной части одного справочника. Да вот незадача - у данного справочника форма не отображала эту самую табличную часть, поэтому пришлось "колхозить" по-быстрому!
ОБЪЕКТ
Во внешних обработках в качестве объекта можно выбрать в принципе любой объект. При этом на форме появятся соответствующие глобальные команды и команды по-умолчанию.
Вот здесь у нас "классический" объект "Внешняя обработка". При этом никто не мешает нам поменять его на что угодно, например, на справочник "Контрагенты":
У меня тут база новая, поэтому я наглядности ради добавил в справочник только контактную информацию, которая, как всем известно, на форму выводится совсем не в виде табличной части.
Но в нашей внешней обработке никто не мешает нам вывести данную табличную часть на форму и тем самым получить к ней доступ:
В итоге у нас появляется возможность не только посмотреть, но и отредактировать то, чего нет на форме объекта в конфигурации.
КАК ПОЛУЧИТЬ ДОСТУП К ОБЪЕКТУ?
С отображением объекта у нас все отлично, но при открытии обработки в объекте будет находиться новый пустой объект, который мы даже можем записать. Как получить доступ к уже имеющемуся объекту?
Очень просто. Для этого в серверной процедуре или функции модуля формы существует замечательный метод: "ЗначениеВРеквизитФормы".
Т.е. мы можем написать такой вот код, чтобы "загрузить" в объект выбранное значение:
&НаКлиенте
Процедура ВыбратьСсылку(Команда)
ПоказатьВводЗначения(Новый ОписаниеОповещения("ПриВыбореСсылки", ЭтаФорма, ), Объект.Ссылка, "Выберите значение", тип("СправочникСсылка.Контрагенты"));
КонецПроцедуры
&НаСервере
Процедура ПриВыбореСсылки(Рез, Доп) Экспорт
Если Рез = Неопределено Тогда Возврат
Иначе
ЗначениеВРеквизитФормы(Рез.ПолучитьОбъект(), "Объект");
КонецЕсли;
КонецПроцедуры
Ну и "ВыбратьСсылку" - это обработчик команды, а "ПриВыбореСсылки" - оповещение сразу на сервере (раньше, кстати, писать для подобных серверных процедур "Экспорт" было необязательно, но в последнее время правила игры поменялись.
В итоге у нас получилась обработка, которая может запросто позволить нам поменять данные любого объекта. Такой подход открывает множество возможностей для изменения объектов, а универсальности этим возможностям может добавить механизм создания реквизитов управляемой формы, о котором я писал в частности тут.
ЭПИЛОГ
А если кто-то хочет разобраться и с другими механизмами, то добро пожаловать в статьи:
Произвольный отбор при открытии формы любого динамического списка
Таблицы на управляемых формах: создание, расширение, управление
Подбор в управляемой форме - что может быть проще?
Всем добра! Надеюсь, что кто-то сможет почерпнуть для себя из этих статей что-то новое.