Разработка и Конфигурация · 12 мин
Как добавить кнопку «Заполнить» в 1С
Как добавить кнопку «Заполнить» в 1С: создание команды, размещение на форме документа, обработчик заполнения табличной части, типовые механизмы и ошибки.
Кнопка «Заполнить» — один из самых востребованных элементов в документах и обработках 1С: она запускает алгоритм, который автоматически заполняет табличную часть, шапку документа или отдельные реквизиты по заданным правилам. Пользователи привыкают к ней в типовых конфигурациях (например, «Заполнить по остаткам» в инвентаризации) и ожидают такой же удобной механики в доработанных объектах.
Добавить такую кнопку можно несколькими способами: через конфигуратор с созданием собственной команды и обработчика на встроенном языке, через механизм расширений без изменения основной конфигурации, а в управляемых формах — также через программное создание команды и элемента формы. Выбор зависит от того, есть ли у вас доступ к изменению конфигурации и насколько сложна логика заполнения.
Ниже разобраны все основные сценарии: от простейшей команды в конфигураторе до программного добавления кнопки и подключения внешних обработок заполнения. Отдельное внимание уделено проверке результата и типичным ошибкам, из-за которых кнопка появляется, но не работает.
Определитесь со способом добавления кнопки
Прежде чем открывать конфигуратор, ответьте на два вопроса: можно ли изменять конфигурацию и где должна работать кнопка. Если конфигурация типовая и находится на полной поддержке, прямое изменение объектов усложнит будущие обновления — в этом случае правильнее использовать расширение конфигурации или механизм внешних обработок заполнения табличных частей (в конфигурациях на БСП он доступен через «Администрирование → Печатные формы, отчеты и обработки»).
Если конфигурация самописная или уже снята с поддержки, проще всего добавить команду непосредственно в форму документа. Для разовых задач администратора подойдёт внешняя обработка, открываемая через «Файл → Открыть», — она вообще не требует изменения метаданных.
Как выбрать способ
Добавление команды и кнопки в форму документа
Основной сценарий для управляемых форм выглядит так. Откройте конфигуратор, найдите нужный документ и откройте его основную форму. В редакторе формы перейдите на вкладку «Команды» — там есть два списка: команды формы и команды объекта. Создайте новую команду формы, например с именем ЗаполнитьПоОстаткам, и задайте ей заголовок «Заполнить» и при необходимости картинку.
В свойствах команды нажмите кнопку с лупой у поля «Действие» — конфигуратор создаст заготовку обработчика в модуле формы. В управляемых формах обработчик команды обычно клиентский, а сама логика заполнения выносится в серверную процедуру, потому что запросы к базе данных на клиенте недоступны.
После создания команды перетащите её из списка команд в дерево элементов формы — в командную панель табличной части или в общую командную панель. Проверьте, что у табличной части свойство «КоманднаяПанель» указывает на нужную панель, иначе кнопка может оказаться в подменю «Ещё».
- 1Откройте форму документа в конфигураторе
- 2На вкладке «Команды» создайте команду формы с заголовком «Заполнить»
- 3Назначьте команде действие — обработчик в модуле формы
- 4Перетащите команду в командную панель табличной части
- 5Реализуйте серверную процедуру заполнения
- 6Обновите конфигурацию базы данных и проверьте кнопку в режиме Предприятия
Код обработчика: клиент и сервер
Типовая структура обработчика команды в управляемой форме состоит из двух процедур. Клиентская вызывается нажатием кнопки, может показать вопрос пользователю («Табличная часть будет очищена. Продолжить?»), а затем вызывает серверную процедуру, которая выполняет запрос и заполняет данные объекта.
&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
Если Объект.Товары.Количество() > 0 Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("ЗаполнитьПоОстаткамЗавершение", ЭтотОбъект),
"Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ЗаполнитьПоОстаткамНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоОстаткамНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ТоварыОстатки.Номенклатура, ТоварыОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК ТоварыОстатки";
Запрос.УстановитьПараметр("Период", Объект.Дата);
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Объект.Товары.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедурыОбратите внимание на директивы компиляции: &НаКлиенте и &НаСервере обязательны, иначе код не скомпилируется или будет выполняться не в том контексте. Если процедура не меняет данные формы, добавляйте &НаСервереБезКонтекста — это ускоряет вызов, но из такой процедуры недоступны реквизиты формы.
Если заполнение строится на данных самого документа (склад, организация, дата), убедитесь, что эти реквизиты заполнены до нажатия кнопки. Хорошая практика — в начале серверной процедуры проверять ключевые параметры и выдавать понятное сообщение: «Не указан склад, заполнение невозможно».
Программное создание кнопки на форме
Иногда кнопку нужно добавить динамически — например, из расширения или из общего модуля подсистемы, когда форма заранее неизвестна. Для этого в обработчике ПриСозданииНаСервере программно создают команду и элемент формы типа «Кнопка формы».
Логика такая: сначала через Команды.Добавить() создаётся команда, ей назначается действие — имя процедуры в модуле формы. Затем через Элементы.Добавить() создаётся кнопка, указывается родитель (командная панель) и имя команды. Учтите, что процедура-обработчик должна существовать в модуле формы заранее — программно её добавить нельзя.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НоваяКоманда = Команды.Добавить("ЗаполнитьДанные");
НоваяКоманда.Действие = "Подключаемый_ЗаполнитьДанные";
НоваяКоманда.Заголовок = "Заполнить";
НоваяКнопка = Элементы.Добавить("ЗаполнитьДанные", Тип("КнопкаФормы"), Элементы.Товары.КоманднаяПанель);
НоваяКнопка.ИмяКоманды = "ЗаполнитьДанные";
КонецПроцедурыКнопка «Заполнить» через расширение конфигурации
Расширение — безопасный способ доработки типовой конфигурации: основная конфигурация не меняется, обновления устанавливаются штатно. Создайте расширение через «Конфигурация → Расширения конфигурации», заимствуйте в него форму нужного документа и добавьте команду и кнопку так же, как в обычной форме.
Обработчики в расширении подключаются через аннотации &После, &Вместо, &Перед либо через собственные команды расширения. Для кнопки «Заполнить» обычно достаточно собственной команды — она не конфликтует с типовым кодом.
Ограничения: расширения не поддерживают изменение некоторых объектов (например, планов обмена и ряда системных механизмов), а при обновлении конфигурации заимствованная форма может «отстать» от типовой — после каждого обновления форму стоит проверять и при необходимости обновлять в расширении.
Внешние обработки заполнения табличных частей
В конфигурациях на Библиотеке стандартных подсистем (УТ, ERP, Бухгалтерия и другие) предусмотрен механизм дополнительных отчетов и обработок. Он позволяет подключить внешнюю обработку вида «ЗаполнениеОбъекта», и кнопка «Заполнить» появится в документе автоматически — без изменения формы.
Для подключения включите в режиме Предприятия опцию «Дополнительные отчеты и обработки» в разделе «Администрирование → Печатные формы, отчеты и обработки», затем добавьте файл обработки в одноимённый справочник и укажите, к каким документам она привязана. Команды обработки появятся в меню «Заполнить» или «Ещё» документа.
В самой обработке реализуется экспортная процедура ВыполнитьКоманду с предопределёнными параметрами: имя команды, коллекция объектов, дополнительные параметры. Это самый «чистый» способ для типовых конфигураций, но он требует понимания интерфейса БСП и работает только там, где библиотека внедрена.
Проверка результата и типичные ошибки
После добавления кнопки обязательно проверьте её в режиме Предприятия под учётной записью конечного пользователя, а не только под полными правами: у пользователя может не быть права на изменение документа или на чтение регистра, из которого берутся данные. Также проверьте сценарий с уже заполненной табличной частью — должно ли заполнение очищать строки, дополнять их или отказываться работать.
Как проверить результат
Кнопка отображается в командной панели табличной части или в меню «Заполнить»
Кнопки нет — проверьте размещение команды и права пользователя
Табличная часть заполняется корректными данными без ошибок
Ошибка «процедура не определена» или пустой результат
Показывается вопрос об очистке или данные корректно обновляются
Строки дублируются или старые данные теряются без предупреждения
Кнопка работает под ролью пользователя без полных прав
Нарушение прав доступа при обращении к регистрам
Часто задаваемые вопросы
Можно ли добавить кнопку «Заполнить» без программирования?
Частично. В типовых конфигурациях на БСП можно подключить готовую внешнюю обработку заполнения табличных частей через механизм дополнительных отчетов и обработок — код писать не придётся, если подходящая обработка уже существует. Полностью без разработки создать новую логику заполнения нельзя.
Почему кнопка есть, но находится в подменю «Ещё»?
Платформа автоматически переносит команды в подменю «Ещё», если командная панель переполнена или у кнопки не задано свойство важности. В редакторе формы поднимите кнопку выше в списке элементов командной панели или проверьте, что она добавлена именно в командную панель табличной части, а не в общую панель формы.
Как добавить кнопку «Заполнить» в обычные формы (не управляемые)?
В обычных формах кнопка добавляется через панель инструментов редактора формы: разместите элемент «Кнопка» на форме или в командной панели табличного поля и в свойствах задайте действие — процедуру модуля формы. Отдельная команда в обычных формах не требуется, обработчик привязывается к событию «Нажатие».
Кнопка работает у администратора, но не у пользователя. В чём причина?
Чаще всего не хватает прав: у роли пользователя нет доступа на чтение регистра или справочника, из которых берутся данные, либо нет права на изменение самого документа. Проверьте журнал регистрации — там фиксируются события «Отказ в доступе» с указанием объекта.
Как сделать кнопку «Заполнить» сразу в нескольких документах?
Два пути: общая команда конфигурации, у которой в свойстве «Тип параметра команды» перечислены нужные документы, — платформа сама добавит кнопку в их формы; либо внешняя обработка заполнения с привязкой к нескольким объектам через механизм дополнительных обработок БСП.
Что делать, если после обновления конфигурации кнопка из расширения пропала?
Откройте расширение и проверьте заимствованную форму: при обновлении типовая форма могла измениться, и элементы расширения «потеряли» родителя. Обновите заимствованную форму до актуального состояния, заново разместите кнопку и проверьте, что обработчики по-прежнему подключены.
Что важно запомнить
Кнопка «Заполнить» — это команда формы плюс серверная процедура заполнения. Для типовых конфигураций используйте расширения или внешние обработки заполнения, для собственных — прямое добавление команды в форму. Всегда проверяйте кнопку под правами конечного пользователя и предусматривайте защиту от потери введённых вручную строк.