Каталог решений - Подключение нового справочника к подсистемам БСП (дополнительные реквизиты, файлы, запрет редактирования)

Подключение нового справочника к подсистемам БСП (дополнительные реквизиты, файлы, запрет редактирования)

Подключение нового справочника к подсистемам БСП (дополнительные реквизиты, файлы, запрет редактирования)

В наличии

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

Категория:

Описание

Введение

Описание в дополнение к ранее опубликованной статье Пример создания документа с движениями в ERP 2.5.7. Пример создавал на базе ERP 2.5.7, но не затрагивая какие-либо объекты ERP,  в этот раз пример без использования расширения. 

В данном примере дано описание, как добавить произвольный справочник к подсистемам:

  • Версионирование
  • Запрет редактирования реквизитов
  • Дополнительные реквизиты и сведения
  • Присоединенные файлы
  • Подключаемые отчеты и обработки

Всё, что я написал, описано в документации к БСП, но тут живой пример, без лишней информации.

Встраивание справочника в подсистемы

Добавляем условный справочник с именем "Статья_НовыйСправочник".

Состав реквизитов простой, например поля Организация, Дата и Номер.

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

 

Подсистема "Версионирование"

Включаем СправочникСсылка.Статья_НовыйСправочник в определяемый тип "ВерсионируемыеДанные" и СправочникОбъект.Статья_НовыйСправочник в определяемый тип "ВерсионируемыеДанныеОбъект"

В модуле менеджера определяем процедуру

  Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
  
  КонецПроцедуры

В форме объекта и форме списка  в событии "ПриСозданииНаСервере" добавляем вызов

  ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
  

 

Подсистема "Запрет редактирования реквизитов"

Ищем в конфигурации форму "РазблокированиеРеквизитов" и копируем её в новый справочник.

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

  Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
  	
  	Результат = Новый Массив;
  	Результат.Добавить("Дата");
  	Результат.Добавить("Номер");
  	Результат.Добавить("Код");
  	Результат.Добавить("Организация");
  	Результат.Добавить("Наименование");
  	
  	Возврат Результат;
  
  КонецФункции
  

В общий модуль "ЗапретРедактированияРеквизитовОбъектовПереопределяемый" в процедуру "ПриОпределенииОбъектовСЗаблокированнымиРеквизитами" вносим наш справочник

  Объекты.Вставить(Метаданные.Справочники.Статья_НовыйСправочник.ПолноеИмя(), "ПолучитьБлокируемыеРеквизитыОбъекта");

Добавляем реквизит формы "ДоступностьРеквизитов" с типом Булево.

В форму справочника в событие "ПриСозданииНаСервере" вносим вызов

  ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);
  

А также в событие "ПослеЗаписиНаСервере"

  ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);

 

Подсистема "Дополнительные реквизиты и сведения"

Скопируем в наш справочник табличную часть "ДополнительныеРеквизиты" с любого другого объекта.

Для того, чтобы со справочником и его доп. реквизитами корректно работали отчеты и динамические списки, пропишем в характеристиках справочника необходимые данные:

Виды характеристикЗначения характеристик
Поле ключаПоле отбора видовЗначение отбора видовПоле пути к даннымПоле объектаПоле видаПоле значения
Справочник.НаборыДополнительныхРеквизитовИСведений.ТабличнаяЧасть.ДополнительныеРеквизитыСправочник.Статья_НовыйСправочник.ТабличнаяЧасть.ДополнительныеРеквизиты
СвойствоСсылкаСправочник_Статья_НовыйСправочник СсылкаСвойствоЗначение
Справочник.НаборыДополнительныхРеквизитовИСведений.ТабличнаяЧасть.ДополнительныеРеквизитыРегистрСведений.ДополнительныеСведения
СвойствоСсылкаСправочник_Статья_НовыйСправочник ОбъектСвойствоЗначение

 

Для подсистемы нужны две подписки на события ОбработкаПроверкиЗаполнения и ПередУдалением. В типовых конфигурациях они уже существуют (ДополнительныеРеквизитыОбработкаПроверкиЗаполнения и СвойстваПередУдалениемСсылочногоОбъекта соответственно), где определен СправочникОбъект. Поэтому необходимости создавать новые нет.

Расширим тип определяемого типа "ВладелецДополнительныхСведений" нашим справочником (СправочникСсылка.Статья_НовыйСправочник).

Необходимо в справочник "НаборыДополнительныхРеквизитовИСведений" добавить новый предопределенный элемент

ИмяСправочник_Статья_НовыйСправочник
НаименованиеСправочник "Новый справочник для статьи"

и любым способом вызвать служебные процедуры для обновления и заполнения справочника (например через обработку, или повысить версию конфигурации или запустить с ключем "/c ЗапуститьОбновлениеИнформационнойБазы").

  УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств();
  УправлениеСвойствамиСлужебный.УстановитьЗначениеПризнакаИспользуется();
  

 

Остается только в форму справочника добавить вызовы функционала подсистемы

В событие "ПриСозданииНаСервере"

  УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма);
  

В событие "ПриЧтенииНаСервере"

  УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);

В событие "ПередЗаписьюНаСервере"

  УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);

В событие "ПриОткрытии"

  УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);

В событие "ОбработкаОповещения"

  Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
  	ОбновитьЭлементыДополнительныхРеквизитов();
  	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
  КонецЕсли;
  

И добавить служебные процедуры

  &НаКлиенте
  Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
  	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
  КонецПроцедуры
  
  &НаКлиенте
  Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
  	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
  КонецПроцедуры
  
  &НаСервере
  Процедура ОбновитьЭлементыДополнительныхРеквизитов()
  	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
  КонецПроцедуры
  

 

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

 

Подсистема "Присоединенные файлы"

Для работы этой системы нам в первую очередь нужно создать новый справочник "Статья_НовыйСправочникПрисоединенныеФайлы". Функционал подсистемы будет искать справочник с именем "Имя справочника владельца" + "ПрисоединенныеФайлы".

В качестве шаблона для справочника скопируйте любой из существующих с постфиксом "ПрисоединенныеФайлы" и измените тип реквизита ВладелецФайла на свой справочник. В моем случае это будет "СправочникСсылка.Статья_НовыйСправочник".

Если вы создаете свой справочник, то как правило префикс будет совпадать и никаких сложностей нет. Но если вы хотите подключить присоединенные файлы к уже существующему типовому объекту и при этом для нового справочника необходимо ввести префикс, то необходимо дополнительно скорректировать в общем модуле процедуру РаботаСФайламиПереопределяемый.ПриОпределенииСправочниковХраненияФайлов

Например, мы добавляем присоединенные файлы к типовому документу "ЧекККМ", а префикс для добавляемых объектов у нас "Статья_", тогда в этом случае нам нужно прописать следующий код:

  Если ТипВладелецФайла = Тип("ДокументСсылка.ЧекККМ") Тогда
  	ИменаСправочников.Вставить("Статья_ЧекККМПрисоединенныеФайлы", Истина);
  КонецЕсли;
  

Далее необходимо в определяемые типы "ВладелецПрисоединенныхФайлов", "ПрисоединенныйФайл" добавить тип СправочникСсылка на справочник "Статья_НовыйСправочник" и в определяемый тип "ПрисоединенныйФайлОбъект" добавить  тип СправочникОбъект.Статья_НовыйСправочник.

Для контроля удаления справочника и подчиненных файлом создадим подписку или отредактируем существующую (УстановитьПометкуУдаленияПрисоединенныхФайлов)

ИмяСтатья_УстановитьПометкуУдаленияПрисоединенныхФайлов
ИсточникСправочникОбъект.Статья_НовыйСправочник
СобытиеПередЗаписью
ОбработчикРаботаСФайлами.УстановитьПометкуУдаленияПрисоединенныхФайлов

 

И остается только доработать форму справочника.

1. Добавить реквизит формы "ПараметрыРаботыСФайлами" с  типом Произвольный.

2. Добавить вызовы функционала подсистемы из событий формы.

В событие "ПриСозданииНаСервере" 

  ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
  ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
  РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
  

В событие "ПриОткрытии" 

  РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);

В событие "ОбработкаОповещения" 

  РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);

А также служебные команды

   
  &НаКлиенте
  Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
  	 РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
  КонецПроцедуры
  
  &НаКлиенте
  Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
  	 РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
  КонецПроцедуры
  
  &НаКлиенте
  Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
  	 РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
  КонецПроцедуры
  
  &НаКлиенте
  Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
  	 РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
  КонецПроцедуры
  

 

Подсистема "Подключаемые отчеты и обработки" (Подключаемые команды)

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

В форме объекта добавляем реквизит формы "ПараметрыПодключаемыхКоманд" с типом Произвольный, а так же вызовы:

В событие "ПриСозданииНаСервере"

  ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);

В событие "ПриЧтенииНаСервере"

  ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);

В событие "ПриОткрытии"

  ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);

В событие "ПослеЗаписи"

  Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
  	МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
  	МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
  КонецЕсли;
  

И служебные команды

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

 

Заключение

Эта статья — компиляция документации БСП (на самом деле, просто для примера реализовал данный пример в ERP 2.5.7, предварительно снятой с поддержки). 

Т.к. меняются определяемые типы и предопределенные элементы, то это потребует внимательности при последующих обновлениях конфигурации.

has been added to your cart:
Оформление заказа