К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как создать обработку заполнения табличной части в 1С

Пошаговая инструкция по созданию внешней обработки заполнения табличной части в 1С: регистрация через БСП, код заполнения, проверка и типичные ошибки.

Обработка заполнения табличной части — это внешняя обработка, которая добавляет кнопку «Заполнить» в табличную часть документа или справочника и по нажатию программно формирует строки: подбирает товары по остаткам, сотрудников по подразделению, услуги по договору. Такой механизм избавляет пользователя от ручного ввода десятков строк и снижает количество ошибок.

В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) подключение такой обработки занимает несколько минут: достаточно реализовать экспортную функцию СведенияОВнешнейОбработке() и процедуру ЗаполнитьТабличнуюЧасть() в модуле объекта. Конфигурацию изменять не требуется — обработка подключается через справочник «Дополнительные отчеты и обработки».

Ниже разобран полный цикл: создание файла обработки в конфигураторе, описание сведений для регистрации, код заполнения, подключение к базе и проверка результата, а также типичные ошибки, из-за которых кнопка не появляется или заполнение работает неверно.

Когда нужна обработка заполнения и какие есть альтернативы

Внешняя обработка оправдана, когда конфигурацию нельзя или нежелательно изменять: она на поддержке типовая, доработки затруднят обновление, а задача носит локальный характер. Типичные сценарии — заполнение товаров по остаткам склада, подбор номенклатуры по прайсу поставщика, формирование списка сотрудников подразделения для начисления.

Если конфигурация самописная или снята с поддержки, проще добавить команду заполнения непосредственно в модуль менеджера документа — так код будет версионироваться вместе с конфигурацией. Для разовой загрузки данных из файла лучше подходит обработка загрузки из табличного документа, а не заполнение табличной части.

Сравнение вариантов

Внешняя обработка заполнения

Подходит для типовых конфигураций на поддержке; подключается без изменения конфигурации, но обновлять файл нужно вручную.

Команда в модуле менеджера документа

Для снятых с поддержки или собственных конфигураций; требует доработки конфигурации и обновления базы.

Обработка загрузки из Excel/табличного документа

Когда источник данных — внешний файл, а не данные самой информационной базы.

Создание файла обработки в конфигураторе

Откройте конфигуратор, в меню выберите «Файл → Новый → Внешняя обработка». Задайте имя, например ЗаполнениеТоваровПоОстаткам, и синоним, который увидит пользователь в списке дополнительных обработок. Синоним должен быть понятен не программисту: «Заполнить товары по остаткам склада».

Форму создавать не обязательно: команда заполнения выводится платформой автоматически в меню «Заполнить» табличной части целевого документа. Форма нужна только если пользователь должен задать параметры перед заполнением — например, выбрать склад или дату среза остатков.

Сохраните файл с расширением .epf в рабочий каталог. Храните его вместе с сопроводительным описанием: какие документы обслуживает, какие поля заполняет, кто автор доработки. Это упростит сопровождение при обновлении конфигурации.

Описание сведений о внешней обработке

В модуле объекта обработки реализуйте экспортную функцию СведенияОВнешнейОбработке(). Она возвращает структуру с параметрами регистрации: вид обработки, версия, безопасный режим и таблицу команд. Для заполнения табличной части вид указывается как "ЗаполнениеОбъекта".

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1");

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();

ПараметрыРегистрации.Версия = "1.0";

ПараметрыРегистрации.БезопасныйРежим = Ложь;

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();

НоваяКоманда.Представление = НСтр("ru = 'Заполнить товары по остаткам'");

НоваяКоманда.Идентификатор = "ЗаполнитьТоварыПоОстаткам";

НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнение();

НоваяКоманда.ПоказыватьОповещение = Истина;

Возврат ПараметрыРегистрации;

КонецФункции

Обратите внимание на параметр БезопасныйРежим. Если установить Истина, обработка выполнится с ограничениями безопасного режима: недоступны операции с файловой системой и COM-объектами. Для заполнения по данным запроса к базе безопасный режим не мешает, и его рекомендуется оставить включённым.

Код заполнения табличной части

Логика заполнения размещается в процедуре ВыполнитьКоманду в модуле объекта. Платформа передаёт в неё имя команды и массив объектов, для которых вызвана команда. Объект доступен как данные документа — можно читать реквизиты шапки и модифицировать табличную часть.

Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения) Экспорт

Если ИмяКоманды = "ЗаполнитьТоварыПоОстаткам" Тогда

Для Каждого ОбъектНазначения Из ОбъектыНазначения Цикл

ЗаполнитьТовары(ОбъектНазначения);

КонецЦикла;

КонецЕсли;

КонецПроцедуры

Процедура ЗаполнитьТовары(Объект)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Остатки.Номенклатура КАК Номенклатура,

| Остатки.КоличествоОстаток КАК Количество

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК Остатки";

Запрос.УстановитьПараметр("Склад", Объект.Склад);

Объект.Товары.Очистить();

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

НоваяСтрока = Объект.Товары.Добавить();

НоваяСтрока.Номенклатура = Выборка.Номенклатура;

НоваяСтрока.Количество = Выборка.Количество;

КонецЦикла;

КонецПроцедуры

Решите заранее, что делать с уже заполненными строками. Метод Очистить() удаляет все строки без предупреждения — если пользователь вводил часть данных вручную, они будут потеряны. Более безопасный вариант — вывести вопрос через форму обработки либо добавлять только отсутствующие позиции, сопоставляя их по номенклатуре.

Имена регистров, табличных частей и реквизитов в примере условные: сверяйте их с метаданными вашей конфигурации через конфигуратор. В типовых конфигурациях табличная часть товаров обычно называется Товары, но встречаются варианты Запасы, Материалы.

Регистрация обработки в базе

Для подключения в базе должна быть включена функциональная опция «Дополнительные отчеты и обработки»: «Администрирование → Печатные формы, отчеты и обработки». Затем откройте одноимённый справочник и создайте новый элемент, указав файл .epf.

На закладке размещения (или в таблице «Принадлежность») выберите документы, в которых должна появиться кнопка заполнения — например, «Инвентаризация товаров» и «Перемещение товаров». Без указания размещения команда нигде не отобразится, хотя сама обработка зарегистрируется успешно.

Порядок подключения
  1. 1
    Включите опцию «Дополнительные отчеты и обработки» в разделе «Администрирование»
  2. 2
    Создайте элемент справочника «Дополнительные отчеты и обработки» и выберите файл .epf
  3. 3
    Укажите документы-назначения в таблице размещения
  4. 4
    Запишите элемент и откройте целевой документ
  5. 5
    Найдите команду в меню «Заполнить» табличной части и проверьте результат

Проверка результата и типичные ошибки

После подключения откройте тестовый документ, заполните реквизиты шапки, от которых зависит отбор (склад, организацию), и выполните команду. Проверьте не только появление строк, но и корректность количества, соответствие отбору и поведение при повторном запуске.

Контрольные точки

Как проверить результат

Кнопка в меню «Заполнить»
Норма

Команда видна с заданным представлением

Тревожный признак

Команды нет — проверьте размещение и вид обработки

Состав строк после заполнения
Норма

Строки соответствуют отбору по реквизитам шапки

Тревожный признак

Пусто или лишние позиции — ошибка в параметрах запроса

Повторное нажатие
Норма

Строки обновляются без дублей

Тревожный признак

Строки задваиваются — нет очистки или сопоставления

Типичные ошибки
01
Вид обработки указан как «ДополнительнаяОбработка» вместо «ЗаполнениеОбъекта» — команда не появится в документе
02
Идентификатор команды в сведениях не совпадает со строкой в ВыполнитьКоманду — обработка регистрируется, но ничего не делает
03
Запрос обращается к несуществующим именам регистров или реквизитов — ошибка исполнения при нажатии кнопки
04
Обработка подключена, но не заполнены документы размещения — пользователи не видят команду
05
Код не учитывает незаполненный склад или организацию в шапке — запрос возвращает данные по всем складам

Если при выполнении возникает ошибка, текст смотрите в журнале регистрации: «Администрирование → Обслуживание → Журнал регистрации», отбор по событию ошибок. Для отладки можно временно открыть обработку через «Файл → Открыть» и вызывать логику вручную, либо использовать отладчик конфигуратора с подключением к сеансу пользователя.

Ограничения и сопровождение

Внешняя обработка жёстко привязана к именам метаданных конкретной конфигурации. После обновления типовой конфигурации проверяйте, не переименованы ли табличная часть, регистр или реквизиты, — это стандартная процедура при любом обновлении базы с дополнительными обработками.

Учитывайте права пользователей: запрос внутри обработки выполняется с правами текущего сеанса. Если у пользователя нет доступа к регистру остатков, заполнение завершится ошибкой или вернёт пустой результат. Проверяйте обработку под учётной записью с реальным набором прав, а не под полными правами.

Ведите номер версии в параметрах регистрации и в имени файла. При замене файла в справочнике старая версия подменяется, и по номеру легко понять, какая редакция реально работает у пользователей.
ПЗ
Практическое замечание
Итог

Что важно запомнить

Обработка заполнения табличной части — это внешняя обработка вида «ЗаполнениеОбъекта» с функцией СведенияОВнешнейОбработке и процедурой ВыполнитьКоманду. Подключается через справочник дополнительных обработок с указанием документов размещения. Перед очисткой строк предупреждайте пользователя, а после обновления конфигурации проверяйте имена метаданных.

Частые вопросы

Можно ли заполнить табличную часть без изменения конфигурации?

Да, именно для этого предназначен механизм дополнительных отчетов и обработок БСП. Конфигурация остаётся на поддержке, обработка подключается как файл и отключается одним снятием пометки в справочнике.

Почему кнопка «Заполнить» не появилась в документе?

Чаще всего не заполнена таблица размещения в элементе справочника дополнительных обработок или указан неверный вид обработки. Также проверьте, что функциональная опция дополнительных обработок включена, а у пользователя есть право на её выполнение.

Как заполнить табличную часть с параметрами, которые задаёт пользователь?

Создайте форму обработки с полями параметров. В процедуре ВыполнитьКоманду откройте эту форму, а после ввода параметров выполните заполнение. Либо используйте тип команды с вызовом клиентского метода, если требуется интерактивный сценарий.

Обработка очищает введённые вручную строки. Как этого избежать?

Уберите вызов Очистить() и вместо него сопоставляйте новые данные с существующими строками по ключевому полю, например по номенклатуре: обновляйте количество в найденных строках и добавляйте только отсутствующие позиции.

Работает ли такая обработка в управляемых и обычных формах?

Механизм БСП ориентирован на управляемые формы типовых конфигураций. Для конфигураций на обычных формах без БСП потребуется собственный механизм подключения или доработка конфигурации — стандартная регистрация через СведенияОВнешнейОбработке там не сработает.

Как отладить обработку, если она выдаёт ошибку только у пользователя?

Воспроизведите заполнение под аналогичными правами, посмотрите текст ошибки в журнале регистрации. Для пошаговой отладки подключите отладчик конфигуратора к сеансу пользователя и поставьте точку останова в процедуре ВыполнитьКоманду.