При работе с большими объемами данных в 1С часто возникает ситуация, когда необходимо сформировать отчет по конкретному списку объектов — например, по двум тысячам инвентарных номеров, полученных из внешнего файла Excel. Вводить такие данные вручную в конструкторе запросов или настройках отчета невозможно. Разберем детально, как решить эту задачу различными способами, от правки текста запроса до использования скрытых возможностей интерфейса. Если же перенос списков и заполнение экранных форм из сторонних файлов требуется выполнять регулярно, этот процесс можно настроить через платформу для программных роботов без изменения кода конфигурации 1С.
Проанализируем самый надежный с точки зрения программирования метод. Если мы работаем в консоли запросов или создаем отчет, нам необходимо изменить условие в тексте запроса так, чтобы система ожидала не одно конкретное значение, а целый массив (список). Вместо прямого сравнения через знак равенства =, мы будем использовать оператор В (в английской версии IN).
Рассмотрим пример кода, который позволит нам передать целый список кодов:
ГДЕ
ОсновноеСредство.Код В (&СписокКодов)
В данном случае &СписокКодов является параметром. При выполнении такого запроса система предложит вам заполнить этот параметр. В открывшемся окне редактирования параметра вы сможете выбрать тип Список значений, что позволит добавить туда неограниченное количество строк.
Важно понимать разницу между поиском по коду и поиском по ссылке. Если у вас на руках именно строковые инвентарные номера, используйте поле Код. Если же у вас есть выгрузка самих объектов, правильнее будет написать:
ГДЕ
ОсновноеСредство.Ссылка В (&СписокОС)
Преимущество этого метода: это универсальный подход, который работает как в обычных, так и в управляемых формах, а также в любой консоли запросов. Он позволяет избежать «раздувания» текста самого запроса, так как данные хранятся в параметре, а не в теле кода. Для удобной работы с параметрами и отборами в запросах можно использовать инженерную консоль запросов с поддержкой чтения данных из Excel.
Выясним ситуацию, когда нам нужно быстро выполнить запрос, не настраивая параметры. В языке запросов 1С допустимо перечисление значений непосредственно в скобках после оператора В. Это выглядит следующим образом:
ГДЕ
ОсновноеСредство.Код В ("000000001", "000000002", "000000005")
Однако у этого способа есть существенные ограничения, которые мы должны учитывать:
Поэтому данный метод мы рекомендуем использовать только для небольших списков (до 50-100 элементов).
Рассмотрим ситуацию, когда отчет создан на базе Системы компоновки данных (СКД). Это наиболее частый случай для современных конфигураций. В СКД предусмотрен встроенный механизм массовой вставки данных.
Разберем по шагам, как это сделать:
ОсновноеСредство.Код) и установите вид сравнения В списке.Проанализируем нюанс: если в справочнике для поля Код или ИнвентарныйНомер включен режим «Ввод по строке», то при вставке из буфера 1С попытается автоматически сопоставить текстовые строки с реальными объектами базы данных. Это очень удобный прием, который часто используют менеджеры и бухгалтеры при работе с артикулами или кодами ОС.
Посмотрим на специфику работы в старых конфигурациях, таких как «Управление производственным предприятием» (УПП). Пользователи часто жалуются, что кнопки «Вставить из буфера» в обычном интерфейсе просто нет.
В этом случае проанализируем альтернативные варианты:
Рассмотрим важные технические моменты, которые помогут избежать ошибок при работе с большими списками отборов:
1. Ограничение SQL Server: При использовании оператора IN в запросе, количество элементов в списке не должно быть бесконечным. Хотя теоретический предел очень высок, на практике при списках более 10 000 элементов запрос начинает работать крайне медленно. В таких случаях эффективнее использовать временные таблицы, но это требует навыков программирования.
2. Типизация данных: Убедитесь, что коды в вашем списке из Excel полностью совпадают по формату с кодами в 1С. В 1С коды часто имеют фиксированную длину и дополнены ведущими нулями (например, "000000012" вместо "12"). Если при загрузке через буфер обмена 1С не находит соответствия, проверьте длину строки и наличие этих нулей.
3. Ссылки vs Коды: По возможности всегда старайтесь переходить от поиска по строковым кодам к поиску по ссылкам (Ref). Это ускоряет работу базы данных, так как поиск по уникальному идентификатору (GUID) происходит быстрее, чем по текстовому полю.
Таким образом, мы рассмотрели основные методы массовой установки значений в отборы. Для новичка самым простым будет использование параметра &СписокКодов в конструкторе запросов или поиск заветной кнопки «Вставить из буфера» в окне редактирования списка значений СКД. Для автоматизации переноса значений подойдет программа для наполнения списков в отчетах из Excel или буфера обмена.