ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(Форма, ГруппаДляКнопкиЗапрета, ЗаголовокКнопкиЗапрета, Объект);
//
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Подсистема запрета редактирования ключевых реквизитов объектов.
ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
// Обработчик подсистемы запрета редактирования реквизитов объектов.
ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);
КонецПроцедуры
В одном из занятий курса Настройка и доработка прав доступа, профилей пользователей и RLS в типовых конфигурациях рассматривается работа с подсистемой БСП “Запрет редактирования реквизитов объектов”. На конкретном примере тренер реализовывает запрет редактирования ряда полей и табличной части “Товары” на форме документа “План продаж”.
Напомним, что для реализации запрета редактирования данных формы нужно выполнить ряд действий, среди которых:
- Подключение документа к подсистеме БСП
Общий модуль ЗапретРедактированияРеквизитовОбъектовПереопределяемый
Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами()
Процедура ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты) Экспорт //++ НЕ ГОСИС ОбменДаннымиУТУП.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); Объекты.Вставить(Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолноеИмя(), "ПолучитьБлокируемыеРеквизитыОбъекта"); … //-- НЕ ГОСИС //++ изменения Объекты.Вставить(Метаданные.Документы.ПланПродаж.ПолноеИмя(), "ПолучитьБлокируемыеРеквизитыОбъекта"); //-- изменения КонецПроцедуры
- Добавление в модуле менеджера документа функции ПолучитьБлокируемыеРеквизитыОбъекта(), где следует перечислить имена реквизитов формы, объекта и табличных частей, которые предполагается запретить для редактирования.
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт Результат = Новый Массив; Результат.Добавить("Статус;ФормаПровестиИЗакрыть,ФормаЗаписать,ФормаПровести"); Результат.Добавить("НачалоПериода;УстановитьИнтервал"); Результат.Добавить("ОкончаниеПериода"); Результат.Добавить("Сценарий"); Результат.Добавить("ВидПлана"); Результат.Добавить("Товары;ТоварыПоПериодам"); Возврат Результат; КонецФункции
Вопрос
Добрый день! Как заблокировать доступ не к табличной части целиком, а к отдельной колонке табличной части? Например: Товары.Номенклатура.
Ответ тренера
Добрый день! Для блокировки редактирования отдельной колонки табличной части, например, колонки “Номенклатура”, нужно исправить код функции ПолучитьБлокируемыеРеквизитыОбъекта() на следующий:
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт Результат = Новый Массив; Результат.Добавить("Статус;ФормаПровестиИЗакрыть,ФормаЗаписать,ФормаПровести"); Результат.Добавить("НачалоПериода;УстановитьИнтервал"); Результат.Добавить("ОкончаниеПериода"); Результат.Добавить("Сценарий"); Результат.Добавить("ВидПлана"); Результат.Добавить("Товары.Номенклатура; ТоварыНоменклатура, ТоварыПоПериодамНоменклатура"); Возврат Результат; КонецФункции
Содержание:
1. Введение и постановка задачи
2. Подключение документа к подсистеме БСП 1
3. Доработки в форме документа
4. Форма для разблокирования реквизитов
1. Введение и постановка задачи.
Рассмотрим пример на конфигурации 1С 8 УТ 11 (аналогично можно сделать и в ЕРП системе 1С и в 1С:Комплексная автоматизация 2), как можно запретить пользователям редактировать ряд реквизитов документа. При этом будет использоваться подсистема БСП.
Итак, на примере сохраненного документа «План продаж по номенклатуре» сделаем блокировку пользователя на возможность редактирования полей формы:
— Статус;
— Начало и окончание периода;
— Сценарий;
— Вид планов;
— ТЧ Товары;
— Кнопки: ПровестиИЗакрыть, Записать, Провести.
При этом должна быть возможность, что при нажатии на специальную кнопку, поля становятся доступными для редактирования.
Данную, задачу можно решить или с помощью ручного изменения обработчиков формы или с использованием подсистемы БСП «Запрет редактирования реквизитов объектов». Рассмотрим именно подсистему БСП.
Имеются преимущества использования БСП:
— в типовых решениях уже реализованы примеры, которые можно взять за основу;
— применяется для других конфигураций на базе БСП.
2. Подключение документа к подсистеме БСП 1
Первое, с чего нужно начать – это подключить новый документ «План продаж по номенклатуре» к подсистеме БСП.
Для этого его нужно прописать в процедуре «ПриОпределенииОбъектовСЗаблокированнымиРеквизитами» общего модуля «ЗапретРедактированияРеквизитовОбъектовПереопределяемый».
В типовой процедуре уже подключено много справочников, но нет документов. Подключаем наш документ, как показано коде на скрине:

Таким образом мы подключили документ 1С:КА 2, ERP системы 1С, 1С 8 УТ 11 к подсистеме БСП.
Далее нужно определить список блокируемых реквизитов.
Для этого в модуле менеджера документа «План продаж по номенклатуре» нужно реализовать специальную функцию «ПолучитьБлокируемыеРеквизитыОбъекта». Функция будет возвращать массив строк с именами реквизитов формы, объекта и табличных частей, которые предполагается запретить для редактирования.
На скрине представлено, как должна выглядеть данная функция:

Теперь обновим конфигурацию, запустим базу и увидим, что реквизиты доступны на редактирование, так как еще необходимо произвести доработки в форме документа.
3. Доработки в форме документа
В 1С:КА 2, ERP системе 1С, 1С 8 УТ 11 в процедуре «ПриСозданииНаСервере» и «ПослеЗаписиНаСервере» необходимо добавить процедуру «ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты»
ПриСозданииНаСервере:

ПослеЗаписиНаСервере:

Также необходимо подключить специальные процедуры для работы с разблокировкой реквизитов и работой формы разблокировки. Примеры данных процедур можно взять за основу, например, из справочника Склады

Добавляем процедуры в модуль формы документа и далее нужно будет разработать форму «РазблокированиеРеквизитов».
4. Форма для разблокирования реквизитов
За основу копируем форму из справочника Склады и вставляем в документ. Далее делаем заготовку с модулем, как на скрине (удаляем ненужный текст):

Также удаляем ненужные реквизиты, оставим только несколько, чтобы переименовать. Получается вот такая заготовка

Далее переименовываем реквизиты и размещаем на форме, в итоге получаем результат:

Далее возвращаемся к модулю формы и дорабатываем наши заготовленные процедуры, которые в итоге будут выглядеть, как на скрине

Теперь можем обновиться и проверить работоспособность механизма. Видим, что у нас заблокированы перечисленные реквизиты, а также кнопки проведения и записи.

Обработку по кнопкам добились конструкцией, которая уже была ранее показана на скрине, где элементы прописаны в поле статус через запятую. Также обратим внимание на «Товары», где добавлено еще «ТоварыПоПериодам», зависимая таблица необходимая в интерактивных действиях.

Для вызова разблокировки обратимся через «Еще» меню формы – «Разрешить редактирование реквизитов»

Откроется наша форма разблокировки редактирования, оставим несколько полей на разблокировку

В результате у нас включились на редактирование выбранные реквизиты и от них — подчиненные (например, кнопки проведения и записи от статуса).

Вот так с помощью подсистемы БСП можно доработать и получить отличный по образцу типовых решений необходимый механизм доступности к полям документа или других объектов метаданных в 1С:КА 2, ERP системе 1С, 1С 8 УТ 11.
Специалист компании ООО «Кодерлайн»
Сергей Омельчук.





