Как добавить команду удаления в список регистра сведений, добавленного в расширение 1С?

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

При разработке расширений для типовых конфигураций на платформе 1С:Предприятие 8.3 часто возникает ситуация, когда стандартные команды формы (например, Удалить) не отображаются в командной панели списка. Это поведение платформы зачастую продиктовано настройками прав или спецификой отображения данных в Управляемых формах. Рассмотрим по шагам, как исправить эту проблему и вернуть возможность удалять записи регистра сведений.

Пошаговое руководство по включению команды «Удалить»

Для того чтобы команда удаления стала доступна пользователю в форме списка регистра сведений, необходимо правильно настроить свойства элемента управления Список в дизайнере конфигуратора внутри расширения. Следуйте этой инструкции:

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

После выполнения этих действий команда Удалить появится в списке стандартных команд формы автоматически. Платформа пересчитает доступные методы для таблицы, основываясь на новых настройках свойств, и «поймет», что пользователь имеет право на удаление записей.

Почему стандартная команда может отсутствовать?

Давайте проанализируем, почему 1С изначально скрывает кнопку удаления. Основная причина — инкапсуляция и защита целостности данных. В типовых решениях, таких как Зарплата и Управление Персоналом, многие регистры являются «зависимыми» от документов-регистраторов. Это значит, что запись в регистре не является самостоятельной единицей, а порождена действием пользователя в документе.

Если вы удаляете запись напрямую из регистра, возникает риск появления «битых» данных: документ в системе остается, но его движения (отраженные в регистре) пропадают. Это нарушает логику учета. Поэтому платформа по умолчанию ограничивает возможность удаления, чтобы неопытный пользователь не мог нарушить целостность учетной системы.

Альтернативный программный подход

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

  1. Создайте на форме собственную Команду.
  2. В обработчике команды Нажатие напишите код, который выполняет удаление выбранной строки.

Пример реализации удаления через программный интерфейс:


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

&НаСервере
Процедура УдалитьЗаписьНаСервере(КлючЗаписи)
    НаборЗаписей = РегистрыСведений.ВашРегистр.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(КлючЗаписи.Регистратор); // Если регистр с регистратором
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();
КонецПроцедуры

Важно: всегда проверяйте наличие прав через ПравоДоступа, прежде чем выполнять манипуляции с данными. Программный метод удаления — это более гибкий путь, который позволяет вам добавить дополнительные проверки на возможность удаления, например, запретить удаление записей, созданных типовыми документами.

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

← На главную