Top.Mail.Ru
26 февраля в 17:00 МСК
онлайн-митап
Как мы перенесли игру «Герои меча и магии 3» на 1С

Использование функционала БСП в нетиповых объектах

Я Алексей, разработчик 1С в Programming Store. Расскажу, как использовать полезный функционал — инструментарий разработчика «1С:Библиотека стандартных подсистем» (БСП) в своих объектах метаданных. Статья будет полезна при написании собственных объектов метаданных.

Подключаемые команды

Данные функционал позволяет подключать к объектам команды из БСП. Например: отчет «Движения документа», отчет «Связанные документы», команды печати и т.д.

Форма документа:

В модуль формы документа добавляем следующий код:

#Область ОбработчикиСобытийФормы

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

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

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

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

#КонецОбласти  

#Область ОбработчикиКомандФормы

// СтандартныеПодсистемы.ПодключаемыеКоманды

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
    
    ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
    
КонецПроцедуры

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

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

#КонецОбласти

Форма списка:

Для отображения команд в списке документов, добавляем в модуль формы списка код:

#Область ОбработчикиСобытийФормы

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

#КонецОбласти

#Область ОбработчикиКомандФормы

// СтандартныеПодсистемы.ПодключаемыеКоманды

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
    
    ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
    
КонецПроцедуры

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

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

#КонецОбласти

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

Отчет «Связанные документы»

Для подключения к документу отчета «Связанные документы», кроме действий, выполненных в разделе «Подключаемые команды», необходимо добавить в критерий отбора «СвязанныеДокументы» наш документ:

Критерий отбора «Связанные документы». Вкладка «Данные».

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

Критерий отбора «Связанные документ». Вкладка «Состав»

Команды печати

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

Модуль менеджера документа:

#Область ПрограммныйИнтерфейс

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт 
    
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор                  = "ИдентификаторВашейКомандыПечати";
    КомандаПечати.Представление                  = "ПредставлениеВашейКомандыПечати";
    КомандаПечати.СписокФорм                     = "ФормаДокумента,ФормаСписка";
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    
КонецПроцедуры 

#КонецОбласти

#Область ОбработчикиСобытий

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов        - см. УправлениеПечатьюПереопределяемый.ПриПечати.МассивОбъектов
//  ПараметрыПечати       - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыПечати
//  КоллекцияПечатныхФорм - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм
//  ОбъектыПечати         - см. УправлениеПечатьюПереопределяемый.ПриПечати.ОбъектыПечати
//  ПараметрыВывода       - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыВывода
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ИмяВашегоМакета") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ИмяВашегоМакета",
            "СинонимВашегоМакета",
            СформироватьПечатнуюФорму(МассивОбъектов),     
            ,
            "ПолныйПутьКВашемуМакету"); 
    КонецЕсли;
    
КонецПроцедуры 

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция СформироватьПечатнуюФорму(МассивОбъектов)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    
    // формирование и вывод табличного документа
    
    Возврат ТабличныйДокумент;
    
КонецФункции

#КонецОбласти

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

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

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

Форма документа

В модуль формы документа добавляем следующий код:

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    // СтандартныеПодсистемы.ДатыЗапретаИзменения
    ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
    // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения
    
КонецПроцедуры

#КонецОбласти

Подписка на событие «ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента».

Добавляем наш документ в список источников подписки на событие «ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента».

Общий модуль «ДатыЗапретаИзмененияПереопределяемый»

В процедуре «ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения» общего модуля «ДатыЗапретаИзмененияПереопределяемый» добавим наш документ:

Процедура ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных) Экспорт
    
    ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.СвойДокумент", "Дата");
    
КонецПроцедуры

Версионирование

Модули форм документа и списка

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

Подписка на событие «ЗаписатьВерсиюОбъекта»

В источники подписки на событие «ЗаписатьВерсиюОбъекта» добавить наш документ.

Определяемый тип «ВерсионируемыеДанные»

Добавить наш документ в определяемый тип «ВерсионируемыеДанные».

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

Добавление справочника

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

Изменение определяемых типов

В состав определяемых типов «ПрисоединенныйФайл» и «ПрисоединенныйФайлОбъект» добавить справочник СвойДокументПрисоединенныеФайлы, а в тип «ВладелецПрисоединенныхФайлов» — наш документ.

Изменение подписок на события

В список источников подписки на событие «ПереопределитьПолучаемуюФормуПрисоединенногоФайла» включить справочник СвойДокументПрисоединенныеФайлы, в список источников подписки «УстановитьПометкуУдаленияПрисоединенныхФайлов» добавить наш документ.

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar