Подключение БСП к своему документу сводится к трем типам изменений: вызовы подсистем в модулях формы, регистрация объекта в метаданных (подписки на события, определяемые типы, критерии отбора) и строки в переопределяемых общих модулях. Пропустите любой из них — функция молча не заработает. Ниже чек-лист для самых востребованных подсистем: подключаемые команды, печать, «Связанные документы», даты запрета изменения, версионирование и присоединенные файлы.

Примеры даны для БСП 3.x. Имена процедур в переопределяемых модулях со временем меняются, поэтому перед внедрением сверяйтесь с комментариями в модулях вашей версии библиотеки и с документацией по внедрению.

Общая схема подключения

ПодсистемаМодуль формыМетаданныеПереопределяемый модуль
Подключаемые командыДа——
ПечатьЧерез подключаемые командыМакетыУправлениеПечатьюПереопределяемый
Связанные документыЧерез подключаемые командыКритерий отбора СвязанныеДокументы—
Даты запрета измененияДаПодписка на событиеДатыЗапретаИзмененияПереопределяемый
Версионирование объектовДаПодписка, определяемый тип—
Присоединенные файлыПо желаниюСправочник файлов, определяемые типы, подписки—
Подключение БСП к своему документу: объект связывается с модулями библиотеки
Подключение БСП к своему документу: объект связывается с модулями библиотеки

Подключаемые команды: основа для печати и отчетов

Подсистема «Подключаемые команды» выводит в форму команды печати, отчеты («Движения документа», «Связанные документы»), команды заполнения и создания на основании. Без нее остальные подсистемы в форме просто не покажут свои кнопки.

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

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

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

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)

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

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

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

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

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

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

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

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

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

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

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

Форма списка

Код почти такой же, только источником выступает не Объект, а Элементы.Список, и не нужны ПриЧтенииНаСервере и ПослеЗаписи:

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

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

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

Плюс вызов ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект) и процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере, как в форме документа. После этого в форме появляется, например, отчет «Движения документа» — дополнительных действий для него не требуется.

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

Печать подключается в три шага.

1. Модуль менеджера документа — описание команд и формирование печатной формы:

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

// Заполняет список команд печати документа.
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "АктВыполненныхРабот";
	КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

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

// Формирует печатные формы документа.
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктВыполненныхРабот") Тогда
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"АктВыполненныхРабот", НСтр("ru = 'Акт выполненных работ'"),
			ПечатьАкта(МассивОбъектов, ОбъектыПечати), ,
			"Документ.АктРабот.ПФ_MXL_АктВыполненныхРабот");
	КонецЕсли;

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

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

Функция ПечатьАкта возвращает ТабличныйДокумент. Внутри нее для каждого документа запоминайте область вывода через УправлениеПечатью.ЗадатьОбластьПечатиДокумента, тогда при печати пакета работают постраничные настройки и отправка по почте каждого документа отдельно.

2. Макет с именем ПФ_MXL_АктВыполненныхРабот. Префикс ПФ_MXL_ — соглашение БСП, по которому макет появляется в списке макетов печатных форм и его можно переопределить в режиме предприятия.

3. Регистрация объекта. Самый частый пропуск: без него ничего не заработает.

1С
// Общий модуль УправлениеПечатьюПереопределяемый.
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт

	Настройки.ОбъектыПечати.Добавить(Метаданные.Документы.АктРабот);

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

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

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

Отчет строит структуру подчиненности по критерию отбора СвязанныеДокументы:

  1. Откройте критерий отбора СвязанныеДокументы, на вкладке «Данные» добавьте свой документ в состав типов.
  2. На вкладке «Состав» отметьте реквизиты, через которые документ ссылается на другие: «Основание», «Сделка», реквизиты табличных частей.
  3. Проверьте, что подключаемые команды уже добавлены в формы, — кнопка отчета появится сама.

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

Даты запрета изменения

Подсистема не дает менять документы закрытого периода. Подключение:

Форма документа — блокировка формы для запрещенных периодов:

1С
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

Подписка на событие. Добавьте документ в источники подписки, проверяющей дату запрета перед записью документа (в БСП 3.x — ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента). Без подписки форма будет только для просмотра, но программная запись пройдет.

Источник данных для проверки:

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

	ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.АктРабот", "Дата");

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

Если документ формирует движения по регистрам, имеет смысл зарегистрировать и сами регистры с полем Период: тогда запрет сработает и при записи наборов записей в обход документа.

Версионирование объектов

  1. В модули форм документа и списка добавьте ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект) в обработчик ПриСозданииНаСервере.
  2. Включите документ в источники подписки на событие ЗаписатьВерсиюОбъекта.
  3. Добавьте документ в определяемый тип ВерсионируемыеДанные.
  4. В режиме предприятия включите версионирование для этого вида документов в настройках программы.

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

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

  1. Создайте справочник АктРаботПрисоединенныеФайлы. Проще всего скопировать существующий справочник с окончанием ПрисоединенныеФайлы, переименовать и поменять тип реквизита ВладелецФайла на свой документ.
  2. Добавьте справочник в определяемые типы ПрисоединенныйФайл и ПрисоединенныйФайлОбъект, а документ — в ВладелецПрисоединенныхФайлов.
  3. Включите справочник в источники подписки ПереопределитьПолучаемуюФормуПрисоединенногоФайла, а документ — в источники УстановитьПометкуУдаленияПрисоединенныхФайлов.
  4. Проверьте права: роли, которые работают с документом, должны иметь доступ и к справочнику файлов.

После этого команда работы с файлами становится доступна для документа. Гиперссылку «Файлы» или поле предпросмотра в форме можно вывести методами модуля РаботаСФайлами — порядок описан в документации по внедрению вашей версии БСП.

Типичные ошибки

  • Кнопки не появились. В форме нет вызова ПодключаемыеКоманды.ПриСозданииНаСервере или забыт обработчик Подключаемый_ВыполнитьКоманду.
  • Печать не видна. Документ не добавлен в ПриОпределенииНастроекПечати.
  • Запрет срабатывает только в форме. Нет подписки на событие перед записью.
  • Версии не пишутся. Не включено версионирование в настройках программы.
  • Ошибка при добавлении файла. Документ не входит в определяемый тип владельца или у пользователя нет прав на справочник файлов.
  • Изменения пропали после обновления. Правки внесены не в переопределяемые модули, а в служебные модули БСП.

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

Коротко

  • Подключение БСП к своему документу — это модули формы, регистрация в метаданных и переопределяемые модули.
  • Подключаемые команды — фундамент: через них в форму попадают печать и отчеты.
  • Печать не заработает без регистрации в ПриОпределенииНастроекПечати.
  • Для дат запрета нужны и форма, и подписка, и источник данных.
  • Версионирование, кроме кода, требует включения в настройках программы.