Как правильно добавить новый документ в 1С:Бухгалтерия 3.0, созданный копированием типового

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Промышленность, строительство и АПК
← На главную

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

Регистрация документа в подсистеме печати БСП

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

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

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

Также важно убедиться, что на форме создана группа (обычно это подменю), в которую БСП будет динамически выводить кнопки. В свойстве Имя этой группы часто указывается ПодменюПечать. Если мы забыли перенести или правильно настроить этот элемент формы, кнопки не появятся, даже если регистрация прошла успешно.

Устранение проблемы «пустого списка» документов

Если после создания документов программно или вручную вы открываете список, но он оказывается абсолютно пустым, хотя данные в базе точно есть — причина, скорее всего, кроется в механизмах прав доступа и RLS (Record Level Security). Разберем эту ситуацию по шагам:

Анализ ролей и прав доступа. При копировании типового документа новый объект не наследует вхождения в типовые роли (кроме полных прав). Выясним, какие роли должны быть назначены:

Ограничение на уровне записей (RLS). Это самая коварная причина. В типовых конфигурациях многие запросы динамических списков автоматически дополняются условиями по организациям, подразделениям или складам. Проанализируем шаблоны ограничений в ролях. Если документ не включен в соответствующие механизмы проверки прав БСП (например, через параметры сеанса или специальные регистры), система может отсекать все записи, считая, что у пользователя нет на них прав.

Настройка динамических списков и журналов

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

Рассмотрим порядок действий для исправления:

  1. Откроем форму списка нового документа.
  2. Перейдем к свойствам основного реквизита формы (обычно это Список типа ДинамическийСписок).
  3. Убедимся, что в поле Основная таблица указан наш новый документ: Документ.ОтчетПроизводстваЗаСменуПитание.
  4. Если используется произвольный запрос, проверим текст запроса на наличие жестких ссылок на имена таблиц старого документа.

Также не забудем про Журналы документов. Если мы хотим, чтобы наш документ появлялся в общем журнале документов производства, необходимо зайти в дерево метаданных, найти нужный журнал (например, ЖурналДокументов.ДокументыПоПроизводству) и на вкладке Состав отметить наш новый документ. После этого нужно настроить графы журнала, чтобы данные (дата, номер, сумма, организация) корректно отображались в общем списке.

Интеграция с другими подсистемами БСП

Чтобы документ стал «полноценным» гражданином системы, нужно проверить еще несколько точек соприкосновения с БСП. Рассмотрим их подробнее:

Подсистема заполнения объектов. Если мы хотим, чтобы работали кнопки «Заполнить» или заполнение на основании других документов, объект нужно зарегистрировать в модуле ЗаполнениеОбъектовПереопределяемый.ПриОпределенииОбъектовСКомандамиЗаполнения. Это позволит системе понять, какие алгоритмы заполнения доступны для данного типа документа.

Функциональные опции. Проанализируем свойства скопированного документа. Если исходный документ ОтчетПроизводстваЗаСмену был привязан к функциональной опции (например, ИспользоватьПроизводство), то и наш новый документ унаследует эту связь. Если в настройках программы данная опция будет выключена, наш документ исчезнет из интерфейса. Рекомендуем проверить вкладку «Использование» в свойствах документа и убедиться, что состав функциональных опций соответствует бизнес-логике вашего решения.

Версионирование. Для того чтобы пользователи могли видеть историю изменений (кто и что поменял в документе), нужно включить наш документ в состав подписок на события, отвечающих за версионирование. Посмотрим на список подписок из исходного сообщения: ПодпискаНаСобытие.ЗаписатьВерсиюДокумента. Нам нужно убедиться, что наш документ указан в качестве Источника для этой подписки.

Итоговый алгоритм действий

Подводя итог, при копировании сложного типового документа в БП 3.0, выполним следующие шаги:

  1. Выполним глобальный поиск по конфигурации по имени исходного документа, чтобы найти все упоминания в «Переопределяемых» модулях.
  2. Зарегистрируем документ в УправлениеПечатьюПереопределяемый для вывода кнопок печати.
  3. Проверим вхождение документа в Журналы документов.
  4. Настроим права доступа и проверим работу RLS (если список пуст).
  5. Проверим настройки Динамического списка на формах (Основная таблица).
  6. Добавим документ в Подписки на события (установка номера, версионирование, проведение, регистрация в планах обмена).

Такой системный подход позволит избежать ошибок «недоработки» и обеспечит стабильную работу нового функционала в рамках типовой конфигурации.

← На главную