Как добавить команду изменения выделенных реквизитов в списки документов 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

В типовой конфигурации 1С:Бухгалтерия предприятия 3.0 в большинстве списков документов и справочников доступна стандартная команда Изменить выделенные.... Однако при переходе в 1С:Зарплата и управление персоналом 3.1 или 1С:ERP многие специалисты обнаруживают, что в контекстном меню списков и на командных панелях журналов эта возможность отсутствует. Разберем причины такого поведения типовой конфигурации, выясним, где находится встроенный функционал и как быстро добавить вызов группового изменения в нужные формы без снятия конфигурации с поддержки.

Почему команда отсутствует в типовых списках ЗУП 3.1?

Разработчики типовых зарплатных конфигураций намеренно отключают отображение команды группового изменения в списках документов по следующим причинам:

  1. Сложная логика взаимосвязи данных: В кадровом и расчетном учете практически каждый документ формирует записи не только в регистрах накопления, но и в периодических регистрах сведений (плановые начисления, кадровые истории сотрудников, стажи, учет права на отпуск) и регистрах расчета. Необдуманное изменение отдельных полей шапки или табличной части в обход кадровых проверок может привести к рассогласованию расчетных баз и нарушению целостности данных.
  2. Ограничения смешанных журналов: В журналах документов (например, «Все начисления» или «Все кадровые документы») отображаются разнородные типы метаданных. Механизм изменения выделенных объектов рассчитан на работу с однотипными объектами конфигурации и не может одновременно применить единый набор реквизитов к разным видам документов.

Где найти групповое изменение реквизитов в пользовательском режиме?

Механизм полностью присутствует в составе конфигурации на уровне Библиотеки стандартных подсистем (БСП). Если пользователю с полными правами требуется выполнить групповую корректировку объектов, запускаем типовую обработку вручную:

  1. Переходим в раздел Администрирование.
  2. Открываем пункт Обслуживание и разворачиваем блок Корректировка данных.
  3. Запускаем команду Групповое изменение реквизитов (обработка Обработка.ГрупповоеИзменениеРеквизитов).

В открывшейся форме можно вручную выбрать тип объектов, задать условия отбора для подбора конкретных документов или элементов справочника и указать новые значения реквизитов.

Как добавить команду «Изменить выделенные» в форму списка через расширение?

Если требуется предоставить удобный вызов изменения объектов прямо из формы списка (например, при исправлении ошибок после переноса данных), реализуем это с помощью расширения конфигурации. Механизм БСП уже содержит готовый клиентский метод для запуска формы изменения с переданными ссылками.

Проанализируем программный вызов. Клиентская процедура находится в модуле ГрупповоеИзменениеОбъектовКлиент. В метод ИзменитьВыделенные() достаточно передать ссылку на элемент формы — таблицу динамического списка.

Разберем по шагам реализацию через расширение:

  1. Создаем расширение конфигурации или открываем существующее.
  2. Добавляем в расширение форму списка нужного документа (или справочника).
  3. Добавляем на форму команду (например, ИзменитьВыделенныеОбъекты) и перетаскиваем ее в командную панель и контекстное меню таблицы Список.
  4. В модуле формы создаем клиентский обработчик команды со следующим кодом:

&НаКлиенте
Процедура ИзменитьВыделенныеОбъекты(Команда)
    ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список);
КонецПроцедуры

При вызове данной процедуры система автоматически определит все выделенные пользователем строки в динамическом списке, проверит их тип и откроет форму обработки ГрупповоеИзменениеРеквизитов с предустановленным фильтром по выбранным объектам.

Универсальное программное добавление кнопки при создании формы

Чтобы не модифицировать вручную десятки отдельных форм списков, можно реализовать программное создание кнопки в расширении, перехватив общее событие формы ПриСозданииНаСервере:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Проверяем наличие таблицы "Список" на форме
    ЭлементСписка = Элементы.Найти("Список");
    Если ЭлементСписка = Неопределено Или ТипЗнч(ЭлементСписка) <> Тип("ТаблицаФормы") Тогда
        Возврат;
    КонецЕсли;
    
    // Добавляем команду формы
    ИмяКоманды = "Расш1_ИзменитьВыделенные";
    КомандаФормы = Команды.Добавить(ИмяКоманды);
    КомандаФормы.Заголовок = "Изменить выделенные...";
    КомандаФормы.Действие = "Расш1_ИзменитьВыделенные";
    
    // Добавляем кнопку на командную панель
    ИмяКнопки = "Расш1_КнопкаИзменитьВыделенные";
    Кнопка = Элементы.Добавить(ИмяКнопки, Тип("КнопкаФормы"), Элементы.КоманднаяПанельФормы);
    Кнопка.ИмяКоманды = ИмяКоманды;
КонецПроцедуры

Ограничения прав и особенности блокировок в базе

Рассмотрим важные технические нюансы, которые необходимо учитывать при массовой модификации данных:

  1. Права доступа: Для использования функционала группового изменения у пользователя должна быть назначена роль БСП РедактированиеРеквизитовОбъектов. Без этой роли открытие формы завершится ошибкой доступа.
  2. Блокировки и транзакции: По умолчанию в обработке группового изменения реквизитов флаг Изменять в транзакции отключен. Если его включить, то при изменении большого массива документов все изменения выполняются в одной неделимой транзакции. Это может вызвать длительные исключительные блокировки таблиц и парализовать работу остальных пользователей базы.
  3. Проведение документов: При изменении реквизитов проведенных документов происходит их повторная запись и перепроведение. Это приводит к установке управляемых блокировок на регистры расчета и накопления по измерениям объекта (организация, период, сотрудники). Рекомендуется выполнять массовые правки во время наименьшей активности пользователей.
← На главную