В типовой конфигурации 1С:Бухгалтерия предприятия 3.0 в большинстве списков документов и справочников доступна стандартная команда Изменить выделенные.... Однако при переходе в 1С:Зарплата и управление персоналом 3.1 или 1С:ERP многие специалисты обнаруживают, что в контекстном меню списков и на командных панелях журналов эта возможность отсутствует. Разберем причины такого поведения типовой конфигурации, выясним, где находится встроенный функционал и как быстро добавить вызов группового изменения в нужные формы без снятия конфигурации с поддержки.
Разработчики типовых зарплатных конфигураций намеренно отключают отображение команды группового изменения в списках документов по следующим причинам:
Механизм полностью присутствует в составе конфигурации на уровне Библиотеки стандартных подсистем (БСП). Если пользователю с полными правами требуется выполнить групповую корректировку объектов, запускаем типовую обработку вручную:
Обработка.ГрупповоеИзменениеРеквизитов).В открывшейся форме можно вручную выбрать тип объектов, задать условия отбора для подбора конкретных документов или элементов справочника и указать новые значения реквизитов.
Если требуется предоставить удобный вызов изменения объектов прямо из формы списка (например, при исправлении ошибок после переноса данных), реализуем это с помощью расширения конфигурации. Механизм БСП уже содержит готовый клиентский метод для запуска формы изменения с переданными ссылками.
Проанализируем программный вызов. Клиентская процедура находится в модуле ГрупповоеИзменениеОбъектовКлиент. В метод ИзменитьВыделенные() достаточно передать ссылку на элемент формы — таблицу динамического списка.
Разберем по шагам реализацию через расширение:
ИзменитьВыделенныеОбъекты) и перетаскиваем ее в командную панель и контекстное меню таблицы Список.
&НаКлиенте
Процедура ИзменитьВыделенныеОбъекты(Команда)
ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список);
КонецПроцедуры
При вызове данной процедуры система автоматически определит все выделенные пользователем строки в динамическом списке, проверит их тип и откроет форму обработки ГрупповоеИзменениеРеквизитов с предустановленным фильтром по выбранным объектам.
Чтобы не модифицировать вручную десятки отдельных форм списков, можно реализовать программное создание кнопки в расширении, перехватив общее событие формы ПриСозданииНаСервере:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверяем наличие таблицы "Список" на форме
ЭлементСписка = Элементы.Найти("Список");
Если ЭлементСписка = Неопределено Или ТипЗнч(ЭлементСписка) <> Тип("ТаблицаФормы") Тогда
Возврат;
КонецЕсли;
// Добавляем команду формы
ИмяКоманды = "Расш1_ИзменитьВыделенные";
КомандаФормы = Команды.Добавить(ИмяКоманды);
КомандаФормы.Заголовок = "Изменить выделенные...";
КомандаФормы.Действие = "Расш1_ИзменитьВыделенные";
// Добавляем кнопку на командную панель
ИмяКнопки = "Расш1_КнопкаИзменитьВыделенные";
Кнопка = Элементы.Добавить(ИмяКнопки, Тип("КнопкаФормы"), Элементы.КоманднаяПанельФормы);
Кнопка.ИмяКоманды = ИмяКоманды;
КонецПроцедуры
Рассмотрим важные технические нюансы, которые необходимо учитывать при массовой модификации данных:
РедактированиеРеквизитовОбъектов. Без этой роли открытие формы завершится ошибкой доступа.