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