Как выполнить групповое изменение реквизитов для списка объектов из внешнего файла?

Программист 1С v8.3 (Управляемые формы)
← На главную

В практике администратора или программиста 1С часто возникает задача: необходимо массово изменить реквизиты (например, пометить на удаление) для конкретного перечня объектов, который предоставлен в виде таблицы Excel или текстового списка. Стандартная обработка Групповое изменение реквизитов отлично справляется с простыми фильтрами (например, «все контрагенты с пустым ИНН»), но пасует, когда нужно вставить список из 500 конкретных наименований или кодов. Разберем по шагам, как решить эту задачу максимально эффективно, используя как стандартные, так и продвинутые инструменты.

Метод 1. Секретные возможности стандартной обработки (вставка из буфера)

Многие пользователи ошибочно полагают, что в поле фильтра можно только вводить значения вручную или выбирать их по одному. Проанализируем ситуацию: если у вас есть колонка кодов в Excel, вы можете использовать оператор «В списке». Рассмотрим алгоритм действий:

  1. Откроем обработку Групповое изменение реквизитов (для удобства можно использовать групповое изменение реквизитов с формы) и выберем объект (например, Справочник.Контрагенты).
  2. Перейдем по гиперссылке «Все элементы» для настройки отбора.
  3. Добавим новое условие, выберем поле Код (или Наименование, если оно уникально) и установим вид сравнения «В списке».
  4. Нажмем на кнопку выбора (три точки) в колонке «Значение». Откроется форма «Выбор значений».
  5. Важный момент: в этой форме ищем кнопку «Подбор» или иконку с зеленым плюсом и листком (зависит от версии платформы). Она позволяет загрузить список значений из буфера обмена.
  6. Скопируем колонку с кодами из вашего файла XLSX и вставим их в открывшееся окно. Система 1С автоматически распознает каждую строку как отдельный элемент списка, что позволяет выполнить загрузку списка значений для реквизитов.

После этого вам останется только нажать «ОК», выбрать реквизит Пометка удаления и установить значение Да. Это самый простой способ, не требующий программирования.

Метод 2. Использование «Произвольного алгоритма» (режим разработчика)

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

Нажмем кнопку «Дополнительные параметры» внизу формы обработки. В появившемся окне установим флаги «Показывать служебные реквизиты» и «Режим разработчика». После этого в основной форме появится новая закладка — «Произвольный алгоритм».

Рассмотрим пример логики, которую можно применить в этом окне. Предположим, у нас есть массив кодов, которые нужно обработать. Мы можем написать следующий код:


// Создаем список кодов, которые нужно оставить (или удалить)
СписокКодов = Новый СписокЗначений;
СписокКодов.Добавить("000001");
СписокКодов.Добавить("000005");
// ... и так далее

// Объект в данном контексте — это текущий элемент справочника из выборки
Если СписокКодов.НайтиПоЗначению(Объект.Код) <> Неопределено Тогда
    Объект.ПометкаУдаления = Истина;
КонецЕсли;

Проанализируем преимущества этого метода: вы можете загрузить в СписокКодов данные прямо из текстового файла на диске, используя встроенные функции работы с файлами, что избавляет от необходимости ручного ввода.

Метод 3. Универсальная загрузка данных из табличного документа

Существует официальная обработка от фирмы 1С, которая называется Загрузка данных из табличного документа. Также существует универсальная загрузка из Excel, которая часто оказывается эффективнее Группового изменения реквизитов, когда на входе имеется готовый Excel-файл. Выясним причину, почему это так: данная обработка позволяет сопоставить данные файла с объектами в базе и одновременно обновить их реквизиты.

Пошаговое руководство по использованию:

  1. Запустим обработку и выберем режим «Загрузка в справочник», выбрав Контрагенты.
  2. Нажмем «Открыть файл» и выберем ваш XLSX-документ.
  3. На вкладке «Настройка» укажем поле для поиска — например, Код или ИНН. Напротив этого поля должна стоять галочка «Поиск».
  4. Для реквизита Пометка удаления в колонке «Режим загрузки» выберем «Установить значение», а в колонке «Значение» укажем Истина.
  5. Нажмем «Загрузить данные».

Программа сама найдет в базе всех контрагентов по ключевому полю (Код/ИНН) из вашего файла и массово проставит им нужную отметку. Это исключает этап создания сложных фильтров в групповой обработке.

Метод 4. Работа через XML-файл настроек

Если список контрагентов исчисляется тысячами, можно воспользоваться методом редактирования XML-настроек отбора. Посмотрим на этот процесс подробнее:

В типовой обработке Групповое изменение реквизитов можно сохранить настройки отбора в файл (кнопка с дискетой или через меню «Еще»). Сохраненный файл имеет структуру XML. Внутри тегов <Filter> описываются условия. Вы можете открыть этот файл в текстовом редакторе (например, Notepad++) и с помощью регулярных выражений или простой автозамены быстро размножить блоки <Item>, вставив туда значения из вашего списка. После этого загрузите файл обратно в обработку.

Метод 5. Использование «Инструментов разработчика»

Если вы опытный пользователь или программист, крайне рекомендуем использовать пакет «Инструменты разработчика» (авторства Сергея Старых). В нем есть специализированные консоли запросов и инструменты обработки результатов, которые позволяют:

Важные замечания по производительности

При массовом изменении тысяч объектов важно помнить о скорости. В настройках любой из вышеперечисленных обработок ищите опцию «Записывать объекты без проверок» (в коде это соответствует параметру ОбменДанными.Загрузка = Истина). Рассмотрим, что это дает: программа проигнорирует тяжелые проверки в процедурах ПередЗаписью и ПриЗаписи, что ускорит процесс в 5–10 раз. Однако будьте осторожны: используйте этот режим только тогда, когда уверены в корректности данных, так как логический контроль конфигурации будет отключен.

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

← На главную