Подключение БСП к своему документу сводится к трем типам изменений: вызовы подсистем в модулях формы, регистрация объекта в метаданных (подписки на события, определяемые типы, критерии отбора) и строки в переопределяемых общих модулях. Пропустите любой из них — функция молча не заработает. Ниже чек-лист для самых востребованных подсистем: подключаемые команды, печать, «Связанные документы», даты запрета изменения, версионирование и присоединенные файлы.
Примеры даны для БСП 3.x. Имена процедур в переопределяемых модулях со временем меняются, поэтому перед внедрением сверяйтесь с комментариями в модулях вашей версии библиотеки и с документацией по внедрению.
Общая схема подключения
| Подсистема | Модуль формы | Метаданные | Переопределяемый модуль |
|---|---|---|---|
| Подключаемые команды | Да | — | — |
| Печать | Через подключаемые команды | Макеты | УправлениеПечатьюПереопределяемый |
| Связанные документы | Через подключаемые команды | Критерий отбора СвязанныеДокументы | — |
| Даты запрета изменения | Да | Подписка на событие | ДатыЗапретаИзмененияПереопределяемый |
| Версионирование объектов | Да | Подписка, определяемый тип | — |
| Присоединенные файлы | По желанию | Справочник файлов, определяемые типы, подписки | — |

Подключаемые команды: основа для печати и отчетов
Подсистема «Подключаемые команды» выводит в форму команды печати, отчеты («Движения документа», «Связанные документы»), команды заполнения и создания на основании. Без нее остальные подсистемы в форме просто не покажут свои кнопки.
Форма документа
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбластиФорма списка
Код почти такой же, только источником выступает не Объект, а Элементы.Список, и не нужны ПриЧтенииНаСервере и ПослеЗаписи:
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедурыПлюс вызов ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект) и процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере, как в форме документа. После этого в форме появляется, например, отчет «Движения документа» — дополнительных действий для него не требуется.
Команды печати
Печать подключается в три шага.
1. Модуль менеджера документа — описание команд и формирование печатной формы:
#Область ПрограммныйИнтерфейс
// Заполняет список команд печати документа.
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "АктВыполненныхРабот";
КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецПроцедуры
// Формирует печатные формы документа.
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктВыполненныхРабот") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
"АктВыполненныхРабот", НСтр("ru = 'Акт выполненных работ'"),
ПечатьАкта(МассивОбъектов, ОбъектыПечати), ,
"Документ.АктРабот.ПФ_MXL_АктВыполненныхРабот");
КонецЕсли;
КонецПроцедуры
#КонецОбластиФункция ПечатьАкта возвращает ТабличныйДокумент. Внутри нее для каждого документа запоминайте область вывода через УправлениеПечатью.ЗадатьОбластьПечатиДокумента, тогда при печати пакета работают постраничные настройки и отправка по почте каждого документа отдельно.
2. Макет с именем ПФ_MXL_АктВыполненныхРабот. Префикс ПФ_MXL_ — соглашение БСП, по которому макет появляется в списке макетов печатных форм и его можно переопределить в режиме предприятия.
3. Регистрация объекта. Самый частый пропуск: без него ничего не заработает.
// Общий модуль УправлениеПечатьюПереопределяемый.
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
Настройки.ОбъектыПечати.Добавить(Метаданные.Документы.АктРабот);
КонецПроцедурыТип элементов списка ОбъектыПечати указан в комментарии к процедуре в вашей версии БСП: в разных версиях туда передаются объекты метаданных или менеджеры. Проверьте, как зарегистрированы типовые документы, и сделайте так же.
Отчет «Связанные документы»
Отчет строит структуру подчиненности по критерию отбора СвязанныеДокументы:
- Откройте критерий отбора
СвязанныеДокументы, на вкладке «Данные» добавьте свой документ в состав типов. - На вкладке «Состав» отметьте реквизиты, через которые документ ссылается на другие: «Основание», «Сделка», реквизиты табличных частей.
- Проверьте, что подключаемые команды уже добавлены в формы, — кнопка отчета появится сама.
Если не отметить реквизиты, отчет откроется, но покажет документ в одиночестве.
Даты запрета изменения
Подсистема не дает менять документы закрытого периода. Подключение:
Форма документа — блокировка формы для запрещенных периодов:
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ДатыЗапретаИзменения
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
// Конец СтандартныеПодсистемы.ДатыЗапретаИзменения
КонецПроцедурыПодписка на событие. Добавьте документ в источники подписки, проверяющей дату запрета перед записью документа (в БСП 3.x — ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента). Без подписки форма будет только для просмотра, но программная запись пройдет.
Источник данных для проверки:
// Общий модуль ДатыЗапретаИзмененияПереопределяемый.
Процедура ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных) Экспорт
ДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, "Документ.АктРабот", "Дата");
КонецПроцедурыЕсли документ формирует движения по регистрам, имеет смысл зарегистрировать и сами регистры с полем Период: тогда запрет сработает и при записи наборов записей в обход документа.
Версионирование объектов
- В модули форм документа и списка добавьте
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект)в обработчикПриСозданииНаСервере. - Включите документ в источники подписки на событие
ЗаписатьВерсиюОбъекта. - Добавьте документ в определяемый тип
ВерсионируемыеДанные. - В режиме предприятия включите версионирование для этого вида документов в настройках программы.
Четвертый шаг про код не говорит, поэтому его забывают чаще всего. Версии хранятся в информационной базе и занимают место: для документов с большими табличными частями настраивайте срок хранения.
Присоединенные файлы
- Создайте справочник
АктРаботПрисоединенныеФайлы. Проще всего скопировать существующий справочник с окончаниемПрисоединенныеФайлы, переименовать и поменять тип реквизитаВладелецФайлана свой документ. - Добавьте справочник в определяемые типы
ПрисоединенныйФайлиПрисоединенныйФайлОбъект, а документ — вВладелецПрисоединенныхФайлов. - Включите справочник в источники подписки
ПереопределитьПолучаемуюФормуПрисоединенногоФайла, а документ — в источникиУстановитьПометкуУдаленияПрисоединенныхФайлов. - Проверьте права: роли, которые работают с документом, должны иметь доступ и к справочнику файлов.
После этого команда работы с файлами становится доступна для документа. Гиперссылку «Файлы» или поле предпросмотра в форме можно вывести методами модуля РаботаСФайлами — порядок описан в документации по внедрению вашей версии БСП.
Типичные ошибки
- Кнопки не появились. В форме нет вызова
ПодключаемыеКоманды.ПриСозданииНаСервереили забыт обработчикПодключаемый_ВыполнитьКоманду. - Печать не видна. Документ не добавлен в
ПриОпределенииНастроекПечати. - Запрет срабатывает только в форме. Нет подписки на событие перед записью.
- Версии не пишутся. Не включено версионирование в настройках программы.
- Ошибка при добавлении файла. Документ не входит в определяемый тип владельца или у пользователя нет прав на справочник файлов.
- Изменения пропали после обновления. Правки внесены не в переопределяемые модули, а в служебные модули БСП.
Собственные объекты я проектирую сразу с подключением нужных подсистем БСП: так пользователи получают привычное поведение, как в типовых документах. Если нужна такая разработка или аудит уже сделанной, посмотрите разработку конфигураций 1С и доработку 1С.
Коротко
- Подключение БСП к своему документу — это модули формы, регистрация в метаданных и переопределяемые модули.
- Подключаемые команды — фундамент: через них в форму попадают печать и отчеты.
- Печать не заработает без регистрации в
ПриОпределенииНастроекПечати. - Для дат запрета нужны и форма, и подписка, и источник данных.
- Версионирование, кроме кода, требует включения в настройках программы.




