При разработке в современных конфигурациях на базе 1С:Предприятие 8.3, таких как «Бухгалтерия предприятия 3.0» (БП 3.0), программисты часто сталкиваются с задачей создания нового документа на основе существующего типового функционала. Самый очевидный путь — копирование объекта метаданных. Однако в современных системах, использующих Библиотеку стандартных подсистем (БСП), простого копирования недостаточно. Вы можете обнаружить, что в новом документе не отображается кнопка «Печать», списки документов оказываются пустыми, а сам объект «выпадает» из логики работы программы. Рассмотрим детально, как решить эти проблемы и корректно интегрировать новый документ в систему.
Одной из первых проблем при копировании документа ОтчетПроизводстваЗаСмену является отсутствие кнопок печати на форме, даже если в модуле менеджера скопирован весь код процедур формирования печатных форм. В БСП механизмы печати работают через программную регистрацию объектов. Проанализируем, какие шаги необходимо предпринять:
УправлениеПечатьюПереопределяемый. В нем расположена процедура ПриОпределенииОбъектовСКомандамиПечати. Нам необходимо добавить наш новый документ Документ.ОтчетПроизводстваЗаСменуПитание в массив СписокОбъектов. Без этого действия система просто не будет опрашивать модуль менеджера нашего документа на предмет наличия команд печати.ДобавитьКомандыПечати(КомандыПечати). Проверим, что внутри этой процедуры идентификаторы команд и заголовки соответствуют нашему новому объекту.ПриСозданииНаСервере, обязательно должен присутствовать вызов стандартного механизма БСП. Проверим наличие следующего кода:
// В процедуре ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
Также важно убедиться, что на форме создана группа (обычно это подменю), в которую БСП будет динамически выводить кнопки. В свойстве Имя этой группы часто указывается ПодменюПечать. Если мы забыли перенести или правильно настроить этот элемент формы, кнопки не появятся, даже если регистрация прошла успешно.
Если после создания документов программно или вручную вы открываете список, но он оказывается абсолютно пустым, хотя данные в базе точно есть — причина, скорее всего, кроется в механизмах прав доступа и RLS (Record Level Security). Разберем эту ситуацию по шагам:
Анализ ролей и прав доступа. При копировании типового документа новый объект не наследует вхождения в типовые роли (кроме полных прав). Выясним, какие роли должны быть назначены:
ЧтениеДокументовПроизводства или ДобавлениеИзменениеДокументовПроизводства. Нам необходимо либо добавить наш документ в эти роли (через расширение или в основной конфигурации), либо создать новую роль для этого документа и включить ее в профили групп доступа.Ограничение на уровне записей (RLS). Это самая коварная причина. В типовых конфигурациях многие запросы динамических списков автоматически дополняются условиями по организациям, подразделениям или складам. Проанализируем шаблоны ограничений в ролях. Если документ не включен в соответствующие механизмы проверки прав БСП (например, через параметры сеанса или специальные регистры), система может отсекать все записи, считая, что у пользователя нет на них прав.
При копировании формы списка часто копируется и настройка Динамического списка. Разберем типичную ошибку: в свойстве Основная таблица динамического списка на форме может остаться ссылка на исходный документ (например, Документ.ОтчетПроизводстваЗаСмену). В этом случае список может отображать данные «старого» документа или работать некорректно.
Рассмотрим порядок действий для исправления:
Список типа ДинамическийСписок).Основная таблица указан наш новый документ: Документ.ОтчетПроизводстваЗаСменуПитание.Также не забудем про Журналы документов. Если мы хотим, чтобы наш документ появлялся в общем журнале документов производства, необходимо зайти в дерево метаданных, найти нужный журнал (например, ЖурналДокументов.ДокументыПоПроизводству) и на вкладке Состав отметить наш новый документ. После этого нужно настроить графы журнала, чтобы данные (дата, номер, сумма, организация) корректно отображались в общем списке.
Чтобы документ стал «полноценным» гражданином системы, нужно проверить еще несколько точек соприкосновения с БСП. Рассмотрим их подробнее:
Подсистема заполнения объектов. Если мы хотим, чтобы работали кнопки «Заполнить» или заполнение на основании других документов, объект нужно зарегистрировать в модуле ЗаполнениеОбъектовПереопределяемый.ПриОпределенииОбъектовСКомандамиЗаполнения. Это позволит системе понять, какие алгоритмы заполнения доступны для данного типа документа.
Функциональные опции. Проанализируем свойства скопированного документа. Если исходный документ ОтчетПроизводстваЗаСмену был привязан к функциональной опции (например, ИспользоватьПроизводство), то и наш новый документ унаследует эту связь. Если в настройках программы данная опция будет выключена, наш документ исчезнет из интерфейса. Рекомендуем проверить вкладку «Использование» в свойствах документа и убедиться, что состав функциональных опций соответствует бизнес-логике вашего решения.
Версионирование. Для того чтобы пользователи могли видеть историю изменений (кто и что поменял в документе), нужно включить наш документ в состав подписок на события, отвечающих за версионирование. Посмотрим на список подписок из исходного сообщения: ПодпискаНаСобытие.ЗаписатьВерсиюДокумента. Нам нужно убедиться, что наш документ указан в качестве Источника для этой подписки.
Подводя итог, при копировании сложного типового документа в БП 3.0, выполним следующие шаги:
УправлениеПечатьюПереопределяемый для вывода кнопок печати.Такой системный подход позволит избежать ошибок «недоработки» и обеспечит стабильную работу нового функционала в рамках типовой конфигурации.