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

17.08.21

Разработка - БСП (Библиотека стандартных подсистем)

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

Введение

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

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

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

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

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

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

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

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

 

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

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

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

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

КонецПроцедуры

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

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

 

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

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

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

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

КонецФункции

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

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Заключение

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

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

БСП ЗапретРедактированияРеквизитов ПрисоединенныеФайлы Версионирование

См. также

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1097    PROSTO-1C    0    

12

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    978    PROSTO-1C    4    

10

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В статье рассмотрим пошаговую инструкцию создания дополнительного отчета с фоновым формированием результата.

04.10.2024    1830    MadRave    11    

24

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример отслеживания прогресса фонового выполнения дополнительной обработки с использованием программного интерфейса длительных операций БСП.

10.09.2024    1823    MadRave    1    

17

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1254    n_mezentsev    10    

8

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4105    John_d    10    

52

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5354    PROSTO-1C    12    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. krollzlat 19.08.21 15:25 Сейчас в теме
Не хватает еще даты запрета, печати и кнопки создания на основания(не платформенная).Так же хотел бы порекомендовать создавать отдельные подписки на с нетиповыми источниками вызывающие типовые обработчики.
3. mmustafin 19.08.21 17:01 Сейчас в теме
(1)
, печати и кнопки создания на основания(не платформенная).Так же хотел бы порекомендовать создавать отдельные подписки на с нетиповыми источниками вызывающие типовые обработчики

Дату запрета и создание на основании я описал в статье https://infostart.ru/1c/articles/1494836, подумал излишне дублировать информацию в разных статьях.
2. MiniGrad2014 19.08.21 15:36 Сейчас в теме
Подскажите, пожалуйста, если включил поля своего справочника в подсистему "Запрет редактирования реквизитов", то "Разрешить редактирование реквизитов" по кнопке "Ещё" их не открывает для редактирования?
4. maraty 461 19.08.21 17:11 Сейчас в теме
(2)
Подскажите, пожалуйста, если включил поля своего справочника в подсистему "Запрет редактирования реквизитов", то "Разрешить редактирование реквизитов" по кнопке "Ещё" их не открывает для редактирования?


я в описании пропустил для этой подсистемы важный пункт: "Ищем в конфигурации форму "РазблокированиеРеквизитов" и копируем её в новый справочник.".
Статью поправил.
5. MiniGrad2014 20.08.21 07:32 Сейчас в теме
(4) Я нашёл в УТ 11 такие формы у некоторых справочников и они индивидуальны по реквизитам справочника. Универсальной получается нет, надо скопировать и изменить её под свои реквизиты?
6. maraty 461 25.08.21 09:36 Сейчас в теме
(5) Специально посмотрел, как пример форма "РазблокированиеРеквизитов" справочника "ДоговорыКредитовИДепозитов" полностью универсальна и в ней нет какой либо привязки к реквизитам справочника.
7. MiniGrad2014 25.08.21 09:49 Сейчас в теме
(6) Спасибо! Я смотрел у знакомых справочников, типа номенклатура.
8. MiniGrad2014 25.08.21 09:59 Сейчас в теме
(6) Может что не так сделал, но простое копирование данной формы в мой справочник не открыло элементы для редактирования, а проверка использования вывалилась в ошибку
9. DoctorRoza 03.11.21 14:47 Сейчас в теме
Не совсем понятно, какой тип справочника нужно добавлять в Определяемые типы ПрисоединенныйФайлОбъект и ВладелецПрисоединенныхФайловОбъект? Посмотрел демо БСП (3.1.2.264) в эти ОТ добавляются объект метаданные ***ПрисоединенныеФайлы.
10. Medvedik 16.11.21 21:06 Сейчас в теме
Правильно ли я понимаю, что встроить новый справочник из расширения в подсистему дополнительных реквизитов не получится, т.к. в расширении (по крайней мере при совместимости с 12м релизом) недоступен тип "Характеристика"?
11. user1671810 06.12.21 14:37 Сейчас в теме
Спасибо за статью.Подскажите как убрать верхнюю ссылку на файлы, а то получается эта ссылка на форме 2 раза?
Прикрепленные файлы:
12. maraty 461 20.12.21 10:17 Сейчас в теме
(11) В форме элемента, на закладке "Командный интерфейс", необходимо снять галки Видимость и Автовидимость с ОбщаяКоманда.ПрисоединенныеФайлы в подменю Перейти.
13. maraty 461 20.12.21 19:06 Сейчас в теме
Оставлю в комментарии по поводу предопределенного элемента в справочнике НаборыДополнительныхРеквизитовИСведений.
Лучше это сделать через УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств

Набор = Наборы.Строки.Добавить();
Набор.Имя = "Справочник_Статья_НовыйСправочник";
Набор.Идентификатор = Новый УникальныйИдентификатор("9fe7fb02-a0f0-467d-b1df-5e104d430985");
zabaluev; +1 Ответить
16. zabaluev 464 12.07.23 22:04 Сейчас в теме
(13) Важное замечание. Сейчас уже предопределённых элементов в этом справочнике в типовых конфигурациях уже нет.
14. blaik 21.12.22 13:34 Сейчас в теме
Добрый день! У меня почему то после всех действий по инструкции _Подсистема "Дополнительные реквизиты и сведения", в Администрировании -Дополнительные реквизиты не видно справочник характеристик, хотя с номенклатурой получилось(. КОнфигурация самописная на БСП 3.1.5.317 платформа 8.3.20.2180. Это может быть из-зи того что справочник "Характеристики Номенклатура" подчиненный?
15. korppinen 70 14.03.23 16:44 Сейчас в теме
и любым способом вызвать служебные процедуры для обновления и заполнения справочника (например через обработку, или повысить версию конфигурации или запустить с ключем "/c ЗапуститьОбновлениеИнформационнойБазы").

Этот важный момент я не увидел в документации. Всё сделаете - сам обьект, форму и "ПриПолученииПредопределенныхНаборовСвойств" опишите , но Без "этого" не появлялся объект в справочнике "НаборыДоп.... "

(!) Спасибо, добрый человек.. .

ps минус день из-за того что в документации бсп не было указано что нужно делать обновление инф базы.. - я не увидал по крайней мере, ну и наверное это для кого то очевидно скорее всего что внося предопределенный элемент справочника - ссылка на него оказывается доступна только после обновления инф базы. . Зато теперь оттрасировал бсп реквизиты и сведения))) жесть
Оставьте свое сообщение