Каждый разработчик и администратор 1С регулярно сталкивается с необходимостью массового или точечного изменения реквизитов в справочниках или документах. Писать для каждой такой задачи одноразовый код в консоли запросов через ПолучитьОбъект() и Записать() быстро надоедает. Более того, ручное написание кода повышает риск совершить ошибку, забыть заблокировать объект или случайно запустить тяжелые обработчики проведения, что может нарушить согласованность данных в рабочей базе.
В этой статье мы подробно разберем, какие встроенные и сторонние инструменты существуют в экосистеме 1С для решения этой задачи. Мы проанализируем как простые пользовательские методы, так и мощные инструменты для профессиональных разработчиков.
Если в вашей конфигурации используется Библиотека стандартных подсистем (БСП), то для изменения реквизитов в небольшом списке документов вам даже не понадобятся специализированные обработки. Разработчики БСП интегрировали удобный механизм группового редактирования прямо в динамические списки.
Рассмотрим, как воспользоваться этим функционалом по шагам:
Этот способ идеален для повседневных задач, так как он не требует административных прав доступа (нужны только права на изменение самих редактируемых документов) и выполняется непосредственно из привычного интерфейса.
Если объектов слишком много или их нужно предварительно отобрать по сложным критериям, стандартный список не подойдет. В этом случае мы используем типовую обработку БСП «Групповое изменение реквизитов».
Ее главный недостаток, который часто отмечают разработчики — «слепой» режим работы. Настраивая отборы, мы не видим текущие значения реквизитов в выбранных объектах, пока не применим изменения. Тем не менее, у этой обработки есть мощные скрытые возможности.
Проанализируем дополнительные параметры этой обработки, которые активируются по ссылке «Дополнительные параметры» внизу формы:
ПередЗаписью и ПриЗаписи, не будет заново проводить документ, сверять лимиты и проверять остатки на складах.Пример того, как платформа обрабатывает свойство ОбменДанными.Загрузка в модуле объекта:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Если включен режим загрузки, пропускаем проверки и бизнес-логику
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Здесь располагаются тяжелые проверки и проведение по регистрам
ПроверитьЗаполнениеОбязательныхРеквизитов();
КонецПроцедуры
Когда возможностей стандартной БСП-обработки не хватает (например, нужно наглядно видеть таблицу изменяемых объектов и текущие значения их реквизитов перед записью), разработчики прибегают к внешним решениям. Одним из самых популярных «комбайнов» является универсальная обработка редактирования реквизитов объектов, доступная на профильных порталах (включая Инфостарт).
Преимущества таких обработок:
Для профессиональных внедренцев и ведущих разработчиков стандартом де-факто является пакет «Инструменты разработчика» (ИР). Это мощнейший комплекс, содержащий в себе десятки утилит для низкоуровневого анализа и модификации данных 1С.
В контексте изменения реквизитов инструмент предоставляет уникальные возможности:
Это классический инструмент, поставляемый фирмой 1С на дисках ИТС. Несмотря на то, что изначально обработка создавалась под обычные формы, сейчас существуют ее адаптации для управляемого приложения.
Главная ценность этой обработки — возможность выполнения произвольного алгоритма над найденными объектами. Если задача изменения реквизитов требует сложной логики (например, «если склад пустой, заполнить основным, а если заполнен — перезаписать договор контрагента по определенному правилу»), писать код в конфигураторе не нужно. Мы можем написать его прямо в поле обработки.
Разберем пример такого алгоритма:
// Этот код выполняется в контексте каждого обрабатываемого объекта
Если НЕ ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда
// Ищем подходящий договор
НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("ВидДоговора", Перечисления.ВидыДоговоровКонтрагентов.СПокупателем, , Объект.Контрагент);
Если ЗначениеЗаполнено(НайденныйДоговор) Тогда
Объект.ДоговорКонтрагента = НайденныйДоговор;
// Записываем объект без проведения
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЕсли;
Развитие open-source решений для 1С привело к появлению современных легковесных редакторов объектов. Они позволяют разработчику быстро находить таблицы по их физическим именам в СУБД или синонимам метаданных и редактировать скрытые свойства, недоступные в стандартных интерфейсах.
Также набирает популярность тренд на интеграцию искусственного интеллекта. Новейшие разработки позволяют формулировать задачу на естественном языке. Например, вы можете написать текстовый запрос: «Замени склад на "Центральный" во всех документах поступления за прошлую неделю, где поставщиком является ООО "Вектор"». Система самостоятельно распознает сущности метаданных, наложит отборы и подготовит транзакцию для изменения реквизитов.
Выбор конкретного инструмента зависит от сложности вашей задачи: для простых пользовательских правок используйте встроенную команду Изменить выделенные, для административных задач средней сложности — стандартную обработку БСП с включенным режимом разработчика, а для комплексной отладки и восстановления учета — «Инструменты разработчика» или обработку «Универсальные подбор и обработка объектов».