Как добавить числовое поле в справочник 1С 8.1 и найти его максимальное значение запросом

Программист IT и автоматизация бизнеса
← На главную

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

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

Давайте вместе разберем эту задачу по шагам.

---

Способ №1. Прямое добавление реквизита в конфигурации

Этот способ является наиболее очевидным для программиста. Он заключается в физическом изменении структуры базы данных путем добавления нового реквизита в нужный справочник.

Выясним последовательность действий для реализации этого варианта:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. В дереве метаданных найдем интересующий нас справочник (например, Номенклатура или Контрагенты). Если конфигурация находится на поддержке, предварительно потребуется зайти в меню Конфигурация -> Поддержка -> Настройка поддержки и включить возможность изменения.
  3. Раскроем ветку выбранного справочника, перейдем к разделу Реквизиты и добавим новый реквизит. Дадим ему понятное имя, например, МаксимальныйЛимит.
  4. В свойствах нового реквизита укажем тип данных Число. Обязательно настроим разрядность (длину) и точность (количество знаков после запятой) в зависимости от бизнес-требований. Например, длина 15, точность 2.
  5. Вынесем созданный реквизит на форму элемента справочника, чтобы пользователи могли самостоятельно вводить туда данные в режиме предприятия.
  6. Обновим конфигурацию базы данных (клавиша F7).

Важное предостережение: Изменение структуры типовой конфигурации автоматически снимает ее с полной поддержки. Это означает, что последующие обновления программы потребуют ручного сравнения и объединения конфигураций, что усложнит обслуживание системы в будущем.

Как найти максимальное значение реквизита запросом

После того как пользователи заполнят новое поле в карточках элементов, перед нами встает задача поиска наибольшего значения. Один из участников форума допустил забавную опечатку, спросив, можно ли найти значение «через парос». Разумеется, имелся в виду запрос.

Для поиска максимального числа среди всех элементов справочника мы составим запрос с использованием встроенного языка 1С. Проанализируем пример кода:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	МАКСИМУМ(СправочникНоменклатура.МаксимальныйЛимит) КАК МаксимальныйПоказатель
    |ИЗ
    |	Справочник.Номенклатура КАК СправочникНоменклатура";

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Следующий() Тогда
    МаксимальноеЗначение = Выборка.МаксимальныйПоказатель;
    Сообщить("Максимальное введенное значение: " + МаксимальноеЗначение);
КонецЕсли;

В данном примере мы используем агрегатную функцию МАКСИМУМ. Запрос сканирует всю таблицу справочника Номенклатура и мгновенно возвращает единственное наибольшее число из колонки МаксимальныйЛимит.

---

Способ №2. Использование механизма свойств и категорий (без изменения конфигурации)

Для платформы 1С 8.1 это самое грамотное и элегантное решение, если требуется сохранить конфигурацию полностью типовой. В большинстве конфигураций того времени (таких как Управление торговлей 10.3 или Управление производственным предприятием 1.3) уже встроен мощный механизм дополнительных свойств.

Рассмотрим подробнее архитектуру этого механизма. Он базируется на двух объектах метаданных:

Разберем по шагам, как настроить такое поле силами пользователя без привлечения программиста:

  1. Запустим программу в режиме 1С:Предприятие.
  2. Перейдем в меню настройки дополнительных свойств (обычно оно доступно через сервис или непосредственно в форме списка справочника по кнопке «Свойства»).
  3. Создадим новое свойство. Назовем его, например, Максимальный показатель.
  4. В качестве назначения свойства укажем наш справочник (например, Справочник "Номенклатура").
  5. Тип значения для этого свойства выберем как Число, задав необходимый формат.
  6. Теперь в карточке каждого элемента справочника на вкладке «Свойства» появится новая строка, куда пользователь сможет вписать нужное число.

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

Поиск максимального значения свойства через запрос

Так как данные свойств физически лежат не внутри таблицы справочника, а в регистре сведений, запрос для получения максимального значения будет выглядеть иначе. Нам потребуется обратиться к регистру ЗначенияСвойствОбъектов и сделать жесткий отбор по нашему свойству из ПВХ.

Посмотрим на пример такого запроса:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	МАКСИМУМ(ВЫРАЗИТЬ(РегистрЗначенияСвойств.Значение КАК ЧИСЛО(15, 2))) КАК МаксЗначение
    |ИЗ
    |	РегистрСведений.ЗначенияСвойствОбъектов КАК РегистрЗначенияСвойств
    |ГДЕ
    |	РегистрЗначенияСвойств.Свойство = &ПараметрСвойство
    |	И РегистрЗначенияСвойств.Объект ССЫЛКА Справочник.Номенклатура";

// Укажем ссылку на наше созданное свойство из Плана видов характеристик
Запрос.УстановитьПараметр("ПараметрСвойство", СсылкаНаНашеСвойство);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Следующий() Тогда
    Максимум = Выборка.МаксЗначение;
    Сообщить("Найденный максимум среди свойств: " + Максимум);
КонецЕсли;

Обратите внимание на важный нюанс: Поле Значение в регистре сведений ЗначенияСвойствОбъектов имеет составной тип данных (так как свойства могут быть и строками, и датами, и справочниками). Чтобы агрегатная функция МАКСИМУМ отработала корректно, мы обязательно должны использовать конструкцию ВЫРАЗИТЬ(... КАК ЧИСЛО). Это преобразует тип значения к числовому формату прямо во время выполнения запроса на уровне СУБД.

---

Технический ликбез: почему «Расширения» не подходят для 1С 8.1

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

Необходимо четко понимать, что в версии платформы 1С 8.1 расширений не существует. Этот функционал появился значительно позже — только в версии 1С 8.3.6 (в 2015 году). Платформа 8.1, выпущенная в 2007 году, предлагает исключительно два пути решения: либо прямое изменение метаданных в конфигураторе, либо использование ПВХ и регистров сведений в пользовательском режиме.

---

Современная альтернатива в системах на платформе 1С 8.3

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

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

---

Резюме

Подведем итог нашего анализа. Если перед вами стоит задача добавить числовое поле в справочник на платформе 1С 8.1, у вас есть два надежных пути:

  1. Если вы готовы усложнить будущие обновления — добавьте реквизит с типом Число напрямую в Конфигураторе и получайте его простым запросом с функцией МАКСИМУМ.
  2. Если критически важно оставить конфигурацию на полной поддержке — используйте встроенный механизм «Свойств и категорий», а в поисковом запросе обязательно используйте функцию ВЫРАЗИТЬ для приведения типа к числу.
← На главную