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

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

При разработке дополнительных обработок заполнения табличных частей (ТЧ) в конфигурациях на базе БСП (Библиотека стандартных подсистем), таких как КА 2.4, ERP или УТ 11, разработчики часто сталкиваются с ограничением: система принудительно требует записать или провести документ перед выполнением алгоритма заполнения. Давайте разберем, почему это происходит и как настроить обработку так, чтобы заполнение происходило «на лету» в форме без необходимости записи в базу данных. В качестве альтернативы ручной разработке можно использовать инструмент для автоматического заполнения реквизитов и табличных частей объектов.

Понимание механизма работы БСП

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

Решение 1: Использование параметра РежимЗаписи (для более ранних версий)

Если ваша конфигурация использует версию БСП, поддерживающую прямое управление записью через свойства команды, вы можете изменить РежимЗаписи. Это свойство определяет, должен ли объект записываться перед вызовом обработчика команды. Чтобы отключить обязательную запись, установите значение НеЗаписывать.

Пример кода настройки команды в модуле обработки:


Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Заполнить ТЧ без записи'");
Команда.Идентификатор = "ЗаполнитьБезЗаписи";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
Команда.РежимЗаписи = "НеЗаписывать";

В этом режиме в обработчик команды вместо ссылки будет передана вся форма документа, что позволит вам оперировать данными непосредственно в оперативной памяти формы.

Решение 2: Переход на актуальные стандарты БСП (Тип команды ЗаполнениеФормы)

В актуальных версиях БСП рекомендуется отказаться от попыток принудительно управлять записью через устаревшие параметры в пользу использования специализированного типа команды ТипКомандыЗаполнениеФормы(). Этот механизм специально разработан для взаимодействия с объектом в памяти текущего сеанса.

Если вам требуется дополнительный выбор параметров (например, выбор настроек пользователем перед заполнением), следуйте этому алгоритму:

  1. Используйте ТипКомандыЗаполнениеФормы() для регистрации команды в ПараметрыРегистрации.
  2. Для ввода параметров откройте модальное или немодальное окно (диалоговую форму) из вашего обработчика команды.
  3. После того как пользователь выбрал необходимые параметры, передайте их в процедуру заполнения ТЧ.
  4. Используйте переданный контекст формы, чтобы изменить данные табличной части напрямую через Форма.Объект.ИмяТабличнойЧасти.

Решение 3: Работа через контекст формы

Наиболее надежный способ работы без записи — это прямое обращение к объекту формы. При вызове команды в контексте управляемой формы вам доступен параметр Форма. Проанализируем, как можно реализовать заполнение программно:


// В обработчике команды на стороне клиента
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    ФормаДокумента = ПараметрыВыполненияКоманды.Форма;
    
    // Получаем текущие данные формы
    ДанныеФормы = ФормаДокумента.Объект;
    
    // Вносим изменения в ТЧ
    СтрокаТЧ = ДанныеФормы.ИмяТабличнойЧасти.Добавить();
    СтрокаТЧ.Номенклатура = ВыбраннаяНоменклатура;
    
    // Обновляем отображение ТЧ на форме
    КопироватьДанныеФормы(ДанныеФормы, ФормаДокумента.Объект);
КонецПроцедуры

Важные рекомендации при разработке

При реализации заполнения без записи важно помнить о пользовательском опыте и целостности интерфейса:

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

← На главную