Как делать массовые операции в базе через групповую обработку

· 9 мин

Содержание

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

Самый быстрый способ вызвать групповую обработку в 1С — выделить строки в любом списке (Ctrl+A или мышью с Shift) и нажать Еще → Изменить выделенные…. Откроется форма группового изменения реквизитов: выбираете поле, задаёте значение, запускаете. Для более сложных операций (провести, пометить на удаление, выполнить по отбору) работает отдельная штатная обработка Групповая обработка справочников и документов.

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

Что такое групповая обработка и когда она выручает

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

Типовые задачи, которые она закрывает:

  • 🔁 перепровести документы после изменения учётной политики или исправления ошибок;
  • ✏️ массово заменить значение реквизита (ставку НДС, счёт учёта, менеджера, вид номенклатуры);
  • 🗑️ пометить на удаление устаревшие элементы и затем удалить их;
  • ✅ установить или снять флажок (например, «Услуга», «Не закупается»);
  • 📦 заполнить пустое поле у группы элементов одинаковым значением.

Групповая обработка выручает там, где объектов десятки и сотни, а правка однотипная. Если нужно изменить один реквизит у трёх элементов — проще открыть карточки. Если у двухсот — только массовая операция.

Штатные инструменты в типовых конфигурациях

В конфигурациях на базе «Библиотеки стандартных подсистем» (БП 3.0, ЗУП 3.1, УТ 11, ERP) есть три готовых инструмента. Пути меню в этих трёх конфигурациях стабильны.

1. Изменить выделенные — быстрое групповое изменение реквизитов. Открываете список, выделяете нужные строки, в командной панели Еще → Изменить выделенные…. В форме выбираете реквизит из списка доступных, задаёте новое значение и нажимаете Изменить реквизиты. Подходит для справочников: номенклатура, контрагенты, физлица.

2. Групповая обработка справочников и документов — универсальный вариант. Вызывается через Главное меню → Все функции → Обработки → Групповая обработка справочников и документов. Если пункта Все функции нет, включите его: Главное меню → Сервис и настройки → Настройки → Параметры → ☑ Отображать команду «Все функции».

Здесь вы задаёте тип объекта, отбор по реквизитам и действие: Провести, Отменить проведение, Установить пометку удаления, Изменить реквизит. Отбор гибче, чем у «Изменить выделенные»: можно отобрать документы за период, по контрагенту, по статусу.

3. Групповое перепроведение документов — для восстановления последовательности. В БП 3.0 находится в разделе Администрирование → Обслуживание → Проведение документов. Перепроводит документы за выбранный период в хронологическом порядке — это важно, когда движения зависят от последовательности (себестоимость, партии, взаиморасчёты).

Эти три инструмента универсальны и работают в БП 3.0, ЗУП 3.1 и УТ 11 одинаково — меняется только раздел, из которого вызывается обслуживание. Чтобы не искать по памяти:

ЗадачаКак вызвать
Изменить реквизит у выделенных строкВыделить в списке → Еще → Изменить выделенные…
Изменить/провести по отборуВсе функции → Групповая обработка справочников и документов
Перепровести за периодРаздел Администрирование (в УТ — НСИ и администрирование) → Обслуживание → Проведение документов
Удалить помеченныеАдминистрирование → Обслуживание → Удаление помеченных объектов

Для повседневной правки справочников хватает Изменить выделенные. Для операций с проведением документов берите обработку с отбором по периоду — она проводит в правильном порядке.

Как групповая обработка работает внутри платформы

Под капотом групповая обработка — это обычная обработка (объект типа «Обработка»), которая строит выборку объектов и перебирает её в цикле. Магии нет: тот же код, который вы бы написали руками, только с готовым интерфейсом отбора.

Алгоритм такой:

  1. По заданному отбору формируется выборка — запросом или методом Выбрать().
  2. Для каждого элемента вызывается ПолучитьОбъект() — платформа читает объект целиком.
  3. Применяется действие: меняется реквизит и вызывается Записать(), либо Записать(РежимЗаписиДокумента.Проведение) для проведения.
  4. Запись идёт внутри транзакции. На время записи объект блокируется, чтобы другой сеанс не изменил его параллельно.

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

Типовые сценарии: что и чем делают

Чтобы не гадать, какой инструмент взять под задачу, пройдите по дереву ниже.

Что нужно сделать с группой объектов?

Разберём частые случаи из практики.

  • Смена счёта учёта номенклатуры. Через Изменить выделенные — если счёт хранится реквизитом. Если учёт настроен регистром сведений (как в БП 3.0 — «Счета учёта номенклатуры»), групповая обработка реквизита не поможет, правьте регистр.
  • Перепроведение после правок. Сначала восстанавливают последовательность, потом перепроводят документы за период. Делать это лучше в нерабочее время.
  • Чистка справочника. Пометка на удаление группой, затем Администрирование → Обслуживание → Удаление помеченных объектов — удаление проверит ссылки и не даст удалить используемые элементы.

Пример с числами. В базе 320 позиций номенклатуры с ошибочной ставкой НДС. Через Изменить выделенные правка займёт один проход: выделить все строки (Ctrl+A), выбрать реквизит со ставкой, задать нужное значение. 320 карточек вручную — это около двух часов; групповая обработка — минута. Но если ставка влияет на уже проведённые документы, одной правки справочника мало: документы придётся перепровести, иначе в старых движениях останется прежняя ставка.

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

Групповая обработка, регламент или обмен — что выбрать

Групповую обработку часто путают с соседними механизмами. Разница в том, разовое это действие или повторяющееся.

МеханизмКогда применятьЗапуск
Групповая обработкаРазовая массовая правка текущих данныхВручную, по месту
Регламентное заданиеТа же операция регулярно, по расписаниюАвтоматически, на сервере
Обмен даннымиСинхронизация двух баз (учёт + ЗУП, УТ + БП)По правилам обмена

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

Групповая обработка не переносит данные между базами. Если задача звучит как «перенести номенклатуру из УТ в БП», групповая обработка не тот инструмент — настраивайте синхронизацию.

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

Чем рискуют массовые операции и как подстраховаться

У групповой обработки нет кнопки «отменить всё». Если вы перепровели не те документы или заменили реквизит не на то значение, откат — только восстановлением из копии или обратной массовой операцией. Поэтому порядок действий одинаков для любой массовой правки.

Перед массовой операцией
Выполнено: 0 / 5

На что обратить внимание отдельно:

  • 🔒 Блокировки. Большая транзакция блокирует изменяемые объекты. Массовое перепроведение в разгар рабочего дня подвесит пользователей. Делайте это, когда в базе никого нет.
  • 📊 Изменение итогов. Перепроведение меняет движения по регистрам, а значит — остатки и суммы в отчётах. После операции всегда сверяйте оборотно-сальдовую ведомость.
  • 🧮 Последовательность. Для документов, зависящих от хронологии (партии, себестоимость, валютные расчёты), важен порядок проведения. Используйте инструмент с сортировкой по дате, а не перепроводите вразнобой.
  • ❌ Ошибки на части объектов. Если один документ не проводится (не хватает остатков, заблокирован период), обработка либо пропустит его, либо остановится. Проверяйте журнал — какие объекты не обработались.
  • 🔢 Слишком широкий отбор. Самая частая беда — операция зацепила больше, чем вы думали. Перед запуском посмотрите, сколько строк попало под отбор, и сравните с ожидаемым числом. Разница в разы — верный признак, что условие задано неверно.

Отдельно про закрытый период. Если дата документа попадает в период, запрещённый к редактированию (дата запрета изменения данных), перепроведение по этим документам не пройдёт. Сначала снимают запрет на нужный интервал, выполняют операцию и возвращают запрет обратно.

Как написать свою обработку для массовых операций

Когда штатных действий не хватает (например, нужно пересчитать поле по формуле или заполнить реквизит из внешнего файла), пишут внешнюю обработку — файл .epf. Её создают в Конфигураторе или в расширении конфигурации (расширения доступны с платформы 8.3.6).

Простейший каркас — перебор элементов справочника и запись реквизита:

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    Объект.Комментарий = "Проверено";
    Объект.Записать();
КонецЦикла;

Для документов вместо простой записи используют режим проведения:

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

Несколько правил, которые экономят отладку:

  • выборку объектов стройте запросом с отбором — так проще ограничить набор и не тащить лишнее;
  • большие объёмы разбивайте на порции и фиксируйте транзакцию по частям, чтобы не держать блокировку на всю базу;
  • оборачивайте запись в Попытка … Исключение и собирайте список необработанных объектов — иначе одна ошибка оборвёт весь проход;
  • тяжёлые операции запускайте как фоновое задание на сервере, чтобы не держать открытым клиентский сеанс.

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

Ещё одна типичная ошибка новичка — менять коллекцию прямо в цикле по ней. Если нужно удалить строки табличной части, идите по индексам в обратном порядке, иначе при удалении сместятся номера оставшихся строк и часть будет пропущена.

Если задача повторяется — не копируйте внешнюю обработку по рукам. Подключите её в расширении конфигурации или оформите регламентным заданием: так она переживёт обновления и не потеряется.

Частые вопросы

Можно ли отменить групповую обработку?
Единой кнопки отмены нет. Если успели только изменить реквизит — выполните обратную массовую операцию. Если перепровели документы — восстановите базу из резервной копии. Поэтому копию делают до запуска.
Групповое проведение обходит проверки документа?
Нет. Обработка вызывает то же проведение, что и кнопка в карточке, со всеми контролями остатков и заполнением движений. Документ, который не проводится вручную, не проведётся и группой.
Чем «Изменить выделенные» отличается от «Групповой обработки справочников и документов»?
Изменить выделенные меняет реквизиты у строк, которые вы вручную отметили в списке. Отдельная обработка Групповая обработка справочников и документов умеет отбирать объекты по условиям и выполнять не только изменение, но и проведение, пометку удаления, отмену проведения.
Почему после массового перепроведения разошлись суммы в отчётах?
Перепроведение пересчитало движения по регистрам, а значит изменились остатки и обороты. Это нормально, если проводили за весь зависимый период и в правильной хронологии. Сверьте оборотно-сальдовую ведомость до и после.
Можно ли запускать групповую обработку, когда в базе работают пользователи?
Правку справочников — обычно да, она быстрая. Массовое перепроведение документов лучше делать в нерабочее время: длинная транзакция блокирует объекты и тормозит остальных.