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

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

При работе с большими объемами данных в 1С часто возникает ситуация, когда необходимо сформировать отчет по конкретному списку объектов — например, по двум тысячам инвентарных номеров, полученных из внешнего файла Excel. Вводить такие данные вручную в конструкторе запросов или настройках отчета невозможно. Разберем детально, как решить эту задачу различными способами, от правки текста запроса до использования скрытых возможностей интерфейса. Если же перенос списков и заполнение экранных форм из сторонних файлов требуется выполнять регулярно, этот процесс можно настроить через платформу для программных роботов без изменения кода конфигурации 1С.

Способ 1. Использование оператора В и параметров запроса

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

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


ГДЕ
    ОсновноеСредство.Код В (&СписокКодов)

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

Важно понимать разницу между поиском по коду и поиском по ссылке. Если у вас на руках именно строковые инвентарные номера, используйте поле Код. Если же у вас есть выгрузка самих объектов, правильнее будет написать:


ГДЕ
    ОсновноеСредство.Ссылка В (&СписокОС)

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

Способ 2. Жесткое прописывание значений в тексте запроса

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


ГДЕ
    ОсновноеСредство.Код В ("000000001", "000000002", "000000005")

Однако у этого способа есть существенные ограничения, которые мы должны учитывать:

  1. Ограничение длины строки: Если список «огромный» (тысячи элементов), общая длина текста запроса может превысить допустимые пределы платформы или СУБД (SQL Server), что приведет к ошибке.
  2. Сложность форматирования: Вам придется вручную или с помощью формул Excel оборачивать каждый код в кавычки и разделять их запятыми.
  3. Производительность: СУБД гораздо эффективнее обрабатывает параметры, чем жестко заданные константы в тексте огромного запроса.

Поэтому данный метод мы рекомендуем использовать только для небольших списков (до 50-100 элементов).

Способ 3. Загрузка из буфера обмена в настройках СКД

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

Разберем по шагам, как это сделать:

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

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

Способ 4. Особенности работы в УПП и обычных формах

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

В этом случае проанализируем альтернативные варианты:

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

Технические ограничения и рекомендации

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

1. Ограничение SQL Server: При использовании оператора IN в запросе, количество элементов в списке не должно быть бесконечным. Хотя теоретический предел очень высок, на практике при списках более 10 000 элементов запрос начинает работать крайне медленно. В таких случаях эффективнее использовать временные таблицы, но это требует навыков программирования.

2. Типизация данных: Убедитесь, что коды в вашем списке из Excel полностью совпадают по формату с кодами в 1С. В 1С коды часто имеют фиксированную длину и дополнены ведущими нулями (например, "000000012" вместо "12"). Если при загрузке через буфер обмена 1С не находит соответствия, проверьте длину строки и наличие этих нулей.

3. Ссылки vs Коды: По возможности всегда старайтесь переходить от поиска по строковым кодам к поиску по ссылкам (Ref). Это ускоряет работу базы данных, так как поиск по уникальному идентификатору (GUID) происходит быстрее, чем по текстовому полю.

Таким образом, мы рассмотрели основные методы массовой установки значений в отборы. Для новичка самым простым будет использование параметра &СписокКодов в конструкторе запросов или поиск заветной кнопки «Вставить из буфера» в окне редактирования списка значений СКД. Для автоматизации переноса значений подойдет программа для наполнения списков в отчетах из Excel или буфера обмена.

← На главную