При разработке и доработке конфигураций на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда в конфигураторе четко прописаны связи между документами для ввода на основании, но в пользовательском режиме (в режиме «Предприятие») нужные пункты в меню «Создать на основании» отсутствуют. Эта проблема особенно актуальна для сложных конфигураций, таких как БГУ 2.0, где механизмы интерфейса управляются не только метаданными, но и программным кодом библиотек.
Разберем подробно все возможные причины этой проблемы и способы их решения, начиная от самых простых настроек в конфигураторе и заканчивая особенностями программного кода.
Рассмотрим самую распространенную причину, с которой столкнулся автор темы. Даже если вы указали документ-источник в списке «Является основанием для» и настроили «Вводится на основании» в документе-приемнике, кнопка может не появиться. Проанализируем настройки свойств документа в конфигураторе.
Выясним причину: в объекте метаданных существует раздел «Команды». Для того чтобы платформа автоматически сформировала команды создания на основании и добавила их в интерфейс, должно быть активно свойство Использовать стандартные команды. Если эта галочка снята, документ не будет автоматически включен в стандартные группы команд, такие как «Создать на основании», даже при наличии всех связей.
Что нужно сделать:
Использовать стандартные команды.Если со стандартными командами всё в порядке, но меню всё равно не содержит нужных пунктов, проанализируем настройки конкретной формы документа-основания. В управляемых формах 1С существует возможность гибко настраивать состав команд для каждой формы отдельно.
Рассмотрим последовательность действий для проверки командного интерфейса:
Проанализируем ситуацию с точки зрения безопасности. Система 1С автоматически скрывает из интерфейса любые команды, к которым у текущего пользователя нет доступа. Если документ ПКО должен создаваться на основании Регистрации проживания, но у пользователя нет права на Интерактивное добавление документа ПКО, команда «Создать на основании» просто не будет отображена.
Нам необходимо проверить права в конфигураторе:
Просмотр, Ввод на основании и Интерактивное добавление.В современных конфигурациях (БГУ, ERP, КА) широко используются Функциональные опции. Если документ или подсистема, к которой он относится, привязаны к функциональной опции, которая выключена в настройках программы, то документ исчезнет из всех интерфейсных меню.
Допустим, вы добавили новый документ в подсистему учета проживания. Если в пользовательском режиме в «Настройках параметров учета» не стоит галочка «Вести учет проживания», то даже правильно настроенная связь «на основании» не заставит команду появиться. Проверьте свойство Функциональные опции у ваших документов в конфигураторе.
В конфигурациях вроде БГУ 2.0 механизм «Создать на основании» часто переопределяется программно через БСП. В этом случае платформенные механизмы дополняются логикой в общих модулях.
Посмотрим на пример того, как это может быть реализовано в коде. В системе может существовать общий модуль СозданиеНаОснованииПереопределяемый. Нам нужно найти процедуру, которая отвечает за формирование списка команд.
Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Документы.РегистрацияПроживания);
КонецПроцедуры
Если ваш документ-основание не зарегистрирован в подобных процедурах (если это предусмотрено логикой вашей конфигурации), стандартное меню может не заполниться автоматически. Также обратите внимание на модуль менеджера документа-приемника. Там может быть процедура ДобавитьКомандыСозданияНаОсновании, которая программно управляет видимостью кнопок в зависимости от типа операции или других условий.
Иногда команда отображается, но не срабатывает, или её доступность ограничена логикой в модуле объекта. Разберем работу обработчика ОбработкаЗаполнения. Этот метод вызывается при создании документа на основании.
Рассмотрим пример кода в модуле документа-приемника:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.РегистрацияПроживания") Тогда
// Логика заполнения реквизитов
ЗаполнитьПоРегистрации(ДанныеЗаполнения);
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
// Заполнение из структуры
КонецЕсли;
КонецПроцедуры
Хотя этот код напрямую не влияет на видимость кнопки в меню, ошибки в нем или отсутствие проверки нужного типа данных могут привести к тому, что при нажатии кнопки ничего не произойдет или система выдаст ошибку, что может быть воспринято пользователем как отсутствие функции.
Если вы добавляете функционал ввода на основании через расширение конфигурации, помните о критически важном нюансе: свойство «Состав командного интерфейса» заимствованных форм. Если вы заимствовали форму документа-основания в расширение до того, как настроили связи «на основании» в основной конфигурации или в самом расширении, форма в расширении может хранить «старый» снимок интерфейса.
Решение для расширений:
В редких случаях, когда все настройки верны, права даны, а функциональные опции включены, виной всему может быть локальный кэш конфигурации на компьютере пользователя. Платформа может хранить старое описание интерфейса формы. В такой ситуации помогает запуск 1С с параметром /ClearCache или полное удаление базы из списка и её повторное добавление.
Подводя итог, можно сказать, что решение проблемы всегда кроется в последовательной проверке: сначала метаданные (связи и стандартные команды), затем права доступа, далее командный интерфейс формы и, наконец, программный код подсистем конфигурации.