Как реализовать групповое изменение реквизитов с сохранением настроек и значений для повторного использования?

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

В практике администратора или разработчика 1С часто возникает задача массового редактирования данных. Однако стандартная обработка «Групповое изменение реквизитов» имеет существенный недостаток: если вам нужно регулярно менять одни и те же наборы полей на разные, но заранее известные значения (например, для тестирования или сезонной смены цен/аналитики), вводить их каждый раз вручную крайне утомительно. Рассмотрим, как реализовать механизм, позволяющий сохранять «сценарии» изменений и применять их в несколько кликов.

Метод 1. Использование типовой обработки «Загрузка данных из табличного документа»

Проанализируем самый доступный способ, который не требует программирования, но решает задачу сохранения «шаблонов» изменений. Речь идет о типовой обработке ЗагрузкаДанныхИзТабличногоДокумента.epf (или встроенной в современные конфигурации функции «Загрузка данных из файла»).

Разберем по шагам, как это работает в контексте нашей задачи:

  1. Подготовка шаблона в Excel: Создадим таблицу, где первая колонка будет идентификатором объекта (например, «Код» или «Наименование» кассы), а последующие колонки — новыми значениями реквизитов. Мы можем создать несколько файлов: Вариант_1.xlsx, Вариант_2.xlsx и так далее.
  2. Настройка сопоставления: При открытии обработки выберем режим загрузки в справочник (например, Кассы). Укажем, что идентификация происходит по полю Код. Для остальных полей выберем режим «Обновлять».
  3. Сохранение настройки: В типовой обработке есть возможность сохранить текущую настройку (сопоставление колонок и полей базы) во внешний файл .mxl. Это именно то, что нужно: вам не придется каждый раз заново указывать, какая колонка Excel соответствует какому реквизиту 1С.

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

Метод 2. Консоль запросов с обработкой результата

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

Проанализируем алгоритм действий:

  1. Пишем запрос, который выбирает нужные нам объекты. Например, все кассы определенной организации.
  2. В консоли переходим на вкладку «Обработка результата» (в разных консолях она может называться «Выполнить код» или «Обработка»).
  3. Пишем короткий алгоритм на встроенном языке 1С.

Посмотрим на пример кода, который можно использовать в консоли для массового изменения:


Для Каждого СтрокаРезультата Из РезультатЗапроса Цикл
    Объект = СтрокаРезультата.Ссылка.ПолучитьОбъект();
    // Здесь мы можем задать логику выбора значения
    // Например, если мы заранее подготовили условие или переменную
    Если ВариантИзменения = 1 Тогда
        Объект.ВалютаПоУмолчанию = Справочники.Валюты.НайтиПоКоду("840"); // USD
        Объект.СчетУчета = ПланыСчетов.Хозрасчетный.КассаОрганизации_01;
    ИначеЕсли ВариантИзменения = 2 Тогда
        Объект.ВалютаПоУмолчанию = Справочники.Валюты.НайтиПоКоду("643"); // RUB
        Объект.СчетУчета = ПланыСчетов.Хозрасчетный.КассаОрганизации;
    КонецЕсли;
    
    Попытка
        Объект.Записать();
    Исключение
        Сообщить("Ошибка записи объекта " + Объект + ": " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

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

Метод 3. Программная реализация с использованием Хранилища настроек

Если вы разрабатываете собственную обработку, стоит обратить внимание на механизм ХранилищеОбщихНастроек. Это позволит пользователю сохранять введенные в таблицу значения непосредственно в базе данных под своим именем.

Разберем, как реализовать сохранение таблицы значений, в которой пользователь указал старые и новые реквизиты, в формат JSON для последующего восстановления. Выясним, почему JSON — это отличный выбор: он легко читается и устойчив к изменениям метаданных.

Пример кода для сохранения настроек в файл:


ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,,, ЭлементыСоставаJSON.Авто);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл("C:\Settings\MyUpdate.json");
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ТаблицаСДанными, НазначениеТипаXML.Явное);
ЗаписьJSON.Закрыть();

А вот как мы можем прочитать эти данные обратно:


ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл("C:\Settings\MyUpdate.json");
ТаблицаДанных = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON, Тип("ТаблицаЗначений"));
ЧтениеJSON.Закрыть();
// Теперь таблица заполнена вашими сохраненными значениями "НовоеЗначение1", "НовоеЗначение2"

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

Метод 4. Использование механизма версионирования

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

Рассмотрим, как это помогает в нашей задаче:

Подведение итогов и рекомендации

Проанализировав все варианты, мы можем сделать следующие выводы:

  1. Для пользователя без навыков программирования лучшим выбором будет «Загрузка данных из табличного документа». Она позволяет хранить разные сценарии изменений в виде отдельных Excel-файлов и сохранять шаблоны сопоставления.
  2. Для администратора и разработчика оптимальна Консоль запросов. Это мощный инструмент, позволяющий сохранять сложные алгоритмы изменений в файлы запросов.
  3. Для автоматизации регулярных процессов стоит написать небольшую внешнюю обработку, использующую JSON-сериализацию или Хранилище настроек, чтобы пользователь мог выбирать готовые пресеты (наборы настроек) прямо в интерфейсе 1С.

Помните, что любые массовые изменения в базе данных следует сначала тестировать на копии, а механизм версионирования объектов является отличной «страховкой» на случай непредвиденных результатов групповой обработки.

← На главную