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

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

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

Что такое набор в 1С и зачем он нужен

Набор в 1С:Предприятие — это временная коллекция объектов (документов, справочников, записей регистров), отобранных по определенным критериям. Его основное назначение — упростить работу с данными, когда требуется:

  • 📊 Формировать отчеты по сложным условиям (например, продажи за квартал с фильтрацией по контрагентам и номенклатуре).
  • 🔄 Обрабатывать данные пакетно (массовое изменение цен, статусов документов).
  • 🔗 Интегрировать данные между разными подсистемами 1С или внешними системами.
  • 📈 Анализировать динамику (сравнение остатков на разные даты, обороты по счетам).

Наборы делятся на два основных типа:

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

В конфигурациях типа 1С:Бухгалтерия 8.3 или 1С:Управление Торговлей 11 наборы часто используются для:

  • 📋 Создания регламентных отчетов (баланс, оборотно-сальдовая ведомость).
  • 🛒 Формирования заказов поставщикам на основе остатков.
  • 👥 Расчета зарплаты с учетом индивидуальных параметров сотрудников.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) наборы могут называться "выборками" или "пакетами данных", но принцип работы остается аналогичным. Всегда проверяйте терминологию в документации к вашей версии 1С.
📊 Для какой конфигурации 1С вы чаще создаете наборы?
1С:Бухгалтерия
1С:Управление Торговлей
1С:Зарплата и Управление Персоналом
1С:ERP
Другая конфигурация

Типы наборов в 1С: какой выбрать для вашей задачи

Выбор типа набора зависит от цели его создания. В наиболее распространены следующие виды:

Тип набора Назначение Примеры использования Особенности
Набор записей регистра Работа с регистрами накопления, бухгалтерии, сведений Анализ остатков товаров, обороты по счетам Требует указания периода и измерений
Набор документов Фильтрация и обработка документов Массовое проведение, печать пакета документов Можно фильтровать по реквизитам (дата, контрагент)
Набор справочников Выборка элементов справочников Формирование прайс-листов, групп номенклатуры Поддерживает иерархию и отбор по свойствам
Набор результатов запроса Сложные выборки с использованием языка запросов Сводные отчеты, аналитика по нескольким регистрам Требует знания синтаксиса 1С:Запрос
Объектный набор Работа с произвольными объектами метаданных Интеграция с внешними системами, ETL-процессы Гибкость настройки, но сложнее в реализации

Для большинства задач в 1С:Бухгалтерия или 1С:УТ достаточно наборов записей регистров или документов. Например, чтобы сформировать отчет по продажам, вам потребуется набор записей регистра накопления "Продажи" с фильтрацией по периоду и контрагентам.

Если же нужно создать сложный отчет с данными из нескольких регистров (например, сопоставить остатки товаров и заказы покупателей), придется использовать набор результатов запроса. Этот тип наиболее универсален, но требует знания языка запросов 1С.

💡

Перед созданием набора проверьте, нет ли уже готовых отчетов или обработок в вашей конфигурации, которые решают вашу задачу. Например, в 1С:УТ 11 есть стандартный отчет "Анализ продаж", который может заменить ручное создание набора.

Пошаговая инструкция: как создать набор в 1С через интерфейс

Рассмотрим процесс создания набора на примере 1С:Бухгалтерия 8.3 (ред. 3.0). Для других конфигураций (УТ 11, ЗУП 3.1) шаги будут аналогичными с незначительными различиями в меню.

Шаг 1. Откройте нужный раздел

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

Шаг 2. Выберите тип набора

Нажмите Создать → Набор записей (или аналогичный пункт). В открывшемся окне укажите:

  • 📌 Тип объекта (например, "Документ. РеализацияТоваровУслуг").
  • 📅 Период (дату начала и конца, если требуется).
  • 🔍 Отбор (фильтры по реквизитам: контрагент, склад, организация).

Шаг 3. Настройте параметры отбора

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

Контрагент = "ООО Розница" И Дата >= НачалоМесяца(ТекущаяДата())

Шаг 4. Сохраните и используйте набор

Нажмите Выполнить, затем Сохранить набор. Теперь его можно использовать в отчетах или обработках. Например, в отчете "Оборотно-сальдовая ведомость" выберите источник данных — ваш сохраненный набор.

Указан правильный тип объекта (документ/справочник/регистр)|

Период отбора соответствует задаче|

Фильтры не противоречат друг другу|

Набор протестирован на небольшом объеме данных-->

Создание набора с помощью языка запросов 1С

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

Пример 1. Простой запрос для набора документов

Допустим, нам нужно получить все документы ПоступлениеТоваровУслуг за последний квартал с суммой больше 100 000 рублей:

ВЫБРАТЬ

ПоступлениеТоваровУслуг.Ссылка КАК Документ,

ПоступлениеТоваровУслуг.Дата КАК Дата,

ПоступлениеТоваровУслуг.СуммаДокумента КАК Сумма

ИЗ

Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг

ГДЕ

ПоступлениеТоваровУслуг.Дата >= НачалоКвартала(ТекущаяДата())

И ПоступлениеТоваровУслуг.СуммаДокумента > 100000

Пример 2. Сложный запрос с объединением данных

Сформируем набор, который показывает остатки товаров на складах и заказы покупателей по этим товарам:

ВЫБРАТЬ

ОстаткиТоваров.Номенклатура КАК Номенклатура,

ОстаткиТоваров.КоличествоОстаток КАК Остаток,

ЗаказыПокупателей.Количество КАК Заказано,

ОстаткиТоваров.Склад КАК Склад

ИЗ

РегистрНакопления.ОстаткиТоваров.Остатки(&Период, ) КАК ОстаткиТоваров

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки(&Период, ) КАК ЗаказыПокупателей

ПО ОстаткиТоваров.Номенклатура = ЗаказыПокупателей.Номенклатура

ГДЕ

ОстаткиТоваров.КоличествоОстаток > 0

Чтобы выполнить такой запрос:

  1. Откройте Файл → Новый → Запрос.
  2. Вставьте текст запроса.
  3. Нажмите Выполнить и сохраните результат как набор.
⚠️ Внимание: При работе с большими базами данных сложные запросы могут тормозить систему. Всегда тестируйте их на копии базы или ограничивайте период выборки.
Как ускорить выполнение запроса?

Используйте индексируемые поля в условиях отбора (например, "Дата" вместо "Комментарий").

Разбивайте сложные запросы на несколько простых с промежуточными результатами.

Избегайте операций типа "ПОДОБНО" или "В" с большими списками значений.

Включите режим "Только для чтения" при выполнении запроса, если не планируете изменять данные.

Типичные ошибки при создании наборов и как их избежать

Даже опытные пользователи 1С сталкиваются с проблемами при работе с наборами. Вот наиболее распространенные ошибки и способы их решения:

  • 🚫 Набор пуст, хотя данные есть
    Причина: Неправильно указан период или фильтры слишком строгие.
    Решение: Проверьте даты в отборе (например, Дата >= НачалоДня(ТекущаяДата()) вместо Дата = ТекущаяДата()). Используйте оператор МЕЖДУ для диапазонов.
  • 🚫 Запрос выполняется слишком долго
    Причина: Отсутствуют индексы на поля отбора или запрос избыточно сложный.
    Решение: Оптимизируйте запрос (см. спойлер выше) или разбейте его на части.
  • 🚫 Ошибка "Поле не найдено"
    Причина: Опечатка в имени поля или неверный тип объекта.
    Решение: Проверьте синтаксис в конструкторе запросов или через Метаданные.
  • 🚫 Данные в наборе не актуальны
    Причина: Набор статический и не обновляется автоматически.
    Решение: Используйте динамические наборы или пересчитывайте их перед использованием.

Еще одна частая проблема — несовпадение типов данных при объединении таблиц. Например, если в одном регистре поле Номенклатура имеет тип "СправочникСсылка.Номенклатура", а в другом — "Строка", запрос завершится ошибкой. Всегда проверяйте типы полей через Конфигуратор → Метаданные.

Если вы работаете с 1С:ERP или 1С:КА 2.4, обратите внимание на настройки прав доступа. Пользователь должен иметь права на чтение объектов, включенных в набор, иначе данные не будут отображаться.

💡

Всегда проверяйте набор на небольшом периоде данных перед использованием в отчетах. Это поможет избежать ошибок при работе с большими объемами.

Продвинутые приемы: программное создание наборов

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

  • 🤖 Генерацию наборов по расписанию (например, ежедневные отчеты).
  • 🔄 Динамическое изменение параметров отбора (в зависимости от условий).
  • 📤 Экспорт наборов во внешние системы (Excel, JSON, XML).

Пример 1. Создание набора документов через код

// Создаем набор реализаций за текущий месяц

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| РеализацияТоваровУслуг.Ссылка КАК Документ,

| РеализацияТоваровУслуг.Дата КАК Дата,

| РеализацияТоваровУслуг.СуммаДокумента КАК Сумма

|ИЗ

| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

|ГДЕ

| РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода";

Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));

Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));

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

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

Пример 2. Экспорт набора в Excel

// Сохраняем набор в файл Excel

Таблица = Новый ТаблицаЗначений;

Таблица.Загрузить(НаборДокументов);

Экспорт = Новый ЭкспортВExcel;

Экспорт.УстановитьДанные(Таблица);

Экспорт.Выгрузить("C:\Отчеты\Реализации_"+Формат(ТекущаяДата(),"ДЛФ=DT")+".xlsx");

Для работы с большими наборами данных используйте пакетную обработку:

// Обработка документов пакетами по 100 штук

Выборка = НаборДокументов.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.Счетчик % 100 = 0 Тогда

Сообщить("Обработано " + Выборка.Счетчик + " документов");

Ожидание(0.1); // Пауза для разгрузки сервера

КонецЕсли;

// Ваш код обработки документа

КонецЦикла;

⚠️ Внимание: При программном создании наборов в 1С:Предприятие 8.3 учитывайте ограничения лицензии на количество одновременно открытых сессий. Чрезмерное использование ресурсов может привести к блокировке базы.

Примеры использования наборов в разных конфигурациях 1С

Разберем практические кейсы для популярных конфигураций.

1. 1С:Бухгалтерия 8.3
Задача: Сформировать набор проводок по счету 60.01 ("Расчеты с поставщиками") за квартал с разбивкой по контрагентам.

ВЫБРАТЬ

Хозрасчетный.СчетДт КАК Счет,

Хозрасчетный.Контрагент КАК Контрагент,

СУММА(Хозрасчетный.Сумма) КАК Сумма

ИЗ

РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет = &Счет) КАК Хозрасчетный

СГРУППИРОВАТЬ ПО

Хозрасчетный.СчетДт,

Хозрасчетный.Контрагент

2. 1С:Управление Торговлей 11
Задача: Набор товаров с остатками ниже минимального уровня на всех складах.

ВЫБРАТЬ

ОстаткиТоваров.Номенклатура КАК Товар,

ОстаткиТоваров.КоличествоОстаток КАК Остаток,

Номенклатура.МинимальныйЗапас КАК Минимум

ИЗ

РегистрНакопления.ОстаткиТоваров.Остатки(&ТекущаяДата, ) КАК ОстаткиТоваров

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

ПО ОстаткиТоваров.Номенклатура = Номенклатура.Ссылка

ГДЕ

ОстаткиТоваров.КоличествоОстаток < Номенклатура.МинимальныйЗапас

3. 1С:Зарплата и Управление Персоналом 3.1
Задача: Набор сотрудников с окладом выше среднего по подразделению.

ВЫБРАТЬ

Сотрудники.Ссылка КАК Сотрудник,

Сотрудники.Оклад КАК Оклад,

Подразделения.Наименование КАК Подразделение,

(ВЫБРАТЬ СРЕДНЕЕ(Оклад)

ИЗ Справочник.Сотрудники КАК Сотр2

ГДЕ Сотр2.Подразделение = Подразделения.Ссылка) КАК СреднийОклад

ИЗ

Справочник.Сотрудники КАК Сотрудники

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК Подразделения

ПО Сотрудники.Подразделение = Подразделения.Ссылка

ГДЕ

Сотрудники.Оклад > (ВЫБРАТЬ СРЕДНЕЕ(Оклад)

ИЗ Справочник.Сотрудники КАК Сотр2

ГДЕ Сотр2.Подразделение = Подразделения.Ссылка)

Для 1С:ERP или 1С:КА 2.4 аналогичные наборы можно создавать с учетом специфики этих конфигураций (например, использование регистров РасчетыСКонтрагентами или ЗапасыТоваров).

FAQ: Ответы на частые вопросы о наборах в 1С

Можно ли создать набор, который будет автоматически обновляться при изменении данных?

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

Как экспортировать набор в Excel с сохранением форматирования?

Используйте объект ЭкспортВExcel с настройкой стилей. Пример:

Экспорт = Новый ЭкспортВExcel;

Экспорт.УстановитьДанные(ТаблицаДанных);

Экспорт.АвтоФормат = Истина;

Экспорт.ИмяЛиста = "Отчет по продажам";

Экспорт.Выгрузить("C:\Отчеты\Продажи.xlsx");

Для сложного форматирования (цвета, условное форматирование) можно использовать библиотеку OneScript.Excel или Аспирион Excel.

Почему при создании набора через запрос возникает ошибка "Недостаточно памяти"?

Эта ошибка typична для больших баз данных. Решения:

  • Разбейте запрос на части (используйте временные таблицы).
  • Ограничьте период выборки.
  • Увеличьте лимит памяти в настройках сервера 1С (параметр /MaxMemory в файле запуска).
  • Используйте серверный вызов запроса (если работаете в клиент-серверном варианте).
Как передать набор данных в внешнюю систему через REST API?

Преобразуйте набор в формат JSON и отправьте POST-запрос. Пример:

// Преобразуем таблицу значений в JSON

ЗаписьJSON = Новый ЗаписьJSON;

ЗаписьJSON.УстановитьСтроку();

ЗаписьJSON.Записать(НаборДанных);

// Отправляем данные

HTTPЗапрос = Новый HTTPЗапрос("https://api.example.com/upload");

HTTPЗапрос.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());

HTTPЗапрос.УстановитьЗаголовок("Content-Type", "application/json");

Ответ = Новый HTTPСоединение().Получить(HTTPЗапрос);

Для аутентификации используйте заголовки или токены (в зависимости от API внешней системы).

Можно ли создать набор, который будет включать данные из разных баз 1С?

Да, для этого используйте:

  1. Распределенные информационные базы (РИБ) — если базы связаны в одну систему.
  2. HTTP-сервисы или REST API — для обмена данными между базами.
  3. Внешние обработки с подключением к нескольким базам через OLE или COM-соединение.

Пример кода для подключения к другой базе:

Соединение = Новый COMОбъект("V83.ComConnector");

База = Соединение.Connect("File=""C:\Bases\Base2"";Usr=""Администратор""");

Запрос = База.NewObject("Запрос");

Запрос.Текст = "ВЫБРАТЬ Первые 10 Номенклатура.Наименование КАК Товар ИЗ Справочник.Номенклатура КАК Номенклатура";

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