Есть ли в 1С:УПП возможность настройки автозаполнения реквизитов документов?

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

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

Штатные возможности 1С:УПП и статус механизма

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

В типовой конфигурации 1С:Управление производственным предприятием механизма произвольного сопоставления полей документов произвольным значениям нет. Набор автоматически подставляемых реквизитов строго ограничен:

  1. Список доступных настроек строго предопределен в объекте метаданных ПланВидовХарактеристик.НастройкиПользователей.
  2. Значения, выбранные для конкретного пользователя, хранятся в типовом регистре сведений Настройки пользователя.
  3. Сам процесс инициализации полей шапки выполняется процедурами общего модуля ЗаполнениеДокументов (в частности, через процедуру ЗаполнитьШапкуДокумента), которая вызывается в событии ПриОткрытии формы нового документа.

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

Вариант 1. Универсальная подсистема на подписках на события

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

  1. Создание регистра сведений: создадим непериодический регистр сведений НастройкиРеквизитовДокументов. В качестве измерений укажем пользователя (ссылка на Справочник.Пользователи), имя документа (тип Строка) и имя реквизита (тип Строка). Ресурсом будет выступать Значение с составным типом данных, включающим все необходимые справочники и примитивные типы.
  2. Создание подписки на событие: добавим подписку на событие ОбработкаЗаполнения с объектом-источником ДокументОбъект.
  3. Программный код заполнения: напишем логику чтения настроек из регистра и подстановки их в реквизиты объекта.

Посмотрим на пример реализации алгоритма в обработчике подписки:


Процедура ОбработкаЗаполненияДокументовАвтоподстановка(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт

    ИмяДокумента = Источник.Метаданные().Имя;
    ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Настройки.ИмяРеквизита КАК ИмяРеквизита,
        |   Настройки.Значение КАК Значение
        |ИЗ
        |   РегистрСведений.НастройкиРеквизитовДокументов КАК Настройки
        |ГДЕ
        |   Настройки.Пользователь = &Пользователь
        |   И Настройки.ИмяДокумента = &ИмяДокумента";

    Запрос.УстановитьПараметр("Пользователь", ТекущийПользователь);
    Запрос.УстановитьПараметр("ИмяДокумента", ИмяДокумента);

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Попытка
            Источник[Выборка.ИмяРеквизита] = Выборка.Значение;
        Исключение
            // Обработка ситуации, если реквизит недоступен для записи напрямую
        КонецПопытки;
    КонецЦикла;

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

Вариант 2. Точечное расширение типового механизма настроек УПП

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

  1. Откроем ПланВидовХарактеристик.НастройкиПользователей в конфигураторе и добавим новый предопределенный элемент для нужного параметра, назначив ему требуемый тип данных.
  2. Перейдем в общий модуль ЗаполнениеДокументов и дополним процедуру ЗаполнитьШапкуДокумента считыванием добавленного значения из регистра сведений Настройки пользователя.
  3. Назначим полученное значение реквизиту переданного документа.

Ограничения и подводные камни архитектуры УПП

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

  1. Перезапись значений кодом формы: в 1С:УПП логика заполнения обычных форм глубоко интегрирована в процедуры модуля формы (события ПриОткрытии, ПриИзменении связанных полей вроде организации или договора контрагента). Если заполнить реквизит в событии ОбработкаЗаполнения, код формы при инициализации может очистить или принудительно пересчитать значение. Поэтому универсальные механизмы требуют тщательного тестирования на формах конкретных документов.
  2. Обычные формы и режим совместимости: УПП функционирует на обычных формах и в режиме совместимости. Использование перехватов методов через расширения (&Вместо, &После) для логики обычных форм недоступно, поэтому внедрение подсистемы потребует включения возможности изменения конфигурации.
  3. Табличные части: универсальный механизм настройки через регистр хорошо подходит для реквизитов шапки, однако автоматическое наполнение строк табличных частей потребует значительно более сложной структуры хранения настроек с учетом номеров строк и табличных колонок.
← На главную