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

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

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

Использование оператора ПОДОБНО для поиска по строкам

Для поиска вхождений подстроки в поле типа строка (например, в поле Наименование) в языке запросов 1С используется оператор ПОДОБНО. Этот оператор позволяет задавать шаблоны поиска с использованием спецсимволов.

Рассмотрим основной синтаксис:


ВЫБРАТЬ
    Сотрудники.Ссылка
ИЗ
    Справочник.Сотрудники КАК Сотрудники
ГДЕ
    Сотрудники.Наименование ПОДОБНО "%(осн)%"

Символ % (процент) в данном шаблоне означает последовательность любых символов произвольной длины. Если мы ставим % с обеих сторон от искомого текста, система найдет все записи, в которых эта подстрока встречается в любой части наименования.

Важно помнить основные спецсимволы шаблонов 1С:

Почему поиск по Представлению может не работать?

Частая ошибка начинающих разработчиков — попытка выполнить отбор по полю Представление. Важно уяснить: поле Представление в запросе — это не всегда физически хранящиеся данные. В ряде случаев оно вычисляется динамически «на лету» в момент формирования выборки на основе настроек конфигурации.

Если вы видите в интерфейсе программы строку «Иванов И.И. (осн.)», это не означает, что текст «(осн.)» физически записан в реквизите Наименование элемента справочника. Скорее всего, система формирует его автоматически. Запрос к базе данных всегда работает с физическими таблицами, поэтому отбор по Представление в таких случаях не вернет результатов.

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

Если вам нужно не просто отобрать записи, а произвести подсчет, используйте конструкцию ВЫБОР КОГДА внутри функции агрегирования СУММА. Это позволит получить количество строк, удовлетворяющих условию.

Давайте посмотрим, как это выглядит в коде:


ВЫБРАТЬ
    СУММА(ВЫБОР
        КОГДА Сотрудник.Наименование ПОДОБНО "%(осн)%" ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ) КАК КоличествоОсновных
ИЗ
    РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников.Обороты КАК Данные

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

Использование анализа текстовых строк (парсинг наименований) считается «плохой практикой» в программировании на 1С. Такой код становится крайне хрупким: если пользователь изменит формат наименования, весь ваш отчет перестанет работать.

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

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

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

← На главную