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

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Разбор механизма хранения свойств в УПП

Прежде чем приступать к коду, проанализируем, где именно лежат данные. В УПП за это отвечают два ключевых объекта:

  1. План видов характеристик «Свойства объектов» — здесь хранятся названия самих свойств (например, «Цвет», «Субподрядчик», «Важность»).
  2. Регистр сведений «Значения свойств объектов» — именно здесь записывается связь: Объект (ссылка на документ) + Свойство (ссылка на ПВХ) = Значение.

Поскольку платформа при копировании или вводе на основании работает только с реквизитами самого объекта, данные регистра остаются «за бортом». Наша задача — вручную считать их из документа-основания и записать для нового документа.

Реализация переноса свойств при вводе на основании

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

Рассмотрим пошагово алгоритм действий:

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

Проанализируем пример кода, который решает задачу переноса свойств:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    
    // Если основание — документ нужного типа
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПередачаТоваров") Тогда
        
        // Стандартное заполнение реквизитов (Контрагент, Организация и т.д.)
        // ... (код заполнения реквизитов)
        
        // Работа со свойствами
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ
            |	ЗначенияСвойствОбъектов.Свойство,
            |	ЗначенияСвойствОбъектов.Значение
            |ИЗ
            |	РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
            |ГДЕ
            |	ЗначенияСвойствОбъектов.Объект = &Основание";
        
        Запрос.УстановитьПараметр("Основание", ДанныеЗаполнения);
        РезультатСвойств = Запрос.Выполнить().Выгрузить();
        
        // Сохраняем значения в ДополнительныеСвойства для последующей записи
        Для Каждого СтрокаСвойство Из РезультатСвойств Цикл
            ЭтотОбъект.ДополнительныеСвойства.Вставить("Свойство_" + СтрокаСвойство.Свойство.УникальныйИдентификатор(), СтрокаСвойство.Значение);
        КонецЦикла;
        
    КонецЕсли;

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

Однако просто положить данные в ДополнительныеСвойства недостаточно. Нам нужно, чтобы при записи документа эти свойства попали в регистр. Для этого в процедуре ПриЗаписи (или используя подписки на события) необходимо реализовать обход накопленных данных и создание записей в РегистрСведенийМенеджерЗаписи.ЗначенияСвойствОбъектов.

Добавление нового типа значений в свойства

Часто возникает ситуация, когда в свойствах документа (например, при учете давальческого сырья) нужно указать не просто строку или число, а ссылку на другой объект — например, на «Договор контрагента». Выясним, почему по умолчанию этого типа может не быть в списке.

Чтобы добавить новый тип (например, справочник «Договоры»), выполним следующие действия в Конфигураторе:

  1. Найдем План видов характеристик «Свойства объектов».
  2. Откроем его свойства и перейдем на вкладку «Основные».
  3. Найдем поле «Тип значения характеристик» и нажмем кнопку выбора (три точки).
  4. В открывшемся окне редактирования составного типа данных нужно найти СправочникСсылка.ДоговорыКонтрагентов и установить галочку.
  5. Обновим конфигурацию базы данных.

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

Особенности работы с договорами в свойствах

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

Для решения этой проблемы программисту потребуется вмешаться в работу формы свойств (обычно это общая форма ФормаРедактированияСвойств). Рассмотрим пути решения:

Поиск предопределенных данных

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

Например, предопределенный элемент Документ_ПередачаТоваров указывает системе, что созданное пользователем свойство «Субподрядчик» относится именно к этому типу документов. Если вы не видите нужного типа документа в списке назначений, проверьте раздел «Предопределенные» в ПВХ «Свойства объектов» в Конфигураторе. Если вашего документа там нет, его нужно добавить вручную, чтобы пользователи могли «привязывать» к нему свойства в режиме предприятия.

Рекомендации по производительности

Проанализируем ситуацию с нагрузкой на базу данных. Использование свойств — это удобно, но ресурсозатратно:

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

← На главную