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