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