Почему внешняя обработка заполнения табличной части не видна в кнопке «Заполнить» и как это исправить?

Программист 1С v8.3 (Обычные формы)
← На главную

В процессе разработки в конфигурациях на обычных формах (таких как УПП 1.3, УТ 10.3 или КА 1.1) программисты часто сталкиваются с ситуацией: внешняя обработка для заполнения табличной части (ТЧ) создана, зарегистрирована в справочнике «Внешние обработки», но в нужном документе кнопка «Заполнить» либо пуста, либо вовсе не отображает новую обработку. Рассмотрим подробно, почему так происходит и как правильно настроить механизм взаимодействия формы документа и внешней обработки.

Разберем причину: Почему механизм не работает «из коробки»?

В современных конфигурациях на управляемых формах за регистрацию и отображение команд отвечает БСП (Библиотека стандартных подсистем). Там достаточно прописать параметры в модуле объекта обработки, и система сама «подтянет» ее в нужные места. В старых же конфигурациях (на обычных формах) автоматизма значительно меньше.

Проанализируем ситуацию: если вы создали новый документ в конфигураторе самостоятельно, система не знает, что в его форме нужно искать какие-то внешние модули. В стандартных документах (например, в «Реализации товаров и услуг») этот функционал прописан жестко в коде формы. Если этого кода нет в вашем «самописном» документе, то меню «Заполнить» останется статичным — оно будет показывать только то, что вы нарисовали в конфигураторе.

Шаг 1. Подготовка формы документа

Выясним, что нужно добавить в форму документа, чтобы она начала «видеть» внешние обработки. Для этого нам понадобится обратиться к общему модулю УниверсальныеМеханизмы. Процесс подключения состоит из нескольких этапов:

  1. Создадим на форме командную панель или кнопку (подменю) с именем КнопкаЗаполнить.
  2. В модуле формы документа найдем (или создадим) процедуру ПриОткрытии.
  3. Вставим вызов формирования меню.

Рассмотрим пример кода, который должен быть в модуле формы документа:


Процедура ПриОткрытии()
    // Стандартные действия при открытии
    // ...
    
    // Инициализируем меню заполнения табличных частей
    // Передаем текущую форму и элемент управления (кнопку-подменю)
    УниверсальныеМеханизмы.СформироватьМенюЗаполненияТЧ(ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.ПодменюЗаполнить);
КонецПроцедуры

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

Шаг 2. Правильная структура внешней обработки

Чтобы система успешно «подружила» внешнюю обработку с документом, сама обработка должна соответствовать определенному стандарту, принятому в УПП или УТ 10.3. Проанализируем необходимые реквизиты и методы.

Во-первых, в реквизитах обработки должен быть объект ДокументОбъект. Тип этого реквизита должен включать в себя те типы документов, которые мы собираемся заполнять. Однако лучше всего оставить его тип произвольным или максимально широким, чтобы обеспечить универсальность.

Во-вторых, в модуле объекта обработки обязательно должна присутствовать экспортная процедура Инициализировать. Посмотрим на ее структуру:


Процедура Инициализировать(Объект, ИмяТабличнойЧасти, КнопочноеМеню) Экспорт
    // Объект - это ссылка на документ, из которого вызвали заполнение
    // ИмяТабличнойЧасти - строковое имя ТЧ (например, "Товары")
    // КнопочноеМеню - ссылка на кнопку, если нужно менять интерфейс
    
    // Здесь пишем логику заполнения
    ДокументОбъект = Объект;
    ТабличнаяЧасть = ДокументОбъект[ИмяТабличнойЧасти];
    
    // Пример добавления строки
    НоваяСтрока = ТабличнаяЧасть.Добавить();
    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00001");
    
    // Не забываем оповестить форму документа об изменениях
    // (обычно для обычных форм это происходит автоматически при работе с объектом)
КонецПроцедуры

Шаг 3. Регистрация и макет авторегистрации

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

Например:

Документы.МойДокумент.Товары

Если в макете допущена ошибка в имени документа или имени табличной части (даже в регистре символов), механизм УниверсальныеМеханизмы может проигнорировать обработку. Убедитесь, что имя ТЧ совпадает с тем, что задано в конфигураторе.

Шаг 4. Устранение вопроса «Сохранить изменения?» при закрытии

Рассмотрим ситуацию, которую описал автор темы: после выполнения алгоритма заполнения и попытки закрыть форму обработки, система выдает назойливый вопрос: «Сохранить изменения?». Это происходит из-за того, что флаг Модифицированность формы становится равным Истина при любом программном изменении данных, связанных с реквизитами формы.

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

Правильное решение: перед тем как вызвать ЭтаФорма.Закрыть(), необходимо явно сбросить флаг модифицированности. Посмотрим на пример кода в форме обработки:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Выполняем основную логику заполнения
    ЗаполнитьДанныеНаСервере();
    
    // Чтобы форма закрылась без лишних вопросов:
    ЭтаФорма.Модифицированность = Ложь; 
    ЭтаФорма.Закрыть();
КонецПроцедуры

Установка Модифицированность = Ложь сообщает платформе 1С, что в форме нет несохраненных данных, имеющих ценность, и подтверждение пользователя не требуется.

Подведем итоги

Мы проанализировали полный путь подключения внешней обработки заполнения ТЧ. Основные выводы таковы:

  1. Для «самописных» документов в УПП/УТ 10.3 автоматического подключения не существует — нужно добавлять вызов в процедуру ПриОткрытии формы документа.
  2. Используйте общий модуль УниверсальныеМеханизмы для интеграции в стандартное меню «Заполнить».
  3. Соблюдайте строгие требования к именам процедур (Инициализировать) и параметрам в модуле обработки.
  4. Всегда сбрасывайте Модифицированность, если хотите программно закрыть вспомогательную форму без диалоговых окон.

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

← На главную