Как делать массовые операции в базе через групповую обработку
Содержание
Нужно поменять ставку НДС у двухсот позиций номенклатуры, перепровести документы за квартал или снять пометку удаления сразу с пачки элементов. Руками по одному — это часы. Для таких задач в 1С есть групповая обработка: один проход меняет или проводит сотни объектов.
Самый быстрый способ вызвать групповую обработку в 1С — выделить строки в любом списке (Ctrl+A или мышью с Shift) и нажать Еще → Изменить выделенные…. Откроется форма группового изменения реквизитов: выбираете поле, задаёте значение, запускаете. Для более сложных операций (провести, пометить на удаление, выполнить по отбору) работает отдельная штатная обработка Групповая обработка справочников и документов.
Ниже — где лежат эти инструменты в типовых конфигурациях, что происходит под капотом, какие операции безопасны, а какие могут испортить учёт, и как написать свою обработку под нестандартную задачу.
Что такое групповая обработка и когда она выручает
Групповая обработка — это механизм, который выполняет одно и то же действие над набором элементов справочника или документов. Вместо открытия каждой карточки вы задаёте отбор и операцию, а платформа прогоняет их в цикле.
Типовые задачи, которые она закрывает:
- 🔁 перепровести документы после изменения учётной политики или исправления ошибок;
- ✏️ массово заменить значение реквизита (ставку НДС, счёт учёта, менеджера, вид номенклатуры);
- 🗑️ пометить на удаление устаревшие элементы и затем удалить их;
- ✅ установить или снять флажок (например, «Услуга», «Не закупается»);
- 📦 заполнить пустое поле у группы элементов одинаковым значением.
Групповая обработка выручает там, где объектов десятки и сотни, а правка однотипная. Если нужно изменить один реквизит у трёх элементов — проще открыть карточки. Если у двухсот — только массовая операция.
Штатные инструменты в типовых конфигурациях
В конфигурациях на базе «Библиотеки стандартных подсистем» (БП 3.0, ЗУП 3.1, УТ 11, ERP) есть три готовых инструмента. Пути меню в этих трёх конфигурациях стабильны.
1. Изменить выделенные — быстрое групповое изменение реквизитов.
Открываете список, выделяете нужные строки, в командной панели Еще → Изменить выделенные…. В форме выбираете реквизит из списка доступных, задаёте новое значение и нажимаете Изменить реквизиты. Подходит для справочников: номенклатура, контрагенты, физлица.
2. Групповая обработка справочников и документов — универсальный вариант.
Вызывается через Главное меню → Все функции → Обработки → Групповая обработка справочников и документов. Если пункта Все функции нет, включите его: Главное меню → Сервис и настройки → Настройки → Параметры → ☑ Отображать команду «Все функции».
Здесь вы задаёте тип объекта, отбор по реквизитам и действие: Провести, Отменить проведение, Установить пометку удаления, Изменить реквизит. Отбор гибче, чем у «Изменить выделенные»: можно отобрать документы за период, по контрагенту, по статусу.
3. Групповое перепроведение документов
— для восстановления последовательности.
В БП 3.0 находится в разделе Администрирование → Обслуживание → Проведение документов. Перепроводит документы за выбранный период в хронологическом порядке — это важно, когда движения зависят от последовательности (себестоимость, партии, взаиморасчёты).
Эти три инструмента универсальны и работают в БП 3.0, ЗУП 3.1 и УТ 11 одинаково — меняется только раздел, из которого вызывается обслуживание. Чтобы не искать по памяти:
| Задача | Как вызвать |
|---|---|
| Изменить реквизит у выделенных строк | Выделить в списке → Еще → Изменить выделенные… |
| Изменить/провести по отбору | Все функции → Групповая обработка справочников и документов |
| Перепровести за период | Раздел Администрирование (в УТ — НСИ и администрирование) → Обслуживание → Проведение документов |
| Удалить помеченные | Администрирование → Обслуживание → Удаление помеченных объектов |
Для повседневной правки справочников хватает Изменить выделенные. Для операций с проведением документов берите обработку с отбором по периоду — она проводит в правильном порядке.
Как групповая обработка работает внутри платформы
Под капотом групповая обработка — это обычная обработка (объект типа «Обработка»), которая строит выборку объектов и перебирает её в цикле. Магии нет: тот же код, который вы бы написали руками, только с готовым интерфейсом отбора.
Алгоритм такой:
- По заданному отбору формируется выборка — запросом или методом
Выбрать(). - Для каждого элемента вызывается
ПолучитьОбъект()— платформа читает объект целиком. - Применяется действие: меняется реквизит и вызывается
Записать(), либоЗаписать(РежимЗаписиДокумента.Проведение)для проведения. - Запись идёт внутри транзакции. На время записи объект блокируется, чтобы другой сеанс не изменил его параллельно.
Из этого следуют два практических вывода. Во-первых, групповая обработка проводит документы по тем же правилам, что и ручное проведение — она не обходит проверки и алгоритмы заполнения движений. Во-вторых, чем больше объектов в одной транзакции, тем дольше держится блокировка и тем выше риск, что другие пользователи упрутся в ожидание.
Типовые сценарии: что и чем делают
Чтобы не гадать, какой инструмент взять под задачу, пройдите по дереву ниже.
Еще → Изменить выделенные…. Самый простой путь, отбор — вручную по списку.Все функции → Групповая обработка справочников и документов. Задаёте отбор, затем действие.Администрирование → Обслуживание → Проведение документов. Важен порядок — берите именно этот инструмент.Разберём частые случаи из практики.
- Смена счёта учёта номенклатуры. Через
Изменить выделенные— если счёт хранится реквизитом. Если учёт настроен регистром сведений (как в БП 3.0 — «Счета учёта номенклатуры»), групповая обработка реквизита не поможет, правьте регистр. - Перепроведение после правок. Сначала восстанавливают последовательность, потом перепроводят документы за период. Делать это лучше в нерабочее время.
- Чистка справочника. Пометка на удаление группой, затем
Администрирование → Обслуживание → Удаление помеченных объектов— удаление проверит ссылки и не даст удалить используемые элементы.
Пример с числами. В базе 320 позиций номенклатуры с ошибочной ставкой НДС. Через Изменить выделенные правка займёт один проход: выделить все строки (Ctrl+A), выбрать реквизит со ставкой, задать нужное значение. 320 карточек вручную — это около двух часов; групповая обработка — минута. Но если ставка влияет на уже проведённые документы, одной правки справочника мало: документы придётся перепровести, иначе в старых движениях останется прежняя ставка.
Отсюда общее правило: сначала правят справочники и регистры сведений, и только потом перепроводят зависящие от них документы. Обратный порядок даст расхождения.
Групповая обработка, регламент или обмен — что выбрать
Групповую обработку часто путают с соседними механизмами. Разница в том, разовое это действие или повторяющееся.
| Механизм | Когда применять | Запуск |
|---|---|---|
| Групповая обработка | Разовая массовая правка текущих данных | Вручную, по месту |
| Регламентное задание | Та же операция регулярно, по расписанию | Автоматически, на сервере |
| Обмен данными | Синхронизация двух баз (учёт + ЗУП, УТ + БП) | По правилам обмена |
Логика простая. Нужно один раз навести порядок в базе — групповая обработка. Операция повторяется каждый день или неделю (пересчёт, закрытие статусов) — её выносят в регламентное задание. Данные должны жить в двух базах одновременно — это уже обмен, а не обработка.
Групповая обработка не переносит данные между базами. Если задача звучит как «перенести номенклатуру из УТ в БП», групповая обработка не тот инструмент — настраивайте синхронизацию.
Если штатная обработка не берёт вашу задачу (например, значение реквизита надо вычислять по формуле или подтягивать из таблицы Excel), это не повод отказываться от массовой правки. Вариант — внешняя обработка под конкретную задачу, о ней ниже. Если правка одноразовая и объектов немного, иногда проще собрать значения запросом, выгрузить в таблицу, свериться глазами и только потом запускать изменение.
Чем рискуют массовые операции и как подстраховаться
У групповой обработки нет кнопки «отменить всё». Если вы перепровели не те документы или заменили реквизит не на то значение, откат — только восстановлением из копии или обратной массовой операцией. Поэтому порядок действий одинаков для любой массовой правки.
На что обратить внимание отдельно:
- 🔒 Блокировки. Большая транзакция блокирует изменяемые объекты. Массовое перепроведение в разгар рабочего дня подвесит пользователей. Делайте это, когда в базе никого нет.
- 📊 Изменение итогов. Перепроведение меняет движения по регистрам, а значит — остатки и суммы в отчётах. После операции всегда сверяйте оборотно-сальдовую ведомость.
- 🧮 Последовательность. Для документов, зависящих от хронологии (партии, себестоимость, валютные расчёты), важен порядок проведения. Используйте инструмент с сортировкой по дате, а не перепроводите вразнобой.
- ❌ Ошибки на части объектов. Если один документ не проводится (не хватает остатков, заблокирован период), обработка либо пропустит его, либо остановится. Проверяйте журнал — какие объекты не обработались.
- 🔢 Слишком широкий отбор. Самая частая беда — операция зацепила больше, чем вы думали. Перед запуском посмотрите, сколько строк попало под отбор, и сравните с ожидаемым числом. Разница в разы — верный признак, что условие задано неверно.
Отдельно про закрытый период. Если дата документа попадает в период, запрещённый к редактированию (дата запрета изменения данных), перепроведение по этим документам не пройдёт. Сначала снимают запрет на нужный интервал, выполняют операцию и возвращают запрет обратно.
Как написать свою обработку для массовых операций
Когда штатных действий не хватает (например, нужно пересчитать поле по формуле или заполнить реквизит из внешнего файла), пишут внешнюю обработку
— файл .epf. Её создают в Конфигураторе или в расширении конфигурации (расширения доступны с платформы 8.3.6).
Простейший каркас — перебор элементов справочника и запись реквизита:
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.Комментарий = "Проверено";
Объект.Записать();
КонецЦикла;
Для документов вместо простой записи используют режим проведения:
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &Нач И &Кон");
Запрос.УстановитьПараметр("Нач", НачалоДня(ДатаС));
Запрос.УстановитьПараметр("Кон", КонецДня(ДатаПо));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
Если Док.Проведен Тогда
Док.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецЦикла;
Несколько правил, которые экономят отладку:
- выборку объектов стройте запросом с отбором — так проще ограничить набор и не тащить лишнее;
- большие объёмы разбивайте на порции и фиксируйте транзакцию по частям, чтобы не держать блокировку на всю базу;
- оборачивайте запись в
Попытка … Исключениеи собирайте список необработанных объектов — иначе одна ошибка оборвёт весь проход; - тяжёлые операции запускайте как фоновое задание на сервере, чтобы не держать открытым клиентский сеанс.
Отдельно про производительность. Чтение объекта целиком через ПолучитьОбъект() дороже, чем выборка данных запросом. Если задача — только посчитать или собрать значения без изменения, объект получать не нужно: хватит результата запроса. ПолучитьОбъект() вызывают, когда объект действительно меняют и записывают.
Ещё одна типичная ошибка новичка — менять коллекцию прямо в цикле по ней. Если нужно удалить строки табличной части, идите по индексам в обратном порядке, иначе при удалении сместятся номера оставшихся строк и часть будет пропущена.
Если задача повторяется — не копируйте внешнюю обработку по рукам. Подключите её в расширении конфигурации или оформите регламентным заданием: так она переживёт обновления и не потеряется.
Частые вопросы
Можно ли отменить групповую обработку?
Групповое проведение обходит проверки документа?
Чем «Изменить выделенные» отличается от «Групповой обработки справочников и документов»?
Изменить выделенные меняет реквизиты у строк, которые вы вручную отметили в списке. Отдельная обработка Групповая обработка справочников и документов умеет отбирать объекты по условиям и выполнять не только изменение, но и проведение, пометку удаления, отмену проведения.