Использование функционала БСП в нетиповых объектах
Я Алексей, разработчик 1С в Programming Store. Расскажу, как использовать полезный функционал — инструментарий разработчика «1С:Библиотека стандартных подсистем» (БСП) в своих объектах метаданных. Статья будет полезна при написании собственных объектов метаданных.
Contents
Подключаемые команды
Данные функционал позволяет подключать к объектам команды из БСП. Например: отчет «Движения документа», отчет «Связанные документы», команды печати и т.д.
Форма документа:
В модуль формы документа добавляем следующий код:
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
Форма списка:
Для отображения команд в списке документов, добавляем в модуль формы списка код:
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
Таким образом, для отображения на форме кнопки вызова отчета «Движения документа» никаких дополнительных действий производить не нужно, достаточно подключить подсистему «ПодключаемыеКоманды».
Отчет «Связанные документы»
Для подключения к документу отчета «Связанные документы», кроме действий, выполненных в разделе «Подключаемые команды», необходимо добавить в критерий отбора «СвязанныеДокументы» наш документ:

На вкладке «Состав» необходимо отметить реквизиты, по которым будет строиться отчет «Связанные документы».

Команды печати
Для подключения команд печати необходимо выполнить действия, указанные в разделе «Подключаемые команды» и добавить следующий код.
Модуль менеджера документа:
#Область ПрограммныйИнтерфейс
// Заполняет список команд печати.
//
// Параметры:
// КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ИдентификаторВашейКомандыПечати";
КомандаПечати.Представление = "ПредставлениеВашейКомандыПечати";
КомандаПечати.СписокФорм = "ФормаДокумента,ФормаСписка";
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
// Формирует печатные формы.
//
// Параметры:
// МассивОбъектов - см. УправлениеПечатьюПереопределяемый.ПриПечати.МассивОбъектов
// ПараметрыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыПечати
// КоллекцияПечатныхФорм - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм
// ОбъектыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ОбъектыПечати
// ПараметрыВывода - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыВывода
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ИмяВашегоМакета") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ИмяВашегоМакета",
"СинонимВашегоМакета",
СформироватьПечатнуюФорму(МассивОбъектов),
,
"ПолныйПутьКВашемуМакету");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СформироватьПечатнуюФорму(МассивОбъектов)
ТабличныйДокумент = Новый ТабличныйДокумент;
// формирование и вывод табличного документа
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти
И самое главное, без этого ничего не заработает: в процедуру общего модуля «УправлениеПечатьюПереопределяемый.ПриОпределенииНастроекПечати» добавить наш документ:
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
Настройки.ОбъектыПечати.Добавить(Документы.СвойДокумент);
КонецПроцедуры
Добавление функционала проверки даты запрета изменения
Форма документа
В модуль формы документа добавляем следующий код:
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ДатыЗапретаИзменения
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
// Конец СтандартныеПодсистемы.ДатыЗапретаИзменения
КонецПроцедуры
#КонецОбласти
Подписка на событие «ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента».
Добавляем наш документ в список источников подписки на событие «ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента».
Общий модуль «ДатыЗапретаИзмененияПереопределяемый»
В процедуре «ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения» общего модуля «ДатыЗапретаИзмененияПереопределяемый» добавим наш документ:
Процедура ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных) Экспорт
ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.СвойДокумент", "Дата");
КонецПроцедуры
Версионирование
Модули форм документа и списка
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ВерсионированиеОбъектов
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
КонецПроцедуры
Подписка на событие «ЗаписатьВерсиюОбъекта»
В источники подписки на событие «ЗаписатьВерсиюОбъекта» добавить наш документ.
Определяемый тип «ВерсионируемыеДанные»
Добавить наш документ в определяемый тип «ВерсионируемыеДанные».
Присоединенные файлы
Добавление справочника
Добавить в конфигурацию справочник СвойДокументПрисоединенныеФайлы. Проще всего скопировать существующий справочник, заканчивающийся на «ПрисоединенныеФайлы», переименовать его в соответствии с названием нашего документа и у реквизита «ВладелецФайла» поменять тип на наш документ.
Изменение определяемых типов
В состав определяемых типов «ПрисоединенныйФайл» и «ПрисоединенныйФайлОбъект» добавить справочник СвойДокументПрисоединенныеФайлы, а в тип «ВладелецПрисоединенныхФайлов» — наш документ.
Изменение подписок на события
В список источников подписки на событие «ПереопределитьПолучаемуюФормуПрисоединенногоФайла» включить справочник СвойДокументПрисоединенныеФайлы, в список источников подписки «УстановитьПометкуУдаленияПрисоединенныхФайлов» добавить наш документ.
Comments
So empty here ... leave a comment!