Перейти к основному содержимому

Групповая обработка справочников и документов

Групповая обработка справочников и документов — универсальный инструмент для поиска объектов в справочниках и документах по произвольным условиям с последующей массовой обработкой найденных объектов.

Инструмент реализован как единая обработка-контейнер, внутри которой доступны предустановленные обработчики (подформы), а также предусмотрена возможность добавления собственных через механизм шаблонов.


Область применения

Типовые сценарии использования:

  • Массовое изменение реквизитов — установка значений реквизитов для группы справочников или документов (например, смена ставки НДС, ответственного, подразделения).
  • Проведение / отмена проведения документов — групповая обработка документов за период.
  • Перенумерация объектов — сквозная перенумерация справочников или документов с настройкой префиксов.
  • Пометка на удаление / снятие пометки — массовая пометка на удаление или её снятие.
  • Изменение времени документов — сдвиг времени документов на начало/конец дня или на произвольное время.
  • Изменение сумм операций — массовое изменение суммовых реквизитов (установка, увеличение/уменьшение на сумму или процент).
  • Произвольный алгоритм — выполнение произвольного кода на встроенном языке 1С для каждого объекта выборки.
  • Каскадная обработка — последовательное выполнение нескольких обработок из списка выбранных за один проход.

Архитектура

Общая схема работы

Инструмент состоит из двух логических частей:

  1. Форма подбора и обработки объектов (ПодборИОбработка) — основная форма, отвечающая за:

    • выбор объекта поиска (справочник или документ);
    • настройку отборов через СКД или произвольный запрос;
    • выполнение поиска и отображение результатов;
    • координацию выбранных обработок.
  2. Подформы-обработчики — каждая реализует конкретный вид обработки. Все подформы зарегистрированы в дереве доступных обработок через ЗагрузитьОбработки.

Механизм поиска объектов

Поиск реализован в процедуре НайтиСсылкиПоОтбору. Поддерживаются два режима:

Режим 0 — Отбор по реквизитам (СКД)

  • Динамически строится запрос ВЫБРАТЬ ... ИЗ Справочник.<Имя> КАК _Таблица (или Документ.<Имя>).
  • В запрос включаются все реквизиты объекта метаданных и реквизиты табличных частей.
  • Условия отбора накладываются через механизм СКД (форма ФормаОтбора).
  • Дополнительно работает поиск по строке — ищет подстроку во всех строковых полях объекта (включая Наименование, Код, Номер и строковые реквизиты) через оператор ПОДОБНО.

Режим 1 — Произвольный запрос

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

Механизм обработки объектов

Каждая подформа-обработчик экспортирует метод ВыполнитьОбработку, который вызывается из основной формы для каждой выбранной обработки. Последовательность:

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

Запись объектов в базу выполняется через УИ_ОбщегоНазначения.ЗаписатьОбъектВБазу с учётом параметров записи формы (режим записи, проведение, транзакционность).


Интерфейс и сценарий работы

Главная форма — «Подбор и обработка объектов»

Основная форма разделена на две закладки.

Закладка «Найденные объекты»

Поля формы:

ПолеОписание
Объект поискаВыбор типа объекта: справочник или документ. Список формируется динамически из метаданных конфигурации с проверкой прав Просмотр.
Виды объектовТаблица выбора конкретных объектов метаданных (один или несколько справочников/документов). Открывает форму ФормаВыбораТаблиц с деревом объектов и табличных частей.
Обрабатывать табличные частиФлаг — если включён, поиск и обработка выполняются построчно по табличным частям выбранных объектов.
Строка поискаБыстрый поиск подстроки во всех строковых полях. Комбинация клавиш F9.
Настройки отбораОткрывает форму отбора на базе СКД с возможностью переключения в режим произвольного запроса.

Действия:

  • Найти ссылки — выполнить поиск по заданным условиям.
  • Выбрать все / Отменить выбор всех — массовое управление флажками в таблице результатов.
  • Результаты поиска отображаются в таблице с динамически формируемыми колонками (все реквизиты объекта). Для справочников отображается иконка группы/элемента и пометки удаления.

Главная форма — закладка «Найденные объекты» с результатами поиска, строкой поиска и настройками отбора.

Закладка «Обработки»

Элементы формы:

ЭлементОписание
Доступные обработкиДерево: первый уровень — типы обработок, второй уровень — сохранённые настройки для каждой обработки. Двойной щелчок / Enter открывает форму настройки.
Выбранные обработкиСписок обработок, добавленных для выполнения. Добавляются перетаскиванием из дерева доступных. Флажок включает/исключает обработку из группового выполнения.
ВыполнитьЗапускает последовательное выполнение всех включённых обработок из списка выбранных.

Главная форма — закладка «Обработки» с деревом доступных обработок и списком выбранных.


Доступные обработки

1. Произвольный алгоритм

Форма: ПроизвольныйАлгоритм

Выполняет произвольный код на встроенном языке 1С для каждого объекта выборки. Код вводится в редакторе с подсветкой синтаксиса (на базе компонента УИ_РедакторКода).

Переменные, доступные в коде:

ПеременнаяТипОписание
ОбъектОбъектТекущий обрабатываемый объект (получен через Ссылка.ПолучитьОбъект())
СтрокаТЧСтрокаТабличнойЧастиЕсли включён режим обработки табличных частей — текущая строка ТЧ

Пример:

Объект.Наименование = "Новое наименование";
Объект.Записать();

Поддерживает сохранение настроек (текст алгоритма) для повторного использования.

Форма настройки произвольного алгоритма — редактор кода с подсветкой синтаксиса.


2. Установка реквизитов

Форма: УстановкаРеквизитов

Позволяет массово установить значения реквизитов (включая реквизиты табличных частей) для выбранных объектов.

Параметры:

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

Алгоритм работы (ОбработатьОбъект):

  1. Для каждого включённого реквизита проверяется флаг Выбрать.
  2. Если реквизит табличной части — значение устанавливается в СтрокаТЧ[Реквизит.Реквизит].
  3. Иначе — в Объект[Реквизит.Реквизит].
  4. Объект записывается через УИ_ОбщегоНазначения.ЗаписатьОбъектВБазу.

Форма установки реквизитов — таблица реквизитов с флажками и новыми значениями.


3. Перенумерация объектов

Форма: ПеренумерацияОбъектов

Выполняет перенумерацию справочников (код) или документов (номер) с гибкой настройкой префиксов и начального номера.

Параметры:

ПараметрОписание
Начальный номерЧисло, с которого начинается нумерация.
Не изменять числовую нумерациюФлаг — если установлен, перезаписывается только префикс, числовая часть остаётся без изменений.
Способ обработки префиксов1 — оставить как есть; 2 — заменить на указанный префикс; 3 — добавить префикс слева; 4 — добавить префикс справа; 5 — заменить подстроку.
Строка префиксаЗначение префикса (для способов 2–5).
Заменяемая подстрокаПодстрока для замены (для способа 5).

Алгоритм работы (ОбработатьОбъект):

  1. Определяется тип номера (числовой или строковый) и длина номера из метаданных.
  2. Формируется новый номер с учётом префикса и числовой части.
  3. При возникновении коллизии (номер уже занят) — номер увеличивается на 1, а конфликтующий объект получает номер из «резервного диапазона» (максимальный номер минус индекс).
  4. После основного цикла выполняется проверка неуникальных номеров (ПроверитьНеУникальныеНомера).

Форма перенумерации — настройка начального номера, префикса и способа обработки.


4. Пометить на удаление

Форма: ПометитьНаУдаление

Устанавливает пометку удаления (ПометкаУдаления = Истина) для всех выбранных объектов. Не требует настройки — выполняется сразу после нажатия «Выполнить».


5. Снять пометку удаления

Форма: СнятьПометкуУдаления

Снимает пометку удаления (ПометкаУдаления = Ложь) для всех выбранных объектов.


6. Провести документы

Форма: ПровестиДокументы

Выполняет проведение всех выбранных документов. Оперативный режим проведения определяется параметрами записи формы.


7. Отменить проведение документов

Форма: ОтменитьПроведениеДокументов

Отменяет проведение всех выбранных документов.


8. Изменить время документов

Форма: ИзменитьВремяДокументов

Изменяет время в дате документов. Полезно для хронологического упорядочивания документов в пределах одного дня.

Параметры:

ПараметрОписание
Вид изменения времениВНачалоДня — установить время 00:00:00; ВКонецДня — установить 23:59:59; Произвольное — установить указанное время.
Введенное времяЗначение времени (для режима «Произвольное»).

Алгоритм (ОбработатьОбъект):

  • Для режима ВНачалоДня: Объект.Дата = НачалоДня(Ссылка.Дата)
  • Для режима ВКонецДня: Объект.Дата = КонецДня(Ссылка.Дата)
  • Для режима Произвольное: Объект.Дата = НачалоДня(Ссылка.Дата) + (ВведенноеВремя - '00010101')

9. Изменить сумму операции

Форма: ИзменитьСуммуОперации

Массовое изменение суммовых реквизитов объектов и их табличных частей.

Параметры:

ПараметрОписание
Вид действия над суммой0 — установить значение; 1 — увеличить на сумму; 2 — увеличить на %; 3 — уменьшить на сумму; 4 — уменьшить на %.
Параметр действияЧисловое значение для операции.
Текущий реквизитВыбор суммового реквизита для изменения.

Алгоритм (ИзменитьЗначениеСуммы):

ВидФормула
УстановитьРезультат = ПараметрДействия
Увеличить на суммуРезультат = ТекущееЗначение + ПараметрДействия
Увеличить на %Результат = ТекущееЗначение × (100 + ПараметрДействия) / 100
Уменьшить на суммуРезультат = ТекущееЗначение - ПараметрДействия
Уменьшить на %Результат = ТекущееЗначение × (100 - ПараметрДействия) / 100

10. Удалить

Форма: Удалить

Выполняет непосредственное удаление (физическое) выбранных объектов из базы данных.

warning

Операция необратима. Рекомендуется перед использованием создать резервную копию базы данных.


Расширение функциональности

Шаблон обработки

Форма ШаблонОбработки предназначена для создания собственных обработчиков.

Процедура добавления новой обработки:

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

Управление доступностью настроек выполняется в ЗагрузитьОбработки через соответствие СоответствиеДоступностиНастроек:

  • Истина — обработка поддерживает сохранение пользовательских настроек (отображаются на втором уровне дерева).
  • Ложь — обработка выполняется без предварительной настройки.

Ограничения и особенности

  • Права доступа — инструмент проверяет право Просмотр для каждого объекта метаданных при формировании списка выбора. Объекты без права просмотра не отображаются.
  • Режим совместимости — разработан для отключённой поддержки модальности и синхронных вызовов. Работает на платформе 8.3.12 и выше.
  • Табличные части — при включённом флаге «Обрабатывать табличные части» поиск и обработка выполняются построчно. В результатах поиска добавляются колонки Т_ТЧ (имя табличной части) и Т_НомерСтроки.
  • Производительность — при больших выборках рекомендуется использовать отборы для ограничения количества обрабатываемых объектов.
  • Параметры записи — для всех обработок, кроме «Произвольный алгоритм», используются параметры записи из основной формы (режим записи, проведение, транзакционность).

Связанные инструменты