Заранее оговорюсь, что статья для самых маленьких, чтобы в меня не кидали помидоры гуру и сенсеи кодинга.
Итак, допустим, перед нами стоит задача: сделать удобное групповое изменение реквизитов справочников и документов в своей собственной конфигурации.
Поводом для написания статьи стала вот эта публикация: //infostart.ru/public/395374/
Я подумал, а зачем городить такое, если можно взять вполне себе успешный образец и встроить себе в свою конфигурацию. Например, как это сделано по фен-шую в "Бухгалтерии предприятия 3.0", где мы можем выделить элементы списка, нажать правую кнопку мыши и в контекстном меню выбрать пункт "Изменить выделенные".
Приступим!
1. Допустим, что мы уже создали конфигурацию на управляемых формах в платформе 8.3.
2. Создаем (или перетаскиваем из примера в этой публикации) общий модуль "ГрупповоеИзменениеОбъектовКлиент" (в свойствах модуля поставить флажок напротив "Клиент"):
////////////////////////////////////////////////////////////////////////////////
// Подсистема "Групповое изменение объектов".
//
////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Используется для открытия формы группового изменения объектов.
//
// Параметры:
// Список - ТаблицаФормы - элемент формы списка, содержащий ссылки на изменяемые объекты.
//
Процедура ИзменитьВыделенные(Список) Экспорт
ВыделенныеСтроки = Список.ВыделенныеСтроки;
ПараметрыФормы = Новый Структура("МассивОбъектов", Новый Массив);
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Продолжить;
КонецЕсли;
ТекущаяСтрока = Список.ДанныеСтроки(ВыделеннаяСтрока);
Если ТекущаяСтрока <> Неопределено Тогда
ПараметрыФормы.МассивОбъектов.Добавить(ТекущаяСтрока.Ссылка);
КонецЕсли;
КонецЦикла;
Если ПараметрыФормы.МассивОбъектов.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'"));
Возврат;
КонецЕсли;
ОткрытьФорму("Обработка.ГрупповоеИзменениеРеквизитов.Форма", ПараметрыФормы);
КонецПроцедуры
#КонецОбласти
3. Перетаскиваем обработку из моей демо-конфигурации в свою. Т.е. открываете два окна конфигуратора, в моей базе хватаете мышью обработку "ГрупповоеИзменениеРеквизитов" и перетаскиваете ее в свою базу. См. рис.
4. Открываем форму списка любого справочника или документа. В моем случае это будет "Контрагенты".
В числе колонок списка обязательно должно быть поле с именем "Ссылка", которое содержит ссылку на объект справочника или документа. Если у вас Список типа "Динамический список" с произвольным запросом, убедитесь, что в числе выбираемых полей есть поле "Ссылка". В обычном же динамическом списке это поле будет присутствовать.
5. Теперь нам нужно добавить команду для того, чтобы пользователь мог производить изменение реквизитов.
На вкладке команды создаем новую команду и процедуру (выполняемую на клиенте). Содержание процедуры такое:
&НаКлиенте
Процедура ИзменитьВыделенные(Команда)
ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список);
КонецПроцедуры
Далее будет рисунок как все должно выглядеть. И чуть ниже подробнее, если кто не поймет.
6. Чтобы эту команду пользователь мог вызывать из контекстного меню списка, нам надо это меню добавить.
И теперь мы хватаем мышью нашу команду и перетаскиваем в контекстное меню, чтобы получилось как ниже на рисунке:
Вот и все. Сохраняем и обновляем конфигурацию.
По сути все просто - мы добавили в форму списка команду (а именно - засунули ее в контекстное меню), которая вызывает процедуру общего модуля, который в свою очередь открывает обработку редактирования реквизитов.
А еще проще сказать - мы взяли и позаимствовали у 1С их типовой вариант.
Мне кажется, такой вариант удобнее чем в публикации, которую я упомянул выше.
Само собой, что это можно внедрить не только в форму списка справочника, но и документа.