В практике администратора или программиста 1С часто возникает задача: необходимо массово изменить реквизиты (например, пометить на удаление) для конкретного перечня объектов, который предоставлен в виде таблицы Excel или текстового списка. Стандартная обработка Групповое изменение реквизитов отлично справляется с простыми фильтрами (например, «все контрагенты с пустым ИНН»), но пасует, когда нужно вставить список из 500 конкретных наименований или кодов. Разберем по шагам, как решить эту задачу максимально эффективно, используя как стандартные, так и продвинутые инструменты.
Многие пользователи ошибочно полагают, что в поле фильтра можно только вводить значения вручную или выбирать их по одному. Проанализируем ситуацию: если у вас есть колонка кодов в Excel, вы можете использовать оператор «В списке». Рассмотрим алгоритм действий:
Групповое изменение реквизитов (для удобства можно использовать групповое изменение реквизитов с формы) и выберем объект (например, Справочник.Контрагенты).Код (или Наименование, если оно уникально) и установим вид сравнения «В списке».После этого вам останется только нажать «ОК», выбрать реквизит Пометка удаления и установить значение Да. Это самый простой способ, не требующий программирования.
Если задача сложнее и стандартных фильтров недостаточно, мы можем задействовать программные возможности самой обработки или изменение недоступных реквизитов. Для этого нам нужно активировать специальные настройки. Разберем, как это сделать:
Нажмем кнопку «Дополнительные параметры» внизу формы обработки. В появившемся окне установим флаги «Показывать служебные реквизиты» и «Режим разработчика». После этого в основной форме появится новая закладка — «Произвольный алгоритм».
Рассмотрим пример логики, которую можно применить в этом окне. Предположим, у нас есть массив кодов, которые нужно обработать. Мы можем написать следующий код:
// Создаем список кодов, которые нужно оставить (или удалить)
СписокКодов = Новый СписокЗначений;
СписокКодов.Добавить("000001");
СписокКодов.Добавить("000005");
// ... и так далее
// Объект в данном контексте — это текущий элемент справочника из выборки
Если СписокКодов.НайтиПоЗначению(Объект.Код) <> Неопределено Тогда
Объект.ПометкаУдаления = Истина;
КонецЕсли;
Проанализируем преимущества этого метода: вы можете загрузить в СписокКодов данные прямо из текстового файла на диске, используя встроенные функции работы с файлами, что избавляет от необходимости ручного ввода.
Существует официальная обработка от фирмы 1С, которая называется Загрузка данных из табличного документа. Также существует универсальная загрузка из Excel, которая часто оказывается эффективнее Группового изменения реквизитов, когда на входе имеется готовый Excel-файл. Выясним причину, почему это так: данная обработка позволяет сопоставить данные файла с объектами в базе и одновременно обновить их реквизиты.
Пошаговое руководство по использованию:
Контрагенты.Код или ИНН. Напротив этого поля должна стоять галочка «Поиск».Пометка удаления в колонке «Режим загрузки» выберем «Установить значение», а в колонке «Значение» укажем Истина.Программа сама найдет в базе всех контрагентов по ключевому полю (Код/ИНН) из вашего файла и массово проставит им нужную отметку. Это исключает этап создания сложных фильтров в групповой обработке.
Если список контрагентов исчисляется тысячами, можно воспользоваться методом редактирования XML-настроек отбора. Посмотрим на этот процесс подробнее:
В типовой обработке Групповое изменение реквизитов можно сохранить настройки отбора в файл (кнопка с дискетой или через меню «Еще»). Сохраненный файл имеет структуру XML. Внутри тегов <Filter> описываются условия. Вы можете открыть этот файл в текстовом редакторе (например, Notepad++) и с помощью регулярных выражений или простой автозамены быстро размножить блоки <Item>, вставив туда значения из вашего списка. После этого загрузите файл обратно в обработку.
Если вы опытный пользователь или программист, крайне рекомендуем использовать пакет «Инструменты разработчика» (авторства Сергея Старых). В нем есть специализированные консоли запросов и инструменты обработки результатов, которые позволяют:
МенеджерКонтактов для быстрого поиска по GUID, что гарантирует 100% точность сопоставления.При массовом изменении тысяч объектов важно помнить о скорости. В настройках любой из вышеперечисленных обработок ищите опцию «Записывать объекты без проверок» (в коде это соответствует параметру ОбменДанными.Загрузка = Истина). Рассмотрим, что это дает: программа проигнорирует тяжелые проверки в процедурах ПередЗаписью и ПриЗаписи, что ускорит процесс в 5–10 раз. Однако будьте осторожны: используйте этот режим только тогда, когда уверены в корректности данных, так как логический контроль конфигурации будет отключен.
Также не забывайте, что просто поставить пометку на удаление — это только половина дела. Чтобы окончательно очистить базу, необходимо выполнить стандартную регламентную процедуру Удаление помеченных объектов, которая проверит ссылочную целостность и убедится, что на данных контрагентов нет ссылок в документах.