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