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

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

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

В этой статье мы подробно разберем, как устроена архитектура хранения дополнительных свойств в УПП 1.3, и рассмотрим три практических способа получения этих данных: с помощью механизма характеристик в СКД, через левое соединение в запросах и программным кодом на языке 1С.

1. Архитектурное устройство свойств в конфигурации УПП 1.3

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

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

Понимание этой структуры позволяет нам легко извлекать свойства как с помощью интерактивных инструментов платформы, так и напрямую через запросы.

2. Способ А. Настройка механизма «Характеристик» в СКД (вывод свойства в отчет)

Если перед вами стоит задача вывести дополнительное свойство в отчет, разработанный на базе Схемы компоновки данных (СКД), наиболее правильным и элегантным решением будет использование механизма «Характеристик». Настроив характеристики один раз, вы позволите пользователям перетаскивать свойства мышкой прямо в режиме «1С:Предприятие» — добавлять их в группировки, отборы, колонки и условное оформление так, как будто это стандартные реквизиты договора.

Разберем процесс настройки по шагам:

  1. Откройте вашу схему компоновки данных в конфигураторе и перейдите на вкладку «Настройки схемы» (в нижней части окна конструктора СКД).
  2. Найдите таблицу «Характеристики» и нажмите кнопку «Добавить» для создания нового описания характеристик.
  3. Заполните параметры характеристик следующим образом:
    • Путь к данным: укажите поле, содержащее объект, свойства которого мы хотим получить (например, Договор или ДоговорКонтрагента).
    • Источник видов характеристик: выберите вариант Таблица (это позволит гибко настроить источник видов характеристик запросом).
    • Виды характеристик: укажите ПланВидовХарактеристик.СвойстваОбъектов. Для того чтобы не выводить пользователю абсолютно все свойства базы (например, свойства номенклатуры или контрагентов), рекомендуем использовать запрос с фильтрацией по назначению:
      
      ВЫБРАТЬ
          СвойстваОбъектов.Ссылка КАК Ссылка,
          СвойстваОбъектов.Наименование КАК Наименование,
          СвойстваОбъектов.ТипЗначения КАК ТипЗначения
      ИЗ
          ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
      ГДЕ
          СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов)
      
    • Поле ключа: выберите Ссылка.
    • Поле имени: выберите Наименование.
    • Поле типа значения: укажите ТипЗначения.
    • Источник значений характеристик: выберите таблицу РегистрСведений.ЗначенияСвойствОбъектов.
    • Поле объекта: укажите измерение Объект.
    • Поле вида: укажите измерение Свойство.
    • Поле значения: укажите ресурс Значение.
  4. После выполнения этих настроек сохраните отчет. Теперь в режиме пользователя, если вы раскроете поле Договор (нажав на значок «+» рядом с ним в настройках группировок или выбранных полей), вы увидите ваше дополнительное свойство как полноценный подчиненный реквизит.

3. Способ Б. Получение свойства через левое соединение в запросе

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

Для решения этой задачи мы используем левое соединение таблицы договоров с регистром сведений ЗначенияСвойствОбъектов. Разберем пример готового запроса:


ВЫБРАТЬ
    Договоры.Ссылка КАК Договор,
    Договоры.Владелец КАК Контрагент,
    ЕСТЬNULL(РегистрСвойств.Значение, "Свойство не заполнено") КАК ЗначениеСвойства
ИЗ
    Справочник.ДоговорыКонтрагентов КАК Договоры
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК РегистрСвойств
        ПО Договоры.Ссылка = РегистрСвойств.Объект
        И РегистрСвойств.Свойство = &ПараметрСвойство

Важные детали реализации запроса:

4. Способ В. Программное получение свойства в коде 1С

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

Вариант 1. Использование менеджера записи регистра (для одиночного объекта)

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


// Определяем ссылку на договор и нужное нам свойство
ДоговорСсылка = СсылкаНаДоговор; // Ваша переменная с договором
НужноеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Статус договора");

Если ЗначениеЗаполнено(НужноеСвойство) Тогда
    // Создаем менеджер записи для чтения конкретной строки регистра
    МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Объект = ДоговорСсылка;
    МенеджерЗаписи.Свойство = НужноеСвойство;
    МенеджерЗаписи.Прочитать();
    
    Если МенеджерЗаписи.Выбран() Тогда
        ЗначениеСвойства = МенеджерЗаписи.Значение;
        // Выполняем логику с полученным значением
    Иначе
        ЗначениеСвойства = Неопределено;
    КонецЕсли;
КонецЕсли;

Вариант 2. Использование типовых функций конфигурации УПП 1.3

Разработчики конфигурации УПП 1.3 предусмотрели готовые процедуры и функции для облегчения работы со свойствами. Для получения всех свойств объекта или конкретного значения можно использовать функции общего модуля РаботаСОсвойствами:


// Получаем таблицу всех свойств, установленных для договора
ТаблицаСвойств = РаботаСОсвойствами.ПолучитьСвойстваОбъекта(СсылкаНаДоговор);

// Вы можете обойти таблицу циклом и найти нужное значение
Для Каждого СтрокаСвойства Из ТаблицаСвойств Цикл
    Если СтрокаСвойства.Свойство.Наименование = "Статус договора" Тогда
        ЗначениеСвойства = СтрокаСвойства.Значение;
        Прервать;
    КонецЕсли;
КонецЦикла;

5. Полезно знать: разница с современными конфигурациями (ERP 2, КА 2, УТ 11)

Проанализируем перспективу перехода на современные конфигурации, разработанные на управляемых формах под управлением Библиотеки стандартных подсистем (БСП). Если вы в будущем столкнетесь с аналогичной задачей в 1С:ERP или 1С:Комплексная автоматизация 2, помните, что архитектура работы со свойствами там кардинально изменилась:

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

← На главную